Erik.
~/home/projects/workspace
$cat README.md01 / OVERVIEW

Workspace

A self-hosted project workspace for organizing personal software projects, notes, and progress logs in one place.

TYPEPersonal Project
ROLEFull Stack
PERIOD2026
LINKS
TECHNOLOGY STACK
Next.jsTypeScriptPostgreSQLDockerTailwindCSS
~/home/projects/workspace[ 01 / 05 ]web / platformpreview
Workspace - image 1
ASSETS / SCREENSHOTS
02 / CONTEXT

The context

Workspace is a self-hosted tool built to keep track of personal software projects, environment variables, technical decisions, and progress logs in one place.

Instead of scattering notes across markdown files, chat messages, and browser bookmarks, the application organizes project information around structured entries that are quick to update and review.

03 / WHAT I DID

What I did

/frontend
Built the responsive interface with Next.js and Tailwind CSS, handling project filtering, entry editing, and client state.
/backend
Implemented REST endpoints, database schema in PostgreSQL, and simple session-based authentication.
/infrastructure
Configured multi-stage Docker builds and Docker Compose for development and self-hosted server deployment.
04 / UNDER THE HOOD

Under the hood.

01 / ARCHITECTURE

Containerized deployment

The application runs as a containerized service behind an Nginx reverse proxy handling SSL termination and request routing.

02 / PERSISTENCE

PostgreSQL database

Project records, changelogs, and tags are stored in PostgreSQL with automated schema migrations.

03 / DATA FLOW

Server actions and caching

Next.js server actions handle mutations and revalidate cached paths on demand to keep navigation responsive.

04 / ENVIRONMENT

Docker Compose network

App, database, and backup containers communicate over an isolated bridge network with mounted host volumes.

05 / NOTES

Notes

What changed

Started with SQLite for simplicity, then migrated to PostgreSQL once relational queries between tags, logs, and projects grew.

What I learned

Configuring container volume permissions properly in Docker Compose avoids file permission errors during automated builds.

What I'd do differently

Keep the initial schema smaller before adding tag filtering and search indices.