Boondoggling.ai — Software Design Document

March 30, 2026

Complete governing specification for Boondoggling.ai — a hybrid learning platform and prompt library that moves developers from "I use Claude" to "I conduct Claude."

Version 1.0 Owner: Nik Bear Brown Produced with Gru Complete — Ready to Govern Implementation

1. One-Page Problem Summary

Core Problem Statement This system is a hybrid learning platform and prompt library for developers and technical creators who use Claude regularly but have never encountered structured AI-assisted build methodology — solving the absence of a guided, practice-based path from "I use Claude" to "I conduct Claude."

The platform delivers its solution through a scrolling homepage that tells the story of boondoggling from first principles, a /dev section of real annotated Gru projects as worked examples, a /tools prompt library where Gru and companion tools can be copied into any Claude Project, and video instruction throughout.

It occupies the space between a methodology explainer (reads but can't practice) and a raw Claude conversation (can practice but teaches nothing).

Success Condition A developer who uses Claude daily arrives, understands the solve-verify asymmetry, copies the Gru system prompt, runs it locally, and completes a real build using the methodology — without needing to ask anyone how.

2. Architecture Principles

Principle 1

Teaching Outcome Over Feature

Every component earns its place by advancing the learner toward running a Gru build independently. If it doesn't, it doesn't ship.

✓ Honors: a video that walks through a real Boondoggle Score step by step.

✗ Violates: an animated section that visualizes the five supervisory capacities without connecting them to a concrete action.

Production failure state: the site becomes a brand site for boondoggling instead of a platform that produces boondogglers.

Principle 2

YouTube + Substack, Not Textbook

Teaching happens in video and in writing that reads like a person thinking out loud. The site points to content; it does not replace it.

✓ Honors: a blog post that works through one specific failure in a Boondoggle Score.

✗ Violates: a "Course" section with locked modules and progress tracking.

Production failure state: the site drifts toward LMS territory. Content becomes obligation rather than destination.

Principle 3

Audit Before Publish, Tool-Assisted

No community-contributed content goes live without a structured quality review. The audit tool runs locally in the admin's Claude Project. The publish decision is the admin's judgment call.

✓ Honors: every /dev submission goes through the Doc Audit Prompt before publish.

✗ Violates: publishing any doc that arrives because volume feels better than quality.

Production failure state: /dev fills with incomplete SDDs that teach bad habits.

Principle 4

Identical Stack, No Exceptions

Every technical decision defers to the Musinique codebase. Same patterns, same components, same deployment model.

✓ Honors: porting the Musinique /dev filesystem pattern directly.

✗ Violates: introducing a new ORM or auth library.

Production failure state: two codebases that drift apart. A solo developer maintaining two divergent infrastructure patterns.

Principle Collision Resolutions

3. Core User Flows + System Interaction Map

Flow 1 — Learner's First Run (Primary Flow)

LEARNER ARRIVES AT /
├── BEAT 1: What is boondoggling? (conductor metaphor, solve-verify asymmetry)
├── BEAT 2: Why does it matter? (five supervisory capacities)
├── BEAT 3: How does it work? → links to /videos for depth
├── BEAT 4: Get the tool → /tools → copy Gru → paste into Claude Project
└── BEAT 5: See it in action → /dev worked examples, /videos

Flow Honesty Test: if this flow were a command-line prototype with no UI — just a README and a copy-paste prompt — would it solve the stated problem? Yes. The site is a surfacing layer, not the core value.

Flow 2 — Tools and Worked Examples (Returning Learner)

/tools → browse card grid → tool detail page → copy prompt → paste into Claude Project
/dev   → browse card grid (category-grouped) → open doc → read SDD in sandboxed iframe
         → optional: navigate to real build (external link)

Flow 3 — Admin Submission-to-Publish

Submission arrives (email/DM)
→ Admin creates draft in dashboard
→ Admin runs Doc Audit Prompt locally (Claude Project)
→ Decision: publish / return for revision / decline
→ Published: quality signal set, category assigned, doc visible in /dev

System Interaction Map

EXTERNAL              BOONDOGGLING.AI           LEARNER'S LOCAL ENV
────────              ───────────────           ───────────────────
YouTube          ←──  /videos
Vercel Blob      ←──  /dev (community uploads)   Claude.ai /
                 ←──  /blog (cover images)        Claude Code
Neon PostgreSQL  ←──  blog_posts                     │
                 ←──  tools                    ← Gru system prompt
                 ←──  videos                     (copied from /tools)
                 ←──  dev_docs
Vercel           ←──  deploy on push to main

4. User and Business Needs

User Needs

UN-1

A new learner must be able to understand what boondoggling is and why it changes how they build with Claude, when arriving for the first time, without reading a wall of documentation before the concept lands.

Test: reads first two homepage sections, can state the solve-verify asymmetry in their own words.

UN-2

A learner must be able to copy the Gru system prompt and have it running in a Claude Project, when ready to try it, without leaving the site to find instructions, create an account, or wait for access.

Test: time from "I want to try this" to Gru running in a Claude Project is under three minutes.

UN-3

A learner must be able to study a complete, real Gru SDD project — including the Boondoggle Score — when they want to understand what a finished build looks like, without the example being synthetic, incomplete, or stripped of decisions.

Test: can identify Problem Summary, at least one architecture principle, and one Boondoggle Score step with its handoff condition.

UN-4

A learner must be able to go deeper on any concept through video, when reading is not enough, without the video being buried or disconnected from the concept it teaches.

Test: can reach a video explaining the five supervisory capacities in one click from the homepage.

UN-5

A returning learner must be able to find a specific concept, command, or worked example quickly, when mid-build and needing a reference, without re-reading the whole site.

Test: can find the definition of a handoff condition and an example in under sixty seconds.

UN-6

A practitioner who has completed a real Gru build must be able to submit their SDD as a worked example, when they want to contribute, without needing a GitHub account or technical knowledge beyond what they used to build.

Test: can submit and receive publish confirmation or specific audit feedback within one admin review cycle.

Operator Needs

ON-1

The operator must be able to publish blog posts, add tools, upload videos, and add /dev docs without touching the codebase or redeploying.

ON-2

The operator must be able to review a community submission, run the audit prompt locally, and make a publish/return/decline decision using only the admin dashboard and a local Claude Project.

ON-3

The operator must be able to assign and update quality signals (Featured / Community) on /dev docs and /tools entries without a code change.

Business Needs

BN-1

The site must demonstrate that boondoggling produces real, finished builds — not just theory. Every Featured /dev doc links to a verifiable external build.

BN-2

The site must grow the library of Gru variants and companion tools over time through community contribution.

BN-3

The site must feel like a Bear Brown & Company property — same visual language, same technical patterns as Musinique.

5. Core Component Documentation

Component 1 — Homepage Scroll Arc

Needs: UN-1, UN-2, UN-4, BN-1

Five discrete static scroll sections. No JS-gated progression. Each beat: headline, 2–4 sentences, one contextual action. Beat 4 is the primary CTA (link to /tools/gru). Stateless — no session, no cookie, no progress tracking.

Component 2 — /tools Prompt Library

Needs: UN-2, UN-5, BN-2, ON-1–ON-3

Hybrid card grid: filesystem-driven (artifact tools in /public/tools/) + DB-driven (prompt and link tools). Each tool detail page: description, how-to-use instructions, version, copy button, clipboard fallback (<pre> + "Select all"). Character count displayed for prompt-type tools.

Component 3 — /dev Worked Examples

Needs: UN-3, UN-5, BN-1, BN-2, ON-1–ON-3

Two-source hybrid. Filesystem docs (/public/dev/WWW/, /Agents/, /Games/, with /gru/ subfolder in each) + community uploads (Vercel Blob + dev_docs DB table). Card grid groups by category, Gru-badged within each group. Full-viewport sandboxed iframe viewer. Named error component on Blob 404 or missing file.

Filesystem taxonomy:
/public/dev/
  WWW/gru/      Agents/gru/      Games/gru/

Community uploads: flat slug, category required before publish, <meta name="methodology" content="gru"> for Gru badge.

Component 4 — /videos Video Library

Needs: UN-4, UN-5, ON-1

DB-driven, identical to Musinique. YouTube embeds (youtube-nocookie.com) + Vercel Blob uploads. Search, tag filtering, pagination, pinned videos. Direct YouTube link fallback below every embed.

Component 5 — /blog

Needs: UN-5, BN-1, BN-3, ON-1

Identical to Musinique. Tiptap editor, DB-driven, Vercel Blob cover images, D3 viz hydration. Nik-authored only. Voice: argument and narrative, not reference documentation.

Component 6 — Admin Dashboard

Needs: ON-1, ON-2, ON-3

Identical auth to Musinique (HMAC-SHA256, httpOnly cookie, 7-day expiry). Tabs: Blog, Tools, Dev, Videos.

New vs. Musinique: Tools tab adds prompt_text, quality_signal, version, published fields. Dev tab adds HTML file upload → Vercel Blob, category (required before publish), methodology, quality_signal, build_url, draft/publish toggle, admin notes field (audit report).

6. External Integrations and Dependencies

IntegrationPurposeRiskFailure Behavior
VercelDeploy + serverless functionsHIGH — sole compute layerPrevious deployment stays live on build failure
Neon PostgreSQLAll DB contentMEDIUM — filesystem content survivesBlog/videos degrade; /tools artifact + /dev filesystem survive
Vercel BlobCommunity HTML uploads + blog imagesLOWNamed error component; filesystem content unaffected
YouTubePublic video embedsLOWDirect link fallback; course videos unaffected
Core Path Resilience No integration is a hard dependency for the core teaching path (prompt copy). That flow survives failure of every external service except Vercel.

7. Data Architecture and State Management

State model: Stateless server, stateless client. No global state store. React useState only, component-scoped. No localStorage.

Key Schema

-- New table
CREATE TABLE IF NOT EXISTS dev_docs (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  title TEXT NOT NULL,
  slug TEXT UNIQUE NOT NULL,
  description TEXT,
  blob_url TEXT NOT NULL,
  build_url TEXT,
  quality_signal TEXT DEFAULT 'community',
  category TEXT,           -- 'www' | 'agents' | 'games' — required before publish
  methodology TEXT,        -- 'gru' | null
  submitted_by TEXT,       -- display name / handle only — no email
  published BOOLEAN DEFAULT false,
  published_at TIMESTAMPTZ,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  updated_at TIMESTAMPTZ DEFAULT NOW()
);

-- Extended from Musinique
ALTER TABLE tools ADD COLUMN IF NOT EXISTS prompt_text TEXT;
ALTER TABLE tools ADD COLUMN IF NOT EXISTS quality_signal TEXT DEFAULT 'community';
ALTER TABLE tools ADD COLUMN IF NOT EXISTS version TEXT DEFAULT '1.0';
ALTER TABLE tools ADD COLUMN IF NOT EXISTS published BOOLEAN DEFAULT false;

-- Integrity constraint
ALTER TABLE videos ADD CONSTRAINT video_source_required
  CHECK (youtube_id IS NOT NULL OR blob_url IS NOT NULL);

Migration Run Order

  1. CREATE dev_docs
  2. ALTER tools (4 columns)
  3. ALTER dev_docs (category, methodology)
  4. ADD video CHECK constraint
  5. Backfill tools (published=true, quality_signal='curated')
  6. RLS policies

8. Domain Model and Entity Definitions

Ubiquitous Language

Boondoggling
The practice of conducting Claude through a build by assigning each task to the correct labor, sequencing by dependency, and making every handoff condition explicit. Reject: "A workaround"
Boondoggle Score
The sequenced, dependency-ordered output of /claude — separating Claude tasks from human tasks with copy-pasteable prompts and handoff conditions. Reject: "The build plan" — the SDD is the build plan.
Gru
The system prompt that instantiates the Gru persona in a Claude Project. Reject: "The AI" — Gru is a role, Claude is the AI.
Tool
A system prompt or HTML artifact hosted in /tools that runs in the learner's local Claude environment. Reject: "A feature of the site"
Worked Example
A complete, real Gru SDD project hosted in /dev. Reject: "A demo" — demos are synthetic.
Quality Signal
Admin-assigned curation label: Featured or Community. Reject: "A rating"
Handoff Condition
A specific, testable statement of what must be true about a Claude task's output before the next step begins. Reject: "Done criteria"
Learner
Anonymous developer/creator acquiring the methodology. Reject: "User" — no account at launch.
Contributor
Practitioner who submits an SDD or tool variant. Reject: "User"

Core Entities

Bounded Context One context: Content Distribution. No commerce, no identity, no analytics domain at launch.

9. API Contract Documentation

EndpointMethodAuthNotes
/api/admin/loginPOSTNoneSets admin_session cookie
/api/admin/logoutPOSTAdminClears cookie
/api/blogGET/POSTGET: none, POST: admin
/api/blog/[id]PATCH/DELETEAdmin
/api/toolsGET/POSTGET: none, POST: adminprompt_text required for type=prompt
/api/tools/[id]PATCH/DELETEAdmin
/api/devGET/POSTGET: none, POST: admin
/api/dev/uploadPOSTAdminMultipart; 5-step validation; Blob then DB
/api/dev/[id]PATCH/DELETEAdminDELETE: Blob failure never blocks DB delete
/api/videosGET/POSTGET: none, POST: admin
/api/videos/[id]PATCH/DELETEAdmin
/api/uploadPOSTAdminImages (5MB) + course videos (500MB)

Global Behavior Guarantees

Critical Endpoint — /api/dev/upload

Five-step server-side validation: (1) content-type HTML, (2) ≤500kb, (3) HTML signature check, (4) slug unique in DB, (5) / disallowed in slug. Blob write → DB insert (sequential). Blob failure = clean error. DB failure after Blob success = orphaned file logged, admin retries safely.

10. Data Flow and Sequence Diagrams

Core Flows

Learner Copies Gru Prompt

GET /tools → merge filesystem + DB → GET /tools/gru → tool detail page (prompt_text in DOM) → clipboard API → no server call. Survives Neon outage if Gru is filesystem artifact.

Learner Views /dev Doc

GET /dev → merge filesystem + DB → GET /dev/[slug] → resolve source (filesystem or Blob) → browser loads iframe src → sandboxed render. Blob 404 → named error component.

Admin Uploads Community Doc

POST /api/dev/upload → validate → Blob put() → INSERT dev_docs (draft) → admin runs audit prompt locally → PATCH published=true.

Design Constraint No chatty interfaces. Every user-facing flow completes in 1–2 API calls. No async event architecture at launch.

Latency Profile

CallLatency ClassFallback
Neon SELECT on page loadMedium (100–500ms)Filesystem content survives
Vercel Blob put()Slow (>500ms)Clean error, admin retries
Vercel Blob GET (iframe)Fast (<100ms, CDN)Named error component
YouTube iframeFast (<100ms, CDN)Direct link fallback

11. Component List with Priority Tags + MVS Spec

Priority Distribution MUST-BUILD: 18 items (47%) · IMPORTANT: 11 items (29%) · NICE-TO-HAVE: 7 items (18%) · EXPERIMENTAL: 3 items (8%) — user accounts, community form, Substack

MVS Verdict

The core loop is complete at MUST-BUILD only: learn the concept (homepage) → get the tool (/tools) → study real builds (/dev) → watch instruction (/videos) → read methodology (/blog) → admin publishes content without redeploying. Search, filtering, and polish (IMPORTANT) improve but do not break the experience.

Critical MUST-BUILD Items (Net-New, Not Ported)

ItemWhat It Is
Homepage scroll arcStatic 5-beat page — no framework complexity
Admin dev tab + uploadMost complex admin tab; Blob + DB write sequence
/api/dev/upload5-step validation, Blob then DB
Category/Gru taxonomyFilesystem directories + meta tag read
Iframe sandbox + errorOne JSX attribute + one error component
Quality signal on cardsOne DB field + one CSS class
Admin: Doc Audit PromptContent entry in /tools — zero code

12. Out of Scope

Binding record of decisions. Reopening requires a documented reason with a date.

ItemReasonReopen Condition
User accountsNo auth surface needed at launchv2
Progress trackingRequires accountsv2
On-site Claude APINo API proxy; learner runs locallyPermanently excluded unless business model changes
Community submission formEmail/DM sufficient at launchv2
Automated on-site auditPublish decision is irreducibly humanPermanently excluded
Substack integrationNot in content strategy at launchv2
Course module systemViolates P2Permanently excluded
Blog/dev commentsRequires moderation infrastructurev2
Paid contentNo commerce contextSeparate SDD required
Admin analytics dashboardVercel Analytics sufficientv2
Multi-admin / RBACSolo operator at launchv2
Mobile appDesktop use caseNot planned
Global searchHigh complexity, low launch valuev2
Tool version diff UIversion field sufficient at launchv2
i18nEnglish onlyFuture

13. Infrastructure and Deployment Requirements

Stack: Next.js 15 (App Router), TypeScript 5, Tailwind CSS, Vercel, Neon PostgreSQL, Vercel Blob. Identical to Musinique.

Domain: boondoggling.ai — DNS pointed to Vercel before launch.

Environment Variables

DATABASE_URL
ADMIN_PASSWORD
BLOB_READ_WRITE_TOKEN
NEXT_PUBLIC_SITE_URL=https://www.boondoggling.ai
NEXT_PUBLIC_GA_ID (optional)

Pre-Launch Checklist

14. Risk Register

RiskLikelihoodImpactMitigation
Unsandboxed community HTML (XSS) High High sandbox attribute on all community iframes — non-negotiable
Principle drift during implementation Medium High SDD is the reference; run /g2 before v2 planning
Content drought at launch Medium High Three Featured docs + five videos required before launch date is set
Blob orphan accumulation Medium Low Log orphaned URLs; monthly manual cleanup; v2 cleanup job
Admin publishes without audit Medium Medium UI reminder in dashboard; technical enforcement in v2
Category taxonomy inadequate Low Low–Medium New category = new subdirectory, no code change
Gru prompt exceeds Claude Project limit Low High Character count on tool detail page; split prompt as contingency

15. Open Questions Log

All 15 questions resolved except one:

OQ-13 — Video CHECK Constraint

Must be included in migration script before launch. Owner: Nik Brown.

Status: Non-blocking until migration run.

v2 Planning Inputs

User auth provider · community submission form + privacy policy · global search index · orphaned Blob cleanup job · audit checkbox enforcement · fourth /dev category trigger · Substack newsletter