# 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.

- **Author:** Fedor Chishchin
- **Role:** Solo founder-engineer
- **Period:** 2026 — present
- **Stack:** TypeScript · Next.js · tRPC · Zod · PostgreSQL · Prisma · Trigger.dev · Better Auth · Railway
- **Source:** https://fedorthinks.com/work/tributo

---

## 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](https://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.
