Skip to main content

Browser Extension

The Ggnomad Browser Extension is a Chrome MV3 extension that lets you manage providers, properties (stays), activities, events, tours, trips, and bookings directly from your browser, backed by the GGNomad GraphQL gateways.

Features

  • Popup — quick KPIs (listings, bookings, monthly revenue), top properties, and recent bookings.
  • Side panel (Ctrl+Shift+G) — a tabbed dashboard:
    • Stays — properties with nightly price, capacity, and rating.
    • Activities — experiences with price, duration, and rating.
    • Events — dated events with price and venue.
    • Tours — guided tours with group size and language.
    • Trips — transport legs (flights, trains, buses) with route and eco flag.
    • Bookings — booking status, payment, and inline cancellation.
  • Options — configure gateway endpoints + OAuth2 client id and theme.
  • Auth — Burdenoff SSO via the OAuth2 device-code flow (client id burdenoff_cli_ggnomad); workspace-scoped tokens for every request.

Install

git clone https://github.com/algoshred/ggnomad-browser-extension.git
cd ggnomad-browser-extension
bun install

Build

# Production build (default — prod endpoints)
bun run build # → dist/ (load unpacked in chrome://extensions)

# Development watch build
bun run dev

Environment selection

The extension defaults to production endpoints. To target alpha or local, set BURDENOFF_ENV before building:

BURDENOFF_ENVWorkspace gatewayGlobal gateway
prod (default)graphqlworkspaces.burdenoff.comgraphql.burdenoff.com
alphaalphagraphqlworkspaces.burdenoff.comalphagraphql.burdenoff.com
locallocalhost:4003localhost:4000
BURDENOFF_ENV=local bun run build

The production webpack build strips localhost from the manifest's host_permissions and content_scripts.matches.

Load in Chrome

  1. Open chrome://extensions
  2. Enable Developer mode
  3. Click Load unpacked
  4. Select the dist/ folder

Sanity checks

bun run sanity # format:check + lint + type-check + build + test

Architecture

  • src/background.ts — service worker; the only place that calls the API.
  • src/api/* — one module per GGNomad entity, with GraphQL strings that match the real wspace-ggnomad-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.