Loading
Imagem principal do projeto Vira

Product Design & Full-Stack | Vira Entretenimento

Vira

Year

2026

Role

Co-founder · Product & Engineering

Duration

Aug to Oct 2026 · 6 weeks to the first sale

Team

4 co-founders · I own product and code

Tools

Next.js · Prisma + Postgres · Mercado Pago · Claude Code

View Project

The problem

Vira is an events company that wanted to sell tickets, run the door and, later, on-site spending without depending on a third-party platform. That means handling real money: Pix, installment card payments, chargebacks, producer payouts, Brazil's half-price ticket law, the right to withdraw and LGPD.

My role

Co-founder leading product and technology: business rules, design, code, infrastructure, and the documentation my partners use to run it on their own.

The outcome

Live at viraentretenimento.com.br, with Mercado Pago in production, a real-money dry run passed and the first paid event on sale, six weeks after the first commit.

Overview

Vira's in-house ticketing platform: a public event storefront, an in-page checkout with Pix and cards in up to 12 installments, a passwordless buyer account, a back office where my partners publish events and track sales and payouts, phone-based door control, and an internal handbook generated from the repository itself. Built with Next.js, Prisma and Postgres on a server in Brazil, with Mercado Pago behind an interface that lets us swap gateways without touching business rules.

The problem

Small events companies usually sell tickets through a third-party platform. The audience becomes the platform's customer, the buying experience is the platform's, and the company has no say over fees, payout timing or what happens at the door. Vira wanted the opposite: its own product bringing together ticketing, door control and, in a second phase, on-site spending.

The challenge wasn't building a checkout screen. It was handling other people's money safely from day one: Pix and installment cards, chargebacks, producer payouts on a set schedule, the legally required 40% half-price quota, a seven-day right to withdraw and separate LGPD consent. And doing it in time for the first paid event, on a team of four co-founders where I'm the only one who codes.

The public storefront at viraentretenimento.com.br, on desktop and mobile. Events, dates and sale status come from the system; nothing shows up just because it's written on the page.
The public storefront at viraentretenimento.com.br, on desktop and mobile. Events, dates and sale status come from the system; nothing shows up just because it's written on the page.
6weeks, from first commit to the first paid event on sale
159pull requests merged, with tests running in CI
423automated tests against a real database

Decisions that came before the code

01
Who holds the money

For tickets, Vira collects and pays the producer out: without holding the money there's no way to cover chargebacks. For on-site spending, balances stay with a licensed institution, never with Vira. Each sale's split is recorded at the moment of charging.

02
Fee frozen at sale time

The fee is negotiated per event and recorded on each ticket, like the price. Negotiating a different rate tomorrow never rewrites what someone already paid.

03
Pix first

Pix costs a fraction of a card payment. It comes first and pre-selected; cards are still there, in full or up to 12 installments, without the spotlight.

04
The law becomes a system rule

The 40% half-price quota and the 60+ quota are calculated automatically for every batch. The fire department's capacity is a hard sales limit. A ticket already used at the door can't be refunded.

05
Separate consent

Accepting the terms, getting news and sharing data with sponsors are three separate checkboxes. The third can be declined at no cost.

06
Address after purchase

For house parties, the storefront and checkout show only the city. The full address goes on the ticket and in the buyer's email.

Buying without leaving the storefront

Checkout opens in a modal over the storefront, with the system's own checkout page inside. Pix, cards and terms acceptance live in one place, with no duplicated payment code. Closing the modal loses nothing: if you close it mid-Pix and reopen, you're back on the same QR code. To make this safe, the system now refuses to be framed by any other site; only the checkout page accepts the storefront.

The buyer account is optional and passwordless: the account is the email, access is by one-time code and lasts 30 days on the device. It groups every CPF bought under that email, like a family, and shows valid tickets and purchase history.

The total including the fee shown up front, three separate consents and Pix pre-selected. Cards split into up to 12 installments, with interest shown by Mercado Pago itself.
The total including the fee shown up front, three separate consents and Pix pre-selected. Cards split into up to 12 installments, with interest shown by Mercado Pago itself.

My partners operate without asking the developer

Each partner owns an area: operations, sales and finance. The back office was designed so none of them needs me day to day. They create events and ticket batches, publish to the storefront, write the copy, pick the cover and see the result in a live preview before saving. Finance tracks what came in, what went back and payouts per event, with each installment's date calculated in business days and a spreadsheet for reconciliation.

Cancelling a ticket refunds through Mercado Pago automatically, with the right rule: on a buyer's withdrawal the fee is kept; if the event is cancelled, the refund is full and the fee comes out of the producer's share.

Sales and payouts for a demo event, next to the storefront controls. The 90% payout in one business day and 10% after the event is calculated by the system.
Sales and payouts for a demo event, next to the storefront controls. The 90% payout in one business day and 10% after the event is calculated by the system.
Preview on storefront: the real site in a frame inside the back office, updated with every keystroke, labelled as not yet published.
Preview on storefront: the real site in a frame inside the back office, updated with every keystroke, labelled as not yet published.

At the door

Door control runs on the staff member's phone. The device opens a shift with an event pass, with no password typed at the line, reads the QR code with the camera and answers in solid color, readable from a meter away. Never color alone: approved shows the name, denied shows the reason, and check asks for the half-price or 60+ document. Every entry is recorded under the shift that scanned it.

The door's three answers. The screen was designed for the light and rush of a line, not an office.
The door's three answers. The screen was designed for the light and rush of a line, not an office.

Documentation that doesn't go stale

With four co-founders making decisions, the risk was decisions getting lost in WhatsApp threads. I set up a password-protected internal handbook built from the repository itself on every deploy: decisions made and pending, back office and door manuals, business rules and the status of every feature.

Journeys are drawn as swimlanes per actor, from buyer to payment gateway, with each step's status: working, in rehearsal or still to build. They come from data files, and CI checks that every step marked as done points to code that exists. The page that says what works can't lie without breaking the build. For people who learn by watching, I generated short videos per partner, with Blender and GSAP, covering each flow.

Swimlane journeys and product status, generated from the same files. The last column says what can already be promised to clients and in marketing.
Swimlane journeys and product status, generated from the same files. The last column says what can already be promised to clients and in marketing.

Engineering that protects the money

  • Amounts always in integer cents, and balances as the sum of movements in an append-only ledger: corrections are new adjustment entries, never edits to the past.
  • The payment gateway sits behind an interface: Mercado Pago (Orders API) went to production without touching any service, and a simulated mode keeps serving the tests.
  • I migrated from Vercel to a server in Brazil, with database and app on the same machine, scripted deploys and an external watchdog on GitHub Actions that alerts if the site goes down.
  • Project rules became automated gates in CI, and a hook blocks merges with red or pending tests.
  • Every action that touches money or tickets is logged under who did it, with an authenticated session; never a typed-in name.

How I worked with AI

I built Vira with Claude Code as an engineering partner. The split was clear: I define the product, the business rules and what ships or waits; the AI writes, tests and documents, always through pull requests, with CI as the judge. What made it work was turning decisions into things that can be checked: a rule you can verify by reading the code becomes a CI gate, and a partners' decision becomes a handbook entry in the same PR that changes the screen. That way speed didn't cost trust, in a product that handles money.

Outcome

In six weeks Vira went from first commit to a live ticketing platform on its own domain. Mercado Pago went to production on September 30, and the real-money dry run passed: Pix, full and installment card payments, payment notification and automatic refunds. The first paid event is on sale on the storefront, and my partners publish and track events without going through me.

The next steps are in the handbook itself, marked as still to build: door control that keeps working offline, cashless spending inside the event, and pre-filled checkout for account holders.