Personal project

View source on GitHub

A personal platform for building and learning in public

I am developing a self-hosted web application that brings my public portfolio together with private tools for learning and managing personal projects. The portfolio and foundations are in place, and the resource library is the clearest example of a complete data-backed workflow; other areas are being built incrementally.

Current focus
Portfolio and learning tools
Core stack
Next.js, TypeScript, PostgreSQL
Hosting
Self-hosted on my homelab + CloudFlare

Current state

What is already built

The application has a public portfolio and a separate, password-protected workspace. The codebase also contains planned destinations whose product features are not complete yet; the distinction matters because this is an active project, not a finished suite of tools.

Public portfolio
A homepage presents my profile, experience, awards, and project links. The projects area is public, so individual project write-ups can be read without access to the private workspace.
Resource library
The most developed private workflow organises learning resources by category, subcategory, and topic, then displays the associated links. Resource data is stored in PostgreSQL; adding resources is restricted to an authenticated administrator.
Personal workspace
The dashboard groups the planned career, media, and finance areas. Career navigation already maps out tools for study and professional development, while most of those pages remain early scaffolds. Media and finance currently have their section entry pages rather than complete workflows.
Resource library structure
A diagram showing how categories, subcategories, topics, and resources fit together.

Under the hood

Architecture and technology

I have been building the application as a full-stack system, connecting the interface to persistent data, authentication, and a repeatable deployment setup.

  • Application: Next.js App Router with React and TypeScript, using server components for data-backed pages and server actions for validated changes.
  • Data: PostgreSQL with Drizzle ORM, a relational schema, and checked-in database migrations. Resource queries are separated into repository and service layers.
  • Access: NextAuth credentials authentication and role-based path access keep personal tools private while the portfolio and project pages remain public.
  • Interface and deployment: Tailwind CSS 4 for responsive styling; Docker builds a standalone application image, with Compose defining the PostgreSQL service. The site runs on my homelab.
Application architecture
A system diagram tracing a request from the browser through Next.js, the service and repository layers, and PostgreSQL, with authentication around private routes.

What I am practising

Skills developed through the project

  • Full-stack feature development: taking a workflow from page structure and navigation through validation, persistence, and access control.
  • Data modelling: representing categories, topics, resources, and their relationships in a schema that supports the way I browse and maintain study material.
  • Application boundaries: separating UI, service, repository, and database concerns, while keeping private operations on the server.
  • Product judgement: shipping a useful foundation in stages, keeping public portfolio content clear, and being explicit about what is implemented versus planned.

Next stages

Where the project is going

The longer-term structure has three personal areas: career tools to support my studies, a media server for digital copies of physical media I own, and finance tools for personal tracking and future market analysis. These are plans, not features I am presenting as complete.

I also plan to host interactive projects here as they are built. That lets the site grow into a practical home for my work, while keeping the personal workspace available only to me.