Infrastructure

Vercel + Git SOP

Where does new code live, and how does it get there?  ·  Last updated June 2026
Quick reference
Never click "New Project" in Vercel for something that belongs inside an existing project. That's how we end up with 38 projects when we should have 20. Check the table below first.
Scenario Git Vercel / deploy
New client tool or standalone app New repo New Vercel project
Adding to an existing client's tools Existing repo (add a route or page) Existing Vercel project — no new project needed
New internal HH tool Add to hh-internal repo Auto-deploys via hh-internal project
New MM SOP or guide for Guy Add to mm-lp-guide repo Auto-deploys via mm-lp-guide project
Bug fix or content change Branch → PR → merge to main Auto-deploys on merge
NHH / Hilda scheduler changes Branch → PR → merge to main Not Vercel — deploys to Fly.io. Ask Teddi.
The two rules
Rule 1
One Vercel project = one repo

Vercel projects and GitHub repos are 1:1. If you're adding something to an existing repo, it deploys to the existing Vercel project automatically. You only create a new Vercel project when you create a new repo.

Rule 2
Standalone, or does it belong somewhere?

Ask: "Could this logically live as a page or route inside something that already exists?" If yes → add it to the existing repo. If no → new repo + new Vercel project.

GitHub ownership

We have two separate personal GitHub accounts (teddi-coder for Teddi, bergjosh for Josh) but one shared Vercel team account (Hedgehog Marketing). This is normal and not a problem.

Which GitHub account does a new repo go under?
  • Infrastructure, internal tooling, client tools, autopilots → teddi-coder
  • MM account management content (SOPs, guides, reference pages) → ask Teddi if unsure

Vercel's GitHub app is authorised on both accounts separately. When you link a new Vercel project to a repo, Vercel just needs access to that specific repo — it doesn't matter which GitHub account owns it.

The one friction point: if a repo lives under Teddi's GitHub, you can't push directly to it — submit a PR instead. That's correct behaviour, not a bug.

What already exists

Check these before creating anything new. Most things already have a home.

Internal HH tools
Vercel project: hh-internal — this site The catch-all for new HH internal tooling that doesn't need its own standalone URL. Add a new .html file and a card on index.html. Ask Teddi for repo access if you don't have it.
MM internal reference hub
Vercel project: mm-lp-guidemm-lp-guide.vercel.app Full internal wiki for Guy and MM account management. Already contains ~20 pages covering LPs, tracking tools, autopilot guides, SOPs, client snapshots, and monthly audit reports. New MM SOPs, guides, or reference pages go here — add a .html file and link it from index.html.

Note: mm-hq is a separate Vite/React app and the wrong home for new SOPs or guides. Don't confuse the two.

The Burrow (client portal)
Vercel project: hedgehog-client-portal → theburrow.hedgehogmarketing.com.au Do not add things to this repo without checking with Teddi — it runs on Supabase with its own auth layer. This is not a place to drop pages.
Client-specific tool sets — check before creating a new project
ClientVercel project(s)What's in it
BB Garagebb-garage-tools, bb-garage-kpi, bb-garage-dyno-cardTool suite, KPI dashboard, dyno card generator
Core Dieselcd-toolsCore Diesel tools
Holmes Aviationholmes-tools, holmes-baselineTools + baseline tracker
Doctors on Demanddod-email-builder, dod-email-auditDoD email tools
V Spotvspot-tool, vspot-masterclassV Spot tools
Norandanoranda-bookingBooking tool
CSPcsp-toolsCSP hub/builder

If the client is on the list above, talk to Teddi before creating a new project. The new thing might belong in their existing one.

Not on Vercel — Fly.io Fly.io
Nearly Headless Hilda and the Hilda scheduler are not in the Vercel dashboard. They run on Fly.io. Don't touch these without Teddi. The deploy command is:
flyctl deploy --config scheduler/fly.toml --app hilda-scheduler --remote-only

The two Fly.io apps are hilda-scheduler and nearly-headless-hilda. Both deploy from the teddi-coder/nearly-headless-hilda repo.

How to deploy

Adding to an existing repo

  1. Clone the repo (or git pull if you already have it)
  2. Create a branch: git checkout -b feat/your-description
  3. Make your changes
  4. Push the branch: git push origin feat/your-description
  5. Open a pull request on GitHub
  6. Vercel automatically builds a preview deployment — the URL appears in the PR. Check it looks right.
  7. Merge the PR → Vercel auto-deploys to production. You never need to touch the Vercel UI.

Creating something brand new

  1. Create a new GitHub repo under the right account (see GitHub ownership above — if unsure, ask Teddi)
  2. Clone it locally, add your code
  3. Go to vercel.com → Hedgehog Marketing team → Add New Project
  4. Import from GitHub → select the new repo
  5. Configure: Framework (Next.js, static HTML, etc.), Root directory (leave as / unless app is in a subfolder), Environment variables (add secrets now — do NOT commit .env files)
  6. Deploy — Vercel sets up the Git integration automatically from here on
  7. Add a custom domain if needed: project → Settings → Domains
Environment variables
  • Never commit .env files to Git
  • Add secrets in Vercel: project → Settings → Environment Variables
  • Set them for Production, Preview, and Development as appropriate
  • If you're not sure what env vars a project needs, check the repo's .env.example file
Domains

Most client tools get a subdomain on an existing domain rather than a brand new one.

TypePatternExample
Client tool tools.[clientdomain].com tools.corediesel.com.au
HH client portal [client].hedgehogmarketing.com.au theburrow.hedgehogmarketing.com.au
Standalone client app Their own domain season.ballinaathletics.club
MM tools MM subdomain or own domain Varies — ask Teddi

To add a domain: Vercel project → Settings → Domains → Add. Then update DNS in Cloudflare (where most domains are managed).

What NOT to do
  • Don't deploy by uploading files in the Vercel UI. Always push to Git and let Vercel pick it up.
  • Don't merge directly to main without a PR unless it's a trivial one-liner on a repo you know well. Preview deployments exist for a reason.
  • Don't create a new Vercel project for a single page that could be a route in an existing project.
  • Don't add secrets to the repo. Vercel env vars only.
  • Don't use your personal Vercel account for anything work-related. Everything goes under the Hedgehog Marketing team account.
  • Don't touch NHH or the Hilda scheduler via Vercel — they're not there. They're on Fly.io with their own deploy process.
All current projects
Autopilots — Teddi-managed, don't touch Vercel
hh-google-ads-autopilot hh-meta-ads-autopilot mm-google-ads-autopilot mm-meta-ads-autopilot hh-slack-interactions-router mm-slack-interactions-router
Internal infrastructure — Teddi-managed, don't touch Vercel
hh-internal hh-data-warehouse mm-leads-proxy hilda-automation mm-mq-client mm-content-automation hedgehog-client-portal
Fly.io — Teddi-managed, not in Vercel Fly.io
hilda-scheduler nearly-headless-hilda
MM internal reference hub — Guy/Josh territory Vercel
mm-lp-guide mm-lp-brief-form
Client tools — can add to, check with Teddi first Vercel
bb-garage-tools bb-garage-kpi bb-garage-dyno-card cd-tools holmes-tools holmes-baseline holmes-aviation-gpt dod-email-builder dod-email-audit vspot-tool vspot-masterclass noranda-booking csp-tools gluteguard-kpi-calculator thrive365-tracker visions-baseline ending-hiv
HH marketing / content — Josh's territory Vercel
hedgehog-hq hedgehog-content-calendar hh-content-calendar mm-hq
Unknown — needs investigation
quizzical-northcutt-83bc52

Auto-generated name suggests this was a StackBlitz prototype deployed directly to Vercel (created ~12 April 2026). No custom domain. Ask Teddi if it can be deleted.

HH Internal · Infrastructure · When in doubt, ask Teddi before creating a new Vercel project.