// DIRT FEST V — sections // All sections registered as window globals so app.jsx can compose them. const TICKET_URL = "https://events.humanitix.com/dirt-fest-v"; const EVENT_DATE = "SAT 23 MAY 2026"; const VENUE = "Lord Gladstone Hotel · Chippendale"; const LINEUP = [ "TRINITY AND THE SLUTS", "ARI KIKO", "DARKSYDE", "MARTY ROTTEN", "RETAIL THERAPY", "DOCTOR ROBOT", "LITTLE ARCHER", "GLOBAL SOUNDS", "DAYSEA", "MENARKU", "THREATNIQUE", "DAMIEN ALOYSIUS", "SINISTER MINISTER", "S.MILES", "LUNA PEREZ", "MATTY PAXTON", "DIRTFEST HOUSE BAND", "LOUIX", "SASHA SOH", "LUKE MARTIN", "ARIG"]; const LINEUP_HIGHLIGHT = new Set(["DOCTOR ROBOT", "ARI KIKO"]); // Pseudo-random but deterministic rotation for poster items function tilt(seed, range = 3) { const x = Math.sin(seed * 9301 + 49297) * 233280; const r = (x - Math.floor(x)) * 2 - 1; return (r * range).toFixed(2) + "deg"; } // ───────────────────────────────────────────────────────────────────────────── // NAV // ───────────────────────────────────────────────────────────────────────────── function Nav() { const links = [ ["Lineup", "#lineup"], ["Schedule", "#schedule"], ["Venue", "#venue"], ["About", "#about"], ["FAQ", "#faq"]]; return ( ); } // ───────────────────────────────────────────────────────────────────────────── // HERO // ───────────────────────────────────────────────────────────────────────────── function Hero() { return (
{/* tape strips */} {/* mascot mark above the title */}
{/* tiny upper kickers */}
EST. 2022 · INNER WEST · DIY VOL. 005 / FIVE / V PRINT RUN 0421 / 9999
{/* MASSIVE TITLE */}

DIRT

FEST V

{/* floating round stamp */}
★ FIFTH ★
DIRT
FEST
NSW · AU
{/* under-banner */}
◆ {EVENT_DATE} ◆ {VENUE} ◆ 21 ACTS / 3 STAGES ◆ $35 GA
{/* Subhead + CTA row */}

A one-day festival for unsigned music & art, run out of the back room of a pub in the inner west. No labels, no algorithms — just the people making the work, and the people who turn up for it.

Grab a ticket ← do it before they sell out (they will)
★ THE BASICS ★
WHO   21 unsigned acts
WHAT   live music + art
WHEN   Sat 23 May 2026, 2pm–late
WHERE   Lord Gladstone, Chippendale
HOW   $35, link below
WHY   because it matters

18+  ·  Door sales if not sold out  ·  Earplugs at the merch desk, free
); } // ───────────────────────────────────────────────────────────────────────────── // LINEUP // ───────────────────────────────────────────────────────────────────────────── function Lineup() { // Layered sizes for poster feel const sizes = [110, 70, 80, 102, 95, 72, 64, 80, 56, 90, 68, 96, 60, 84, 70, 64, 60, 70, 70, 60, 56]; const colors = ["red", "ink", "ink", "green", "ink", "red", "ink", "ink", "ink", "ink", "ink", "blue", "ink", "ink", "red", "ink", "blue", "ink", "ink", "red", "ink"]; return (
SECTION 01 — LINEUP

TWENTY-ONE ACTS

Three stages, twenty-one acts, doors at 2pm. Every act unsigned at the time of booking.

FULL BILL
{/* poster name list */}
{LINEUP.map((name, i) => { const c = colors[i] === "red" ? "var(--marker-red)" : colors[i] === "blue" ? "var(--marker-blue)" : colors[i] === "green" ? "#1f4d29" : "var(--ink)"; const isHi = LINEUP_HIGHLIGHT.has(name); const isMarty = name === "MARTY ROTTEN"; return ( {isHi ? {name} : name} ); })}
★ FEATURED ★

Trinity and the Sluts

Glasgow-via-Marrickville punk five-piece. Two guitars, no apologies. Closing the Dirt Stage at 9:30pm.

★ DEBUT ★

Marty Rotten

First-ever live set. Room Upstairs, 8:00pm — be there.

); } // ───────────────────────────────────────────────────────────────────────────── // SCHEDULE // ───────────────────────────────────────────────────────────────────────────── function Schedule() { const dirtStage = [ { t: "4:00–4:30", n: "Luke Martin" }, { t: "4:50–5:20", n: "Sinister Minister" }, { t: "5:40–6:10", n: "Daysea" }, { t: "6:30–7:00", n: "S.Miles" }, { t: "7:20–7:50", n: "Trinity and the Sluts" }, { t: "8:10–8:40", n: "Retail Therapy" }, { t: "9:00–9:40", n: "Doctor Robot" }, { t: "10:00–10:45", n: "Dirtfest House Band" }]; const roomUpstairs = [ { t: "2:00–2:30", n: "Little Archer" }, { t: "2:45–3:15", n: "Luna Perez" }, { t: "3:30–4:00", n: "Arig" }, { t: "4:15–4:45", n: "Menarku" }, { t: "5:00–5:45", n: "Darksyde" }, { t: "6:00–6:45", n: "Louix" }, { t: "7:00–7:45", n: "Threatnique" }, { t: "8:00–9:00", n: "Marty Rotten" }, { t: "9:15–10:15", n: "Matty Paxton" }]; const courtyard = [ { t: "4:00–6:00", n: "Global Sounds" }, { t: "6:00–8:00", n: "Damien Aloysius" }, { t: "8:00–10:00", n: "Sasha Soh" }, { t: "10:00–12:00", n: "Ari Kiko" }]; const Row = ({ t, n, accent }) =>
{t} {accent ? {n} : n}
; const Stage = ({ title, sub, rows, tilt: tiltDeg, tapeRight }) =>

{title}

{sub}

{rows.length} acts · doors 2pm

{rows.map((s, i) => )}
; return (
SECTION 02 — SET TIMES

WHO PLAYS WHEN

Three stages, running 2pm to midnight. Bring a watch, an open mind, comfortable shoes.

full set times may change, we run this shit ourselves ✌

); } // ───────────────────────────────────────────────────────────────────────────── // VENUE // ───────────────────────────────────────────────────────────────────────────── function Venue() { return (
SECTION 03 — THE PUB

LORD
GLADSTONE

115 Regent St, Chippendale. The corner pub that's hosted every Dirt Fest since the first one. Two rooms, a courtyard, a kitchen that does not stop until close.

◇  Train: 6 min walk from Central, 5 from Redfern
◇  Light rail: Chinatown / Central Chalmers stop
◇  Bike racks out front, lock 'em up
◇  Step-free entry, accessible toilet on ground floor
Open in Maps
{/* Hand-drawn map */}
★ FOUND-IT MAP ★
{/* roads */} {/* venue X */} YOU ARE HERE {/* labels */} REGENT ST → DENISON RD ↑ light rail ~~ {/* arrow */} walk from stn.

Approx. Not to scale. Phone reception inside is bad — meet outside.

); } // ───────────────────────────────────────────────────────────────────────────── // GALLERY // ───────────────────────────────────────────────────────────────────────────── function Gallery() { const editions = [ { id: "i", roman: "I", year: "2022", note: "the basement gig that started it" }, { id: "ii", roman: "II", year: "2023", note: "first time we sold out" }, { id: "iii", roman: "III", year: "2024", note: "added the back bar / second stage" }, { id: "iv", roman: "IV", year: "2025", note: "art wall + 18 acts" }]; // 4 slots per edition return ( ); } // ───────────────────────────────────────────────────────────────────────────── // ABOUT // ───────────────────────────────────────────────────────────────────────────── function About() { return (
SECTION 05 — ABOUT

WHY
BOTHER?

for the love of it ♡

Dirt Fest started in 2022 because three friends wanted to put on a gig for the bands they loved who couldn't get a booking. It hasn't really changed since.

We don't take a cut. Door money, after costs, splits across the bill. The art on the walls comes from local makers, who keep 100% of what sells.

There's no curator, no taste-maker. Lineups come from open submissions and the tip-offs of friends. If we book a band you've never heard of, that's the point.

It's small on purpose. 400 people in a pub, one Saturday a year. Every dollar in the door goes back into making the next one happen, or into the hands of the people who turned up to play.

If you've got a band, a sculpture, a zine, a film, a busted theremin — submit it. We read every one. The hard part isn't getting on; the hard part is being honest.

RUN BY VOLUNTEERS NOT FOR PROFIT EST. 2022
); } // ───────────────────────────────────────────────────────────────────────────── // FAQ // ───────────────────────────────────────────────────────────────────────────── function FAQ() { const qs = [ ["Is there a door sale or is it tickets only?", "Tickets first — door sale only if we haven't sold out. We have for the last three years, so don't bet on it."], ["Is it all-ages?", "18+. Sorry kids. The pub's licence is what it is."], ["Can I bring my own art / zine / tape to sell?", "Yes. Email submissions@dirt-fest.com by 1 May. The market wall is free for anyone on the bill, $10/spot otherwise."], ["Refunds?", "Up to 14 days before the fest. After that, on-sell it to a friend — Humanitix lets you transfer."], ["Lineup clashes?", "Yep — three stages, twenty-one acts, you can't see them all. Plan your night, then throw the plan out."], ["What about food / dietary stuff?", "The Lord Gladstone kitchen runs vegan/veggie/GF options all night. Cash and card both work."], ["I'm in a band — can I play next year?", "Yes — submissions open the Monday after this year's fest. See below."]]; return (
SECTION 06 — FAQ

QUESTIONS, &c.

{qs.map(([q, a], i) =>

{String(i + 1).padStart(2, "0")} {q}

{a}

)}
); } // ───────────────────────────────────────────────────────────────────────────── // NEWSLETTER + SUBMIT // ───────────────────────────────────────────────────────────────────────────── function Newsletter() { const [email, setEmail] = React.useState(""); const [sent, setSent] = React.useState(false); return (
SECTION 07 — MAILING LIST

THE SLOW
NEWSLETTER

One email a month, max. Lineup drops, gig recs from the locals, and a heads-up when next year's tickets go on sale.

{sent ?

★ YOU'RE ON IT ★

Check yr inbox for the welcome blast. If it's not there, it's in spam (sorry).

:
{e.preventDefault();if (email.includes("@")) setSent(true);}} style={{ background: "var(--paper)", color: "var(--ink)", padding: "30px 28px", transform: "rotate(0.8deg)", boxShadow: "8px 8px 0 var(--marker-red)" }}> setEmail(e.target.value)} required />

We don't sell yr details. We barely use them.

}
); } function SubmitBand() { const [step, setStep] = React.useState(0); const [form, setForm] = React.useState({ name: "", links: "", city: "Sydney", note: "" }); if (step === 1) { return (
RECEIVED

CHEERS, {form.name || "FRIEND"}

We read every submission by hand. You'll hear back within a fortnight either way — and if we're a fit, you'll be on the Dirt Fest VI longlist.

); } return (
SECTION 08 — SUBMIT

PLAY
DIRT VI

Submissions for Dirt Fest VI open the Monday after this year's. Drop your details now and we'll be in touch.

unsigned acts only ✌
{e.preventDefault();if (form.name) setStep(1);}} style={{ background: "var(--paper)", padding: "32px 30px", border: "3px solid var(--ink)", boxShadow: "10px 10px 0 var(--ink)", transform: "rotate(-0.6deg)" }}> setForm({ ...form, name: e.target.value })} placeholder="e.g. Trinity and the Sluts" /> setForm({ ...form, links: e.target.value })} placeholder="soundcloud / yr website" /> setForm({ ...form, city: e.target.value })} />