Case study · June 2026

DocVault — document control

A document versioning tool for a real QA process at my workplace — a React/TypeScript frontend built against a versioned-upload, role-based API, orchestrated with Docker Compose alongside Postgres. Backend in active development.

React·TypeScript·Node.js·Docker Compose·PostgreSQL·Nginx·S3

The bakery I work at tracks its QA paperwork — SOPs, cleaning checklists, training records — the way a lot of small operations do: shared folders and whoever remembers to update the file. Versions go stale, nobody's sure which copy is current, and there's no record of who changed what. DocVault is my attempt to actually fix that: a tool for a real problem I sit next to every shift, not a tutorial project.

Architecture

Three services, wired together with Docker Compose:

Service Role
frontend React + TypeScript, built with Vite, served by Nginx
backend Node.js API — documents, versions, users, notifications
postgres PostgreSQL 16, holds document, version, and user records

The backend waits on Postgres's own health check before it starts, uploaded files persist in a named Docker volume, and storage is designed to be pluggable — a STORAGE_DRIVER setting switches between the local filesystem, for running on one box, and S3, for a proper deployment, without the rest of the app needing to know which one it's talking to. Email alerts are SMTP-configurable, and a cron schedule controls how often the service checks for documents due for review.

The frontend

This part is real and running: a sidebar-routed React app with four screens — a document library, a per-document detail view with version history, a drag-and-drop upload flow (react-dropzone), and user management — talking to a REST API over Axios. The API client already defines the full contract the backend needs to satisfy: list and fetch documents, upload a new document or a new version of an existing one, download a specific version, and manage per-document notification rules.

Where it actually stands

I want to be direct about this one, since it isn't finished the way the other two projects are. The frontend and the Docker Compose architecture are built and match the design above, but the Node.js API that implements it is still on my machine, not yet pushed. The repository right now shows the real frontend and the real orchestration config, next to an empty backend/ folder. I'd rather say that plainly than have this read like the whole thing is live when it isn't.

What's next

  • Push the backend and get docker compose up actually building all three services end to end.
  • Wire up role-based access for the two roles this was designed around — QA admin and read-only staff — so the permission model is enforced in code, not just assumed by the UI.
  • Deploy it self-hosted, the way it's meant to run: on an EC2 instance or on-prem at the bakery, which is where it would actually get used.

The repository is public: karan-sohi/DocVault.