- Context
- An architecture studio needed a light stock system for samples and materials — catalogue, receipts/issues/transfers, and labels — that works on the floor from a phone or tablet. Constraint: no heavy ERP; clear roles (warehouse / architect / admin); reliable backups on a small VPS.
- Intervention
-
Shipped a PWA on Next.js App Router with Prisma + PostgreSQL, Auth.js, and floor-friendly barcode/label flows.
Phase 1 — Catalogue and movements
Product catalogue with stock movement history for receipts, issues, and transfers. CSV export for handoff to other tools.
Phase 2 — Camera barcodes and Code128 labels
Phone/tablet camera scanning for barcodes, plus Code128 label generation so shelf and sample tags stay consistent with the catalogue.
Phase 3 — Roles and VPS ops
Roles for warehouse, architect, and admin via Auth.js. Deployed on a small VPS with pm2 and backups so daily use survives restarts.
- Risks & how they were handled
-
- Wrong stock counts → movement history as the audit trail; roles limit who can mutate.
- Phone UX friction → PWA with camera scanning instead of a desktop-only workflow.
- Host failure → pm2 process management and scheduled backups on the VPS.
- What I'd do differently
-
- Add offline draft queues earlier for flaky site Wi-Fi.
- Codify backup restore drills as a checklist, not only cron.
- Outcome
- Before: sample and material stock lived in ad-hoc lists with weak movement history. After: a production PWA used daily — catalogue, camera barcodes, Code128 labels, receipts/issues/transfers, warehouse/architect/admin roles, and CSV — on Next.js App Router, Prisma, PostgreSQL, Tailwind, and Auth.js.
System map
Sample or material on the floor
phone / tablet
Camera barcode scan
PWA
Code128 labels
print path
Movements ledger
receipt · issue · transfer
Roles
warehouse · architect · admin
Keeps a live catalogue of samples and materials
Records receipts, issues, and transfers
Exports CSV for handoff
What shipped
- Phone/tablet warehouse Floor staff scan barcodes and print Code128 labels on a PWA used daily — Next.js App Router.
- Stock movement history Receipts, issues, and transfers with warehouse / architect / admin roles.
- VPS ops Runs on a small VPS with Prisma + PostgreSQL, Auth.js, pm2, and backups.
Stack Next.js Prisma PostgreSQL Tailwind Auth.js PWA pm2
In production · used daily