Browser Extension
The Chrome (MV3) browser extension for TimeCampus — time tracking, project and task management, Pomodoro focus sessions, expenses, and timesheet approvals, backed by the TimeCampus GraphQL gateways.
Features
- Popup — quick KPIs (active projects, running timers, tracked hours), top active projects, and recent time entries. SSO sign-in and workspace selector.
- Side panel (
Ctrl+Shift+U) — a tabbed dashboard:- Projects — filter by status, drill into a project.
- Tasks — tasks for the selected project; advance status inline.
- Time — list time entries and stop running timers.
- Pomodoro — focus-session history and filters.
- Approvals — timesheet approval requests and filters.
- Options — view gateway endpoints and reset to the build-time defaults.
- Auth — Burdenoff SSO via the OAuth2 device-code flow (client id
burdenoff_cli_timecampus); workspace-scoped tokens for every workspace request.
Install
From the Chrome Web Store
Search for TimeCampus and install. The extension defaults to production Burdenoff endpoints.
From source (unpacked)
git clone https://github.com/algoshred/timecampus-browser-extension.git
cd timecampus-browser-extension
bun install
bun run build # production build → dist/
Load dist/ as an unpacked extension at chrome://extensions (Developer mode).
Environment selection
Endpoints are resolved from src/core/env-config.json at build time via BURDENOFF_ENV. The default is always prod.
bun run build # prod endpoints
BURDENOFF_ENV=alpha bun run build # alpha endpoints
BURDENOFF_ENV=local bun run build # local endpoints
| Env | Workspace gateway | Global gateway | App host |
|---|---|---|---|
| prod | https://graphqlworkspaces.burdenoff.com/workspaces/graphql | https://graphql.burdenoff.com/global/graphql | https://app.timecampus.com |
| alpha | https://alphagraphqlworkspaces.burdenoff.com/workspaces/graphql | https://alphagraphql.burdenoff.com/global/graphql | https://alphaapp.timecampus.com |
| local | http://localhost:4003/workspaces/graphql | http://localhost:4000/global/graphql | http://localhost:5173 |
Only the selected environment's URLs are baked into the bundle; the webpack manifest transform also scopes host_permissions and content_scripts.matches to that environment.
Development
bun install
bun run dev # watch build for development
bun run sanity # format:check + lint + type-check + build + smoke + test
Testing
bun run test # run the Jest suite
bun run test:coverage # with coverage report
bun run smoke # verify a built dist/ for the selected environment
All backend API calls are covered with mock-based Jest tests under tests/api/.
Architecture
src/core/env.ts— single source of truth for build-time endpoint resolution.src/background.ts— service worker; the only place that calls the API.src/api/*— one module per TimeCampus entity, with GraphQL strings that match the realwspace-timecampus-svcschema.src/api/graphql/client.ts— dual-header authenticated client with retry, exponential backoff, and 429 handling.src/api/auth/*— OAuth2 device-code + workspace-token issuance.src/ui/{popup,options,sidepanel}— the three UI surfaces.
Releasing
Tag pushes build the extension and attach a zip to a GitHub Release. Uploading to the Chrome Web Store is human-gated — it only runs on a manual workflow_dispatch. See RELEASE.md in the repo.
Source
Source at github.com/algoshred/timecampus-browser-extension.