Most portfolios are static. Mine isn't. 🖥️
A few weeks ago I posted about deploying V2 of my site. What I didn't go into was the admin panel running behind it - so here's what's actually in there.
📊 The dashboard shows live server stats: CPU, memory, disk, and network, all polling every five seconds via psutil. Below that is a recent activity feed pulled from an immutable audit log that records every significant action across the system - logins, failed logins, content changes, session revocations, role changes. Filterable, exportable to CSV, and completely tamper-proof once written.
✍️ Posts and projects have full CRUD with a markdown editor, live split-pane preview, and autosave every 30 seconds. The project form has a GitHub OAuth integration that pulls your public repos and auto-fills fields when you select one.
👥 The users section handles two roles: admin and viewer. Viewers can read everything but are blocked from all write operations at the server side, not just the UI. You can't delete or demote your own account.
🔐 Session management shows every active session with IP, user agent, and a last-seen timestamp updated by a 60-second heartbeat. Individual or bulk revocation, with your own session locked from self-revocation.
📡 The terminal panel is probably my favourite part - a live system monitor with a record mode that captures readings to a session table you can download as a CSV.
None of this is visible to anyone visiting the site. That's the point. The public side is clean and simple. The infrastructure behind it is what I'm actually interested in building.
charles-thomas.dev if you want to see the front end.