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

Commits on Jan 01, 2026
c4799a7

🐛 (_ai.erb): guard against nil AI response and show fallback message
🐛 (_ai.erb): only render carousel blocks for events that have an image
🐛 (_block_carousel.erb): skip rendering link/image when event has no image
✅ (search_test.rb): update test to expect AI mode as default search tab

24b5e3b

♻️ (app.rb): merge standalone /ai route into search flow to simplify routing
🚚 (views): relocate AI response template into search result partial for unified rendering
✨ (search): make “ai” the default search type when no type is specified

9c0d82e

✨ Add AI search type to AJAX endpoint and unify UI flow

b75b1ab

✨ Add AI-powered search mode with vector search and LLM response
✨ Introduce new /ai endpoint and ai.erb partial for AI-generated answers
✨ Display vector-search results alongside AI response in a two-column layout

5b85f1f

🐛 (event_validation): wrap OpenRouter.embedding call in production with error handling to prevent failures from crashing the job

bde347c

✨ Generate embedding for events in production
🐛 Sanitize description links only when description present

792d0e5

✨ Add vector search capability to Searchable concern

997289d

➕ Add reverse_markdown gem for HTML-to-Markdown conversion
✨ Introduce to_markdown helpers for Hash and Array
✨ Add to_public_markdown to EventSerialization for Markdown export

497bccb

✨ Add embedding support to OpenRouter client and Event model

  • Add class-level embedding helper to OpenRouter
  • Implement embedding instance method with configurable model
  • Extract shared api_post private method to DRY up requests
  • Add embedding Array field to EventFields concern for storage
Commits on Dec 31, 2025
3e9e4ee

♻️ (event_serialization): use generic to_xml/to_json instead of custom public helpers

ec0cf84

♻️ Move event JSON serialization from helper to model concern

  • Extract events_json helper into EventSerialization concern
  • Replace events_json(@events) with @events.to_public_json
  • Use eager-loaded associations for better performance
Commits on Dec 30, 2025
3f0bb8f

🐛 Fix gem version lookup to ignore dependency constraints

The helper was picking up the first constraint line (e.g. “>= 5.0”) instead of the real installed version. Now it only returns a version when the line is indented 4 spaces and contains no operators, ensuring we read the exact version locked in Gemfile.lock.

296f435

🎨 Reorder columns in frontend-dependencies table

Swap “Latest” and “Release date” columns so the date appears immediately after the version, improving scan-ability and aligning the default DataTables sort order with the new column index.

76aef0c

♻️ (tasks.rake): remove exclusion of top-followed org from OrganisationEdge creation

9d72e32

🚸 Open organisation links in a new tab instead of the same window

382c4c3

🔥 Remove unused chroma-js dependency and color/opacity scaling code
♻️ Simplify network partials by dropping obsolete locals
🎨 Clean up JS: declare vars, remove dead chroma.scale logic

ea82551

🎨 (app/views/_network_script.erb): remove unnecessary line breaks around elements array to improve code formatting

f263b70

♻️ (views/_network_script.erb): refactor CDN URL generation to reduce duplication and improve readability

234ff0e

🚚 Extract inline payment JS into dedicated asset file

Moves the inline JavaScript from _pay.erb into app/assets/javascripts/gathering_pay.js so it can be cached, linted and reused. Keeps all existing Stripe / Coinbase / EVM logic intact; only the delivery mechanism changes.

241a10c

🐛 Load web3.js only when an EVM address & chain are present

Removes the global web3.min.js from FRONTEND_DEPENDENCIES and conditionally includes it in the two templates that actually need it. This avoids loading the heavy library on every page, cutting down bandwidth and improving initial render time for users who don’t interact with crypto payments.