Repository navigation
Add event lineup and schedule, and customisable homepage sections - #1406
Merged
Merged
Conversation
Lineup & schedule - Organizer-level profiles (speakers, artists, hosts) with photos and links, reused across events, managed from a new People page - Per-event lineup with billing tiers, roles and hidden acts, stages and rooms (optionally tied to an event location) and a drag-and-drop timetable on a 05:00-to-05:00 day so late sets stay on their night - Public lineup grid and schedule timeline with profile and session popups, add-to-calendar (.ics), deep links and schema.org performer/subEvent data - Run sheet: XLSX export, printable view, and CSV/XLSX/paste import that previews every row in the browser before anything is uploaded - Lineup highlights in order and ticket emails (plus Liquid tokens), and an optional lineup strip in the ticket widget - Event duplication copies the lineup; account anonymisation scrubs profiles Homepage sections - Event homepages render an ordered, toggleable list of sections: tickets, about, lineup, schedule, location and organizer, plus text, gallery, FAQ, video (YouTube/Vimeo) and sponsor sections - Organizer pages use the same system (events, about, contact, past events and the custom sections) - Content is purified and spam-checked; disabled sections are withheld from public responses Also prints the run sheet and seat map on a white page.
railway-app
Bot
temporarily deployed
to
Hi.Events / Hi.Events-pr-1406
October 15, 2026 21:19
Destroyed
|
🚅 Deployed to the Hi.Events-pr-1406 environment in Hi.Events
1 service not affected by this PR
|
Contributor
|
| Mode | Result | ✅ Passed | ❌ Failed | ⏭️ Skipped | ⏱️ Duration | |
|---|---|---|---|---|---|---|
| Self-hosted | 101 | 0 | 1 | 0 | 2m 52s |
⚠️ Flaky tests: failed first, then passed on retry (1)
- Self-hosted ·
organizer/organizer-management.spec.ts:7· organizer management › an organizer creates a second organizer from the global menu
The font-loading effect ran after the early return for a missing event, so React saw a different number of hooks between renders.
Profile and session popups clipped anything taller than the screen, such as a Spotify player above a long bio. The popup body now scrolls, and the back and close buttons stay pinned while it does.
railway-app
Bot
temporarily deployed
to
Hi.Events / Hi.Events-pr-1406
October 15, 2026 21:38
Destroyed
…port Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
railway-app
Bot
temporarily deployed
to
Hi.Events / Hi.Events-pr-1406
October 16, 2026 06:12
Destroyed
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes I've made
Lineup & schedule
ProfileLinkType::fromUrl).@mantine/schedule). Schedule days run 05:00 to 05:00, so late sets stay on their night, including across clock changes.#session-<id>deep links.performerandsubEventschema.org data is added to the event's JSON-LD./lineup/export, with Schedule and Lineup sheets), a printable view, and a bulk import from CSV, XLSX or pasted spreadsheet rows. Files are parsed in the browser (DecompressionStream+DOMParser, no new library) and every row is previewed before anything is sent: new/updated/unchanged people, already scheduled slots, row-level errors and a day/month date-order toggle. The server receives clean JSON (max 500 people, 1,000 slots), matches people and stages by name, writes in bulk under an event lock and skips slots that already exist, so re-importing an export is a no-op.lineup.*Liquid tokens in custom templates, in the buyer's language, per date for recurring events). The ticket widget can show a lineup strip.Homepage sections
HomepageSectionsSanitizeris the only writer: HTML is purified, image ids must belong to the event/organizer, and video links are limited to YouTube/Vimeo. Section text is included in the event spam check. Disabled sections are withheld from public API responses and page source.Also
Why I've made these changes
Festivals, conferences and club nights sell on who's playing and when, and organizers currently have to put their lineup in the event description or on another site. This gives them a structured lineup and timetable that appears on the event page, in emails and in search results, with a spreadsheet round trip for the large lineups they already keep in Excel or Google Sheets. Homepage sections let organizers shape the event and organizer pages (FAQs, galleries, sponsors, video) without custom HTML in the description.
How I've tested these changes
pint --testis clean on all changed PHP files,php artisan scramble:analyzeis clean, frontendtscis unchanged at the 39 existing errors on develop, and ESLint reports no new errors in changed files.lineup,lineup-import-export,homepage-sections,organizer-homepage-sectionsandimage-fitspecs, unit specs for the import parser, schedule-day and organizer layout rules, and updatedread-only-accessandseat-map-printspecs. The related specs (55 tests) pass against the dev stack.Reviewer notes
profiles,event_lineup_entries,event_spaces,event_schedule_itemsandevent_schedule_item_performerstables,images.sort_order, and nullablehomepage_sectionsJSON onevent_settingsandorganizer_settings. Anullsection list falls back to the default order, so existing event and organizer pages render exactly as before.@mantine/scheduleis added for the timetable.lang/*.jsonfiles.Checklist