Dandelion is a fair source project. View the code on Github
Commits on Mar 13, 2026
| 2109367 |
✨ (event_fields.rb): add prevent_reminders boolean field to EventFields module This new field allows events to control whether reminder notifications are sent to attendees. |
| f1bae70 |
📝 (daily-bug-review.yml): simplify override prompt by removing outdated framework specifics The prompt contained Ruby/Padrino/Mongoid details that are no longer relevant. Streamlined instructions for broader applicability. |
| 635e4c4 |
🔧 (daily-bug-review.yml): add check for recent commits and conditionally run Claude Code action The workflow now only executes the expensive AI review when there are commits from the past 24 hours, avoiding unnecessary runs and focusing review on recent changes. |
| d164189 |
🔧 (workflows): adjust daily bug review schedule from 6:00 to 4:00 UTC |
| b5b9730 |
📝 (events.md): clarify Open Collective payment setup instructions
|
| 8fd4fc3 |
📝 (docs): add Open Collective payment integration documentation |
| 50137a9 |
🐛 Fix event reminder timing to process reminders within the next hour |
| 07d8458 |
♻️ Refactor reminder email defaults to support events beyond tomorrow The reminder email now says "coming up soon" instead of "is tomorrow" to support events with longer lead times. Also moved the reminder_hours_before field to a more logical position in the form. |
| 9336d0a |
✨ (events): replace prevent_reminders boolean with configurable reminder_hours_before field This change allows event organizers to specify exactly how many hours before the event the reminder email should be sent, rather than just having a binary on/off toggle. The default is set to 24 hours. Setting this field to blank will skip the reminder. |
Commits on Mar 11, 2026
| affc59e |
🐛 Fix places_remaining to only count unavailable tickets The places_remaining method was incorrectly counting all tickets instead of only counting tickets that haven't been made available yet (where made_available_at is nil). This caused incorrect availability calculations. |
Commits on Mar 10, 2026
| 245b430 |
🐛 Fix YouTube embeds not rendering in welcome emails |
| 25461d8 |
♻️ Refactor YouTube oembed replacement from Pmail model to EmailHelper and apply to all email templates |
| 5d9dd45 |
🔧 (daily-bug-review.yml): change scheduled workflow time from 8am to 6am UTC |
| 0b92dfc |
🔧 (workflows): consolidate Claude code review into claude.yml and standardize model
|
| f649332 |
🔧 (daily-bug-review.yml): add agent mode and rename direct_prompt to override_prompt for Claude Code action |
| b975d08 |
👷 (ci): add daily AI bug review workflow |
| 57384a6 |
Merge pull request #176 from symbiota-coop/cursor/critical-bug-inspection-0a96 🐛 Fix GoCardless webhook dropping batch events due to halt inside loop |
| 6007d5b |
🐛 Fix GoCardless webhook dropping batch events due to halt inside loop Replace halt 200 with next inside the events.each loop in the GoCardless webhook handler. Using halt terminates the entire Sinatra request handler, silently dropping all remaining events in the batch after the first one is processed. This bug was re-introduced in 5c74be74 and 7ee4867c after being fixed in f07dac0b. GoCardless sends multiple payment events in a single webhook call. With halt, only the first payment confirmation would be processed; subsequent payments would be lost, resulting in: - Tickets not being sent to customers who paid - Orders not being marked as completed - payment_completed not being set to true Co-authored-by: Stephen Reid |
Commits on Mar 09, 2026
| 7ee4867 |
🐛 (webhooks.rb): add guard clause to halt processing when payment_request_id is missing in webhook events |
| 4eabd54 |
♻️ Replace read-modify-write pattern with atomic $inc operations Replace manual increment pattern (fetch, add, set) with MongoDB's atomic $inc operator across multiple models to prevent race conditions and improve performance. |