Gestión Guarda Rural
A side project that replaced a spreadsheet-and-WhatsApp workflow with real software.
- Role
- Sole engineer — product, backend, front end, infrastructure
- Stack
- Python PostgreSQL Neon Railway Vue
Problem
Managing rural estates runs on spreadsheets and WhatsApp: shift rotas in one place, client details in another, invoices rebuilt by hand every month. Numbering drifts, history is unsearchable, and nobody can answer "what did this client owe us in March?" without an archaeology session.
Approach
I modelled the domain properly before writing features — issuers, clients, concepts, invoice series — and made the invoice number a sequence the database guarantees rather than a convention the application hopes for. The infrastructure stays deliberately small: PostgreSQL on Neon with a database branch per git branch, so every feature gets a throwaway copy of production-shaped data, and a deploy pipeline that only promotes what passed against that branch.
Outcome
Monthly invoicing went from an afternoon of manual work to a few clicks. Built and shipped in weeks rather than months, including multi-recipient client notifications and a PDF invoice layout that survives contact with a real printer — the whole thing sitting on a deploy pipeline that only promotes what passed against a production-shaped database branch.
The boring parts are the engineering
The interesting work in a billing system is not the billing. It is making sure two people pressing “create invoice” in the same second cannot produce the same number, that deleting a client does not orphan three years of accounting history, and that the PDF still fits on one page when a client has fourteen line items.
Database branching as a safety net
Every git branch gets its own database branch seeded to production shape. That turned “I am afraid to touch the invoice numbering” into “I ran the migration against a real copy and the numbers came out right”. It is the single change that most improved how fast I could ship alone.
It is a personal project rather than a business, and I keep it that way on purpose: it is where I get to own every decision, from the domain model to the deploy pipeline, without a committee.