In this article series we walk through building decoupled architectures. The end goal is a time-tracking application for a small company. Along the way we break down each component—from server setup to a React user interface.
Project overview
The app will help a company manage time spent on different projects. It is shaped around three roles:
- Administrator: Full control—create users and projects, and assign roles per project.
- Manager: Create tasks inside projects, assign them to users, and review time logged on tasks.
- Worker: Log hours on tasks they are assigned to.
Users can hold different roles in different projects, so responsibilities and access stay flexible.
Core tools
We rely on a small but powerful stack (with common alternatives called out in the originals):
- Debian 11 server — open OS baseline for infrastructure (alternatives: Ubuntu Server, CentOS).
- PostgREST — auto-generates a REST API from PostgreSQL (alternatives: Express, Django REST).
- Nginx — web server and reverse proxy (alternatives: Apache, Caddy).
- React — UI library for an interactive frontend (alternatives: Vue, Angular).
- PostgreSQL — relational database engine (alternatives: MySQL, SQLite).
How the series is structured
Each instalment focuses on one slice of the system. A preview of what follows:
- Debian 11 server setup — still documented on the Spanish archive URL; no English twin yet.
- PostgREST implementation — standing up the auto-generated REST API.
- Nginx — reverse proxy, TLS, and safer exposure of PostgREST.
- React frontend — screens and flows for the product.
- Users and roles — admin workflows for membership and permissions.
- Tasks — managers create and assign work.
- Time entries — workers log hours against tasks.
We are excited to keep publishing this thread—and we hope it helps you reason about decoupled stacks in your own projects. Questions and comments welcome as we go.