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

Commits on Jan 29, 2026
b6a7429

➕ Add faraday-retry gem for resilient HTTP calls
♻️ Replace manual .set(locked: true) with new .lock! method
🔧 Configure Faraday clients in AtprotoClient to auto-retry on server/connection errors
🩹 Guard membership notification creation when gathering is already being destroyed

7b28df2

🎨 (atproto_connect.erb): replace verbose alert with concise inline help
💬 (atproto_connect.erb): clarify app-password name is unimportant

Commits on Jan 28, 2026
b0ca014

🐛 Fix mailgun host selection for event pmails

Add conditional logic to choose the correct Mailgun host based on MICROSOFT_EMAIL_WORKAROUND flag. This ensures event pmails use the appropriate domain when the workaround is enabled, preventing delivery issues to Microsoft email addresses.

0451eef

♻️ consolidate mailgun host selection logic and add feature flag

  • Replace microsoft_email? predicate with mailgun_host method that returns the appropriate host based on email domain
  • Add MICROSOFT_EMAIL_WORKAROUND environment variable to allow disabling the Microsoft-specific mailgun host routing
  • Update notification concerns to use the new helper method, removing duplicated ternary logic
84e0b0d

👔 add Microsoft email detection and route through dedicated Mailgun host

b463b55

🚸 add contact email for users not receiving codes within 2 minutes

Commits on Jan 27, 2026
12fcc23

💬 Change wording from "donation" to "contribution" in payment prompt

Commits on Jan 26, 2026
cecc011

🔥 Remove obsolete Squarespace signup checker

9c672b1

💄 Fix badge image aspect-ratio to match real dimensions (570/569)

00d1268

📝 (atproto_connect.erb): simplify label from “Bluesky/ATProto” to “Bluesky” for clarity
♻️ (event_atproto.rb): drop unused force parameter and related checks to streamline update logic

cfcfad1

🍱 Add open-data badge image and update copy
🚸 Replace copyleft wording with clearer “open source & open data” links
🐛 Fix ATProto profile link to use new browser URL

fefb40e

✨ Add lazy-loaded map to homepage for non-signed-in users

  • Create /map/home endpoint that renders the map partial
  • Replace inline map partial with a placeholder div that loads the map via IntersectionObserver when scrolled into view, reducing initial page weight and improving perceived performance
4a67113

♻️ (event.rb): extract tag name processing into a separate variable to improve readability

Commits on Jan 25, 2026
4996e3f

🐛 Rename adult_content to hide_from_homepage for clarity
✨ Add forbidden_phrases check to auto-hide events from homepage

0559ec2

🐛 (event_atproto.rb): filter local events by DID to avoid comparing records published under different handles

31dcb6e

✨ (AtprotoClient): add public did helper to expose session DID
♻️ (EventAtproto): move class methods below instance methods for clarity
🔧 (EventAtproto): use new client.did instead of client.send(:session)['did']

6e71f58

✨ Add AT Protocol collection verification & repair routine
♻️ Replace Event.or with explicit $or for MongoDriver 3.x compatibility

830dbb3

✨ Add bulk sync task and smarter per-event sync for AT Protocol

  • Introduce Event.sync_atproto to replay recent events after outages
  • Add sync_to_atproto helper that decides publish/update/delete/skip
  • Let update_atproto skip unchanged records unless forced
  • Provide rake atproto:sync_events[hours] with optional DRY_RUN
0c6a54b

♻️ (atproto_client): simplify get() signature and auto-route public endpoints
♻️ (atproto_client): remove explicit auth/public flags from feed & profile calls

437d65e

🐛 (auth): wrap atproto profile fetch in begin/rescue to avoid login crash
♻️ (atproto_client): switch profile & feed calls to public API, add auth flag