Skip to content
Sean Marroquin
Esc
  • HomePage
  • WorkPage
  • AboutPage
  • Start a projectPage
  • How this site is builtPage
  • BlogPage
  • DownloadsPage
  • Client PortalClients
  • TerraLoopCase study
  • ListoCase study
  • The Listening RoomCase study
  • PasslineCase study
  • AccuBetsCase study
  • How this site is builtPost
  • Why every client gets a portalPost
  • Switch between light and darkAction
  • Copy my email addressAction
  • PWNTT ArcadePlay
  • Play The Deploy TrailPlay
  • Play Merge ConflictPlay

Use the arrow keys to move and Enter to open.

All work

Listo

A bilingual lists-and-notes app that works offline first. Say a list out loud and it is ready to use; switch the AI off and everything else still works.

  • Local-first: no account, no network, and no server needed for any manual feature.
  • English and Spanish throughout, with key parity enforced at compile time.
  • The AI drafts; the person reviews. Nothing is saved until they tap Save.
  • The same code runs on iOS, Android, and in the browser on a real SQLite database.

The idea

Say it. Save it. Use it. (Dilo. Guárdalo. Úsalo.) Most list apps either stay simple or bolt AI onto everything and stop working without a connection. Listo takes the opposite position: lists and notes always work, on the device, with no account. AI makes input much faster, but it is never something the app depends on.

What I built

A cross-platform app with Expo and React Native, plus a small AI service:

  • Lists that do real work. Quantities, prices and budgets, drag reordering, group by store aisle from a built-in English and Spanish dictionary, suggestions from your own history, templates, recurring lists that reset on a schedule, and reminders.
  • Notes, Spaces, search, and an archive. Coloured folders, full-text search with accent folding, and nothing deleted by accident.
  • Voice lists and an AI planner. Speak a list, or describe a recipe, trip, or project, paste a recipe link, or snap a photo of a recipe card. Listo drafts the list with quantities and price estimates, and you review and edit it before anything is written.
  • Shared lists with live collaboration, presence, and who checked what, synced through Supabase when you choose to use it.
  • An installable web app that keeps working offline once loaded.

How it works

The device is the source of truth. Everything lives in a local SQLite database: a file in the app's sandbox on a phone, and the browser's private file system (OPFS) on the web. The web build is not a cut-down preview. Migrations run in order inside an exclusive transaction, and a database written by a newer build is refused rather than corrupted.

The model never touches your data directly. The OpenAI key lives only on the server. A recording is transcribed and turned into structured JSON there, validated against a schema, validated again in the app, de-duplicated, and shown as a draft. Only Save writes to the database.

Limits are enforced where they cannot be bypassed. Every AI feature costs money per use, so the allowance is counted on the server against a signed install credential and checked against the RevenueCat entitlement, with per-network registration limits and a global daily ceiling on free trials. The app draws an honest meter; the server has the final word.

Sync was tested before it was trusted. A simulation of two devices editing the same lists found two ways they could end up disagreeing: an older delete beating a newer edit, and two edits in the same millisecond. Both were fixed on the server and in the client before shared lists went on.

Where it stands

Listo is in testing on iOS and Android.