Gestión Guarda Rural
A mobile app that replaced spreadsheets and WhatsApp for running rural estates.
- Role
- Sole engineer — product, backend, app, infrastructure
- Stack
- Python PostgreSQL Neon Railway Vue
Problem
Running rural estates happens in the field, not at a desk: shift rotas in one spreadsheet, client details in another, and everything that actually happens reported over WhatsApp from a truck. By the time it reaches a computer it has been retyped twice. Invoices get rebuilt by hand every month, numbering drifts, and nobody can answer "what did this client owe us in March?" without an archaeology session.
Approach
A mobile app for the part that happens outdoors — logging work, hours and incidents where they occur — backed by a properly modelled domain rather than a pile of forms: issuers, clients, concepts and invoice series, with the invoice number guaranteed by the database instead of by convention. 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
The work gets recorded once, where it happens, and monthly invoicing went from an afternoon of manual work to a few clicks — including multi-recipient client notifications and a PDF invoice layout that survives contact with a real printer.
The boring parts are the engineering
The interesting work in a system like this is not the forms. 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 own every decision, from the domain model to the deploy pipeline, without a committee.