POS Crepes & Kaffee
In productionPOS system that replaced a restaurant's paper order tickets. Version 1, built with plain HTML, CSS and JavaScript, is in production and used daily at the restaurant; version 2, with React, TypeScript, NestJS, Prisma and PostgreSQL, is in development.
- HTML
- CSS
- JavaScript
- React
- TypeScript
- NestJS
- Prisma
- PostgreSQL
- Vitest

Context and problem
Orders were written on paper tickets that could get lost, leading to undelivered orders and cash register discrepancies.
My role
A freelance project where I've been the sole technical lead since September 2025: requirements, user stories, development, testing, documentation and support for the production version.
Requirements
I gathered requirements directly from the owners, who are non-technical users, and translated their operational needs into use cases and user stories with acceptance criteria.
Technical evolution
I built version 1 from scratch with plain HTML, CSS and JavaScript, no frameworks; it's the version in production and used daily at the restaurant. Version 2 is a ground-up rebuild with a better architecture and data model. I learned NestJS for this project.
Version 2 architecture
React and TypeScript frontend; NestJS backend with Prisma ORM and PostgreSQL, with REST APIs, a SQL data model and migrations. It has already been tested on several devices, with the app deployed on a server.
Architecture decision
I documented in an ADR the decision to use self-managed PostgreSQL on the server instead of a backend-as-a-service, to avoid unnecessary dependencies.
Quality
I validate endpoints with Postman and keep technical documentation in the repositories. Version 2 has automated tests with Vitest: unit tests on the frontend and backend, and end-to-end tests for the API. In my own testing before launch, I caught a bug in split payments: payments made with cash and bank transfer were recorded as cash in the register. I fixed it without affecting real operations.
Results
The system replaced the paper tickets: every order is recorded, and more than 2,200 sales have been processed without interruptions.
Use of AI
I use Claude Code set up with project instruction files (CLAUDE.md / AGENTS.md), documentation and ADRs, and give it user stories, acceptance criteria and functional and non-functional requirements as context. I review the generated code and discard anything that adds unnecessary complexity or dependencies. Validating and maintaining the system remains my responsibility.