Build with AI

How to build an event ticketing system with Replit

Build a ticketing platform and host it in the same workspace. Events, a checkout that will not oversell, QR tickets, a scanner for the gate, and a back office, all described to the Agent, with the database provisioned beside them and the published app on a real URL.

August 2026 · 45 min read · Updated September 2026

Replit

$ Build a ticketing platform with a Postgres database in this workspace: events with dated performances and ticket types, a checkout that cannot exceed the allocation, QR tickets redeemable once, a staff scanner, and an admin panel for orders and refunds.

  • Database provisioned in the workspace
  • Storefront and door built
  • Ready for you to publish
You describe it, Replit builds it
Start here

What an event ticketing system actually is

Three applications over one database: the shop where people buy, the counter and the gate where your staff work on the day, and the back office where orders, refunds, and takings are reconciled afterwards.

An event ticketing system isn’t complex enterprise software. It is simply three straightforward tools working together: the storefront where attendees buy, the scanning app your team uses at the door, and the admin dashboard where you track sales and handle refunds.

Most organizers rely on third-party platforms because they work out of the box. But that convenience costs a fortune: you are paying a percentage on every single ticket sold. That fee might feel small for a 50-person meetup, but it turns into a massive expense when you scale to thousands of attendees.

Building your own system used to be hard because of two core edge cases: preventing two people from buying the last ticket at the exact same second, and verifying QR codes at a crowded door without internet. Once you solve these two rules with your AI coding tool, the rest of the application is just simple web screens.

Zero Overselling Risk

Two buyers clicking "pay" on the last ticket at the exact same millisecond isn’t a rare glitch. It’s standard practice. Your AI coding tool configures your database so reservations and payment happen atomically. You will never sell the same seat twice.

Anti-Fraud QR Protection

A ticket isn’t just a digital receipt. It’s a single-use access key. The system validates every QR code against your central database instantly. A screenshot forwarded to four friends will only let the first person through the gate.

Offline-First Door Scanning

When hundreds of people are waiting at the door, a slow network shouldn’t stop entry. The scanner app validates tickets instantly, syncing seamlessly even in basement venues with zero cell signal.

What the fees actually come to

27%

of a ticket’s base price went to fees on the primary market, ranging from 13% to 58% across 31 events and five ticketing companies, the GAO’s 2018 review, still the figure the Congressional Research Service puts in front of Congress in its April 2026 report on live-event tickets.

Congressional Research Service, 2026 (GAO 2018 study) · checked GAO study 2018, CRS report updated April 2026

What a ticketing platform needs

The parts every ticketing platform is built from

Two of these six decide whether the app survives its first real event. The other four are where most of the visible work is, and almost none of the risk.

01

Real-Time Inventory & Cart Hold

Each ticket type holds a number that exists and a number already gone, and the moment those two are read in one place and written in another, an on-sale will sell you past your capacity. Reserve and sell in a single database operation, decide how long an abandoned checkout holds its stock, and put the released seats back where somebody else can reach them.

02

Flexible Ticket Tiers & Limits

A date, a venue, a door time, and one or more ticket types, each with its own price, its own allocation, and its own cap per order. Keep those on the event rather than in your settings, because early-bird, concession, and on-the-door are the same event disagreeing with itself on purpose.

03

Anti-Fraud QR Tickets

A code per attendee that nobody can guess from the one next to it, a copy the buyer can always reach without an email, and a status that moves from valid to used the first time it is scanned. That status is the whole product on the day.

04

Offline-Ready Gate Scanner

A phone camera, a result big enough to read at arm’s length, and a decision in well under a second. Then the part people skip: what it does when the network drops. Queue the scans locally, admit against what the device already knows, and reconcile when signal returns, because the alternative is a queue out of the building.

05

On-Site Cash & Door Sales Sync

Walk-ups are a large share of a small event and they arrive with cash. A till that sells and prints in one movement, on the same stock as the website, keeps the door and the storefront from quietly disagreeing about how many are left.

06

Master Dashboard & Export

Orders, refunds, exchanges, what sold, what came in, and who actually turned up, with an export, because somebody will want it in a spreadsheet. Attendance against sales is the number that tells you what to print, staff, and order for next time.

Build vs buy

Own the checkout or pay per person through the door

Don’t look at monthly subscription fees. The hidden cost of ticketing platforms is the percentage they carve out of every ticket you sell. Multiply that per-ticket fee by your total attendance, and the numbers speak for themselves.

Build your own

Own the checkout outright: one purchase, the whole codebase, and no cut taken from any ticket. Forty attendees and four thousand cost exactly the same to run.

  • No percentage and no per-ticket fee, because you choose the payment rail and negotiate its rate yourself
  • The same cost to run whether you sell forty tickets or four thousand
  • Free events stay genuinely free, rather than free on some plans and charged on others
  • Your attendees’ names and email addresses are yours, on a list you can reach without an export request
  • The checkout carries your name rather than a marketplace’s, which is most of what a first-time buyer is deciding about
  • Fee handling, refund windows, exchange rules, and how many per order are your policies, not a vendor’s defaults

Rent the checkout

Eventbrite · Universe · TicketSpice · Humanitix

What renting genuinely buys you is the money rail and the audience in front of it. Card processing, refunds, chargebacks on a category that attracts fraud, payouts, and a marketplace where people who have never heard of you are already browsing. None of that is the part you would enjoy building.

  • Selling works on the first day, with the processor, the payouts, and the failed-card handling already solved
  • Chargebacks and fraud are somebody else’s problem, which matters more here than in most categories
  • The larger platforms put your event in front of people already searching, which no app of your own does
  • Scanning apps, printed-ticket formats, and door hardware arrive built rather than described
  • Every one of them takes a cut of each ticket, so the bill scales with the exact thing you are trying to grow
  • Free is not uniformly free: three of these four charge nothing on free tickets, and one charges the same flat fee unless you also sell paid ones
Eventbrite3.7% + $1.79 service fee per ticket, plus 2.9% payment processing per order

The category default, and the clearest statement of the percentage model. The page quotes a “3.7% + $1.79 service fee per ticket” alongside a “2.9% payment processing fee per order”, and lets you choose whether you or the attendee absorbs them. Free events are free: the page offers to “Publish unlimited free events at no cost”. What it does not publish is a plan ladder: the only monthly figure anywhere on it is $15/month for the Pro email tool, which is an add-on rather than the thing you are buying, so no tier price is estimated for it here. Do the multiplication before you compare anything: on a $40 ticket that combined cut is over $5, and it is charged again for every person who comes.

eventbrite.com · checked August 2026

Universe2% + $0.59 per ticket on the two published plans, with Pro quoted as “Custom pricing”

The low-percentage end of the same model, owned by Ticketmaster. Starter and Standard both show “2% + $0.59 per ticket”, and free tickets carry nothing at all. The page is unusually blunt about it: “There are absolutely no service fees. Universe is 100% free for free events”. Payment processing is bundled when you take money through Universe itself. Connect your own Stripe account instead and the page says the processing fee “will be charged to you by Stripe”, which is worth reading twice, because it changes who your money touches first. Pro publishes no figure.

universe.com · checked August 2026

TicketSpice99¢ per ticket plus card processing at 2.9% + 30¢ - 49¢ on tickets of $5 or less and at the door

Included because it prices the opposite way: a flat amount rather than a percentage, which gets cheaper relative to face value the more expensive your ticket is. The page states “99¢ per ticket plus standard credit card processing rates of 2.9% + 30¢”, drops to “49¢ a ticket” on tickets of $5 or less and on box office sales, and answers the question of what else there is with “Nope, nada, zilch.” No monthly plans, setup fees, or contracts. One line to catch: unlike the other three, a free ticket is still charged unless your organisation is also selling paid ones.

ticketspice.com · checked August 2026

Humanitix2.1% + $0.99 booking fee per paid ticket, plus 2.9% + $0.30 processing - 1% + $0.99 for charities and schools

The not-for-profit end, and useful here for showing that even a platform donating its profits still charges per ticket, because the rail underneath costs money whoever runs it. The standard booking fee is “2.1% + $0.99” with processing of “2.9% + $0.30” on top. Charities and schools pay “1% + $0.99” on the same processing. Free events cost “$Nothing. Nada. zero.”, and the page commits that “ALL plans get access to ALL features. NO sign up fees, NO contracts.” Custom arrangements exist on request with no published figure.

humanitix.com · checked August 2026

Rule of thumb: if you need an audience you do not have, buy. A marketplace putting your event in front of strangers is worth a real percentage, and none of it is something an app of your own provides. If your attendees already know who you are, because they follow you, subscribe to you, or come every month, then you are paying a finder’s fee on people you found yourself, and that is the case for building. The arithmetic that settles it is one line: your ticket price, times the percentage, plus the fixed fee, times how many people come. For scale, the Congressional Research Service reports that in 2025 Ticketmaster averaged about $8.91 in revenue for each fee-bearing ticket it sold, not your rate, but a fair sense of what a seat at the top of this market is worth to the company selling it.

No dev needed

Why build with Replit

A real app needs somewhere durable to keep what people enter, rules about who’s allowed to see it, and a place to actually run once it’s built. Those are three separate problems, and most solo builds solve them badly, or not at all.

Replit’s Agent handles all three from one chat, in the same workspace the app ends up living in:

The build loop
1

Describe

Tell the Agent what to build, in plain language.

2

Watch

It writes the code, sets up the database, and shows the app running live.

3

Try it

Use the real app in the preview rather than a mockup.

Publish

Take it live on Replit’s own hosting, or ask for the next change.

Loop back to Describe

The build and the place it ends up running are the same workspace throughout, so there’s no separate hosting account to set up later.

One workspacebuilds, runs, and hosts it

Replit is the one tool here that also deploys what it builds. Publishing takes the same project live on Replit’s own infrastructure, with a working domain, uptime monitoring, and security scanning included.

Managed Postgres with 20GB included free

Ask the Agent to add a database and it creates the schema and wires your app to it. What you get is a real, fully-managed SQL database rather than a mocked one.

Up to 10 Agent sessions in parallel (Pro)

Core allows up to 2 parallel Agent sessions and Pro allows up to 10, so more than one part of the app can be worked on at the same time.

What it costs

Pay a developer, or do it with AI

Two ways to get the same app built: pay a developer for their hours, or spend your own describing it to an AI coding tool. Here is what each one costs to build, and what it costs to keep running once it is live.

Hire a developer

Custom build, from scratch
Developer
~$13k-$51k
Supabase (backend)
Free tier · $25/mo (Pro plan)*
Hosting
$0 free tier
Build time
~255 hrs of their work

~$13k-$51k to build, then from $25/mo after launch

Our ~255-hour estimate, priced against the rate survey linked below. That survey puts senior US developers in the $100-$150+/hour bands and notes the 20-40% an agency adds over them, so $50/hr and $200/hr bracket the realistic ends. The interesting part is where the hours land: roughly a third of them go on the inventory rules and the door, neither of which appears in a single screenshot, which is the usual reason a quote for this kind of app comes back at a number the organiser was not expecting.

Build it with Replit

From scratch, with Replit
Replit
Free (daily credits) to $25/month (Core) or $100/month (Pro)
Database (built-in Postgres)
Free to start · 20GB included
Hosting (Replit Deployments)
Billed separately, on top of the plan
Your time
~122 hrs

Free to try the idea, ~$25-$100/month on Core or Pro while you build a real one, then whichever plan (plus any deployment cost) you keep using

Replit’s plan price and its credit grant are the same number, not a subscription plus a separate credit purchase: Core is $25/month for $25 of monthly credits (or $20/month billed annually), Pro is $100/month for $100 of monthly credits (or $95/month annually). Once you publish, Replit bills hosting through its own Deployments separately, on top of whichever plan you’re on. Budget for it as a second line, not folded into the $25 or $100.

* One line on the free tier is worth more attention on this build than on most. Supabase Free comes with 500 MB of database space, 1 GB of file storage, and 5 GB of monthly egress, and it puts a project to sleep after seven days without activity. Look at the traffic shape of a ticketing app (one on-sale, one event night, weeks of silence around both) and that sleep is not an edge case, it is the default state. Pro, from $25/mo, ends it, brings 250 GB of egress (then $0.09 per GB), and keeps a daily backup for 7 days. Free is genuinely fine until you announce something. Announcing is the moment to move.

Neither column takes a cut of a ticket, because the app records orders and whatever payment rail you connect charges its own rate, so the running cost is a database and a host and nothing else. That bill does not move with attendance: forty tickets and four thousand cost the same to host, and the only thing that grows is the traffic on the night.

Prices and rates from supabase.com, developex.com and replit.com, checked August 2026.

Plan first

Decide before you build

Answer these six simple questions before launching your platform. Settling your rules today takes minutes: fixing them on the day of the event costs money and lost sales.

01

How will you take payments?

Decide whether you will process credit cards online or accept manual transfers/cash. Card processors automate sales instantly and handle disputes, but they take a small fee (2-3%) on each transaction.

02

General admission or reserved seating?

Are your tickets first-come, first-served, or do attendees pick exact seat numbers on a floor map? Simple ticket counts are effortless to build, while interactive seat maps require additional setup logic.

03

Guest checkout or forced accounts?

Requiring buyers to create an account creates friction and lowers sales. Allowing instant guest checkout sells more tickets, while sending a simple login link via email helps buyers recover lost tickets later.

04

Hidden fees or all-inclusive prices?

Will you absorb payment processing fees into the ticket price or add them on top at checkout? Adding surprise fees at the final step is the single biggest cause of abandoned shopping carts.

05

Clear refund and transfer policies

Define your rules upfront: Can attendees request a refund up to 48 hours before the event? Can they transfer a ticket to a friend’s name? Setting these rules into your system automates support and stops dispute confusion.

06

Door entry logistics & internet signal

How many staff members will scan QR codes, and will the venue entrance have reliable Wi-Fi or 4G? If the signal drops in a basement or field, your scanning app must be able to validate tickets offline.

Approaches

Comparing your build options

Half of what makes a build long is arranging things you then have to arrange again somewhere else. Here is one app three ways: by hand, on a UI kit that ends at a catalogue, or inside Replit, where the database, the scanner, and the address you eventually print on a poster all live in one workspace.

~255 hrsBuilding by hand

Two deadlines sit inside this build and neither moves. The on-sale, where a hundred people press buy in the same second and the count has to stay honest, and the door, where a scan has to resolve in under a second on a phone with one bar of signal. Both are hard to get right and impossible to postpone.

~190 hrsGeneric UI starter kit

A starter kit hands you a catalogue, a cart, and a dashboard. It has no notion of a ticket that must be sold once and admitted once, no idea that two buyers can reach the last twenty at the same moment, and nothing at all for the gate. The inventory rules and the whole door are still yours.

~122 hrsBuilt with Replit

One request at a time to the Agent, and the database, the server, and the screens all get written in the workspace that will eventually host them, with a published URL for the scanner rather than a preview you cannot open at the door.

Interactive calculator

Estimate your exact build timeframe

Select the features your event platform needs. Uncheck what you don’t use to see your custom setup timeframe.

What your ticketing platform needs

Your estimate

122 hrs

start to finish

Based on the 6 of 6 features you’ve selected, plus ~29h of groundwork. Toggle any on the left to watch the number move, and open the groundwork row to untick what you have already, such as a database that is already running or going live if you are only building a mock-up for now.

A rough estimate, not a quote. Real time depends on how much you customize and how clean your data is.

Setting up your workspace

Let’s set up the tools you need

Replit runs entirely in the browser, and it’s the one tool here that also hosts what you build, so no GitHub account is required first. Before step 01: an account and a plan. A database comes later, the moment your app actually needs one, and GitHub whenever you want a copy of the code outside Replit.

1

Replit account

Cost: Free

Sign up and you land in a workspace with an Agent chat, the code, and a live preview side by side, with nothing to install.

Sign up for Replit
2

Replit subscription

Cost: Free (daily credits), then $25/month (Core) or $100/month (Pro)

Starter’s free daily credits are enough to try an idea, not to finish one. Core is $25/month billed monthly, or $20/month billed annually, for $25 of monthly credits and up to 2 parallel Agent sessions. Pro is $100/month monthly, or $95/month annually, for $100 of monthly credits, more collaborators, and access to the strongest available models. The price you pay and the credits you get are the same number on both plans, so you have no separate subscription-plus-credits split to work out.

Compare Replit plans
3

Replit database (Postgres)

Cost: Free to start · 20GB included

Every Replit app includes its own managed Postgres database with 20GB of free storage. Ask the Agent to add one and it creates the schema and connects your app to it, with no separate account to create anywhere else.

Replit’s built-in database, Replit docs
Optional
4

GitHub connection

Cost: Free

Not needed to start, and not needed as an undo either, because Replit checkpoints the whole workspace as the Agent works. Connect a repository from the Git pane, free on every plan, and a copy of the real code lives outside Replit under your own account. Worth doing once the project is one you would hate to lose.

Using the Git pane, Replit docs

The first two are all you need to start. Everything here stays inside the one browser tab, the app included once you publish it, and the GitHub copy is the one deliberate exception.

Step by step

Build your ticketing platform, one Agent message at a time

You install nothing and wire in nothing from elsewhere: the Agent writes the files, runs the commands, and creates the database along the way. One fact colours every step below: the Postgres in this workspace arrives without an identity service bolted to it, which makes your own server the thing that tells the database who is asking.

  1. 01

    One message: the app, the database, and the ground rules

    Since Postgres is part of the workspace rather than a separate account, asking for it belongs in the first message, next to the two constraints everything after this depends on.

    PromptSet up the project and the database
    Set up a React 18 + Vite + TypeScript app with Tailwind and a server, and add a Postgres database to this Repl, the one Replit provisions, not anything outside. Write a short notes file at the project root recording three things. This is an event ticketing platform. The words throughout are organisation, event, performance, ticket type, allocation, order, ticket, and scan. And two standing rules: what remains of a ticket type is always derived from its allocation minus what has sold rather than stored as an editable figure, and a ticket is redeemable exactly once with that check made on the server rather than on the scanning device. Keep the database connection details in Replit's Secrets rather than in the code.

    Write both rules into the notes file rather than only into this message. A stored remaining-count is the shortcut any assistant reaches for when a storefront feels slow, and it is the one that lets a gate and a shop disagree about whether an event has sold out.

  2. 02

    Events and storefront, checked at a checkpoint

    The schema and the public side together. Nothing here writes yet, which makes it the cheap place to find out your ticket types do not match how you actually sell.

    PromptModel the events and build the storefront
    Design the schema and the server routes over it. Organisations own venues and events. An event carries a title, description, image, status, and its organisation. A performance is one date of an event, with a start time, a door time, and a capacity, since an event can run more than once. A ticket type belongs to a performance and carries a name, a price, an allocation, a sold count, and a maximum per order. Seed two organisations and three events between them, one with early-bird and standard prices on the same date. Then the public storefront over it: browsing with search and a date filter, and an event page listing the dates, each ticket type with its price and what remains, and a quantity picker honouring the maximum per order. No accounts and no selling in this message.

    Look at the two-tier event in the preview before going further. One date carrying two prices is where a ticket model usually first argues with itself, and a checkpoint here is the cheapest place to start over from.

  3. 03

    The sale, in one transaction the Agent writes

    The hardest thing in the build. Ask for the guarantee in those words, and ask to see two orders collide before you accept it.

    PromptBuild the checkout that cannot oversell
    Build the order path. An order records the performance it belongs to, the buyer’s name and email, a state of pending, confirmed, or cancelled, whether it originated online or at the counter, and its total. Each ticket records its order and its ticket type. Everything else here depends on one function, so write it carefully: it locks the ticket type row, measures the allocation against the sold count, and then within a single transaction either lays down the order, its tickets, and the raised count together, or lays down nothing and returns the reason. A read of the remaining count followed by a separate write is exactly the shape to avoid. Nothing but the server may invoke it, so no browser is ever in a position to move that count. Pending orders get a hold window, and a task you also write expires the unpaid ones and returns their stock. Then, in the preview, drive two orders at the last two tickets simultaneously and show me both responses and the resulting counts.

    Checkpoints pay for themselves at this step. Rolling one back offers to bring the database along, which is precisely what you want while every row is a seed you invented, and precisely what deserves a second thought once real orders exist.

  4. 04

    Sign-in, three roles, and rows scoped by organisation

    Nothing hands this database an account id on its own, so the Agent builds both ends of the chain: sessions your server issues, and policies that read the identity your server declares.

    PromptAdd sign-in, roles, and access rules
    Build sign-up, login, logout, and a server-side session on email and password, with one profile row per account. Add a roles table giving each account buyer, staff, or admin (in its own table, never on the account record, since anything there is editable by that user) and a membership table tying accounts to organisations. Then turn on row-level security across organisations, events, performances, ticket types, orders, tickets, and scans: have the server declare the current account, its role, and its organisation as session-local settings at the start of every request, and write the policies to read them: a buyer reaches only their own orders and tickets, staff reach their own organisation’s events and may sell and scan without touching prices or takings, and an admin is confined to their own organisation. Then show me how to prove, signed in as a buyer, that another buyer’s orders and another organisation’s events both come back empty.

    Because no hosted identity service passes an account id down to Postgres, the only thing that knows who is asking is your own server. Get that declaration working before the policies, or they have nothing to read and quietly let everything through.

  5. 05

    The door, on a published URL rather than a preview

    The scanner is the one screen you cannot judge from the workspace. Replit gives you a real address to open on a real phone, which is the whole reason to build the door here rather than last.

    PromptBuild the door
    Build the whole door. Every ticket carries a code that gives away nothing about any other ticket’s code, shown as a QR on a "My tickets" page the buyer can revisit and save from. On top of that, the scanning screen: staff only, using the device camera, sending each code it reads to a server route that both checks it and marks it spent. The answer has to be readable from a phone at arm’s length, and it has four forms: admitted, already used at a stated time on a stated device, belongs to a different event, or was refunded. That decision is the route’s to make and never the device’s, and two copies of one code arriving together must not both be admitted. Then the offline path: keep the event’s valid codes on the device, judge from them when there is no connection, queue what was scanned, settle it on reconnect, and surface anything that turns out to have been admitted more than once. Then a counter till for walk-ups, drawing on the same stock the site sells and taking cash. Every route here has to declare the session-local account, role, and organisation before it queries anything. Miss that and the step 04 policies let everything through.

    Publish before you test this rather than after. A camera needs a secure address, and the published URL is one, which also means you can hand it to somebody else and have them scan a ticket while you watch what the server did.

  6. 06
    Destination

    Refunds, reports, and publishing

    The back office, a full rehearsal, then Publishing, with the hold-expiry task on its own schedule and a careful look at who the app is visible to.

    PromptAdd the back office and publish
    Two things left. Refunding and exchanging are both server routes. Refunding voids that order’s tickets, returns their stock to the allocation, and leaves behind who approved it and on what grounds. Exchanging cancels the tickets the buyer held, issues new ones under new codes, and settles whatever the price difference came to. Then the admin panel across events, orders, payments, and venues, and the reporting: sales by ticket type, money taken, scanned versus sold, and how arrivals spread across the evening, all four as CSV. Then help me run one event from end to end, published through to reported, taking in a counter sale, a scan on a phone, a second attempt at a code already used, and a refund whose stock I can watch come back. When that holds, take me through Publishing: which deployment type suits the app, which suits the task that clears expired holds, and who the app ought to be visible to on day one.

    Ask which deployment type each piece belongs on and expect two different answers. A storefront answering requests and a task that sweeps expired holds on a timer want different shapes, and Replit publishes both from the same workspace.

Authentication & security

Built-in security, role permissions, and fraud protection

Protecting buyer data and ticket validity requires strict server-side security. Here is how your system secures user access, handles permissions, and prevents ticket fraud.

Server-owned user authentication

Sign-in is built into the app rather than delegated to a hosted identity service, so sessions live on your own server, which is also what tells the database whether the account asking for an order is the buyer it belongs to.

Smart role permissions (Buyer, Staff, Admin)

Buyer, staff, and admin. Buyers reach their own orders and nothing else, admins run the organisation, and staff sit in between with exactly the powers the door needs (sell at the counter, scan a code, admit somebody) and none of the powers it does not, like editing prices or reading the takings. That middle role goes to the most people, often the ones you know least well.

Where permission checks run

Replit provisions ordinary Postgres, so the policies behave as Postgres policies always do. The difference is where identity comes from. With no hosted login handing the database an account id, the Agent has your server declare who is asking, in which role, for which organisation, at the start of each request, and writes the policies against those settings. Get that wrong and every policy silently passes.

Organisation-scoped access rules (90 policies)

The template ships 90 row-level security policies, and the count is structural rather than anxious: most tables need one rule for the buyer the row is about, another for the staff working that event, and a third for the admin who owns it, with every one of those also checking which organisation is asking.

Privilege escalation defense

Buyer, staff, and admin live in a roles table of their own, for one specific reason: whatever sits on an account is editable by whoever owns that account. Store the role there and a buyer can promote themselves to admin, at which point your box office, your takings, and every other buyer’s details belong to them too.

Unguessable, single-use QR tickets

Whoever holds it gets in, which makes it exactly as sensitive as a password and rather easier to forward. Generate it from something unguessable rather than from the ticket’s position in a list, redeem it once on the server, and record which device admitted it and when, so a duplicate at the gate is a question you can answer rather than an argument. Put the secret it is signed with in Replit’s Secrets tool, not in the code.

Serve event images through your own server

A poster or a venue photo is a file rather than a row. Serve those through your own server, applying the same organisation rule the tables use, rather than handing out a storage URL that works for anyone who has it.

Automated workspace backups

The Agent checkpoints as it works (files, configuration, and optionally the database) so a bad change is a click back rather than an afternoon. Pro adds a 28-day database rollback on top. Worth having in place before there are several hundred issued tickets you would be in trouble without.

PromptCheck who can see what
Review the access rules (row-level security policies) on every table. For each one, tell me in simple terms who can view, add, edit, and delete records, confirm that people can only reach their own data while the right roles can reach more, and flag anything left open that shouldn’t be.

Paste this into the chat before launch so the Agent checks nobody can see data they shouldn’t.

The one rule that matters: the database connection, the secret your ticket codes are signed with, and any payment or AI provider key you add later never go into the app or a public repo. If one gets out, treat it as compromised and rotate it the same day.

Workflow rules

What speeds the build, and what slows it

Speeds the build

  • One small, specific request per message, checked in the live preview before the next one
  • Letting the Agent provision the database from the chat instead of wiring one up by hand
  • Running two Agent sessions in parallel on unrelated parts of the app, once your plan allows it
  • Rolling back to a checkpoint the moment a change goes wrong, instead of unpicking it by hand
  • Reviewing what Publishing changed, meaning the domain, who can reach the app, and the machine it runs on, before the first release

Slows the build

  • Asking for the whole app in one message instead of one piece at a time
  • Building screens for data that isn’t in the database yet
  • Running unrelated Agent sessions against the same files at the same time
  • Letting several risky changes stack up before checking whether any of them actually broke something
  • Publishing without checking who the app is visible to first
Keeping a safe copy

Connecting GitHub (Optional)

Every change in Replit is saved automatically without any technical setup. Checkpoints are the day-to-day undo. You only need to link GitHub if you want a private copy under your own control or plan to hand the codebase over to external developers.

Every milestone is already saved

Replit’s Agent creates a checkpoint automatically at key points as it works: a full snapshot of the files, the configuration, and even the AI conversation itself, not just the code.

Checkpoints and rollbacks, Replit docs

Rolling back restores the whole workspace

One click returns your project to an earlier checkpoint (files and configuration together, and optionally the database), which is broader than a typical code-only undo, so a rollback after real data has changed is worth a second look before you confirm it.

GitHub keeps a copy outside Replit

Connect a repository from the Git pane, free on every plan, and stage, commit, and push changes back to GitHub with a click, or pull in anything changed outside Replit.

Using the Git pane, Replit docs

It’s also how an existing project gets in

Point Replit at a public repository’s URL for a fast import, or use the guided import for a private one. Either way, Replit detects the stack and installs everything on its own.

Import from a provider, Replit docs

You rarely type git commands

The Git pane’s buttons cover staging, committing, and pushing. If you’d rather type them yourself, the workspace Shell stays in sync with whatever the pane just did.

Going live

Going live without external hosting

Skip third-party hosting and external database setup. Your database, backend, and domain live in the same Replit workspace: just click Publish to go live.

HostBest forNotesFree tier
AutoscaleThe app itselfGrows with traffic and shrinks back when nobody is buying, which suits this app’s rhythm exactly: a month of near-silence, then an on-sale that arrives inside ninety seconds. This is the one to publish the storefront, the box office, and the scanner on.Metered - billed with your plan
ScheduledReleasing expired holdsRuns on a timer instead of answering requests, the right shape for the sweep that finds pending orders past their hold window and returns their stock. Publish it separately from the app, and keep it safe to run twice.Metered - billed with your plan
Reserved VMNo cold start at the doorDedicated compute that never sleeps. Worth considering for one specific reason here: a scanner waiting on a cold start is a queue, and event nights are exactly when the app has been idle for weeks beforehand.By machine size - billed with your plan
StaticNot this appFiles only, with no server behind them. Listed to rule out: the order transaction, the redemption check, and the access rules all need a server, so nothing in this build fits here.Metered - billed with your plan

All four are Replit rather than a third party, so the choice is shape rather than vendor, and this build wants two of them: Autoscale for the app, Scheduled for the hold sweep. Review who the app is visible to before the first release, since Publishing is what sets it, and remember that a published app is what your scanner needs: a camera only opens on a secure address, so the door gets tested on the published URL, on a real phone, never in the workspace preview.

Database & backend

Your database is already part of the workspace

Nothing to connect. What lands in it is rows rather than files (events, orders, tickets, and scans), so the included allowance goes a long way here.

ServiceBest forNotesFree tier
Replit PostgresData, built inManaged Postgres with 20GB included free, provisioned from the same chat that builds the app. Even a busy year of events is small data by any measure. The only thing that grows meaningfully is whatever event images you attach, and those belong in object storage rather than in a table.Free to start · 20GB included
AI workflows

Where AI genuinely helps an organiser

Each of these is one more prompt once the selling works. The template carries no outside keys, so the first one also creates the single server-side function the other three go through, with your key on it alone.

Write the event listing from the facts you already have

The description is the last thing done before an on-sale and usually the most rushed. Turning a date, a venue, a line-up, and three bullet points into a listing that reads properly is an edit rather than a writing task.

PromptWrite the event listing from the facts you already have
Add a "Draft the listing" action on the event form. Send the event name, date, door time, venue, ticket types with their prices, and any notes I have typed to a server-side function calling an AI model, and return a short summary line and a longer description in a tone I choose. Show them as editable drafts rather than saving them, never invent a detail I did not provide (no line-ups, no times, no claims about the venue) and leave anything it was not given blank instead of guessing.

Answer the questions your inbox keeps getting

Every event generates the same messages: is it accessible, can I bring a child, where do I park, what happens if it rains. Answering them from what you have already published is the least interesting hour of running an event.

PromptAnswer the questions your inbox keeps getting
Add a question box on the public event page that answers from that event’s own published details and my organisation’s standing information only, through my ai function. Retrieve the relevant text first and pass it in, keep the answer to what is in that text, and when there is no answer say so and offer the contact route rather than guessing. Never let it state a policy on refunds, entry, or accessibility that is not written in the source it was given.

Explain what actually happened at the door

Attendance against sales is the number that decides how much to print, how many staff to book, and how many to order for next time. It is buried across orders, tickets, and scans in three different shapes.

PromptExplain what actually happened at the door
Add a post-event summary that sends the aggregate figures for one event (tickets sold by type, revenue, how many were scanned in, when the arrivals happened across the evening, refunds and exchanges) to my ai function, and returns a short written read of it: how the sale went, what turnout looked like against what sold, and where the arrival peak fell. Send aggregate numbers only, never attendee names or email addresses, and have it state the figures rather than describing them vaguely.

Ask your own sales a question nobody built a report for

Whatever reporting you build answers the questions you had while building it. The questions that turn up later are things like which tier sold out first, whether March’s crowd came back in June, or which night people bought latest.

PromptAsk your own sales a question nobody built a report for
Put a question box on the admin dashboard that converts a plain-language question about my events into a single read-only lookup and renders the answer as a small exportable table. Constraints, all of them enforced rather than requested: describe the tables to the model instead of sending it any rows, permit SELECT and nothing else, run the query under the signed-in account so the same access rules that govern the rest of the app govern this too, exclude attendee names and email addresses from anything it returns, and print the query beside the answer so I can see what it actually asked.

A cheap model is plenty for most of the prompts above. Save Pro’s stronger models for the one or two spots where the extra reasoning actually pays for itself. Add any provider key through Replit’s own Secrets tool rather than hard-coding it, and keep every AI feature behind one server-side function so a single key covers the whole app.

Ready-made option

Get a head start with our template

Don’t want to assemble the app step-by-step? Get the complete, fully-functional template. Connect your database, add your event details, and start selling tickets in an afternoon, no manual coding required.

Event Ticketing System

The exact ticketing platform this guide builds, packaged so you can open it, point it at your own backend, and make it yours from there. An event ticketing platform that takes you from selling tickets online to scanning people in at the door. Attendees buy in a few taps, your staff sell and check in on the day, and you keep an eye on orders and payments behind the scenes.

React 18ViteTypeScriptTailwind CSSSupabase
Out of the box

The key benefits of starting with a template

Skip weeks of backend coding, complex security tests, and edge-case debugging. Launch a complete, custom ticketing platform in under an hour.

Building the core from scratch

~122 hrs

Opening the template, already built

~1 hr

~121 hrs of building you skip

These measure two different things on purpose. The ~122 hrs is the cost of building the app. The ~1 hr is how long the finished one takes to open, aim at your own database, and load your first event into. Wiring up a payment rail and deciding your refund rules cost the same on both paths, so neither figure includes them.

A checkout that already holds stock

Ticket types carry what exists and what has gone, with a cap per order, and the order path moves both together rather than reading one and trusting it, which is the difference between a busy on-sale and an apology to the last four buyers.

Turnkey entrance & scanner toolkit

A camera scanner that admits a code once and refuses it the second time, a queue that holds scans when the signal drops and reconciles them when it returns, a counter till for walk-ups on the same stock as the website, and a maintenance job for when a barcode goes wrong at the worst moment.

Pre-configured roles & security

Buyer, staff, and admin accounts with 90 row-level security policies behind them, every one also checking which organisation is asking, plus 13 server-side functions for the rules that have to outrank the person asking, like refunding an order or admitting somebody at the gate.

Clean code optimized for AI prompts

Typed throughout, organised by feature rather than by file kind, and annotated wherever the reasoning would not be obvious to somebody reading it cold. That last part matters most around the order path: a change made there without following the pattern already in place produces the sort of bug that surfaces at a sold-out door, not in a test run.

Customer story

From founders who build on our templates

Starting with this template saved us dozens of hours of complex setup. Instead of building from scratch, I loaded the template into our AI assistant, customized the ticketing rules with simple prompts, and shipped a live platform in under several days.
Jeevan ThomasJeevan ThomasFounder & CEO, Hado.ai
Got questions?

Common questions

Not on its own. The template records orders and tracks their payment status, but the payment itself is simulated rather than real. No gateway is wired up, and no processor key sits anywhere in it. Connecting one is a described step rather than a rebuild, and doing it deliberately is the point: whichever rail you pick sets the fee on every ticket you sell, and that is the number this whole approach is about controlling.

No. Tables, sessions, access rules, the server routes behind them, and the sweep that releases expired holds all get written from plain-language prompts, and the Postgres they write into is created inside this workspace when you ask. Nothing needs opening anywhere else first.

The database, if you ask for it properly. The rule to insist on is that reserving stock and creating the order happen in one operation that cannot be interrupted, rather than a screen reading the remaining count and writing an order a moment later. Ask to see it proved with two orders landing at the same instant on the last ticket, a demonstration, not a description, because this is the bug that only appears when the event is going well.

It can, and this is worth specifying before it is built rather than after. The pattern is that the device holds the list of valid codes for that event, admits against what it already knows, queues each scan locally, and reconciles when signal returns. What you decide is how it should behave in the gap. Most organisers would rather admit a genuine attendee and catch a duplicate on reconciliation than hold up a queue, but that is a policy call and the code should reflect the one you actually made.

Not without building it. This template sells general admission: each ticket type has a number and buyers take from it. Reserved seating is a genuinely different application: a plan of the room, a hold on individual seats while somebody checks out, and a picker that stays usable on a phone. It is describable in plain words like anything else here, but it belongs in the plan before the data model rather than as an addition afterwards.

Not as it stands. Orders and tickets are shown in the app, and a buyer with an account can always come back and find theirs, which covers the common case of a lost email. Sending confirmations means connecting an email service, which is a small, well-defined addition, and one worth making before a real on-sale, because a ticket somebody can only reach by signing in is a support message waiting to happen.

Your Replit plan, plus what you publish. Core starts at $25/month, or $20/month billed annually, and includes 20GB of Postgres, far more than events, orders, and tickets need. Publishing is billed separately on top, and this build publishes twice: the app itself, and the sweep that releases expired holds as its own Scheduled deployment. Beyond that, your only per-ticket cost is whatever payment rail you connect.

Yes. That is built in rather than bolted on. Events, orders, and staff all belong to an organisation, and the access rules check which one is asking on top of checking the role, so a promoter running three rooms or an agency running events for several clients keeps them properly separate rather than filtered apart on screen.

Nothing here is proprietary. Replit provisions ordinary PostgreSQL, so a standard dump gives you everything (events, orders, tickets, and check-in records) in a form any Postgres host accepts. That matters more than usual in this category: the buyer list is the asset, and the reason organisers stay on platforms they have outgrown is normally that the list will not come out.

Yes. The replit.app subdomain it starts on can be replaced with your own through Publishing, HTTPS included. Do it before you announce anything: you are asking people to enter card details somewhere, and a name that is recognisably yours does a lot of that work for you. The HTTPS part is not cosmetic either. The check-in scanner cannot open a camera without it.

No. You describe what you want in the chat, and the Agent handles the rest: the code, the database, and a live version of the app right there in the workspace. The setup section above covers the account and plan you need first.

Replit hosts it. Publishing takes the same project live on a Replit domain, or your own if you connect one, with monitoring and access controls included, so you never open a separate hosting account.

Starter’s daily credits and a paid plan’s monthly grant both refill on their own schedule. Hitting either limit mid-build doesn’t touch what you’ve already made. Move up a plan for more headroom right away, or wait it out.

References

Sources checked August 2026
  1. 01Tickets for Live Entertainment Events (CRS report R48179, April 2026 update). everycrsreport.com (CRS report updated April 2026)
  2. 02Event Ticket Sales: Market Characteristics and Consumer Protection Issues, U.S. GAO. gao.gov (published 2018)
  3. 03Pricing (service fee and payment processing per ticket), Eventbrite. eventbrite.com
  4. 04Pricing (per-ticket fee, free events, Stripe option), Universe. universe.com
  5. 05Pricing (flat per-ticket fee, low-price and box office rates), TicketSpice. ticketspice.com
  6. 06Pricing (booking fee, charity rate, free events), Humanitix. humanitix.com
  7. 07Pricing (Pro plan, egress, backups, free-tier pause), Supabase. supabase.com
  8. 08Web developer hourly rates 2026 (freelance and agency benchmarks). developex.com
  9. 09Pricing (Starter, Core, Pro), Replit. replit.com
  10. 10Built-in database, Replit docs. docs.replit.com
  11. 11Publishing overview, Replit docs. docs.replit.com
  12. 12Deployment types, Replit docs. docs.replit.com
  13. 13Checkpoints and rollbacks, Replit docs. docs.replit.com
  14. 14Using the Git pane, Replit docs. docs.replit.com
  15. 15Import from a provider, Replit docs. docs.replit.com
  16. 16Secrets, Replit docs. docs.replit.com

This guide is general information, not legal, tax, or accounting advice. Consumer rules on how ticket prices and fees must be displayed, what refunds are owed when an event is cancelled, and how attendee data may be used vary by country and by state, so check your own rules before you sell anything. Third-party fees, plan terms, and market rates are quoted from the sources above and were last checked on the date shown. Vendors change them without notice, so confirm before you budget. Build hours and the cost estimates derived from them are our own estimates, not quotes. Replit is a product of Replit, Inc. Verify current capabilities and pricing before relying on them.