Kellen Poole ← All projects

Full-stack · relational data · workflow

Content Operator OS

A full-stack operator dashboard for running multiple content accounts — intake, a review queue, settings, analytics — backed by PostgreSQL, running here with zero config on sample data.

Live demo · read-only preview

Started March 2026 · self-directed

The problem

Running several content accounts scatters decisions across spreadsheets and tabs — there's no single path from a raw idea to an approved-to-post item.

How it works

  1. A 13-table relational schema models the pipeline: source item → candidate → package → score → review queue.
  2. Every mutation is a Next.js Server Action with Zod validation, over a repository that runs on PostgreSQL or a local file store.
  3. Approve / reject / request-revision on the queue, with per-account analytics. The AI generation + scoring step is a clearly-labeled scaffold, not faked.

The story · STAR

S

Situation

Running more than one content account means decisions get scattered, with no clean path from an idea to an approved post.

T

Task

Build the operator's control surface as real database-backed software, not a mocked UI.

A

Action

Designed a thirteen-table PostgreSQL schema and modeled the pipeline as source items becoming candidates, packages, scores, and queue entries. Implemented every mutation as a Server Action with Zod validation over a repository layer that tries SQL and falls back to a local store. Deliberately left generation/scoring as clearly-labeled scaffolds — and for the portfolio made the whole thing run with zero config.

R

Result

The persistence and workflow are real and verified — create an account, push a source item through the pipeline, approve or reject it in the queue, with analytics reading from the store — and it builds and runs with or without a database.

Try it in 20 seconds

  1. Open the live demo — it runs on fictional sample data with a "Portfolio demo" banner; no database needed.
  2. Browse the workflow: Accounts → an account → the Queue (approve/reject) → Analytics → Settings.
  3. The hosted demo is read-only; clone & run locally (npm run dev) for full write interactivity.

Built with

Next.js 15React 19Drizzle ORMPostgreSQLServer ActionsZodTailwind

Status & honest limitations

Working v1, deployed. Persistence, the queue, and analytics are real; the production build runs with or without a database.

  • Generation & scoring are labeled scaffolds (placeholder values), not real AI; external ingestion is planned.
  • The hosted demo is a read-only preview (writes don't persist on serverless) — full interactivity is the local run.
  • Single-operator (no auth) by design.

Self-directed project, built with AI-assisted development. All data shown is fictional sample content.