Skip to content

Repository files navigation

Fast Dog Coding Website

License: MIT

The public portfolio site for Fast Dog Coding — a server-driven UI (SDUI) showcase built with Next.js, GraphQL, and Prisma. The site demonstrates principal-level architecture by being one of the projects in its own gallery.

Live site:fastdogcoding.com
Codebase version: 1.0.0 (Website v2)

What makes this different

Most portfolio sites are static brochures. This one works like a browser:

  • Vocabulary — section type strings (hero, exhibit, testimonial, …) mapped in SectionRenderer
  • Documentpages + ordered page_sections rows pointing at reusable sections
  • Renderer — maps each type to a React component without hard-coded routes per page

Add a new page by seeding the database. Add a new section type by creating one component and one map entry. Swap the database and you could run a different site from the same codebase.

Tech stack

LayerChoice
FrameworkNext.js 16 (App Router, TypeScript)
StylingTailwind CSS v4
APIGraphQL (Apollo Server 5) — queries only
DataPostgreSQL via Prisma 7
DeployVercel

Quick start

Prerequisites: Node.js 20+, PostgreSQL

git clone https://github.com/Fast-Dog-Coding/website.git
cd website
cp .env.example .env
# Edit .env — set DATABASE_URL, REVALIDATION_SECRET, NEXT_PUBLIC_SITE_URL
createdb fdc_website # if needed
npm install
npx prisma db push
npx prisma db seed
npm run launch # loads .env, checks DB, starts next dev

Open http://localhost:3000.

Common scripts

CommandPurpose
npm run launchDev server with environment checks (scripts/dev.sh)
npm run devNext.js dev server only
npm run buildProduction build (Vercel: scripts/vercel-build.sh)
npm run testVitest in watch mode
npm run test:runVitest single pass (CI)
npm run db:pushSync Prisma schema to the database
npm run db:seedRe-seed content (idempotent)

Project layout

src/
├── app/ # Routes, API (GraphQL, revalidate), SEO
├── _components/
│ ├── SectionRenderer.tsx # SDUI "browser engine"
│ ├── sections/ # Section vocabulary components
│ └── ui/ # Shared primitives
├── lib/
│ ├── graphql/ # Schema and resolvers
│ └── gql/ # In-process fetch for Server Components
prisma/
├── schema.prisma # Canonical data model
└── seed.ts # Production content

Documentation

FilePurpose
CONTEXT.mdArchitecture handoff — start here for deep context
Technical_Design_Spec.mdOriginal design blueprint (historical; app has evolved)
TRADEMARK.mdBrand guidelines for forks
AGENTS.mdNotes for AI coding assistants

When the TDS and the running app disagree, trust the code and CONTEXT.md.

Testing

Vitest covers GraphQL resolvers and SectionRenderer grouping logic. Tests run without a database connection.

npm run test:run

CI runs on every push and pull request. Production Vercel builds also run tests before next build.

Deployment

Pushes to main deploy to Vercel automatically. The build script (scripts/vercel-build.sh) runs prisma generate, prisma db push, tests, then next build.

Required Vercel environment variables:

VariablePurpose
DATABASE_URLPostgreSQL (Neon pooled URL)
DATABASE_URL_UNPOOLEDDirect URL for db push during build
REVALIDATION_SECRETBearer token for on-demand revalidation
NEXT_PUBLIC_SITE_URLCanonical URL (https://fastdogcoding.com)

Forking

This project is MIT licensed. You are welcome to fork and adapt it for your own portfolio. Please replace Fast Dog Coding branding and see TRADEMARK.md for trademark boundaries.

Author

Grant Lindsay — Principal Software Architect, Fast Dog Coding, LLC
grant@fastdogcoding.com

About

Fast Dog Coding portfolio site — Next.js SDUI, GraphQL, PostgreSQL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages