Skip to main content
Skip to content

Last updated on 4 June 2026

Inkwell - Blog/CMS Template (Next.js)

Blog/CMS starter built on Next.js 16, PostgreSQL, and the Inkwell editorial design tokens. Ships auth scaffolding, Gate 17 compliance wiring, CMS admin, public /blog reader, RSS, sitemap, comments, moderation, and content analytics.

Quick Start

Prerequisites: Node.js 22.13+, pnpm 10+, PostgreSQL 15+.

  1. Clone or extract the ZIP.
  2. cp .env.example .env
  3. pnpm install
  4. Start PostgreSQL: docker compose -f docker-compose.demo.yml up -d
  5. pnpm db:migrate
  6. pnpm db:seed
  7. pnpm dev
  8. Visit http://localhost:3000

Demo credentials:

  • User: demo@example.com / Password123!!
  • Admin: admin@example.com / Password123!!

What's Included

Foundation layer:

  • Auth scaffolding: email/password login, password reset, JWT + refresh, audit-logged failed logins
  • UK / EU / US compliance scaffold (Gate 17)
  • Inkwell theme tokens: warm-sand accent, Lora display, dark + light mode
  • Drizzle ORM + PostgreSQL, Zod validation, structured logging
  • Responsive layout from 375px to 2560px
  • Docker demo environment and Vercel-ready build path
  • Auth flags through SITE_CONFIG

CMS layer:

  • Posts CRUD with Markdown editor, live preview, revisions, scheduling fields, and status workflow
  • Hierarchical Categories and flat Tags with slug auto-generation
  • Public /blog listing and /blog/[slug] article reader
  • CMS-managed static pages at slugs such as /about and /contact
  • RSS feed at /rss.xml and XML sitemap at /sitemap.xml
  • Reader comments with admin moderation queue and author notification emails
  • Media library metadata backed by the upload system
  • Content analytics: per-post views, views over time, popular posts, and top categories

Useful Routes

  • /blog - public article index
  • /about - seeded CMS-managed static page
  • /content - admin CMS studio
  • /content/comments - moderation queue
  • /content/analytics - content analytics dashboard
  • /api/docs - API reference

Tech Stack

  • Framework: Next.js 16 App Router
  • Database: PostgreSQL via Drizzle ORM
  • Auth: JWT access tokens + httpOnly refresh cookies
  • Payments: Not included in Inkwell Blog/CMS Lite; add checkout/payment processing before accepting money.
  • Styling: Tailwind CSS v4 + shadcn/ui
  • Theme: Inkwell (Warm Sand, Lora display)

Environment Variables

See .env.example for all required variables. For production, set:

  • DATABASE_URL or POSTGRES_*
  • JWT_SECRET
  • OAUTH_STATE_SECRET when OAuth is enabled
  • NEXT_PUBLIC_APP_URL
  • SEED_PASSWORD if DEMO_MODE=true on a public deployment

Documentation

Version

  • Version: 1.14.0
  • Edition: Inkwell
  • Stack: Next.js