Overview
The goal was a personal engineering platform that a single owner can operate: public marketing pages and a real content system, not a hardcoded brochure.
Problem statement
New work had to show up on listing pages, detail pages, and the homepage without a deploy for every paragraph.
Requirements and constraints
Server-rendered public pages. Unique slugs. Drafts invisible to visitors. Editable navigation. Contact inquiries stored for follow-up. No confidential client material in the seed content.
Proposed architecture
Laravel handles routing, validation, and authorization. Blade renders the public site and a Kaiadmin-based dashboard. PostgreSQL or SQLite stores the content. Media uses the public disk.
Database design
Projects, posts, skills, experience, products, and services are relational tables. Tags use a pivot. Settings are key-value records. Soft deletes cover content that may need to be restored.
API design and authentication
The first release is server-rendered. A public API can be added later without changing the content model.
Security
Admin routes require an authenticated owner or editor. Passwords are hashed. Contact submissions are rate-limited and include a honeypot. Uploads are restricted by type and size.
Performance
Listing pages are paginated. Settings are cached briefly and cleared on save. Public HTML is not cached, so a draft cannot leak from a stale page.
Testing and deployment
Feature tests cover draft visibility, contact storage, admin authentication, and the sitemap.
Challenges and lessons
Making the admin feel like a working CMS without pretending unpublished sample work is a client result.
Verified results
Owners can publish and unpublish content from the dashboard. No performance percentage is claimed here.