Dandelion is a fair source project. View the code on Github
Commits on Jan 24, 2026
| e017799 |
♻️ (atproto_key_manager.rb): simplify memoized private-key getter by replacing begin/end block with inline if |
| 6658c31 |
🐛 (atproto_key_manager): return nil instead of raising when ATPROTO_PRIVATE_KEY_PEM is missing |
| f0d6610 |
⚡️ (map_helper.rb): cache geocoding results to reduce external API calls and speed up bounding-box lookups |
| bc9160a |
✨ Add Bluesky (AT Protocol) OAuth sign-in support
|
Commits on Jan 22, 2026
| cfab24d |
🐛 Fix broken license link in badges partial |
| b706ac5 |
🐛 (event_atproto): replace non-breaking spaces with regular spaces in description to prevent display issues |
| 9ce414e |
♻️ (event_validation): scope uniqueness check to non-deleted records only |
| 3c41e19 |
🐛 Fix race condition by moving delete_atproto callback to before_destroy
|
| 7260f1e |
🔥 Remove fallback location block for events without coordinates |
| ae90b10 |
⚡️ (event_atproto.rb): offload AT Protocol callbacks to background jobs to avoid blocking the main thread
|
| b457dc1 |
🐛 (event_atproto): allow ATProto sync when event is unlocked or unsecreted even without existing URI |
| 79abe24 |
✨ Add |
| 0a892ee |
✨ (event_atproto): add full ATProto CRUD support with update/delete hooks
|
| 954f26f |
✨ (atproto.rb): add authenticated AT Protocol client with session management
|
Commits on Jan 21, 2026
| ad35d80 |
🐛 Fix CSV header mismatch by renaming column from |
| 2f4379b |
♻️ (pagelets.js): remove pendingRefreshOnVisible flag and always refresh pagelets when tab becomes visible |
| 8d2417d |
📝 (order.rb): add event_start_time and event_end_time columns to CSV export |
| 33b79ed |
🚀 (pagelets.js): pause pagelet refresh when tab is hidden and resume on visibility
|
| a0917bf |
💬 (rack_attack_throttle.rb): add human-readable error messages to 403 responses for blocked bots and invalid XHR headers |
| 300066e |
🐛 (rack_attack_throttle.rb): use real client IP from CF-Connecting-IP header when present to correctly throttle behind Cloudflare |