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

Commits on Jul 26, 2026
fd2344e

📝 Update Mailgun settings references to API security

  • Update docs to link to Mailgun's API security page
  • Remove redundant click tracking instructions from build page
  • Update help text for mailgun_api_key and mailgun_webhook_signing_key to reflect Mailgun's renamed "API security" settings path
cdd4bad

🔐 Verify Mailgun webhooks and block javascript: click XSS

Unsigned click webhooks could create arbitrary PmailLink URLs rendered to org admins; require HMAC signatures and allow only http(s) links.

1d97fb3

Review bugs since the last successful workflow run

Commits on Jul 25, 2026
880472b

Upgrade Claude Code workflows to Opus 5.

dccf59f

✨ Allow free tickets by setting minimum price to 0

Update ticket price validation and input field to accept 0 as a valid price, enabling the creation of free tickets. Previously, the minimum price was 1, which prevented offering complimentary tickets.

2b6f884

🐛 Prompt for a price before ticket quantity selection

Explain why variable-price quantity selectors are disabled so customers know how to enable them.

Commits on Jul 22, 2026
86c13ae

🐛 Prevent notification creation when gathering is nil or being destroyed

The after_destroy callback now checks that gathering exists and is not flagged for destruction before creating a notification, avoiding potential errors and dangling references.

Commits on Jul 21, 2026
c652134

🐛 fix variable price ticket validation and range clamping

  • Validate submitted price is finite to prevent NaN/infinity values
  • Clamp prices within ticket_type.range when defined
  • Add minimum price check (>= 1) for variable price tickets without a range
  • Fix payment_completed logic to correctly mark variable price tickets as unpaid when no price is submitted
  • Extract price calculation in purchase_helper for clarity
ce7c92b

Notify facilitators of waitlist registrations when order notifications are on.

0f56413

✨ Improve Meta Pixel tracking and shared analytics helpers

Validate pixel IDs, dedupe Purchase on refresh, add ViewContent, and extract shared analytics/Facebook pixel code.

Commits on Jul 20, 2026
bbac53b

🐛 Fix WhatsApp transcription when media URL has no file extension

Whisper infers audio format from the filename; force .ogg, use OpenAI::Client, and raise on blank transcripts so failures surface in Sentry.

Commits on Jul 18, 2026
bef1e9e

🔒️ (models): add protected_attributes to multiple models to prevent mass assignment of sensitive fields
✨ (models/tactivity.rb): add validation to ensure space and tslot belong to the same timetable
🐛 (models/tactivity.rb): only set timetable from space if not already set to avoid overwriting existing value
🔥 (app/views/budget/_build.erb): remove reimbursed checkbox from budget build form as it's no longer needed

15516e1

🦺 Prevent reassigning organisation and account on existing records

Add validation to Activity and LocalGroup models to prevent changing organisation_id and account_id after persistence. This ensures data integrity by preventing accidental reassignment of these critical associations.

Also add protected_attributes class method to expose the list of attributes that should not be modifiable after creation.

Include tests to verify the new validation behavior.

9d425c3

✨ (event_validation.rb): add validation to prevent changing organisation and account on persisted events
✅ (events_test.rb): add test for organisation_id and account_id immutability on event update

Commits on Jul 17, 2026
f77ae1d

♻️ Simplify event feedback partial structure and consolidate nested conditionals

The nested if blocks made the partial harder to read and maintain. By flattening the structure and using safer navigation (&.), the template is more concise and avoids potential nil reference issues when public_answers is absent.

b6e94d0

🐛 Normalize hash carousel_ids to prevent CGI.escape TypeError

Fixes DANDELION-30

Commits on Jul 15, 2026
9ce9918

🐛 (pmail_mailgun.rb): return nil when opened_total is zero to prevent invalid rate calculations

9bd384d

✨ Enable analytics for free gift emails sent via Mailer

5278692

🔨 (local_groups_test.rb): wrap test method calls in parentheses

0ed97f5

🐛 Preserve local group polygons on failed validation