All work
Production2026 — present

Tributo — Tax clarity for the self-employed

A mobile-first tax operating system for the self-employed and micro-businesses in Uruguay, then LATAM. From a few plain questions it builds a personalized yearly tax calendar across DGI and BPS — with due dates, estimated amounts, and reminders — and never invents a figure. Live in beta; built solo by directing AI agents.

Visit live

Role
Solo founder-engineer
Stack
TypeScript · Next.js · tRPC · Zod · PostgreSQL · Prisma · Trigger.dev · Better Auth · Railway
Period
2026 — present

The problem

Tax for the self-employed in Uruguay is fragmented and full of anxiety. A unipersonal (sole trader) has many obligations across the year, split between two agencies — DGI (the national tax office) and BPS (social security) — whose dates and amounts depend on the regime, the obligation type, and sometimes the taxpayer's own data. People get by on accountants, PDFs, memory, and WhatsApp messages, and the cost of a slip is concrete: missed deadlines, penalties, daily surcharges, and a knot of dread before every due date.

Existing local tools mostly solve transactions — e-invoice issuance, accounting services, ERPs. None of them solve comprehension. Tributo is built for exactly that, around one concrete question:

What do I need to pay, when is it due, and how much should I expect?

What the product does

From a few plain-language questions about your situation — no picking regimes, no learning tax codes — Tributo builds a personalized yearly tax calendar: every obligation across DGI and BPS, with due dates, estimated amounts, the next payment, and a risk status, plus email reminders before each deadline.

Its defining principle is honesty. Every figure is one of three kinds, always labeled: exact (a fixed value it is confident in), estimated (computed from what you bill, flagged with a "~"), or reminder only (no amount, when the data to compute it isn't there). The red line: when it can't calculate a case precisely, it says so rather than invent a number. And every amount opens up to a step-by-step calculation and a link to the official DGI or BPS source — trust built by showing, not hiding.

It is built for two worlds: local freelancers (monotributistas, sole traders, small shops) who overpay for the simple things and chase every due date, and expats who don't yet understand the local system, the language, or their tax-residency implications. It is multilingual from day one — Spanish, English, Russian, and Portuguese.

What I built

The product, solo, by directing AI agents. The product framing, architecture, the tax domain model, and the review are mine; the implementation is produced by AI agents working against a staged specification — each stage built end to end with unit, integration, and e2e tests and a written report before the next one begins.

A tax engine, not a content site. The core turns a minimal tax profile into a concrete calendar: which obligations apply, when each falls due, and how much to expect — modeled as explicit domain types and value objects, so a date or an amount is never a loose string. The three-tier amount model (exact / estimated / reminder-only) is a first-class domain concept, not UI decoration.

Honesty as an engineering constraint. "Never invent a figure" is enforced in the domain: an obligation either has a calculable amount with a traceable derivation, or it carries a date and a reminder and no number at all. Every amount the user sees can be expanded to its calculation steps and the official source it rests on.

Reminders and jobs. Due-date reminders run on a real job runner (Trigger.dev) with scheduling, retries, and observability, and go out by email (Resend) — so the promise "we'll remind you in time" is operational, not aspirational.

Production posture from the start. Better Auth for accounts, PostgreSQL as the system of record (with Prisma used only as a persistence adapter, kept out of the domain), tRPC + Zod for typed contracts across the web app and future mobile clients, PostHog and Sentry for analytics and error tracing, Railway for hosting and database, and a full test stack — Vitest, React Testing Library, Playwright, and Testcontainers for Postgres-backed integration tests.

Architectural choices

Clean architecture, country-shaped. Tributo is a modular monolith with the tax domain at the center and infrastructure at the edges. Crucially, country logic — tax calendars, rules, knowledge, and government adapters — lives in country-specific modules behind stable interfaces. Uruguay is the first module; Argentina and the rest of LATAM can be added without rewriting the core. The product is designed for expansion from the first line.

The intelligence layer, not an ERP. Tributo deliberately is not an accounting firm, an ERP, or a certified e-invoicing provider in v1. It sits between users, government systems, banks, and existing invoicing tools as the layer that explains, plans, reminds, and guides. That scoping is what lets a single person ship something genuinely useful, fast.

Mobile-first, because that's where the user is. The MVP is a responsive web app designed for a phone first — the moment of tax anxiety happens on mobile, so the calendar, the next payment, and the reminders are built for that viewport before anything else.

AI-native delivery. The interesting part isn't that an AI wrote code — it's the loop: a staged spec, agents implementing each stage with tests, an English implementation report per stage, and me owning the product, the tax model, and the review. It is the same thesis as the rest of my projects: the engineer's job is shifting from typing to specifying, reviewing, and deciding.

Current status

Tributo is live in beta at tributoclaro.com, multilingual (es/en/ru/pt), with the mobile-first tax calendar for Uruguayan unipersonales as the first surface. The roadmap beyond the MVP includes an AI assistant (Tribi), a tax optimizer, a registration wizard, an expat mode, and Domicilio Electrónico monitoring — and, structurally, the next country. It is treated as a real product: typed contracts, a real job runner for reminders, audit-friendly data, and the honesty rule wired into the domain rather than bolted onto the UI.