The work
The project pairs a React and Vite web app with a NestJS API and PostgreSQL database. Its current connected slice includes a user list and an endpoint that accepts the related records together.
The challenge
A user record spans profile, contact, address, and academic history. Saving each piece independently can leave partial records and force the client to coordinate several requests.
Approach and architecture
I modeled related records as one user aggregate and implemented a versioned REST endpoint that writes the aggregate in a single PostgreSQL transaction.
TypeORM migrations keep schema changes explicit, with automatic schema synchronization disabled. The web client connects to the API through Redux Toolkit and RTK Query, and Swagger documents the API surface.
My contributions
- Defined the user aggregate entities, DTOs, and migration for profile and related records.
- Built REST endpoints with transaction-safe aggregate creation and API documentation.
- Connected the React and Vite app shell to the API and user list with RTK Query.
Outcome
The current slice connects the React client to documented NestJS endpoints and transaction-safe PostgreSQL persistence. The live app and API docs let visitors explore both sides of the product.
Technologies
- React
- Vite
- TypeScript
- Redux Toolkit
- RTK Query
- NestJS
- TypeORM
- PostgreSQL
- Docker Compose
- REST API
- Swagger / OpenAPI
