StartupClosedTechnical founder & sole developer
Boletapp
Anti-fraud ticketing for nightlife and concerts in Colombia.
Replica of the boletapp.co hero
Noche PacíficaPerreo Neón Vol. 4
The screenshot gets in twice
At a club door, the ticket is usually just an image. Someone screenshots it and sends it over WhatsApp; whoever arrives first gets in, and the second person starts an argument in the line. The venue doesn't even know how many real tickets it sold.
Commissions nobody can reconcile
Promoters sell through their own network and earn a commission. Without a link that leaves a trail, the numbers get done from memory on Tuesday and end in an argument.
The table nobody pays for
Tables get booked over chat. If nobody shows up, the venue is left with an empty table and nothing to show for the night.
Fan webDiscover, buy, pay
Fan appThe ticket lives on the phone
Dashboard and Pro appSales, capacity, promoters, finance
The doorScanner with no signal
Boletapp in one sentence
A ticketing and access-control platform for nightlife and concerts in Colombia: the fan buys, the ticket lives on their phone, the door validates it and the organizer sees everything live.
Fully white-label
The fan buys on the venue's own page, with its logo and colors. Boletapp doesn't appear anywhere: the relationship with the audience belongs to the organizer.
Four surfaces, one backend
The fan web, the fan app, the dashboard with its Pro app and the door all talk to the same API and the same database.
Discover and choose
Posters, dates, ticket types and tables, designed phone-first, because that is where people buy.
Paying the way Colombia pays
Card, PSE and Nequi in the same checkout. It asks for the minimum that event needs: name, email and phone.
The ticket just arrives
To the inbox and the app, ready for the door. Nothing to install to buy.
Noche PacíficaNoche de Clave
Live code · changes in 10s
A QR that won't sit still
Every ticket carries an HMAC-based rotating QR: the code changes every few seconds and only the ticket holder's phone knows how to produce it.
Works with no data
The code is generated on the phone, offline. In a club line, signal is the first thing to go.
The screenshot expires
Try it: take a screenshot and wait. By the time it reaches another phone over WhatsApp, that code no longer opens the door.
Door 1 · Noche de ClaveOnline · up to date
AdmitGEN-4821 · General
1 inside
- Admit
- Already in
- Not valid
Offline-first
The doorman scans from any phone's browser. If the signal drops, the phone keeps validating on its own; try the switch.
Several doors at once
Each door validates on its own. When signal comes back the reads reconcile, and a ticket gets in exactly once, even if it was shown at two doors.
Three answers
Admit, Already in or Not valid. Nothing to interpret at two in the morning.
Demo data
COP 173,855,000Revenue · 90 days
2,253Tickets
1,370Check-ins
517 / 2,850Live capacity
What the organizer watches
Sales by ticket type and live capacity, on the night and in the days before.
Promoters with a link and a commission
Each promoter sells with their own link and every sale stays tied to them, commission included. No more Tuesday spreadsheet.
Customers, finance and floor plans
A customer base with consent, event finance, the venue-branded page and an editor to draw the venue and its tables.
Ask your own data
An assistant inside the dashboard that answers from the organizer's own data: how much sold, which promoter is performing, how capacity is going.
Tables and charts
It answers with tables and charts when a number alone won't do, on the web and in the Pro app.
Nothing without a yes
It can propose changes, but it executes nothing until the organizer confirms.
App StoreGoogle PlayApproved
On the App Store

Expo and React Native
One codebase, two store apps: Boletapp for the fan (the ticket and the events) and Boletapp Pro for the team (the door, the live dashboard and promoters).
Inside the monorepo
The apps live next to the web and the API, and share types and the QR engine with the web.
Published
Both passed App Store and Google Play review.
Vercel + Next.js
The web and a BFF: the browser never talks to the API directly.
Cloud Run + FastAPI
A modular monolith split by domain: one deployment, clear boundaries between modules.
Cloud SQL + PostgreSQL with RLS
Each organization only sees its own rows, and the database guarantees it, not the code's good memory.
Keys, files and third parties
Sensitive keys live in Cloud KMS and files in Cloud Storage. Payments, email, SMS and Boletabot's LLM are providers behind the API; GitHub Actions runs the tests and deploys.
≈ 370,000lines of code (Python, TypeScript, SQL)
545commits in 5 months
95database migrations
20+domain modules in the backend
1,700+Python tests
275TypeScript test files
96web pages
199BFF routes
80app screens
2store apps from one codebase
- Jun 2026First commit
- Jul 2026In production
- iOS · AndroidApps approved on the App Store and Google Play
- Nov 2026Company closed
Where it ended up
In production from July to November 2026, with apps approved on the App Store and Google Play. I closed the company in November 2026.
What I learned
- One person can build it end to end: web, apps, backend, payments and infrastructure.
- A B2B product doesn't take off without someone out on the street selling it every day.
- Running real payments in production changes how you write every line.
The code is kept
The repository is private and kept, ready to pick back up.
Tech stack
Next.jsTypeScriptReact Native/ExpoFastAPIPostgreSQL + RLSCloud RunCloud SQLCloud KMSBigQueryWompiExpo EASResendTwilioTurborepo











