Boom Media
Self-Hosted Time Tracking — Wakapi + ActivityWatch

Track your build hours — on your own infra.

Two silent background trackers, both self-hostable so nothing leaves Boom infra: Wakapi for coding/Claude hours per project, and ActivityWatch for every other app you touch. This doubles as live research for the future Dashee time-tracking feature.

← Back to Docs Hub
The Stack

Two trackers, one goal

Coding time and general app usage are two different measurements. One tool won't do both well, so run the best of each. Both store data on your servers.

Coding / Claude hours

Wakapi + WakaTime extension

  • Same WakaTime VS Code extension you'd use normally…
  • …but pointed at your Wakapi server, not wakatime.com
  • Auto-logs time per project, language, file, branch
  • Single Go binary + Postgres — trivial on Coolify
  • Answers "how many hours on app X in Claude Code"
Everything else

ActivityWatch (desktop)

  • Runs locally on Windows 11 — data stays on your PC
  • Tracks active window/app + browser tab + idle time
  • No account, no cloud, open-source
  • Install once, forget it — review the local dashboard
  • Optional: sync into Wakapi so it's all in one place
Why not RescueTime/Toggl? They're fine, but your data lives on their servers and it's a monthly fee. You already run Coolify + shared Postgres — self-hosting Wakapi costs ~$0 and keeps the data yours, matching your Doppler/B2/own-your-data posture.
Step 1 · Coolify

1Deploy Wakapi as a resource

On the boom-hosting droplet (24.199.95.101), add a new resource from the official image. Docker Compose is the cleanest path since it bundles the app + its own Postgres.

# Coolify → New Resource → Docker Compose
services:
  wakapi:
    image: ghcr.io/muety/wakapi:latest
    environment:
      WAKAPI_DB_TYPE: postgres
      WAKAPI_DB_HOST: wakapi-db
      WAKAPI_DB_NAME: wakapi
      WAKAPI_DB_USER: wakapi
      WAKAPI_DB_PASSWORD: ${WAKAPI_DB_PASSWORD}   # pull from Doppler
      WAKAPI_PASSWORD_SALT: ${WAKAPI_SALT}
      WAKAPI_ALLOW_SIGNUP: "false"              # lock it to you
    ports:
      - "3000"
  wakapi-db:
    image: postgres:17
    environment:
      POSTGRES_DB: wakapi
      POSTGRES_USER: wakapi
      POSTGRES_PASSWORD: ${WAKAPI_DB_PASSWORD}
    volumes:
      - wakapi-pg:/var/lib/postgresql/data
volumes:
  wakapi-pg:
🔐 Secrets via Doppler. Don't inline the DB password or salt. Put WAKAPI_DB_PASSWORD and WAKAPI_SALT in Doppler and inject them as Coolify env vars — same pattern you're rolling out ecosystem-wide.
Step 2 · Domain + SSL

2Put it on a real domain

Set the resource's Domains field to something like wakapi.boommedia.us and point a DNS A record at 24.199.95.101. Coolify + Traefik auto-issue a Let's Encrypt cert. Since signup is disabled, create your single account from the container:

# open the running container's shell, or use the web UI once with
# WAKAPI_ALLOW_SIGNUP temporarily "true", register, then set it back to "false".

Log in, open Settings, and copy your API key — you'll need it for the editor.

Step 3 · VS Code

3Point WakaTime at your server

Install the WakaTime extension in VS Code (it also has a Claude Code / terminal plugin). Then edit ~/.wakatime.cfg so it reports to Wakapi instead of the hosted service:

# C:\Users\eric\.wakatime.cfg
[settings]
api_url = https://wakapi.boommedia.us/api
api_key = your-wakapi-api-key

That's it. Every file you edit now logs silently. Within a day you'll see hours per project on your Wakapi dashboard — each SaaS app becomes a project automatically based on its folder.

💡 Naming tip: Wakapi derives the project from the Git repo / folder name. Keep your SaaS repos named cleanly (displayee, rewardee, …) and the build-hours breakdown lines up 1:1 with your portfolio with zero extra work.
Step 4 · General app usage

4Install ActivityWatch

For time outside the editor — browser, ClickUp, Canva, email, meetings — install ActivityWatch on your Windows PC. It runs a tiny local server and tracks the active window + browser tab, entirely offline.

🖥️ Local, not backed up. ActivityWatch data lives only on your PC. If you want it durable, either use the Wakapi bridge above, or add its data folder to your B2 backup selection.
Step 5 · Close the loop

5Roll totals into ClickUp + feed Dashee

The raw hours now live in Wakapi/ActivityWatch. Two things to do with them:

🎯 Boundary note: Wakapi/ActivityWatch are internal tools for you — they are not a Boom SaaS product and don't touch the app-boundary map. The customer-facing time tracker still belongs to Dashee alone.
Done When

Setup checklist