Conta Própria
Hours, reports and service invoices for Brazilian MEIs, from timer to issued invoice.
A web app for Brazilian self-employed service providers: it tracks hours, builds the monthly report and issues the service invoice through the official national API, signed with an A1 certificate.

- Client
- Personal project
- Year
- 2026
- My role
- My first SaaS: product, design, full stack development and infrastructure.
- Platforms
- Web
In action
Worth calling out
From hours to invoice
The month's hours become the invoice amount and description without retyping anything.
Official API, the MEI's own certificate
Invoices go straight to the national issuer, signed with the MEI's own certificate, which is stored encrypted.
No duplicate invoices
Every issue checks the current state before sending, even if the connection to the government drops halfway.
Ready for AI agents
An MCP server with limited-permission access keys to operate the account.
The problem
Brazil's self-employed service providers (MEIs) close each month with three tools that don't talk to each other: a timesheet for hours, a report put together by hand for the client, and the service invoice (NFS-e) typed into the government portal. It's the same work every month, and any mistake on the invoice turns into a headache.
The government's free issuer only covers the last step. It doesn't keep clients or contracts, knows nothing about hours and doesn't warn you when revenue is getting close to the MEI's annual cap.
The solution
Conta Própria connects the three steps. Hours come in through a timer, manual entries or a whole month at once, organized by client, project and tag. The monthly summary already shows hours and amounts, and the report comes out as PDF or CSV to send to the client.
One click on "Bill" builds the invoice preview with the client, service codes, description and amount calculated from the hours. I check it and issue it: the invoice goes through the official national issuer API, signed with the MEI's own A1 certificate, with no portal and no browser bot. The XML and the PDF are stored in a searchable archive, and the client gets the invoice by email.
The app tracks the MEI annual cap, with alerts at 70, 85 and 95%. It also has an MCP server: an AI agent like Claude can log hours, build reports and issue invoices in natural language, using scoped API keys.
How it works
It is a TypeScript monorepo with an API, background processing for issuing invoices, PDFs and emails, the MCP server and a React front end. Types come from a single shared contracts package.
The MEI's certificate is the most sensitive part of the system, so it is stored encrypted, kept apart from the rest of the application, and never saved the way it arrived. Issuing is designed not to duplicate invoices: before each submission the app checks the current state with the government, including after a dropped connection. Each account's data is isolated from the others.
End-to-end tests issue invoices against a simulated government environment, so no test ever reaches the real issuer.
My role
It's my first SaaS, and I built all of it, from idea to deploy: product, design, all the code and the infrastructure. It just went live at contapropria.app.br.
A closer look
Built with
- TypeScript
- React
- NestJS
- PostgreSQL
- MCP