Skip to main content

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
EnvWorkspace gatewayGlobal gatewayApp host
prodhttps://graphqlworkspaces.burdenoff.com/workspaces/graphqlhttps://graphql.burdenoff.com/global/graphqlhttps://app.timecampus.com
alphahttps://alphagraphqlworkspaces.burdenoff.com/workspaces/graphqlhttps://alphagraphql.burdenoff.com/global/graphqlhttps://alphaapp.timecampus.com
localhttp://localhost:4003/workspaces/graphqlhttp://localhost:4000/global/graphqlhttp://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 real wspace-timecampus-svc schema.
  • 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.

Next steps​