Ponto

Self-hosted time tracker

Track your time.
The report becomes the invoice.

Built for people who bill by the hour: a one-click timer, per-client hourly rates, and a monthly export that's ready to become an invoice. Runs on your own server β€” your data stays with you.

Don't want to self-host? Use Ponto Cloud β€” this very instance, for just US$ 1/month*. Access is invite-only: request yours.

From timer to invoice, without leaving the app

The timer stays at the top of every screen. Organize work as Client β†’ Project β†’ Task.
Set each client's hourly rate (in dollars, euros…) and export the report at month's end.

Reports that close out the month

Hours per day, breakdown by project, and two-level grouping β€” from summary to detail. Export to .xlsx or CSV and attach it straight to the invoice.

Chrome extension coming soon

Start and stop the timer right from the popup, without switching tabs. It's the same API as the app β€” the server stays the source of truth.

CLI ponto available

Terminal commands and JSON output for AI agents, like Claude. Available now β€” build from source and connect to your instance with the same token as the extension.

History always preserved

Every entry keeps the hourly rate from the day it was logged. Raised a client's rate? The new rate applies from here on out β€” history stays intact and old invoices stay correct.

Self-host in 4 steps

A single Rails app with SQLite. The repo already ships the Dockerfile and Kamal config β€” and the README is the full guide.

  1. 1

    Clone the repository

    git clone onto your server β€” or your own machine, to give it a try.

  2. 2

    Deploy with Docker or Kamal

    kamal setup (or docker build by hand) β€” the Dockerfile and config/deploy.yml are already in the repo.

  3. 3

    Set ADMIN_EMAIL and SMTP

    Sign-in is passwordless: a 6-digit code arrives by email. Configure SMTP in the credentials and set the admin's email.

  4. 4

    The first sign-in creates the admin

    With an empty database, the first sign-in using ADMIN_EMAIL creates the admin account. From there, invite whoever you want.

Light to run on your homelab

  • Backup = copy a folder SQLite: your data is .sqlite3 files in a folder β€” backup is copying it (or a volume snapshot). No database server to run.
  • Zero Node, zero build Rails 8 + Hotwire with importmap. No JavaScript pipeline.
  • Your data is yours Each account is an isolated bubble β€” the admin manages access but has no screen to see your clients, projects, or entries. And since it's self-hosted, the server is yours.
  • Portable, always Export everything that's yours, whenever you want β€” nothing is locked in here.
  • Open source (O'Saasy) Read it, audit it, contribute. Host it wherever you like β€” just don't resell it as a SaaS. See it on GitHub.
  • Multi-user, no teams Each account stays isolated from the others; access is invite-only.

Request access to Ponto Cloud

Don't want to self-host? Use this instance for US$ 1/month*. Leave your email β€” approved requests get the invite in their inbox.
Prefer to host it yourself? The code is on GitHub.