Customization & Branding
Version: 0.1.0 Last Updated: May 2026
This guide covers everything you'll want to change to make AgentZero feel like your product instead of ours.
You can ship to production without changing a single thing in this guide — AgentZero is functional out of the box. But your customers will care about your brand, not ours.
1. Name & logo
Product name
The name "AgentZero" appears in a few places. Search and replace:
$ snippet# From your project root grep -rn "AgentZero" --include="*.tsx" --include="*.ts" --include="*.md"
Key spots:
- ›
app/layout.tsx—<title>and metadata - ›
components/landing/LandingNav.tsx— top-left logo text - ›
app/page.tsx— footer wordmark - ›
app/dashboard/layout.tsx— sidebar header - ›
public/manifest.webmanifest— PWA name
Logo / favicon
- ›
app/icon.tsxandapp/apple-icon.tsx— programmatic icons. Edit the JSX inside. - ›
app/icons/icon-192/route.tsxandicon-512— larger app icons (used by PWA install). - ›If you'd rather use static PNGs, replace these route files with a
public/icon.pngand a static<link>inapp/layout.tsx.
2. Brand colours
AgentZero uses CSS custom properties + Tailwind v4 tokens. One file to edit:
app/globals.css
$ snippet:root { --primary: <your-brand-colour>; /* main accent — buttons, links, highlights */ --primary-foreground: <text-on-primary>; /* text colour on primary backgrounds */ --background: <your-bg>; /* page background */ --foreground: <your-text>; /* default text */ --muted-foreground: <your-muted-text>; --card: <surface-colour>; /* raised surfaces */ --secondary: <alt-bg>; /* alternating section backgrounds */ }
Tips:
- ›The default theme is dark — if you go light, also flip the
darkclass on<html>inapp/layout.tsx. - ›The primary colour is used aggressively. Pick something that reads well on both
--backgroundand--secondary. - ›Test contrast with a tool like webaim.org/resources/contrastchecker. WCAG AA minimum is 4.5:1 for body text.
3. Landing page copy
The landing page is intentionally all in one file so you can edit it in one sitting.
app/page.tsx — the constants at the top of each section component are the easiest things to change:
- ›
MARQUEE_ITEMS— the rolling tech-stack strip - ›
STATS— the stats band numbers - ›
STACK_CARDS— the "six domains" cards - ›
LOG_ENTRIES— the founder's log entries (rewrite to your own narrative) - ›
FOUNDING_FEATURES— the pricing card bullet list
components/landing/HeroSection.tsx — the headline, body copy, and architecture diagram tooltips.
components/landing/FaqSection.tsx — the FAQ entries. Rewrite to match your support policy, refund window, pricing.
components/landing/DeliverablesSection.tsx — the "what you get for $X" cards.
4. Pricing & launch config
components/landing/launch-config.ts is the single source of truth for:
- ›Launch date (drives the countdown)
- ›
buyEnabledtoggle (flips every CTA from waitlist → buy button) - ›Checkout URL (your Lemon Squeezy / Stripe / whatever link)
- ›Display price
Change the price in this file and it propagates to the hero, banner, pricing card, and deliverables block.
5. Default AI model
lib/ai/model-registry.ts — the registry of available models. Index 0 is the default selected for new agents.
$ snippetexport const MODEL_REGISTRY: ModelMetadata[] = [ { id: "anthropic/claude-haiku-4-5", label: "Claude Haiku 4.5" }, // ← default { id: "openai/gpt-4o-mini", label: "GPT-4o Mini" }, // ... ];
To add a new model: get the exact ID from your Vercel AI Gateway dashboard, paste it in. No other code needs to change.
To remove a model: delete the line. Don't worry about existing agents — they'll fall back to the default on next run if their saved model is missing.
6. Agent voice & tone
lib/ai/system-prompts.ts — two exports:
- ›
BASE_VOICE— the default tone every agent uses (opinionated, action-driven). Toggleable per-agent viaagents.use_base_voice. - ›
BASE_TOOL_RULES— instructions for how the agent calls its tools. Always appended. The model can't use tools without these rules.
If your product is, say, a legal-research agent, you'll want to rewrite BASE_VOICE to be cautious and hedged instead of opinionated and direct. The structure (facts vs. voice) is worth keeping — it produces clean output that's easy for end users to parse.
7. Email templates
If you've wired up Resend, the email templates live in:
- ›
lib/email/templates/— JSX-based React Email templates - ›Update the
fromline viaRESEND_FROM_EMAIL - ›Test by triggering the waitlist signup or a password reset
For now, AgentZero ships with minimal templates — waitlist confirmation and (planned) magic-link auth. Add your own templates for purchase confirmation, agent-run notifications, etc.
8. Analytics
The codebase ships with three analytics hooks already wired:
- ›Google Analytics —
GA_IDconstant inapp/layout.tsx. Replace with your ID or delete the<Script>blocks. - ›Plausible —
components/analytics/PlausibleInit.tsx. Replace the domain or delete the component. - ›Vercel Analytics —
<Analytics />inapp/layout.tsx. Free with any Vercel deployment. Keep it.
Replace or remove as needed before launch — Google Analytics with the wrong ID is just dead pixel-tracking.
9. Domain & deployment
Once you've branded everything:
- ›Buy a domain
- ›Vercel → Project → Settings → Domains → Add
- ›Update DNS at your registrar (Vercel shows you exactly what records to set)
- ›Update
NEXTAUTH_URLenv var to your new domain - ›Redeploy (Vercel does this automatically when env vars change)
10. Things you probably shouldn't change
A few things are load-bearing in non-obvious ways. Change them carefully:
- ›Embedding dimensions (1024) — locked to the NVIDIA NIMs model. If you swap embedding providers, you must rerun the embedding migration with the new dimension count, or all RAG queries will fail.
- ›Auth.js JWT strategy — switching to database sessions adds DB hits per request. Stick with JWT unless you have a strong reason.
- ›
adminClientusage in Server Actions — it bypasses RLS. The org-scoping in your queries is what keeps tenants isolated. Don't remove the.eq('organisation_id', session.user.orgId)filters. - ›Credit guard atomicity — the pre-run check + post-run deduction happen in one transaction. If you split them, you'll hit race conditions where two concurrent runs both pass the balance check.
Checklist before public launch
- ›[ ] Product name replaced everywhere
- ›[ ] Logo / favicon replaced
- ›[ ] Brand colours in
globals.css - ›[ ] Landing page copy reflects your product
- ›[ ] Pricing matches what you actually charge
- ›[ ] FAQ rewritten to match your policies (refunds, support, licence terms)
- ›[ ] Default AI model picked
- ›[ ] System prompt voice tuned for your audience
- ›[ ] Email
fromaddress set - ›[ ] Analytics IDs replaced or removed
- ›[ ] Domain pointed at Vercel
- ›[ ]
NEXTAUTH_URLmatches production domain - ›[ ] All test/dev data cleared from production Supabase
- ›[ ] Lemon Squeezy webhook URL registered and tested with a real $1 product
When all boxes are ticked, you're shipping your product, not ours.