Skip to content
← All projects

Personal project · micro-SaaS · 2026

Serpentina

Air-conditioning quotes the customer approves on the phone, with a Pix deposit.

private code
My role
Product, design and code
Lighthouse desktop
100
heat load
BTU/h
deposit BR Code
Pix
Serpentina home page with the quote demo

Problem

Air-conditioning installers quote on paper or WhatsApp, size the units by rule of thumb and lose sales because they cannot tell who saw the proposal and who went cold.

My role

Personal project: product, design, code and tests.

Solution

  • Per-room heat-load calculator (BTU/h) used on site.
  • Quote with the installer’s own prices, sent as a link; the customer approves with their name and sees the deposit Pix code (BR Code) made with the installer’s key.
  • Dashboard showing who opened, who stalled and which maintenance visits are due.

How it was built

Next.js 16 (App Router), React 19, strict TypeScript, Tailwind 4, shadcn/ui-style components, Auth.js, Drizzle + Postgres (PGlite in demo mode), Stripe Billing with an idempotent webhook, Resend, Zod, Vitest and Playwright.

Results

Runs end to end in demo mode with pnpm dev, no keys needed. Lighthouse 100 on desktop and an end-to-end test from sign-up to approval and plan upgrade. It is a demo: no server is deployed.

Stack

  • Next.js 16
  • React 19
  • Drizzle
  • Postgres
  • Auth.js
  • Stripe
  • Playwright
Installer dashboard with quotes and status
Installer dashboard
Approval link opened on the customer’s phone
Approval link on the phone

Next case study

Onepage →

One-page site for small businesses generated from a single JSON file, in PT or EN.