{"id":49932670,"url":"https://github.com/maximizegpt/archtrack","last_synced_at":"2026-05-17T04:03:29.786Z","repository":{"id":343620426,"uuid":"1178435788","full_name":"maximizeGPT/Archtrack","owner":"maximizeGPT","description":"Open source employee desktop tracker for small business owners","archived":false,"fork":false,"pushed_at":"2026-05-05T04:23:20.000Z","size":530,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-05T06:25:37.786Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maximizeGPT.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-11T02:44:30.000Z","updated_at":"2026-05-05T04:23:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/maximizeGPT/Archtrack","commit_stats":null,"previous_names":["maximizegpt/archtrack"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/maximizeGPT/Archtrack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximizeGPT%2FArchtrack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximizeGPT%2FArchtrack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximizeGPT%2FArchtrack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximizeGPT%2FArchtrack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maximizeGPT","download_url":"https://codeload.github.com/maximizeGPT/Archtrack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maximizeGPT%2FArchtrack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33127007,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T18:38:32.183Z","status":"online","status_checked_at":"2026-05-17T02:00:05.366Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-17T04:03:26.507Z","updated_at":"2026-05-17T04:03:29.780Z","avatar_url":"https://github.com/maximizeGPT.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ArchTrack — Employee Time Tracking for Small Businesses\n\n**Live demo: [archtrack.live](https://archtrack.live)**\n\n**Know where your team's time goes. Without the enterprise price tag.**\n\nArchTrack 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.\n\n---\n\n## What You Get\n\n- **Real-time dashboard** — see who's online, what app they're using, productivity scores\n- **AI assistant** — ask \"Who was most productive today?\" in plain English\n- **Automatic tracking** — silent desktop app, no timesheets, no manual entry\n- **Smart role detection** — auto-detects if someone is a developer, designer, manager, etc. and adjusts scoring (admins can override)\n- **Business hours** — set per-employee working hours; activity outside hours is shown separately, not counted against productivity\n- **Multi-currency** — pick from 15+ currencies for each employee's hourly rate (USD, EUR, GBP, INR, AED, and more)\n- **Company branding** — upload your own logo to replace the ArchTrack wordmark in the sidebar\n- **Multi-tenant** — multiple businesses on one server, completely isolated data\n- **Mobile friendly** — check your dashboard from your phone\n\n---\n\n## Getting Started (2 minutes)\n\n### 1. Sign Up\n\nGo to **[archtrack.live/signup](https://archtrack.live/signup)**. Enter your company name, your name, email, and a password. You're in.\n\n### 2. Add Employees\n\nGo to **Employees** \u003e **+ Add Employee**. Add each team member with their name, email, and department.\n\n### 3. Install the Desktop Tracker\n\nFor each employee, click the **Setup Token** button next to their name. This generates a one-time setup code.\n\n#### Option A: Download the pre-built app (recommended for employees)\n\nDownload the latest DMG (Mac) or EXE installer (Windows) from [GitHub Releases](https://github.com/maximizeGPT/Archtrack/releases).\n\n**macOS:**\n1. Open the `.dmg`, drag **ArchTrack** to Applications\n2. Right-click → **Open** → **Open Anyway** (required once for unsigned apps)\n3. macOS will prompt for **Screen Recording** and **Accessibility** — grant both\n4. ArchTrack runs silently in the background (no Dock icon, no menu bar)\n\n**Windows:**\n1. Run the `.exe` installer, follow the wizard\n2. ArchTrack starts automatically — no permission prompts needed\n3. SmartScreen may show \"Windows protected your PC\" on first run — click **More info → Run anyway**\n\nEnroll the tracker with the setup token from the dashboard:\n```bash\n# Get the device token (replace SETUP_TOKEN with the code from the dashboard)\ncurl -X POST https://archtrack.live/api/auth/enroll \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"setupToken\":\"PASTE_SETUP_TOKEN_HERE\"}'\n```\n\nSave the returned `accessToken` to the config file:\n```bash\n# macOS\nmkdir -p ~/Library/Application\\ Support/@archtrack/desktop\necho '{\"deviceToken\":\"PASTE_ACCESS_TOKEN_HERE\",\"serverUrl\":\"https://archtrack.live\"}' \u003e ~/Library/Application\\ Support/@archtrack/desktop/config.json\n```\n\nArchTrack auto-starts on login. To verify it's running, check the dashboard — you should see the employee appear within 60 seconds.\n\n\u003e See **[Desktop Tracker Permissions](#desktop-tracker-permissions)** below for details on what each OS needs.\n\n#### Option B: Build from source (for developers)\n\nIf you want to build the tracker yourself or make changes:\n\n```bash\ngit clone https://github.com/maximizeGPT/Archtrack.git\ncd Archtrack/desktop\nnpm install\n```\n\n**Run in dev mode:**\n```bash\nnpx electron .\n```\n\n**Build a distributable app:**\n```bash\nnpm run dist:mac    # builds DMG + ZIP for macOS (arm64 + x64)\nnpm run dist:win    # builds Windows installer (x64)\nnpm run dist:all    # both platforms\n```\n\nBuild output goes to `desktop/release/`.\n\n\u003e **Note for monorepo builds:** the repo uses npm workspaces which can\n\u003e conflict with electron-builder's production install step. If the build\n\u003e fails, copy the `desktop/` folder to a standalone directory, run\n\u003e `npm install` there, then `npm run dist:mac`.\n\nAfter building, re-sign the macOS app so Accessibility/Screen Recording permissions persist across restarts:\n```bash\n# Sign all nested frameworks, then the main app\nfind release/mac-arm64/ArchTrack.app/Contents/Frameworks -name \"*.framework\" -exec codesign --force --sign - {} \\;\nfind release/mac-arm64/ArchTrack.app/Contents/Frameworks -name \"*.app\" -exec codesign --force --sign - {} \\;\ncodesign --force --sign - --identifier live.archtrack.tracker release/mac-arm64/ArchTrack.app\n```\n\n#### Auto-start on login\n\n**macOS:** ArchTrack.app registers as a Login Item automatically. You can also add it manually: System Settings → General → Login Items → add ArchTrack.\n\n**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:\n```powershell\ncd Archtrack\\desktop\npowershell -ExecutionPolicy Bypass -File install-autostart-windows.ps1\n```\n\nSymptoms that you're running an old tracker build: missing screenshots\n(the screenshot capture loop was added in the 2026-04-06 batch), no\nstealth mode, or browser tabs misclassified as social media.\n\n### 4. Watch It Work\n\nGo back to your dashboard at [archtrack.live](https://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.\n\n---\n\n## Self-Hosting (Optional)\n\nWant to run your own instance instead of using archtrack.live? Deploy to any Ubuntu server:\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/maximizeGPT/Archtrack/main/deploy.sh | bash\n```\n\nWorks on DigitalOcean ($6/month droplet), AWS, or any VPS. Add a custom domain + HTTPS with:\n```bash\ncertbot --nginx -d yourdomain.com\n```\n\n---\n\n## Desktop Tracker Permissions\n\nThe tracker reads the active window's title and owning process. Different\noperating systems gate this differently, so on the very first run each\nemployee will need to grant a small set of permissions.\n\n### macOS (10.15 Catalina and newer)\n\nmacOS requires two permissions on first launch, both granted from\n**System Settings → Privacy \u0026 Security**:\n\n1. **Screen \u0026 System Audio Recording** — lets the tracker capture periodic\n   screenshots. On first launch, macOS prompts automatically. Click\n   **Open System Settings** and toggle on **ArchTrack**.\n   - Settings path: **Privacy \u0026 Security → Screen \u0026 System Audio Recording\n     → toggle on ArchTrack**.\n2. **Accessibility** — lets the tracker read the active window title via\n   the `active-win` library. Without this, activity shows as \"Unknown\".\n   - Settings path: **Privacy \u0026 Security → Accessibility → toggle on\n     ArchTrack**.\n\nBoth prompts appear once on first launch. The packaged app is signed with\na stable bundle ID (`live.archtrack.tracker`), so permissions survive\nrestarts and app updates.\n\n\u003e ⚠️ **If you build from source**, re-sign the app after building (see\n\u003e \"Build from source\" above). Without re-signing, macOS may re-prompt for\n\u003e permissions on every restart because the code signature identifier\n\u003e defaults to \"Electron\".\n\n### Windows (10 and newer)\n\nWindows does not require an explicit permission for reading window titles —\nthe tracker uses standard user-level APIs (`GetForegroundWindow`). However,\nyou may see friction on first run:\n\n1. **SmartScreen warning** — because the tracker binary isn't signed yet, the\n   first launch may show \"Windows protected your PC\". Click **More info →\n   Run anyway**. This only happens once per machine.\n2. **Microsoft Defender / corporate AV** — some EDR products (CrowdStrike,\n   SentinelOne, etc.) quarantine unsigned Electron apps by default. If the\n   tracker exits immediately, add an exclusion for the ArchTrack folder or\n   work with IT to whitelist the binary.\n3. **Group Policy** — in locked-down enterprise environments, policy may\n   block side-loaded Electron apps. You may need IT to push the tracker as\n   an approved MSI.\n\nNo Accessibility or Screen Recording toggles are needed on Windows.\n\n### Linux\n\nThe desktop tracker is **not officially supported on Linux yet**. Support\nfor Wayland/X11 window-title reading is tracked in `DEFERRED.md`. For now,\nwe recommend running the tracker on a Mac or Windows box that mirrors the\nLinux user's activity (e.g. developer workstations).\n\n---\n\n## Features\n\n### Dashboard\n- Team productivity score (0-100%)\n- Focus time vs idle/wasted time\n- Per-employee activity breakdown\n- Suspicious activity alerts (YouTube while Slack shows \"active\", etc.)\n- Time breakdown by category (Core Work, Communication, Research, etc.)\n\n### AI Assistant (Genesis)\nAsk questions in plain English:\n- \"Who was most productive today?\"\n- \"How much time did Ahmed spend on emails?\"\n- \"Who's at risk of burnout?\"\n- \"Show me non-work activity this week\"\n\n### Smart Role Detection\nThe system watches what apps an employee uses and auto-detects their job type:\n- **Developer** — VSCode, Terminal, Claude get scored as \"Core Work\"\n- **Designer** — Figma, Photoshop, Sketch\n- **Architect** — AutoCAD, Revit, SketchUp\n- **Manager** — Jira, Zoom, Slack\n- **Sales** — Salesforce, LinkedIn, CRM tools\n- **Data Analyst** — Jupyter, Tableau, Excel\n\nAdmins can override it from **Employees → Edit Employee → Job Type**.\n\n### Business Hours (per employee)\nEach employee can have configured working hours (e.g. \"Mon–Fri 09:00–17:30,\nAsia/Kolkata\"). Activity captured outside those hours is still stored — so\nadmins can audit it — but it is **not** counted in the employee's Total,\nProductive, or Productivity Score. Instead it appears in a separate\n\"Outside Business Hours\" card on the Report. Leave it unset (the default)\nto track 24/7 — great for solopreneurs.\n\n### Company Branding\nClick the ArchTrack logo in the sidebar to open **Organization Settings**:\n- Upload a custom company logo (PNG, JPEG, WebP, SVG, max 1 MB). It replaces\n  the ArchTrack wordmark in the sidebar for everyone in the org. Leave it\n  empty for the clean default.\n- Set the organization's timezone (used for the \"today\" boundary on the\n  Dashboard and as the default for new employees).\n- Pick the default currency for new employees.\n\n### Multi-Currency Hourly Rates\nWhen adding or editing an employee, pick a currency from the dropdown next\nto their hourly rate. Supported: USD, EUR, GBP, INR, CAD, AUD, JPY, AED,\nSAR, SGD, BRL, MXN, ZAR, CHF, CNY. Reports and the Employees list format the\nrate with the appropriate symbol.\n\n### Daily Email Summary\nToggle on **Daily Email Summary** in Organization Settings, set a recipient\nand an hour, and ArchTrack will email a per-employee productivity summary\nonce a day. The email contains:\n- Team productivity score, total tracked time, productive time\n- Per-employee score, total / productive / idle, top 5 apps with category\n- Suspicious activity badges, \"outside business hours\" callouts when set\n\nThe summary is also viewable in the **Daily Summary** page in the dashboard\n(useful for previewing what will go out, or sending a test on demand).\n\nTo wire SMTP, set these env vars on the server (PM2 / `pm2 ecosystem.config.cjs`\nor your preferred process manager):\n\n```bash\nSMTP_HOST=smtp.your-provider.com\nSMTP_PORT=587\nSMTP_USER=your-smtp-user\nSMTP_PASS=your-smtp-pass\nSMTP_FROM=\"ArchTrack \u003cnoreply@yourdomain.com\u003e\"\n```\n\nIf SMTP isn't configured, the cron still runs, the summary is still generated,\nand the in-app preview still works. Only the actual mail send is gated.\n\n### Periodic Screenshots\nToggle on **Periodic Screenshots** in Organization Settings, pick a capture\ninterval (1–60 min) and a retention window (1–365 days), and the desktop\ntracker will quietly capture the primary display, JPEG-compress it, and\nupload it to your dashboard. Browse them per-employee, per-day in the\n**Screenshots** page (grid view + click for full-size lightbox + per-shot\ndelete). Old screenshots are auto-removed after the retention window.\n\nScreenshots are off by default. Storage path on the server:\n`admin/data/uploads/screenshots/\u003corgId\u003e/\u003cemployeeId\u003e/\u003cYYYY-MM-DD\u003e/\u003cid\u003e.jpg`.\n\n### Stealth Mode (Desktop Tracker)\nThe tracker can run completely invisibly: no menu-bar / tray icon, no dock\nicon on macOS, silent boot. Enable by launching with the `ARCHTRACK_STEALTH=1`\nenv var:\n\n```bash\nARCHTRACK_STEALTH=1 npx electron .\n```\n\nCombined with a launch agent (macOS `launchd` plist) or a Windows scheduled\ntask, the tracker becomes invisible to the employee while still uploading\nactivity + screenshots to the admin dashboard. Performance overhead is\nnegligible — the tracker checks the active window every 10 seconds and\nsyncs every 60 seconds.\n\n### Multi-Tenant\n- Each business is completely isolated\n- One server handles unlimited companies\n- JWT auth for dashboard and desktop tracker\n- Setup tokens for easy employee onboarding\n\n---\n\n## Architecture\n\n```\n[Employee Mac/PC]          [Your Server]              [Your Phone/Laptop]\n  Desktop Tracker  ---\u003e  Node.js + SQLite  \u003c---   Dashboard (any browser)\n  (Electron app)         (port 3001)               (React SPA)\n                         nginx (port 80)\n```\n\n- **Admin dashboard:** React SPA served by Express\n- **API:** Express + SQLite (upgradeable to Postgres)\n- **Desktop tracker:** Electron app — samples the active window every **10\n  seconds**, batches them, and syncs to the server every **60 seconds**.\n- **Productivity math:** Dashboard and Reports share one formula —\n  `score = productive ÷ (productive + unproductive) × 100`. \"Other\" /\n  neutral and idle/break time are tracked separately and never dilute the\n  score. The math always reconciles: every shown bucket sums to the total.\n- **Timezones:** the dashboard's \"today\" window is computed in the admin's\n  local timezone (sent with each request). Each organization also stores a\n  default timezone, and each employee can override theirs.\n- **Auth:** JWT tokens (24h dashboard, 90d device)\n- **Process manager:** PM2 (auto-restart on crash)\n- **Reverse proxy:** nginx (port 80 -\u003e 3001, WebSocket support)\n\n---\n\n## Updating\n\nSSH into your server (or use DigitalOcean Console) and run:\n\n```bash\ncd /opt/archtrack \u0026\u0026 git pull \u0026\u0026 cd admin \u0026\u0026 npm install --no-package-lock \u0026\u0026 npx tsc -p tsconfig.server.json \u0026\u0026 npx vite build \u0026\u0026 pm2 restart archtrack\n```\n\n---\n\n## API Reference\n\nAll endpoints require `Authorization: Bearer \u003ctoken\u003e` header (except auth endpoints).\n\n### Auth\n| Endpoint | Method | Auth | Description |\n|----------|--------|------|-------------|\n| `/api/auth/signup` | POST | Public | Create account + org |\n| `/api/auth/login` | POST | Public | Login, get JWT |\n| `/api/auth/forgot-password` | POST | Public | Generate reset link |\n| `/api/auth/reset-password` | POST | Public | Reset password with token |\n| `/api/auth/setup-token` | POST | Dashboard | Generate employee setup token |\n| `/api/auth/enroll` | POST | Public | Redeem setup token for device JWT |\n| `/api/auth/me` | GET | Any | Get current user info |\n\n### Employees \u0026 Activities\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| `/api/employees` | GET/POST | List or create employees (supports `currency`, `timezone`, `businessHoursStart`, `businessHoursEnd`, `businessHoursDays`) |\n| `/api/employees/:id` | PUT/DELETE | Update or deactivate an employee |\n| `/api/activities` | GET | Get tracked activities |\n| `/api/activity` | POST | Desktop tracker syncs here |\n| `/api/dashboard/stats?tz=\u003cIANA\u003e` | GET | Dashboard overview data for the admin's local day |\n| `/api/reports/productivity?employeeId=\u0026startDate=\u0026endDate=\u0026tz=` | GET | Productivity report (same tz-aware bounds + business-hours filter) |\n| `/api/roles/:id` | GET/PUT | Smart role detection status / override (`roleType`: developer, designer, architect, manager, sales, data_analyst, writer, auto) |\n\n### Organization settings (new)\n| Endpoint | Method | Description |\n|----------|--------|-------------|\n| `/api/organization` | GET | Returns name, slug, timezone, logoUrl, defaultCurrency |\n| `/api/organization` | PUT | Update name / timezone / defaultCurrency |\n| `/api/organization/logo` | POST | Upload logo. Body: `{ mimeType, dataBase64 }`. Max 1 MB. PNG/JPEG/WebP/SVG. |\n| `/api/organization/logo` | DELETE | Remove the current logo |\n\n---\n\n## System Requirements\n\n**Server:** Ubuntu 20.04+, 1GB RAM, 1 CPU ($6/month on DigitalOcean)\n\n**Desktop tracker:** Node.js 18+ on Mac or Windows. See\n[Desktop Tracker Permissions](#desktop-tracker-permissions) for the\nper-OS first-run setup. Linux is not yet supported.\n\n**Dashboard:** Any modern browser (phone or computer)\n\n---\n\n## License\n\nMIT License — free to use, modify, and sell.\n\nBuilt for small business owners who deserve big tools.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaximizegpt%2Farchtrack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaximizegpt%2Farchtrack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaximizegpt%2Farchtrack/lists"}