All piecesSaaS for Brazilian freelancers · 2026
My first SaaS, now live

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.

Conta Própria cover
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.

The landing page.
The timer sits at the top of every screen, already with client and project.
A whole month logged at once, like a spreadsheet.
The monthly summary per client, with billable hours and the amount per hourly rate.
Building the hours report, with grouping and a preview.
The invoice preview, calculated from the hours, with warnings before issuing.
An issued invoice, with the PDF, XMLs, history and email delivery.
The invoice archive, with search, filters and the MEI cap on top.
Tracking the MEI annual cap.
The stored A1 certificate, with validity and usage.
Scoped API keys for AI agents over MCP.
Dark mode follows the system setting.

Built with

  • TypeScript
  • React
  • NestJS
  • PostgreSQL
  • MCP