Skip to main content

VS Code Extension

The HeadshotMarketing growth-marketing platform, in your editor. Manage campaigns, CRM contacts, pipeline deals, leads, and social posts against the Burdenoff workspace + global GraphQL gateways — without leaving VS Code.

Publisher burdenoff · extension id burdenoff.headshotmarketing-code-extension.

Features

  • Activity-bar views for the core HeadshotMarketing entities:
    • Campaigns (expand to Leads + Social Posts)
    • Contacts (CRM directory)
    • Deals (pipeline opportunities)
    • Leads (capture + convert)
    • Social Posts (drafts, scheduled, published)
    • Dashboard (live marketing KPIs)
  • Create / update flows via guided input pickers: campaigns, contacts, deals, leads, and social posts, plus move-deal, convert-lead, and update-status actions.
  • Webview panels (dual-bundled browser UI): rich Campaign Detail + a marketing Dashboard with funnel + spend/revenue metrics.
  • Status bar showing active campaigns + total leads at a glance.
  • Output-channel Analytics Overview and a copy/export-friendly log buffer.

Install

Search for "HeadshotMarketing" in the VS Code Extensions marketplace (publisher: burdenoff).

For local development, build from source:

git clone https://github.com/Algoshred/headshotmarketing-code-extension.git
cd headshotmarketing-code-extension
bun install
bun run build # webpack (extension host + webview UI)

Then install the generated .vsix with code --install-extension <path>.vsix.

Authentication

HeadshotMarketing uses the Burdenoff OAuth 2.0 device-code flow (works on local, Remote-SSH, Codespaces, and WSL). Tokens are stored in VS Code SecretStorage.

  1. Run HeadshotMarketing: Login (or click Sign In in the Campaigns view).
  2. Enter the displayed code at the verification URL.
  3. Pick a workspace. The extension issues a workspace-scoped token and scopes all data requests to it.

The VS Code OAuth client id is burdenoff_vscode_headshotmarketing and the redirect is vscode://burdenoff.headshotmarketing-code-extension/auth/callback — both seeded in global-auth-svc.

Environment selection

The extension uses production endpoints by default. To target a different Burdenoff environment, set the BURDENOFF_ENV environment variable before starting VS Code:

BURDENOFF_ENVWorkspace gatewayGlobal gatewayWeb app
prod (default)https://graphqlworkspaces.burdenoff.com/workspaces/graphqlhttps://graphql.burdenoff.com/global/graphqlhttps://app.headshotmarketing.com
alphahttps://alphagraphqlworkspaces.burdenoff.com/workspaces/graphqlhttps://alphagraphql.burdenoff.com/global/graphqlhttps://alphaapp.headshotmarketing.com
localhttp://127.0.0.1:4003/workspaces/graphqlhttp://127.0.0.1:4000/global/graphqlhttp://app.headshotmarketing.local.burdenoff.com
# Example: launch VS Code against local gateways
BURDENOFF_ENV=local code

All environment URLs are resolved in src/config.ts. Do not hardcode URLs in other files; add per-environment values to getEnvConfig() if a new target is needed.

Configuration

SettingDefaultPurpose
headshotmarketing.workspaceEndpoint(env-driven)Workspace gateway override
headshotmarketing.globalEndpoint(env-driven)Global gateway (auth) override
headshotmarketing.oidcIssuer(env-driven)OIDC issuer override
headshotmarketing.clientId(built-in)OAuth client id override
headshotmarketing.workspaceId(auto)Set after login

Development

bun install
bun run lint # eslint, zero warnings
bun run typecheck # tsc --noEmit
bun run compile # tsc -> out/ (test harness)
bun run build # webpack (extension host + webview UI)
bun run compile:test
bun run test # @vscode/test-electron (needs a display / xvfb)
bun run smoke # production-build smoke check
bun run package # vsce package -> .vsix
bun run sanity # lint + typecheck + compile + build + compile:test + test

The build is dual-target webpack: the extension host bundle (dist/extension.js, Node) and the webview UI bundles (webview-ui/dist/*.js, browser).

Release

Tag pushes (v*) build + test + package a VSIX and attach it to a GitHub Release — they never auto-publish. Marketplace / OpenVSX publishing is a deliberate, human-gated workflow_dispatch with the relevant PAT secret.