Skip to content

Conversation

@reyemb
Copy link

@reyemb reyemb commented Jan 27, 2026

Feature: External Registration URL Support (#1024)

📖 Overview

This PR adds support for External Registration URLs, allowing event organizers to redirect attendees to third-party platforms (e.g., Luma, Eventbrite, partner websites) instead of using the internal checkout system.

Previously, there was no native way to handle events hosted by external partners. Organizers were forced to use workarounds, such as placing links in descriptions, which created user friction. This update enables Hi.Events to function as both a full registration platform and an event directory/aggregator.

🛠 Changes

🟢 Backend

  • Database Migrations:
    • Added external_registration_url, external_registration_button_text, external_registration_message, and external_registration_host to the event_settings table.
    • Added external_registration_clicks to event statistics tables.
  • Domain & DTOs:
    • Updated EventSettingDomainObject, EventStatisticDomainObject, and EventDailyStatisticDomainObject.
    • Enhanced DTOs to handle external registration data and click tracking.
  • API Endpoints:
    • Extended event settings update endpoints to accept new fields.
    • New Route: POST /events/{event_id}/track-external-registration-click
    • Added TrackExternalRegistrationClickAction to handle click tracking logic.
  • Resources:
    • Updated EventSettingsResource and EventSettingsResourcePublic.
    • Updated EventStatisticsResource to expose click counts.

🔵 Frontend

  • Event Settings:
    • Added a dedicated panel in Registration Settings.
    • Includes a toggle to enable/disable external registration.
    • Added validation fields for URL (required), button text (required), custom message, and host name.
    • Added warning notices regarding the behavior change when enabled.
  • Event Homepage:
    • Replaced the "Get Tickets" flow with a redirect button (opens in a new tab).
    • Hides ticket selection and internal checkout UI.
    • Displays the custom button text (e.g., "Register on Luma") and custom message.
  • Event Card:
    • Updated CTA to reflect external registration status and text.
  • Analytics:
    • Integrated "External Registration Clicks" into the daily and overall statistics dashboard.

🔄 How It Works

  1. Configuration: The organizer navigates to Event Settings → Registration Settings and enables "External Registration."
  2. Setup: The organizer inputs the external URL, custom button text, and optional host details.
  3. User Experience: * The attendee sees the custom CTA on the event page.
    • Clicking the button triggers a tracking event (counting the click).
    • The user is immediately redirected to the external platform in a new tab.
  4. Tracking: The organizer views click-through performance in the Statistics Dashboard.

📸 Screenshots

  1. Dynamic Settings & Menu Enabling external registration automatically hides irrelevant configuration panels (such as Tickets or Coupons) and streamlines the sidebar menu to reduce clutter.
image
  1. Management Banner & Metrics A new status banner clearly indicates when an event is managed externally. Note that Metrics and attendee lists are retained to allow for manual imports, ensuring Hi.Events remains the Single Source of Truth (SSOT) for reporting.
image
  1. Redirection Analytics For external events, a dedicated statistic card appears in the dashboard to track the number of outbound clicks/redirections.
image
  1. Public View
image

Checklist

  • I have read the contributing guidelines.
  • My code is of good quality and follows the coding standards of the project.
  • I have tested my changes, and they work as expected.

Thank you for your contribution! 🎉

…v#1024)

Enables events to redirect to external registration pages (e.g., partner websites, Luma, Eventbrite) instead of using the internal checkout system.

Changes:
- Added external_registration_url, external_registration_button_text, and external_registration_message fields to event settings
- Added tracking for external registration clicks in event statistics
- Modified "Get Tickets" button to redirect to external URL when configured
- Added new registration settings section in event edit page
- Updated all locale files with new translation strings
- Backend API endpoints updated to handle external registration data
- Statistics now track external registration link clicks

When external registration URL is set, the ticket inventory and internal checkout are bypassed.
Completes translations for all supported languages (German, Spanish, French, Italian, Dutch, Polish, Portuguese, Portuguese-Brazil) including:
- Registration Settings section
- External registration URL and button text fields
- Configuration messages and help text
- Statistics label for external registration clicks

Also restores language detection in locales.ts (was temporarily forced to English).
@github-actions
Copy link
Contributor

github-actions bot commented Jan 27, 2026

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@reyemb
Copy link
Author

reyemb commented Jan 27, 2026

I have read the CLA Document and I hereby sign the CLA

@daveearley
Copy link
Contributor

Thanks a lot for the detailed PR, it’s much appreciated!

I like the idea of adding external registration support, but I’d like to iron out a few issues before I’m comfortable merging.

  • The UI is still inconsistent. Enabling this changes the event management UX, but some areas still let you create or manage internal ticketing artefacts that can’t be used publicly, like tickets and products. That’s confusing and will generate support overhead.
  • There’s no rate limiting or abuse protection on the click tracking endpoint, so the metric is easy to spam and not very trustworthy.
  • Even when external registration is enabled, the underlying ticketing and checkout APIs are still accessible, so people can bypass the UI. Not a huge security concern, but it’s an inconsistency and can lead to odd states.
  • There’s no warning if someone enables this when the event already has products or tickets configured or existing attendees or orders. That’s a recipe for confusion.
  • The event widget and embed flow also needs to be updated to reflect external registration mode. Assuming we'd event show the widget page. I'd argue it could be removed.
  • Hiding parts of the UI can confuse organisers and attendees and will lead to support inquiries unless the app makes it extremely obvious what mode the event is in.

It's a nice idea, but it definitely needs more thought before it can be merged, mainly because so much of the product revolves around tickets and attendees, and removing or bypassing those assumptions can have unintended consequences.

One concrete improvement that would help a lot is a persistent indicator across all event management pages, for example in the event header, that clearly shows the event is externally managed when this mode is enabled.

Finally, before we commit to carrying the extra complexity long term, I’d also like to check with the community whether this is something that would add real value to self hosted installations.

@reyemb
Copy link
Author

reyemb commented Jan 28, 2026

You are totally right. This is definitely just a prototype/first draft to show the concept, not a final solution. (Well the description somehow (AI) reads like it a final solution)

That said, this feature is a dealbreaker for us. Since we are a public institution, we are required to list external events, so we can't really use the platform without this capability. I could imagine that other user have similar needs.

I agree we should check with the community before sinking more time into this. I definitely underestimated the complexity at first: I thought I could just add an external URL field and be done with it, but it got complicated fast once I started building it.

Also thank you a lot for your feedback it helps me to improve myself. I think I start from scratch and instead of changing the "type" of event. I will create a Option to "Advertise Event" next to "Create Event".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants