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

Commits on May 04, 2025
82e398d

💄 Improve drag-and-drop cursor feedback for ticket types

Add cursor: grab to indicate draggable elements. Add cursor: grabbing for the active drag state. Configure sortable plugin to use grabbing cursor.

This enhances user experience by providing clear visual cues during ticket type reordering.

8a0b269

💄 Add margin-bottom to pmail header elements

Add mb-1 class to buttons, links, and paragraph in pmail header.

Improves vertical spacing for better layout and readability.

e9f5f07

💄 Add styles for file and image removal labels and inputs

Add CSS rules for label.remove-file and label.remove-image.

This includes styling for the labels themselves (margin, font-weight) and the input elements within them (positioning, margin).

The changes improve the visual alignment and presentation of these elements in the UI.

b998aeb

✨ Add support for new Gemini models

Add 'google/gemini-2.5-flash-preview', 'google/gemini-2.5-flash-preview:thinking', and 'google/gemini-2.5-pro-preview-03-25' to the list of supported models and their context window sizes.

This allows the application to utilize these newer Gemini models via the OpenRouter integration.

cbf3bd6

💄 Update email footer links and images

Remove YouTube and Telegram links from the email footer and replace social media icons. Add target="_blank" to the Substack link.

Why: Simplify the footer and ensure external links open in a new tab.

Commits on May 03, 2025
a6d0a91

♻️ Refactor parameter handling

Remove custom override of the params method.

This simplifies parameter access by relying on the standard framework's handling after fix_params! is called.

bb949f7

🔥 Remove minified admin template JS file (apps.min.js)

This file contained minified JavaScript from the Infinite Admin template. It is no longer needed as the application moves away from relying on this specific template's client-side logic.

7391595

🔥 Remove custom code_to_markdown task

Remove the custom code_to_markdown rake task. This task concatenated source files into code.md.

Add repomix.config.json to configure the repomix tool. This tool replaces the functionality of the removed task.

Ignore repomix-output.xml in .gitignore. This file is generated and should not be tracked.

Commits on May 02, 2025
e253af0

💬 Update auto top-up text and explanation

Remove "New:" prefix from auto top-up link. Update link text to emphasize time-saving benefit. Add clarifying sentence about donations always going to the organisation when auto top-up is enabled.

e53b3d4

✨ Add Stripe tax rate configuration

Add tax_rate_id fields to Event and Organisation models. Include form fields in the UI for setting these IDs. Update the Stripe payment intent creation process to include the configured tax rate ID in line items.

This allows users to specify Stripe tax rates at the event or organisation level, enabling automatic tax calculation and collection via Stripe for ticket purchases. The event-specific rate takes precedence over the organisation's default rate.

a5fe9c4

🐛 Prevent creating Stripe refunds for non-positive amounts

Add check before creating Stripe refund.

Avoids unnecessary API calls and potential errors when refund amount is zero or negative.

cf12e09

♻️ Extract dependency includes into partial

Move the large block of dependency `and

Commits on May 01, 2025
c5d8e00

🐛 Prevent removing last admin from entities

Update the _add.erb partial to accept a min_accounts parameter. Hide the remove link if the current account count is less than or equal to min_accounts.

Pass min_accounts: 1 when rendering the partial for admin lists in activities, local groups, and organisations.

This ensures that these entities always retain at least one administrator, preventing them from becoming unmanageable.

dc972b3

✨ Notify global admins of critical failures

Include all accounts with admin: true in recipient lists for Stripe error and refund failure notifications.

This ensures critical system alerts are always delivered to a core group of administrators for better monitoring and response.

89f244b

🐛 Calculate correct refund amount for Stripe refunds

Introduce refund_amount variable. Calculate refund amount as min of discounted price and order total. Use this amount in Stripe refund calls. Prevents over-refunding when order-wide discounts apply.

d9cf268

🐛 (local_group): Validate built polygons

The geometry validation now checks if any of the polygons built from the geometry data are invalid.

Previously, the validation only ensured that polygons were built, but did not check their validity. This allowed invalid polygon data to be saved.

This change prevents saving local groups with invalid geometry.

42d8f90

🐛 Ensure polygons are created from geometry

Add validation to check if polygons were successfully built when geometry data is present.

This prevents saving records with invalid geometry that doesn't raise an exception during parsing but fails to generate the expected polygons.

6bf5107

🚸 Adjust map view logic for polygonables

Fit map to bounds when polygonables are defined.

Previously, the map's initial view logic did not explicitly handle the presence of polygonables when specific zoom or bounds were not set. This could lead to the map defaulting to a less relevant view.

This change adds a condition to fit the map to the provided bounds if polygonables are present. This ensures the map displays the relevant area covered by the polygonables upon loading.

The fallback condition for centering or default zoom was updated to no longer consider the state of polygonables, as the new condition now handles this case.

4587f3f

🎨 Move Answers column in orders table

Move the 'Answers' column in the event orders table. This improves the table layout by placing the answers before the opt-in columns, which is a more logical flow.

Commits on Apr 28, 2025
905a7c7

✨ Allow customizing RSVP button text

Add a new field rsvp_button_text to the Event model and build form. Update the purchase partial to use this field for the RSVP button text on free events, falling back to 'RSVP' if not set. Include the field in event duplication.

Also add a link to the DeepWiki on the contact page as an alternative contact method.