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

Commits on Aug 29, 2025
1ef907d

🚚 rename recommendations/accounts route to recommendations/people
📝 update copy from "past events" to "connections" in recommendations
✨ include gatherings in people recommendations
🎨 refactor event block markup and styles for map display

Commits on Aug 28, 2025
01b5caa

🔥 Remove unused Substack newsletter invite code and fields
♻️ (event_stats.erb): merge nested form-row into one to simplify layout
🗃️ Drop sent_substack_invite and substack_opt_in from Account model

d9e66e0

💬 Update first-event email copy with celebratory emoji

3ee0026

🚚 Move send_first_event_email from EventNotifications to AccountNotifications

The congratulatory email should be triggered when an account creates its first event, not when any event is created. This prevents duplicate emails and aligns the responsibility with the Account model.

21e605c

✨ Send welcome email when user lists their first event

  • Add new email template first_event.erb with congratulatory copy
  • Introduce sent_first_event_email timestamp field on Account
  • Trigger email from EventCallbacks only when it's the first event
  • Add send_first_event_email method to EventNotifications using Mailgun batch messaging
708735f

🔧 Add test Stripe keys to CI environment

32509f5

🔐 Replace hard-coded secrets with dynamic SESSION_SECRET in CI

c3b3cde

👷 (ruby.yml): split CI tests into parallel matrix jobs by test file
⬆️ (ruby.yml): bump checkout action to v4 and MongoDB action to 1.12
🔧 (ruby.yml): include test file in cache key to avoid collisions

7cf885d

💄 (events/_locked.erb): add warning styling to edit link for better UX

7317d3f

💄 (events/_locked.erb): add link to unlock event when locked
🚸 (events/_locked.erb): guide user to edit page to uncheck locked checkbox

f97f495

✨ (event_duplication): copy new profit-share fields when duplicating events

92c77be

🐛 Fix pagelet loading spinner in table rows
🎨 Remove redundant inline style for pagelet-loading

a6cb473

🐛 Lock event when Stripe payment fails to prevent further purchase attempts
✨ Notify organiser that event is now locked and explain how to unlock

cba8643

💄 Remove bottom margin from events page header row

301f300

🐛 Fix map display when Google Maps fails to load
✨ Add client-side check to hide the map container if Google Maps is unavailable, preventing broken UI
🎨 Wrap map container in #homepage-map for easier targeting

12afbd4

♻️ (map.js): convert mapOptions from static object to lazy-loaded getter This prevents a runtime error when google.maps is not yet loaded

51d44f3

✨ Filter homepage events to only show those with images

94d7949

💄 Add visual feedback for hidden events on homepage
🚸 Improve admin UX for hiding/unhiding events with instant opacity change

8b0806a

✨ Add AJAX toggle for hiding events from homepage

  • Split hide/unhide endpoints into separate GET routes that return 200 instead of redirecting, enabling AJAX usage.
  • Introduce new partial _hide_from_homepage.erb to render the eye icon inside a pagelet, allowing in-place updates without full reload.
  • Update _block_main.erb and _blocks.erb to load the new pagelet and pass the admin flag so the control is only shown to admins.
  • Remove inline links in _block_main.erb; visibility toggle is now handled via the pagelet.
  • Remove redundant CSS class "event-star" from star placeholders.
Commits on Aug 27, 2025
0c33361

💄 Remove extra padding class from pagelet loading icon
💄 Add left margin to spinner icons in event build preview