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 idburdenoff.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.
- Run HeadshotMarketing: Login (or click Sign In in the Campaigns view).
- Enter the displayed code at the verification URL.
- 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_ENV | Workspace gateway | Global gateway | Web app |
|---|---|---|---|
prod (default) | https://graphqlworkspaces.burdenoff.com/workspaces/graphql | https://graphql.burdenoff.com/global/graphql | https://app.headshotmarketing.com |
alpha | https://alphagraphqlworkspaces.burdenoff.com/workspaces/graphql | https://alphagraphql.burdenoff.com/global/graphql | https://alphaapp.headshotmarketing.com |
local | http://127.0.0.1:4003/workspaces/graphql | http://127.0.0.1:4000/global/graphql | http://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
| Setting | Default | Purpose |
|---|---|---|
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.