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

  • Specify "Payments tab" for clearer navigation
  • Update example slug from generic to realistic value
  • Remove unnecessary bold formatting for consistency
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

  • Remove duplicate claude-code-review.yml workflow
  • Add dedicated review job for pull request reviews in claude.yml
  • Standardize model to claude-opus-4-6 across all workflows
  • Simplify step configurations for consistency
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.