Live demo: archtrack.live
Know where your team's time goes. Without the enterprise price tag.
ArchTrack is an open-source employee tracking SaaS. See who's working, what they're working on, and where time gets wasted — all in real-time from any device.
- Real-time dashboard — see who's online, what app they're using, productivity scores
- AI assistant — ask "Who was most productive today?" in plain English
- Automatic tracking — silent desktop app, no timesheets, no manual entry
- Smart role detection — auto-detects if someone is a developer, designer, manager, etc. and adjusts scoring (admins can override)
- Business hours — set per-employee working hours; activity outside hours is shown separately, not counted against productivity
- Multi-currency — pick from 15+ currencies for each employee's hourly rate (USD, EUR, GBP, INR, AED, and more)
- Company branding — upload your own logo to replace the ArchTrack wordmark in the sidebar
- Multi-tenant — multiple businesses on one server, completely isolated data
- Mobile friendly — check your dashboard from your phone
Go to archtrack.live/signup. Enter your company name, your name, email, and a password. You're in.
Go to Employees > + Add Employee. Add each team member with their name, email, and department.
For each employee, click the Setup Token button next to their name. This generates a one-time setup code.
Download the latest DMG (Mac) or EXE installer (Windows) from GitHub Releases.
macOS:
- Open the
.dmg, drag ArchTrack to Applications - Right-click → Open → Open Anyway (required once for unsigned apps)
- macOS will prompt for Screen Recording and Accessibility — grant both
- ArchTrack runs silently in the background (no Dock icon, no menu bar)
Windows:
- Run the
.exeinstaller, follow the wizard - ArchTrack starts automatically — no permission prompts needed
- SmartScreen may show "Windows protected your PC" on first run — click More info → Run anyway
Enroll the tracker with the setup token from the dashboard:
# Get the device token (replace SETUP_TOKEN with the code from the dashboard)
curl -X POST https://archtrack.live/api/auth/enroll \
-H "Content-Type: application/json" \
-d '{"setupToken":"PASTE_SETUP_TOKEN_HERE"}'Save the returned accessToken to the config file:
# macOS
mkdir -p ~/Library/Application\ Support/@archtrack/desktop
echo '{"deviceToken":"PASTE_ACCESS_TOKEN_HERE","serverUrl":"https://archtrack.live"}' > ~/Library/Application\ Support/@archtrack/desktop/config.jsonArchTrack auto-starts on login. To verify it's running, check the dashboard — you should see the employee appear within 60 seconds.
See Desktop Tracker Permissions below for details on what each OS needs.
If you want to build the tracker yourself or make changes:
git clone https://github.com/maximizeGPT/Archtrack.git
cd Archtrack/desktop
npm installRun in dev mode:
npx electron .Build a distributable app:
npm run dist:mac # builds DMG + ZIP for macOS (arm64 + x64)
npm run dist:win # builds Windows installer (x64)
npm run dist:all # both platformsBuild output goes to desktop/release/.
Note for monorepo builds: the repo uses npm workspaces which can conflict with electron-builder's production install step. If the build fails, copy the
desktop/folder to a standalone directory, runnpm installthere, thennpm run dist:mac.
After building, re-sign the macOS app so Accessibility/Screen Recording permissions persist across restarts:
# Sign all nested frameworks, then the main app
find release/mac-arm64/ArchTrack.app/Contents/Frameworks -name "*.framework" -exec codesign --force --sign - {} \;
find release/mac-arm64/ArchTrack.app/Contents/Frameworks -name "*.app" -exec codesign --force --sign - {} \;
codesign --force --sign - --identifier live.archtrack.tracker release/mac-arm64/ArchTrack.appmacOS: ArchTrack.app registers as a Login Item automatically. You can also add it manually: System Settings → General → Login Items → add ArchTrack.
Windows: The NSIS installer creates a Start Menu shortcut. To add auto-start, the installer places a Scheduled Task or you can add ArchTrack to Startup:
cd Archtrack\desktop
powershell -ExecutionPolicy Bypass -File install-autostart-windows.ps1Symptoms that you're running an old tracker build: missing screenshots (the screenshot capture loop was added in the 2026-04-06 batch), no stealth mode, or browser tabs misclassified as social media.
Go back to your dashboard at archtrack.live. Within a minute, you'll see employee activity — what apps they're using, productivity scores, time breakdowns. Check it from your phone too.
Want to run your own instance instead of using archtrack.live? Deploy to any Ubuntu server:
curl -sSL https://raw.githubusercontent.com/maximizeGPT/Archtrack/main/deploy.sh | bashWorks on DigitalOcean ($6/month droplet), AWS, or any VPS. Add a custom domain + HTTPS with:
certbot --nginx -d yourdomain.comThe tracker reads the active window's title and owning process. Different operating systems gate this differently, so on the very first run each employee will need to grant a small set of permissions.
macOS requires two permissions on first launch, both granted from System Settings → Privacy & Security:
- Screen & System Audio Recording — lets the tracker capture periodic
screenshots. On first launch, macOS prompts automatically. Click
Open System Settings and toggle on ArchTrack.
- Settings path: Privacy & Security → Screen & System Audio Recording → toggle on ArchTrack.
- Accessibility — lets the tracker read the active window title via
the
active-winlibrary. Without this, activity shows as "Unknown".- Settings path: Privacy & Security → Accessibility → toggle on ArchTrack.
Both prompts appear once on first launch. The packaged app is signed with
a stable bundle ID (live.archtrack.tracker), so permissions survive
restarts and app updates.
⚠️ If you build from source, re-sign the app after building (see "Build from source" above). Without re-signing, macOS may re-prompt for permissions on every restart because the code signature identifier defaults to "Electron".
Windows does not require an explicit permission for reading window titles —
the tracker uses standard user-level APIs (GetForegroundWindow). However,
you may see friction on first run:
- SmartScreen warning — because the tracker binary isn't signed yet, the first launch may show "Windows protected your PC". Click More info → Run anyway. This only happens once per machine.
- Microsoft Defender / corporate AV — some EDR products (CrowdStrike, SentinelOne, etc.) quarantine unsigned Electron apps by default. If the tracker exits immediately, add an exclusion for the ArchTrack folder or work with IT to whitelist the binary.
- Group Policy — in locked-down enterprise environments, policy may block side-loaded Electron apps. You may need IT to push the tracker as an approved MSI.
No Accessibility or Screen Recording toggles are needed on Windows.
The desktop tracker is not officially supported on Linux yet. Support
for Wayland/X11 window-title reading is tracked in DEFERRED.md. For now,
we recommend running the tracker on a Mac or Windows box that mirrors the
Linux user's activity (e.g. developer workstations).
- Team productivity score (0-100%)
- Focus time vs idle/wasted time
- Per-employee activity breakdown
- Suspicious activity alerts (YouTube while Slack shows "active", etc.)
- Time breakdown by category (Core Work, Communication, Research, etc.)
Ask questions in plain English:
- "Who was most productive today?"
- "How much time did Ahmed spend on emails?"
- "Who's at risk of burnout?"
- "Show me non-work activity this week"
The system watches what apps an employee uses and auto-detects their job type:
- Developer — VSCode, Terminal, Claude get scored as "Core Work"
- Designer — Figma, Photoshop, Sketch
- Architect — AutoCAD, Revit, SketchUp
- Manager — Jira, Zoom, Slack
- Sales — Salesforce, LinkedIn, CRM tools
- Data Analyst — Jupyter, Tableau, Excel
Admins can override it from Employees → Edit Employee → Job Type.
Each employee can have configured working hours (e.g. "Mon–Fri 09:00–17:30, Asia/Kolkata"). Activity captured outside those hours is still stored — so admins can audit it — but it is not counted in the employee's Total, Productive, or Productivity Score. Instead it appears in a separate "Outside Business Hours" card on the Report. Leave it unset (the default) to track 24/7 — great for solopreneurs.
Click the ArchTrack logo in the sidebar to open Organization Settings:
- Upload a custom company logo (PNG, JPEG, WebP, SVG, max 1 MB). It replaces the ArchTrack wordmark in the sidebar for everyone in the org. Leave it empty for the clean default.
- Set the organization's timezone (used for the "today" boundary on the Dashboard and as the default for new employees).
- Pick the default currency for new employees.
When adding or editing an employee, pick a currency from the dropdown next to their hourly rate. Supported: USD, EUR, GBP, INR, CAD, AUD, JPY, AED, SAR, SGD, BRL, MXN, ZAR, CHF, CNY. Reports and the Employees list format the rate with the appropriate symbol.
Toggle on Daily Email Summary in Organization Settings, set a recipient and an hour, and ArchTrack will email a per-employee productivity summary once a day. The email contains:
- Team productivity score, total tracked time, productive time
- Per-employee score, total / productive / idle, top 5 apps with category
- Suspicious activity badges, "outside business hours" callouts when set
The summary is also viewable in the Daily Summary page in the dashboard (useful for previewing what will go out, or sending a test on demand).
To wire SMTP, set these env vars on the server (PM2 / pm2 ecosystem.config.cjs
or your preferred process manager):
SMTP_HOST=smtp.your-provider.com
SMTP_PORT=587
SMTP_USER=your-smtp-user
SMTP_PASS=your-smtp-pass
SMTP_FROM="ArchTrack <noreply@yourdomain.com>"If SMTP isn't configured, the cron still runs, the summary is still generated, and the in-app preview still works. Only the actual mail send is gated.
Toggle on Periodic Screenshots in Organization Settings, pick a capture interval (1–60 min) and a retention window (1–365 days), and the desktop tracker will quietly capture the primary display, JPEG-compress it, and upload it to your dashboard. Browse them per-employee, per-day in the Screenshots page (grid view + click for full-size lightbox + per-shot delete). Old screenshots are auto-removed after the retention window.
Screenshots are off by default. Storage path on the server:
admin/data/uploads/screenshots/<orgId>/<employeeId>/<YYYY-MM-DD>/<id>.jpg.
The tracker can run completely invisibly: no menu-bar / tray icon, no dock
icon on macOS, silent boot. Enable by launching with the ARCHTRACK_STEALTH=1
env var:
ARCHTRACK_STEALTH=1 npx electron .Combined with a launch agent (macOS launchd plist) or a Windows scheduled
task, the tracker becomes invisible to the employee while still uploading
activity + screenshots to the admin dashboard. Performance overhead is
negligible — the tracker checks the active window every 10 seconds and
syncs every 60 seconds.
- Each business is completely isolated
- One server handles unlimited companies
- JWT auth for dashboard and desktop tracker
- Setup tokens for easy employee onboarding
[Employee Mac/PC] [Your Server] [Your Phone/Laptop]
Desktop Tracker ---> Node.js + SQLite <--- Dashboard (any browser)
(Electron app) (port 3001) (React SPA)
nginx (port 80)
- Admin dashboard: React SPA served by Express
- API: Express + SQLite (upgradeable to Postgres)
- Desktop tracker: Electron app — samples the active window every 10 seconds, batches them, and syncs to the server every 60 seconds.
- Productivity math: Dashboard and Reports share one formula —
score = productive ÷ (productive + unproductive) × 100. "Other" / neutral and idle/break time are tracked separately and never dilute the score. The math always reconciles: every shown bucket sums to the total. - Timezones: the dashboard's "today" window is computed in the admin's local timezone (sent with each request). Each organization also stores a default timezone, and each employee can override theirs.
- Auth: JWT tokens (24h dashboard, 90d device)
- Process manager: PM2 (auto-restart on crash)
- Reverse proxy: nginx (port 80 -> 3001, WebSocket support)
SSH into your server (or use DigitalOcean Console) and run:
cd /opt/archtrack && git pull && cd admin && npm install --no-package-lock && npx tsc -p tsconfig.server.json && npx vite build && pm2 restart archtrackAll endpoints require Authorization: Bearer <token> header (except auth endpoints).
| Endpoint | Method | Auth | Description |
|---|---|---|---|
/api/auth/signup |
POST | Public | Create account + org |
/api/auth/login |
POST | Public | Login, get JWT |
/api/auth/forgot-password |
POST | Public | Generate reset link |
/api/auth/reset-password |
POST | Public | Reset password with token |
/api/auth/setup-token |
POST | Dashboard | Generate employee setup token |
/api/auth/enroll |
POST | Public | Redeem setup token for device JWT |
/api/auth/me |
GET | Any | Get current user info |
| Endpoint | Method | Description |
|---|---|---|
/api/employees |
GET/POST | List or create employees (supports currency, timezone, businessHoursStart, businessHoursEnd, businessHoursDays) |
/api/employees/:id |
PUT/DELETE | Update or deactivate an employee |
/api/activities |
GET | Get tracked activities |
/api/activity |
POST | Desktop tracker syncs here |
/api/dashboard/stats?tz=<IANA> |
GET | Dashboard overview data for the admin's local day |
/api/reports/productivity?employeeId=&startDate=&endDate=&tz= |
GET | Productivity report (same tz-aware bounds + business-hours filter) |
/api/roles/:id |
GET/PUT | Smart role detection status / override (roleType: developer, designer, architect, manager, sales, data_analyst, writer, auto) |
| Endpoint | Method | Description |
|---|---|---|
/api/organization |
GET | Returns name, slug, timezone, logoUrl, defaultCurrency |
/api/organization |
PUT | Update name / timezone / defaultCurrency |
/api/organization/logo |
POST | Upload logo. Body: { mimeType, dataBase64 }. Max 1 MB. PNG/JPEG/WebP/SVG. |
/api/organization/logo |
DELETE | Remove the current logo |
Server: Ubuntu 20.04+, 1GB RAM, 1 CPU ($6/month on DigitalOcean)
Desktop tracker: Node.js 18+ on Mac or Windows. See Desktop Tracker Permissions for the per-OS first-run setup. Linux is not yet supported.
Dashboard: Any modern browser (phone or computer)
MIT License — free to use, modify, and sell.
Built for small business owners who deserve big tools.