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

Commits on Aug 07, 2026
1b25ab1

🐛 Authenticate inbound Mailgun replies correctly

Use the webhook signing key and reject failed authentication cleanly. Fixes DANDELION-3B.

Commits on Aug 06, 2026
eae86a1

🐛 Allow cross-origin browser MCP clients

Disable transport DNS-rebinding Origin checks so public /mcp matches open CORS for web connectors.

Commits on Aug 05, 2026
8964ad6

♻️ Remove Render CLI from Cursor Docker image

Render MCP works on cloud now, so the CLI install is no longer needed.

47fcda9

✨ Log feedback request selection and send outcomes

8f9b174

♻️ Show Mailgun desktop/mobile/tablet click bins

4bf6507

✨ Track desktop vs phone on mailer link clicks

d2595b2

🏗️ Add gc and gp agent skills for commit/push workflows

ab9c3bb

✨ Filter stats orders by donation to Dandelion by default

4362c1e

♻️ Load CKEditor from GitHub and add small paragraph style

c238fdc

🐛 Warn on leave after editing WYSIWYG fields

Commits on Aug 04, 2026
c152500

♻️ Move PROMPT_LOG_LIMIT out of private scope

beb89fe

♻️ Remove unused gathering radio_scopes

41e8244

♻️ Remove large commented-out code blocks

52f540e

🐛 Prevent truncated OpenRouter responses

Remove the shared completion-token cap so reasoning models can finish their visible output.

a9452a9

📊 Log OpenRouter generations for diagnostics

Persist successful chat generations and expose them to administrators for troubleshooting.

f9836fa

⬆️ Bump loofah and rails-html-sanitizer for XSS fixes

13d334f

🐛 Fix post-payment redirect URL JS escaping

HTML-escaped JSON quotes broke window.location assignment, so thank-you redirects never ran.

4b9f816

♻️ Transcribe WhatsApp audio via OpenRouter Parakeet

Commits on Aug 02, 2026
c27baa2

⬆️ Upgrade mcp gem to 1.1.0

Allow the production Host header under the new DNS-rebinding checks, and support DELETE on /mcp.

Commits on Jul 30, 2026
0f91fb5

♻️ Bust event cache after AI tagging

Populate tag_names_cache and clear fragments so tags show up immediately instead of waiting for a stale cached page to expire.