Guardify Brand Bot
Guardify-facing public web GUI built on the brand-guide-mcp platform. First non-Slack tenant surface — a dedicated Next.js app at its own URL that exposes Design Check, Brand Check, Brand Explorer, and Chat / Q&A against Guardify's brand guide.
Guardify is a SaaS platform for digital evidence management in the justice system — Children's Advocacy Centers (primary), prosecutors and law enforcement (secondary). Brand strategy authored by Nicholas Petersen / less.is (2026). Onboarded as a paid pilot client to brand-guide-mcp on 2026-05-04, with Design Check Phase 1 calibration to run on real Guardify assets (selected as the calibration partner per the architectural decision in the kickoff conversation).
Owners
- Eric Downs — Technical Director, G&M (sole operator on this project; no producer involvement per Eric's call on 2026-05-04)
Product Reference
| Status | Onboarding kickoff — tenant entry committed (not pushed), brand-guide content site shipped to GitHub. Asset bundle pending from Nicholas. |
| Tenant id | guardify |
| Tenant role | Paid pilot client. Trial billing posture: subscription_status=active, $25 monthly hard cap. |
| Surfaces | Public web GUI only (no Slack). All Slack feature flags false in tenants.json. |
| Brand guide repo | https://github.com/ericdowns/guardify-brand-guide (private) |
| Brand guide path | /Users/edowns/Projects/guardify-brand-guide |
| Brand guide URL (planned) | https://guardify-brand-guide.vercel.app (deploy gated on Nicholas's asset bundle) |
| Public GUI repo | https://github.com/ericdowns/guardify-brand-bot (not yet created — Section 2 of the Todoist plan) |
| Public GUI URL | https://guardify-brand-bot.vercel.app — LIVE as of 2026-05-04 |
| GUI feature scope | Design Check uploader · Brand Check copy linter · Brand Explorer (Colors / Type / Voice / Logos / Copy Examples) · Chat / Q&A |
| GUI access posture | Day 1: fully open + per-IP rate limit + $25 hard cap as safety net. Gating comes later. |
| Chat routing decision | Through brand-guide-mcp's recordedMessagesCreate choke point (unified per-tenant cost attribution), per Eric's call on 2026-05-04. |
| Brand strategy source | Guardify Brand Strategy.pdf — 50 pages, Nicholas Petersen / less.is, last updated 04/06/26. Contact for production assets. |
Related Projects
| Location | Contents |
|---|---|
../brand-guide-mcp/ |
The multi-tenant platform. Guardify is the 3rd tenant. Tenant entry committed on the task/add-guardify-tenant branch, not yet pushed. |
~/Projects/guardify-brand-guide/ |
This tenant's brand-guide content site (data plane only — no UI). Live as of 2026-05-04 commit 0c96696. |
~/Projects/guardify-brand-bot/ |
Public web GUI (forthcoming). Will consume brand-guide-mcp via per-tenant API key. |
Integrations
| Service | Status | Details |
|---|---|---|
| GitHub | Active (1 of 2 repos) | ericdowns/guardify-brand-guide (private). ericdowns/guardify-brand-bot not yet created. |
| Vercel | Pending | Both Vercel projects pending. brand-guide deploy gated on Nicholas's asset bundle; brand-bot deploy gated on the GUI build. |
| Todoist | Active | Guardify Brand Bot Integration — 6gX53xPCxFQ4JvXf |
| Harvest | TBD | Pending decision on whether to track time against this client. |
| Slack | N/A | Tenant explicitly opted out of the Slack surface. |
| 1Password | Pending | "Brand Guide MCP — Guardify Brand Bot API key" entry will land when the per-tenant key is issued at /admin/api-keys. |
| Anthropic | Routes through brand-guide-mcp | All Chat-surface traffic flows through recordedMessagesCreate for unified cost attribution against the Guardify tenant. |
Project Status
2026-05-04 — Kickoff
Eric received a brand-strategy PDF from Guardify (a real prospect — digital evidence management for the justice system) asking to test our MCP against their brand guide. Spent the session establishing the architectural shape, then started executing the Todoist plan.
Architectural decisions made in the kickoff:
- Surface set: Design Check + Brand Check + Brand Explorer + Chat. No Slack. First non-Slack surface in the platform.
- GUI hosting: new repo + new Vercel project (guardify-brand-bot). Dedicated tenant-branded app, separate from brand-guide-mcp. Server-side proxy holds the per-tenant API key.
- Access posture: day-1 fully open + per-IP rate limit + $25 monthly hard cap as the safety net. Gating comes later.
- Chat routing: through recordedMessagesCreate choke point so all Anthropic spend lands in /admin/usage attributed to Guardify.
- Design Check Phase 1: Guardify is the calibration pilot. Their guide is rich and testable (specific hexes, hexagon-pattern detection, button radius 4px, no-stroke-on-logo, photography style). After calibration, decide whether to widen Phase 1 to CF and G&M.
- Repo visibility: both repos private.
- Assets: wait for Nicholas Petersen / less.is to deliver the production asset bundle (logo SVGs, hexagon pattern, photography library). Don't ship placeholder-rasterized-from-PDF assets.
- Commercial: trial billing — subscription_status=active, $25/mo hard cap. No producer involvement; Eric runs the whole engagement.
Work completed in the kickoff session:
- Todoist project scaffolded (6gX53xPCxFQ4JvXf), 27 tasks created across 4 sections (Tenant + content foundation; Public GUI app; Design Check Phase 1 calibration; Operational). Tasks 3 + 4 (asset sourcing + brand-guide deploy) immediately moved to Blocked with blocked-needs-credential pending Nicholas. Pricing + URL-handoff cards dropped per Eric's "no comms" call.
- guardify-brand-guide repo created + pushed. Initial commit 0c96696. Next.js 16 + React 19 + Tailwind v4 minimal scaffold, mirroring grainandmortar-brand-guide shape. Render layer (the (guide) route group from the G&M template) intentionally stripped — the Guardify-facing UI lives in guardify-brand-bot. Deps pruned (next-themes and flexsearch removed). API tenant id set to guardify. npm run build clean.
- All 9 content/*.json files populated from the brand strategy PDF: foundation, messaging (with full message-house, problem-solution-stakes, brand architecture, acquisitions playbook, copy examples), voice (4 attributes + 3 audience personality variants for Prosecution / Child Advocacy / Law Enforcement), colors (4 primary blues + neutrals + secondaries + 5 gradients), typography (Poppins + Lato), logos (URLs are placeholders pending Nicholas), icons (Untitled UI line-based), photography (directional rules), applications (acquired-products CAC Manager + NCAtrak with Phase 1 / Phase 2 treatments). All JSON validates.
- Tenant entry shipped to brand-guide-mcp main via PR #30 (squash-merged as 8cbd7e1). Vercel production deploy verified Ready 6 min after merge. Tenant guardify is now resolvable for any non-Slack code path.
- guardify-brand-bot repo created + pushed. Initial commit b2b769f. Next.js 16 scaffold + Guardify theming (4 primary blues, hexagon pattern via inline SVG, Poppins/Lato via next/font, 4px button radius, btn-primary / btn-primary-gradient / btn-secondary base styles). Site shell (header with placeholder G-mark, nav, footer) + landing page with hero + four surface cards + placeholder pages for Design Check / Brand Check / Explorer / Chat. Visual verification in chrome-devtools clean at 1280px and 390px. Local at ~/Projects/guardify-brand-bot.
Todoist progress: 7 of 27 cards in Complete (1 Create brand-guide repo, 2 Extract PDF content, 5 tenants.json, 8 Project notes hub, 9 Scaffold brand-bot, 10 Theme as Guardify, 11 Base shell + nav). 2 in Blocked (3 Source assets, 4 Deploy brand-guide — both blocked-needs-credential, waiting on Nicholas).
Eric's at-computer follow-ups (need his hands):
- Task 6 (subscription cap): at /admin, set Guardify subscription_status = active and monthly hard cap = $25 (2500 cents)
- Task 7 (API key): at /admin/api-keys, issue a new key for tenant guardify, label guardify-brand-bot, scope mcp. Save plaintext to 1Password → "Brand Guide MCP — Guardify Brand Bot API key". Drop the key into the Vercel project once it's set up
- Task 17 (Vercel project for guardify-brand-bot): import ericdowns/guardify-brand-bot into Vercel, set env vars GUARDIFY_MCP_API_KEY (from above) + BRAND_GUIDE_MCP_BASE_URL=https://brand-guide-mcp.vercel.app. Auto-deploy on main. Capture the live URL.
Late-session continuation:
- Tasks 6 + 7 + 17 closed — Eric drove /admin to flip Guardify status active and issue the per-tenant API key (saved to 1Password Claude Bot vault as Brand Guide MCP — Guardify Brand Bot API key, id ya5nizrtltd5spl77d4stkwft4). Vercel project for guardify-brand-bot linked + GitHub auto-connected + env vars set + first prod deploy live at https://guardify-brand-bot.vercel.app. New Brand Bot Todoist task 6gX5FMqvMXphxCW7 filed for adding a hard-cap editor to /admin (cap stayed at $20 default since UI doesn't expose it).
- Task 4 unblocked + closed — Eric overrode the original "wait for Nicholas" decision once we hit the wall on tasks 13/14/15 needing the data plane. guardify-brand-guide.vercel.app deployed + auto-connected. End-to-end MCP tools/call get_colors verified live.
- Task 12 closed — app/api/mcp-proxy/route.ts forwards JSON-RPC POSTs to brand-guide-mcp /api/mcp/guardify with bearer auth; lib/rate-limit.ts token bucket per IP (30 req / 5 min, process-local).
- Task 15 closed — All 9 Brand Explorer pages live at https://guardify-brand-bot.vercel.app/explorer/* (brand-foundation, messaging, voice, colors, typography, logos, icons, photography, applications). 60s ISR, statically prerendered. Discovered + fixed .gitignore glob bug (icon? was shadowing icons/) — filed Brand Bot follow-up 6gX5J6F9gR67j3rf to fix in template repos.
- Task 14 closed — https://guardify-brand-bot.vercel.app/brand-check live and visually verified. Submitting the off-brand sample returns 4 of 5 rules passed, with world-class, transformative, next-gen, and Let's crush some cases! highlighted inline. Two upstream commits on brand-guide-mcp landed to make it work: PR #31 (check_text MCP tool wrapping the existing rule engine) and PR #32 (Banned Terms rule that was missing from the engine — surfaced when smoke-testing on Guardify content showed all 4 existing rules passing on obvious vendor jargon).
2026-05-04 (later) — Strategy lock: Nicholas-authored QA fixture set
End of session conversation pivoted from "keep building screens" to "we need a real testing methodology before we can sell this." Eric's frame: for a defensible "matches with N% consistency" claim to clients, we need (1) a labeled fixture set of on-brand AND deliberately-off-brand assets, (2) explicit per-band pass/fail definitions, (3) a repeatable test runner producing a tracked percentage, (4) a dashboard surfacing the current rate + drift over time.
Strategy: Nicholas Petersen / less.is creates the off-brand variants. Reasoning: he designed the Guardify brand, so he knows exactly what "off-brand" looks like and which specific rule each variant breaks. Nicholas-authored off-brand cases + ~30 real on-brand assets = the most credible methodology we can put in front of a future client.
Updated task 3 ask: when Eric emails Nicholas for the production asset bundle, the ask now also covers 3-5 deliberately-off-brand variants per category (wrong-color logo, stroke-around-logo, pill button vs 4px, non-Guardify gradient, wrong typeface, off-brand photography, improper hexagon overlay). Each labeled with the rule(s) it breaks.
QA framework as separate side project (agreed): the framework is its own architecture — corpus, runner, result store, dashboard — and doesn't belong on the integration kanban. Next session opens a new Todoist project (Brand Bot QA Framework?) and lays out the corpus structure, manifest schema, runner, and /admin/qa dashboard before any test data is loaded. Should be tenant-agnostic from day one (CF and G&M get the same treatment once the framework exists).
Open in queue (Claude can resume on subsequent sessions):
- Task 13 Design Check uploader — needs a 2nd API key with surface=design_check (Eric clicks /admin/api-keys); then build the multipart uploader + report UI calling brand-guide-mcp /api/design-check/[tenantId]
- Task 16 Chat / Q&A — needs a new /api/agent/[tenantId] route on brand-guide-mcp exposing the agent loop with recordedMessagesCreate for unified attribution; then build the chat UI
- Section 3 (tasks 18–23) Design Check Phase 1 calibration — gated on Nicholas's assets + tasks 6/7 / 13
- Section 4 (tasks 24–26) Operational sweeps — brand-guide-mcp CLAUDE.md, ROADMAP.md, PRD.md / PRODUCT-EXTENSIONS.md
- Task 27 Monitor /admin/usage first week (passive, runs once Guardify starts using the URL)
2026-05-05 — End-to-end QA pass (live production)
Eric paused the Nicholas-asset thread (no reply yet, sent 2026-05-04) and asked for a forward push on what could move without Nicholas. Ran a full end-to-end QA against the live https://guardify-brand-bot.vercel.app deploy in chrome-devtools.
Verified working:
- Landing page — hero + 4 surface cards + footer. Clean console (one Vercel deprecation, ignorable). Desktop pristine.
- Brand Explorer (all 9 categories) — colors fully populated with hex/RGB/CMYK/Pantone + 5 gradients + usage rules; logos page handles missing assets gracefully via a yellow "Heads up" callout that says variants/rules are accurate, preview images will light up once assets land at /brand/logos/*; same pattern for icons (sample purposes listed text-only) and photography.
- Brand Check — off-brand sample (4 banned terms) returned 4/5 rules passed, banned-terms rule fired with correct inline highlights and "find a more direct alternative" copy. On-brand sample passed all 5 rules with green ON-BRAND banner.
- Design Check — uploaded the screenshot of the colors Explorer page; got back overall 4.8/5, color analysis (avg ΔE 0.4), vision review across 5 dimensions (palette / typography / tone / messaging / brand feel), full OCR text with high confidence, copy lint pulled from extracted text. Cost displayed: $0.0271. End-to-end flow works.
- Usage attribution — every QA call landed on the right tenant (Guardify), right surface (Direct raw MCP / design_check), right key (...6e20 reissued). The historical 12,487 spike on the revoked ...1a11 key is yesterday's security incident, already addressed by rotation + PR #40 (IP forensics).
- Chat surface — transparent "Coming soon" page (not a broken stub). Text on the page even names the architecture: "Agent loop runs server-side through the brand-guide-mcp choke point so all spend lands in /admin/usage attributed to Guardify."
Findings filed to Todoist (6gX53xPCxFQ4JvXf Ready):
- 6gXCwfwR42QMxjf7 🐛 Design Check cost claim ("about $0.014") understates real cost on text-dense pages (~$0.027 measured)
- 6gXCwg7rFjXJR267 🐛 Numbers lint rule false-positives on hex codes / RGB tuples / CMYK / ΔE — fired 20 times when OCR'd a brand-color reference page
- 6gXCwgGcw4VJ2m67 🧹 Vercel Live Toolbar visible on production — <button "Vercel Toolbar"> and the vercel.live feedback iframe should be hidden from end users
- 6gXCwgQFvRxg94g7 🧹 Header collapses on mobile (390px) to logo only with no hamburger — users can't navigate between surfaces from the header inside any tool
Net read on the integration: Three of four customer-facing surfaces are production-ready. Brand Check and Design Check both worked first try with no errors and produced credible output. The missing-asset placeholder UX for logos / icons / photography is genuinely well-designed (won't feel broken when Eric demos it). Critical product killers — none. The findings filed are polish + accuracy items, not blockers.