Dandelion is a fair source project. View the code on Github

Commits on Apr 19, 2026
8735ec6

🔧 (organisations): add condition to check theme_background_color before loading theme_color stylesheet

2ed45d6

♻️ Refactor theme color loading to apply for all users and remove preview-theme feature

Commits on Apr 17, 2026
e4f742b

🧪 (calendar_imports_test.rb): replace image/theme_color assertions with URL fetch verification to test behavior instead of implementation details

144ea2d

🐛 Fix calendar import sync to destroy events removed from source feeds

Adds valid_calendar_body? method to validate that imported feeds return actual iCal content before processing. Implements destroy_absent_imported_events to remove events that no longer appear in synced feeds, preventing stale imported events from persisting indefinitely. Skips AI tagging for events with calendar_import_feed_url to avoid unnecessary processing. Includes tests for both the removal behavior and non-calendar response handling.

3d3bd9e

✨ Add iCal feed import feature for syncing events from external calendars

This commit introduces a new iCal import feature that allows organisations to sync events from external iCal feeds. Key changes include:

  • New model fields: Added calendar import tracking fields to both Event and Organisation models
  • New sync engine: CalendarImportSync class handles fetching, parsing, and syncing iCal feeds with special Luma event handling (og:image fetching, theme color extraction from cover images)
  • New routes and views: Added calendar import page with form for managing iCal URLs, plus warning banners for synced events
  • Background sync: Hourly rake task syncs all configured iCal feeds
  • Validation: URL format validation for iCal feeds
  • Tests: Comprehensive test coverage for the sync logic
cefe0c4

Support local Dragonfly file storage when S3 is not configured

  • Use file datastore under app/assets/dragonfly when S3_BUCKET_NAME is unset
  • Resolve media URLs via datastore when S3_CDN is unset
  • Seed events with test image without requiring S3
  • Gitignore app/assets/dragonfly uploads

Made-with: Cursor

6676179

Event boosts: hide unpaid history rows; always show status label

Filter boost history to payment_completed boosts so incomplete checkouts do not appear. Remove the complete? guard on the status cell so when rows are shown, the label always renders (e.g. Pending payment).

Made-with: Cursor

Commits on Apr 16, 2026
2e823a3

🐛 (organisation_events.rb): normalize carousel_ids param to always be an array

Commits on Apr 15, 2026
d1cfb94

🐛 (evm_transactions.rb): strip whitespace from evm_address before validation to prevent lookup issues

7240b08

🔊 Add Honeybadger error tracking to Stripe Connect rescue blocks

ccdd6ae

♻️ Replace Mechanize HTTP library with Faraday across the codebase

ddd6e3b

📱 (purchase/_suggested_donation.erb): improve mobile responsiveness by hiding secondary button on small screens and adjusting margin for primary button

2f3cd18

🚸 (purchase): add option to donate another amount and prevent modal from showing multiple times

Commits on Apr 13, 2026
b2ac10e

🚸 (tickets.erb): add alert message linking to orders page when event has booking questions

4c4f8e9

🐛 (email_helper.rb): handle Yt::Errors::NoItems when fetching YouTube video titles

When a YouTube video is private or unavailable, the email rendering would crash. Now it gracefully falls back to a generic link text instead.

6265a3a

🎨 Improve code readability and field ordering in CoreExtensions

3705902

⚡️ Skip sanitization for unchanged fields to avoid unnecessary DB updates

The changes optimize the sanitization process by: - Skipping fields that haven't changed on already persisted records - Avoiding updates when sanitization produces the same value as the original

Commits on Apr 11, 2026
2f409a6

🔧 (config/boot.rb): add support for DEFAULT_CURRENCY environment variable to configure default money currency

2e249a7

💄 Hide helper text in chat context

445353f

💄 (event_feedback.erb): remove Feedback ID row from event feedback view for cleaner UI