Skip to content
Amine Mekki
Back to projects

Digital study & quoting tool for ventilation projects

A full-stack product that digitizes the technical study and quoting of ventilation projects, led end to end: team coordination, API and data architecture, frontend foundations and DevOps setup.

Role
Team Lead: architecture, backend, delivery
Client
Soler & Palau
Stack
NestJS, Next.js, TypeScript, PostgreSQL, Prisma ORM, TanStack Query, TanStack Form + Zod, next-intl, NextAuth, Sentry, AWS S3, Puppeteer, Docker

Problem

Soler & Palau needed a digital tool to carry out technical studies and produce quotes for ventilation projects. Beyond the features, the engineering challenge was delivering a maintainable full-stack product on time while keeping a cross-functional team aligned with stakeholders.

Architecture

The backend is a modular NestJS REST API: JWT authentication with refresh tokens, role-based access control, explicit validation layers, and integrations for real-time data, AWS S3 file storage, transactional email and PDF generation via Puppeteer. The data layer is PostgreSQL modeled through Prisma, with entity relationships and a migration strategy built on Prisma Migrate. The frontend is Next.js 15 (App Router) structured on atomic design principles: TanStack Query owns server state, TanStack Form with Zod handles validation at the boundary, next-intl provides i18n and NextAuth protects routing.

Engineering decisions

Modular API with explicit validation layers

Each domain lives in its own NestJS module with validation at the boundary. New features extend a module instead of spreading conditionals across the codebase, and invalid data is rejected before it reaches business logic.

Prisma Migrate as a deliberate migration strategy

Schema changes are versioned, reviewable migrations rather than ad-hoc SQL. The data model can evolve with the product without risky manual interventions on environments.

Server state and forms as separate concerns

TanStack Query handles caching and synchronization with the API; TanStack Form + Zod validates user input where it enters the system. Keeping the two apart avoids the classic tangle of fetch logic inside form components.

Docker Compose from day one

Reproducible environments made onboarding and release cycles predictable: the same stack runs identically for every developer.

Quality & reliability

Validation layers at the API boundary, RBAC on every protected resource, and Sentry observability in production. Reproducible Docker environments keep development and deployment behavior consistent.

Outcome

Delivered on time by a cross-functional team, with priorities and stakeholder expectations managed throughout. The modular architecture and migration strategy keep the product maintainable as it grows.