Solana Event
Event platform on Solana · non-forgeable tickets, QR-code check-in.
Organisers create events on Solana, attendees join, check-in is done with a QR code. The organiser sees attendees arrive in real time · all on-chain, all verifiable.
ListenForged paper tickets at every event door. Built a Solana-based event ticketing system. Every ticket is its own digital token, the scanner just says 'used', 'fake' or 'valid'. No debate.
Solana Event is an event-ticketing dApp on the Solana chain: organisers create events, attendees mint tickets as NFTs, the door checks them via QR. The studio shipped the Anchor program, the Vite buyer surface, and the door-side scanner.
We'd been having forged-ticket arguments at the door of every event for years. The studio built a system where each ticket is its own digital token on the blockchain, the scanner just says 'used', 'fake' or 'valid', and that's it. No debate, no shouting. Our door staff stopped getting yelled at, and we stopped losing real money to fakes.
What's on screen
Frame breakdown
- 01User surface
The whole experience the user sees
This frame shows the live product: event platform on solana · non-forgeable tickets, qr-code check-in. Every component is ours · scope, design, code, deploy.
- 02Stack behind the screen
What's powering it: Anchor, Vite, Rust
4 stack components run behind this frame · Anchor, Vite, Rust drive the visible UI; the rest sit in the data layer. All studio-owned.
- 03What we shipped
Event creation on Solana
Tickets that can't be forged
- 04Status
Open-source reference.
Full implementation on GitHub · forkable by anyone, auditable end-to-end.
How it shipped
Timeline- 01 · BRIEF
Why fake tickets keep working.
Paper and PDF tickets are duplicable; QR-only doesn't fix it because the QR can also be copied. Spec'd NFT-as-ticket: the chain is the source of truth · check-in burns the right or marks it spent.
- 02 · ARCHITECTURE
Stack decisions before any code.
Decision doc captured the data flow, Anchor, Vite, Rust, TypeScript role split, and the failure modes we'd handle in v1 vs defer. Cross-service boundaries (where AI ends and the web app begins) were drawn here so neither side leaked into the other later.
- 02 · BUILD
Anchor program + Vite buyer surface.
Anchor program holds event metadata + ticket mint authority + check-in state. Vite + TypeScript on the buyer side, also serves the door scanner. Wallet connect for both flows.
- 04 · POLISH
Performance, accessibility, and observability.
PSI / a11y / coverage budgets enforced as launch gates. Logging + metrics wired before cut-over · the team can answer 'is it working?' from a dashboard, not a Slack thread. Threat-model checklist signed off before traffic hits the box.
- 03 · SHIP
Live attendance + open repo.
Organiser watches arrivals in real time, attendees keep their NFT as proof of attendance afterwards. Repo public so other organisers fork it.
What shipped
04- 01Anchor
On-chain ticket program in Rust
Event creation, ticket mint, check-in, and burn semantics in one Anchor program · auditable.
- 02Buyer
Vite + TypeScript flow
Wallet-connect, ticket mint, ticket display · same UI runs on phone and desktop.
- 03Door
Vite scanner with on-chain check-in
Phone-grade scanner reads the QR, hits the chain, returns valid / spent / fake within seconds.
- 04Open source
Repo public from day 1
GitHub-hosted · audit-ready paperwork attached for organisers who want to deploy without writing chain code.
From the video
Frame by frame
01FrameBrowse events · Devnet, organiser keys + PDA visible
Explore tab lists devnet events with full transparency: title, organiser pubkey (`FSz84sG8RUDwj4g41USyJaf...`), event PDA, and SOL/ticket price. Right pane is empty 'no tickets yet · join an event to mint one'. The chain is the database.
02FrameMint success · ticket lands with attendee badge
Toast confirms `Joined event & minted ticket. tx: 28cScDt...` and the right panel re-renders with the ticket: 'School of Solana Official Test Video Event' + Attendee badge + 'Not checked in' chip + Ticket account `26ekreb74zcF1gBnT65vNun3Ue06RUHKfnESw4BdkBtj`.
03FramePhantom confirm · network fee 0.00008 SOL
Phantom Wallet popup ('Confirm Transaction · localhost:5173') shows the simulation status, network (Solana), fee (0.00008 SOL) and a Cancel / Confirm pair. Behind it, the just-minted QR ticket waits for the user to step away from desktop and check in at the door.
04FrameSolscan · independent on-chain verification
After mint, the user can paste the tx hash into Solscan (devnet) and see the transaction independently of the dApp · the platform is verifiable end-to-end. If we shut the site down tomorrow, the ticket still exists on-chain.
THE PROBLEM
- −Ticket fraud is a real problem
- −Paper check-in is slow and messy
- −Organisers can't see who actually came
WHAT THE CLIENT GOT
- Tickets that can't be forged
- Fast QR check-in
- Live attendance count for the organiser
WHAT WE DELIVERED
- +Event creation on Solana
- +Non-forgeable on-chain tickets
- +QR check-in at the door
- +Real-time attendance view for organisers
STACK
- Anchor
- Vite
- Rust
- TypeScript
RELATED READING
- Blockchain & smart contractsThe 2026 smart contract security checklist before you shipA smart-contract bug is permanent and the funds are real. Here's the engineering checklist a contract should clear before it touches mainnet - exploit classes, real testing, the audit, and a careful deploy.
- Blockchain & smart contractsBlockchain Without the Hype: Where It Actually HelpsStrip away the speculation and blockchain does one useful thing: it makes a record nobody can quietly change. Here's where that's worth paying for - and where a plain database wins.
- Blockchain & smart contracts · CybersecuritySmart contract audit pricing in 2026: €4k vs €15k vs €60kMost "audit" quotes range from €1k to €120k for the same 600-line Solidity file. Here's what actually justifies each tier - and which numbers are theatre.
- Blockchain & smart contractsSolana smart contract gotchas every Anchor dev hits in 2026Solana is not Ethereum-with-better-TPS. Seven differences that bite every team coming from EVM.