edwardcho.dev

Project

edwardcho.dev: Portfolio Platform + Editor Lab

Focused personal portfolio plus private editor lab for drafting, revision-aware authoring, and publishing workflow experiments, built with Next.js, Clerk, Prisma, PostgreSQL, and Zod.

Published 3/26/2026

I built this platform to support two needs in one system: a focused public portfolio and a private workspace for drafting, revising, iterating, and preparing content for publication.

At a Glance

Role
Product design, system design, and full-stack implementation

Scope
Public portfolio + private editor lab

Focus
Content operations and publishing workflows

Stack
Next.js, Clerk, Prisma, PostgreSQL, Zod, Vercel Blob

Public Demo

Try a public walkthrough of the editor workflow using seeded sample content. Changes reset on refresh.

Try Public Editor Demo

Context

The core challenge was keeping the public site focused and credible while giving myself a private environment for testing publishing workflows, content operations, and product ideas without exposing unfinished work to visitors.

I also used the project to explore editorial workflows more deeply by working through how drafting, revision history, media handling, and public delivery fit together in one platform.

Product Surface

  • Public portfolio surface designed for fast review, focused storytelling, and clear navigation around selected engineering work.
  • Private editor lab at /documents for authenticated drafting, editing, image upload, and revision-history workflows before content moves into public view.
  • Public editor demo at /demo/editor that reuses the same workspace UI with seeded sample content so visitors can walk through editing, revisions, publishing, and image upload behavior safely.
  • Revision-aware authoring model that preserves document history instead of relying on overwrite-only editing, making iteration safer and future publishing flows easier to support.
  • Markdown-based content flow that supports inline images across editor preview and published pages.

Technical Decisions

  • Next.js App Router + Route Handlers to keep rendering and mutation paths in one application surface and reduce coordination overhead as the platform evolves.
  • Clerk authentication boundaries to isolate private editing and API mutation flows while keeping the public portfolio simple and accessible.
  • Prisma + PostgreSQL persistence for predictable data access, durable revision storage, and a content model that can support future workflow expansion.
  • Zod request validation to enforce consistent mutation contracts and fail fast when requests do not match expected input.
  • Vercel Blob-backed image uploads to support document-scoped media, validate upload constraints, and keep markdown rendering consistent across preview and published content.

Current Outcomes

  • The public portfolio stays focused because drafting and editing happen in a separate authenticated surface.
  • The platform now supports revision-preserving authoring instead of overwrite-only content updates.
  • Revision comparison v1 now supports comparing a selected revision against older saved versions for faster editorial review.
  • Image uploads are part of the writing workflow, with uploaded media rendered in preview and public markdown pages.
  • One shared system foundation now supports both portfolio presentation and ongoing publishing-workflow experimentation.

Next Milestones

  • Harden the publishing workflow with slug conflict guidance, publish previews, and clearer status transitions.
  • Expand blog and project presentation templates while keeping one shared content model.
  • Deepen revision comparison tooling with clearer diff workflows, better visual polish, and revert support.