Repository navigation
Portfolio Admin CMS Architecture
Turn the portfolio into a database-driven personal CMS without redesigning the protected public visual components.
The following components are design-protected and must not be redesigned as part of CMS work:
- Homepage fullscreen hero and typography composition
- Primary navigation structure and visual behavior
- Side profile card interaction
- Day/Night theme switcher and dark-first behavior
-
/projectslist archive presentation -
/blogeditorial list archive presentation - Selected transitions and responsive behavior
CMS integration may replace hardcoded content with database values, but must not replace or reinterpret these components.
- Site status
- Current Site Mode
- Draft counts
- Recent edits
- Scheduled publications
- Project status summary
- Quick actions
Editable content only:
- Hero text lines
- Intro copy
- Location/status copy
- Social links
- Profile card content
- Availability state
The hero layout itself remains code-controlled.
- Create/edit/archive projects
- Slug
- Title
- Description
- Status
- Category
- Technologies
- Tools
- Repository/demo links
- Role/team/timeline
- Case study blocks
- Sort order
- SEO
- Draft/review/publish workflow
- Revision history
Post types:
- Article
- Poetry
- Thought
- Note
- Project Log
Features:
- Rich text editor
- Poetry-friendly whitespace handling
- Categories/tags
- Draft/review/publish/archive workflow
- Scheduled publishing
- SEO
- Revision history
- Preview before publishing
Editable structured content for pages such as About and Contact while preserving their code-defined layouts.
- Labels
- URLs
- Order
- Visibility
- External-link state
- Upload
- Alt text
- Caption
- Dimensions/type metadata
- S3-compatible storage
Modes:
- NORMAL
- MAINTENANCE
- COMING_SOON
- PRIVATE
- ARCHIVE
Features:
- Optional scheduled start/end
- Admin bypass
- Optional password for private mode
- Editable maintenance/coming-soon message
- Optional countdown
- Optional social/contact display
CMS may control only safe theme tokens:
- Default theme
- Day mode enabled/disabled
- Accent color
- Approved color tokens
The CMS must not expose layout spacing, breakpoints, hero font sizing, animation timings, or component positioning.
- Global defaults
- Per-project metadata
- Per-post metadata
- Per-page metadata
- Canonical support
- Open Graph defaults
- Source path
- Target path
- Permanent/temporary state
Roles:
- OWNER
- ADMIN
- EDITOR
Only OWNER and ADMIN may change Site Mode, users, global site settings, and destructive configuration.
- PostgreSQL
- Prisma ORM
- Auth.js for admin authentication
- Tiptap for structured rich-text editing
- S3-compatible object storage for media
- Build the database and authentication foundation.
- Build the protected
/adminshell. - Add Site Mode first.
- Add Projects and Blog CRUD.
- Migrate existing hardcoded project/blog data into PostgreSQL.
- Connect protected public components to database content without changing their visual markup.
- Add Homepage/Pages/Navigation editors.
- Add Media, SEO, redirects, analytics, and revision restore.
Do not redesign a protected public component while converting it from static data to CMS data. Data integration and visual redesign must be separate changes and separate review decisions.