GigScenes site map
Every page in the prototype, in one tree. Click any node to open it.
★ What's new — 21 Jun 2026
Next.js port live — one site, two render paths fixed- ›New sub-genres feature — pick a parent at /genres/:slug (Alternative, Rock, EDM, …), filter by sub-genre chips (Indie Rock, Garage Rock, Drum & Bass, …). Every gig card carries its tag pills, and the matching tag flips to gold when a chip is active so it's obvious WHY each result appears.
- ↳Demo: open /genres/alternative → click the Indie Rock chip → see only 'Hackney Diaries live at The Windmill'.
- ↳Or /genres/rock → click Garage Rock → see the two Lowlight Kids gigs.
- ›Role-based dashboards updated for all 5 roles (Super Fan, Band, Venue, Promoter, Service) — same layout for everyone: hero + 4 stat cards (Saved gigs / Followed venues / Followed bands / Genre watchlist) that scroll to inline sections with cards for each saved/followed item. Click a stat card and you actually see your saved gigs, not the public directory.
- ›Inbox-notify email is now CC-able + editable from the admin — when a fan submits the Contact / Newsletter / Membership-interest forms, Rupert gets an email. The destination address lives in /admin/settings (was env-var only) and accepts multiple comma-separated addresses, so anyone on Rupert's team can be added without a redeploy.
- ›Profile editor — fans can update display name, location, short bio and avatar from /edit-profile. Drag-and-drop image upload goes straight to R2 and surfaces back on their Super Fan / Band / Venue dashboard.
- ›Better Google + Bing visibility — every page now shows all its content (FAQ answers, gig listings, genre tiles, plan details) the moment it loads, so search engines can index everything reliably without waiting for the page to finish opening.
- ›Pages are now labelled in a way search engines understand — gigs as events, bands as music groups, venues as places, FAQ as questions and answers, etc. This makes GigScenes eligible for richer search-result treatments (event carousels, pricing cards, expandable FAQ entries).
- ›Site map for search engines refreshes itself hourly — when you publish a new gig, band or venue in the admin, Google + Bing pick it up automatically without anyone needing to redeploy.
⤵ Current page tree
Every route on the site today/ (Home — What's On) │ ├─ Discovery (header nav) │ ├─ /calendar — Gig Calendar │ ├─ /bands — Band directory │ │ └─ /bands/:slug — Band detail │ ├─ /venues — Venue directory │ │ └─ /venues/:slug — Venue detail │ ├─ /promoters — Promoter directory │ │ └─ /promoters/:slug — Promoter detail │ ├─ /genres — Genre gallery │ │ └─ /genres/:slug — Genre directory + sub-genre filter (e.g. /genres/jazz) │ ├─ /services — Service categories │ │ └─ /services/:slug — Service provider detail │ ├─ /artists — Artist directory (footer-only) │ │ └─ /artists/:slug — Artist detail │ ├─ /labels — Record labels (footer-only) │ │ └─ /labels/:slug — Label detail │ ├─ /media — Press & coverage (footer-only) │ │ └─ /media/:slug — Media article detail │ └─ /gigs/:slug — Gig detail (linked from gig cards) │ ├─ Marketing / Info │ ├─ /how-it-works │ ├─ /faq │ ├─ /contact │ ├─ /membership — Join / List your venue / Membership │ ├─ /sitemap — Internal site map (this page) │ ├─ /sitemap.xml — XML sitemap for search engines (auto-refreshed hourly) │ └─ /robots.txt — Crawler rules │ ├─ Auth (signed-out) │ ├─ /login │ ├─ /register │ ├─ /verify-email │ ├─ /forgot-password │ └─ /reset-password │ ├─ Dashboards (signed-in, role-routed) │ ├─ /superfan — Fan dashboard │ ├─ /edit-profile │ ├─ /band-dashboard │ ├─ /venue-dashboard │ ├─ /promoter-dashboard │ └─ /service-dashboard │ ├─ Legal │ ├─ /privacy │ ├─ /terms │ ├─ /gdpr │ └─ /cookies │ └─ /admin (Cloudflare Access protected) ├─ /admin — Admin dashboard ├─ /admin/gigs │ ├─ /admin/gigs/new │ ├─ /admin/gigs/bulk-import │ └─ /admin/gigs/:id — Edit ├─ /admin/bands ├─ /new └─ /:id ├─ /admin/artists ├─ /new └─ /:id ├─ /admin/venues ├─ /new └─ /:id ├─ /admin/promoters ├─ /new └─ /:id ├─ /admin/labels ├─ /new └─ /:id ├─ /admin/media ├─ /new └─ /:id ├─ /admin/services ├─ /new └─ /:id ├─ /admin/fans ├─ /new └─ /:id ├─ /admin/inbox — Contact / newsletter / membership-interest submissions ├─ /admin/ratings — Light moderation ├─ /admin/cms — CMS content editor ├─ /admin/cms/schema — CMS schema editor (super-admin only) └─ /admin/settings
★ What's new — 16 Jun 2026
Fan ratings live + social handles wired- ›Fan ratings — Super Fans who attended a gig can now rate the band (4 dimensions: performance, crowd energy, professionalism, originality) and the venue (7 dimensions: sound, atmosphere, accessibility, staff, pricing, stage view, toilets). Aggregates roll up onto Band and Venue pages as read-only star averages with a total-count chip. Rating is one row per fan / gig / dimension, so revisiting the same gig updates the existing rating rather than stacking duplicates.
- ↳Surfaces touched: Gig detail page (rate CTA + combined band/venue form), Band detail (aggregate display), Venue detail (aggregate display), Admin → Ratings (new moderation queue at /admin/ratings with filters, hide / unhide, clear report, delete).
- ↳Prerequisites — sign in as a fan. Use the existing test account email phase1-smoke@example.com / password brand-new-pass-99, or register a new Fan / Super Fan at /register.
- ↳Test 1 — submit a rating from a gig page:
- ↳1) Sign in at /login.
- ↳2) Find a past gig — go to / and pick any gig dated June or earlier (most seed gigs are 7 Jun – 22 Jul 2026, so they should all read as past today).
- ↳3) Click the gig card → lands on /gigs/<slug>.
- ↳4) You should see a panel at the top of the page titled 'Rate this gig' with a yellow Rate this gig button.
- ↳5) Click it → an inline form opens with two sections: 'How was [band name]?' — 4 rows (Performance, Crowd energy, Professionalism, Originality), each with 5 white stars; and 'How was [venue name]?' — 7 rows (Sound, Atmosphere, Accessibility, Staff, Pricing, Stage/view, Toilets).
- ↳6) Click stars to set scores — they turn gold as you click. Click the same star again to clear it.
- ↳7) Tick the 'I attended this gig' checkbox (required).
- ↳8) Click 'Submit rating' → form shows 'Thanks — your rating has been saved', then closes.
- ↳9) The prompt now reads 'Thanks — you've already rated this gig. Update rating?' — clicking Update rating re-opens the form with your existing stars pre-filled.
- ↳Test 2 — see the aggregate appear on Band + Venue pages:
- ↳10) Navigate to the band you just rated — click any band tile on /bands or use the URL /bands/<slug>.
- ↳11) Below the bio you should see a 'Band ratings' panel with a 'Based on 1 rating' counter and each of the 4 dimensions with their star average (e.g. 'Performance · 5.0 ★★★★★', 'Crowd energy · 4.0 ★★★★☆').
- ↳12) Navigate to the venue of that gig (/venues/<slug>).
- ↳13) Below the hero there's a 'Venue ratings' panel with the 7 dimension averages.
- ↳Test 3 — admin moderation:
- ↳14) Open /admin/ratings (Cloudflare Access PIN if not already authenticated).
- ↳15) You should see 11 rows from your submission — 4 band rows + 7 venue rows, each showing target name, dimension, score, when.
- ↳16) Filters work: 'All types' dropdown → Band ratings / Venue ratings; search by entity name; 'Reported only' toggle (empty unless you've used the report flow); 'Include hidden' toggle (shows admin-hidden rows).
- ↳17) Per-row actions: click the eye icon to hide a row (it stops counting toward the public aggregate), click trash to hard-delete.
- ↳Test 4 — negative cases:
- ↳18) Sign out and visit the same gig page → the prompt changes to 'Sign in or join GigScenes to rate the band and the venue'.
- ↳19) Try to submit without ticking 'I attended' → form blocks with the error 'Please confirm you attended this gig'.
- ↳20) Try to rate a future gig → the prompt doesn't render at all (it's only shown when event_date has passed).
- ↳Outstanding (not in this drop): a 'Rate (Band Name)' / 'Rate (Venue Name)' button on the entity pages themselves, a 'gigs to rate' nudge inside /superfan, a public report icon on the aggregate display, and promoter / multi-band ratings — all parked for a later round.
- ›Social handles wired across the site — Instagram, Facebook, TikTok, X and YouTube buttons in the SiteFooter (visible on every page) and the Contact page's 'Follow' panel now point at the real GigScenes accounts and open in a new tab. TikTok added (wasn't in the previous icon set).
★ What's new — 4 Jun 2026
Your 3rd June feedback — applied- ›Top menu buttons reordered: What's On, Calendar, Bands, Venues, Promoters, Genres, Services.
- ›City picker filters Bands / Venues / Promoters / Services tabs too.
- ›'Free Gigs' card on Scene Snapshot now filters the Local Gig Calendar to free-entry gigs.
- ›Date pills show the month (e.g. 'Fri 13 Jun') across all gig cards.
- ›Genres rebuilt to 12 (Pop added per follow-up): Alternative, Blues, Classical, Country, EDM, Jazz, Pop, Rap, R&B, Reggae, Rock, World.
- ›Genre tile descriptions line up evenly. Genre filter buttons moved into the Local Gig Calendar panel.
- ›Services directory on Home reshaped into a single strip of all 9 category buttons.
★ What's new — 2 Jun 2026
Public forms wired, admin polish, IA cleanup, new public surfaces- ›Test data seed of ~158 records across London + Manchester.
- ›Public Contact / Newsletter / Membership-interest forms wired end-to-end; submissions land in admin Inbox.
- ›Admin Inbox built — unified the three public form kinds with tabs, unread badges, archive / reply.
- ›Home page Snapshot counts, ListLinks across tabs, and Genre tile counts wired to live admin data.
- ›Admin Dashboard + Settings replaced 'Coming soon' stubs with live D1-backed widgets.
- ›Per-row Archive / Unarchive on every admin entity list; client-side column sort everywhere.
- ›Services IA aligned — admin service_type collapsed from 13 fine-grained values to the public 9 categories.
- ›Two new public profile pages (Service provider, Press coverage) + three new list pages (Artists, Labels, Press).
★ What's new — 30 May 2026
Foundation — admin portal, cross-link graph, auth boundary- ›9 admin entity sections — Gigs, Bands, Artists, Venues, Promoters, Labels, Media, Services, Fans — each with full create/edit/list.
- ›Cloudflare Access auth gating /admin and /api at the edge.
- ›6 public profile-page types with cross-linked associations.
- ›AI gig import — paste any event-page URL and the form auto-fills via Firecrawl + OpenRouter / Claude.
- ›City dropdown with localStorage persistence + mobile hamburger menu.
- ›Drag-and-drop image upload to R2 across every entity form.
Public website
Marketing surface at /, with everything reachable from the site header.
- Promoters/promoters— Promoter directory
Public profile pages
Detail pages with cross-linked associations. Click any card on the public site (gig card, band card, venue card etc.) to drill in. Every string-name association on these pages becomes a clickable link to that entity's own detail page.
- Gig detail/gigs/:slug— Hero + lineup, venue, promoter, label, tickets, press coverage, embedded promo video, gallery
- Artist detail/artists/:slug— Bio, primary band, label, streaming links, gigs featuring this artist (reverse lookup)
- Band detail/bands/:slug— Bio, members / associated artists, label, upcoming gigs (reverse lookup), gallery, socials
- Venue detail/venues/:slug— Address, capacity, upcoming gigs at this venue (reverse lookup), contact, socials
- Promoter detail/promoters/:slug— Description, contact, social, promoted gigs (reverse lookup)
- Label detail/labels/:slug— Roster — bands + artists on this label, each cross-linked
- Service-provider detail/services/:slug— Provider profile — service category, portfolio gallery, gigs/artists/bands worked with as cross-links
- Press / coverage detail/media/:slug— Citation with Read-article CTA; gig/artist/band the piece covers each cross-link to its own detail page
- Genre directory/genres/:slug— Per-parent-genre gig directory with sub-genre chip filter (NEW)
- Artists list/artists— Public artist directory reached from the SiteFooter Discover links (not a Home tab). Cards click through to /artists/:slug.
- Labels list/labels— Public record-label directory with roster counts; reached from the SiteFooter.
- Press / coverage list/media— Public press-coverage directory ordered by the most recent piece's date; reached from the SiteFooter.
Admin portal
Cloudflare Access gated — accessible only to Rupert + Girish via email PIN. Two-zone visual design: dark sidebar/header matches the public chrome, light content area for dense data work. Every form supports drag-and-drop image upload to R2.
- Gigs/admin/gigs— Full CRUD on the gig entity (~35 fields). AI URL import + bulk import.
- Gigs list/admin/gigs— Searchable, filterable, paginated 10/page. Click column headers to sort.
- Add Gig/admin/gigs/new— 6 sectioned cards (Basic / Media / Date & Time / Location / Line-up / Commercial) + Status sidebar
- Bands/admin/bands— Full CRUD (19 content fields)
- Artists/admin/artists— Full CRUD (18 content fields)
- Venues/admin/venues— Full CRUD (18 content fields, capacity, contact, social)
- Promoters/admin/promoters— Full CRUD (13 content fields)
- Labels/admin/labels— Full CRUD (12 content fields), roster of artists + bands
- Media/admin/media— Press / coverage entries linked to gigs / artists / bands
- Services/admin/services— Service providers across 9 categories (matches public Home Services tab 1:1).
- Fans/admin/fans— Fan accounts, subscriptions, premium overrides, engagement counts
- Ratings/admin/ratings— Moderation queue for fan-submitted band + venue ratings.
- Inbox/admin/inbox— Unified inbox for the three public forms (Contact / Newsletter / Membership interest). Kind tabs with unread badges.
- Settings/admin/settings— Read-only system status — deployment, CF Access config, database stats, inbox stats, soft-delete semantic.
- CMS — content/admin/cms— WYSIWYG editor over the JSON tree backing FAQ + other CMS-driven copy.
- CMS — schema/admin/cms/schema— Super-admin only — edit the schema that defines what fields a CMS page exposes.
Account & onboarding
Real fan authentication. Email + password on D1 + Postmark for transactional email. Sessions via HTTP-only signed JWT cookies (30-day expiry). Email verification + password reset flows are live.
- Membership/membership— Pricing tiers — reached from header Join button + footer 'Join' link. Each plan card CTA deep-links into Register with that plan pre-selected.
- Register / Join/register— Real fan registration — email + password + display name + role selector. Creates a row in fans table, sends verification email via Postmark, sets session cookie.
- Super Fan dashboard/superfan— Logged-in member view. Auth-guarded — unauth visitors bounce to /login.
- Band dashboard/band-dashboard— Band-role dashboard — same layout as Super Fan.
- Venue dashboard/venue-dashboard— Venue-role dashboard.
- Promoter dashboard/promoter-dashboard— Promoter-role dashboard.
- Service dashboard/service-dashboard— Service-provider dashboard.
- Edit profile/edit-profile— Update display name, location, short bio.
- Forgot password/forgot-password— Enter your email to receive a password-reset link.
- Reset password/reset-password— Set a new password using the one-hour token from the email.
- Verify email/verify-email— Landing page for the verification email link.
Information & legal
- How It Works/how-it-works— Product overview by user type + 4-step flow
- Terms & Conditions/terms— Legal — plain-English T&Cs governed by England & Wales
- Privacy Policy/privacy— UK GDPR-aligned privacy policy
- Cookies Policy/cookies— What we set + how to manage them
Dev / reference
- robots.txt/robots.txt— Crawl rules
- sitemap.xml/sitemap.xml— Auto-generated from /public feeds — refreshes hourly
