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_ENV | Workspace gateway | Global gateway |
|---|---|---|
prod (default) | graphqlworkspaces.burdenoff.com | graphql.burdenoff.com |
alpha | alphagraphqlworkspaces.burdenoff.com | alphagraphql.burdenoff.com |
local | localhost:4003 | localhost: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
- Open
chrome://extensions - Enable Developer mode
- Click Load unpacked
- 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 realwspace-ggnomad-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.