Aetherio Logo
Backend

Freelance NestJS Developer in Lyon

The backend framework I choose to build solid, scalable, and maintainable APIs.

Why NestJS

NestJS is the backend framework I use on every project that needs a robust API. It's Node.js with real architecture, not a 2000-line index.js file.

What makes the difference: dependency injection, modular architecture, and native TypeScript. Every service, every controller, every guard has its place. Code is testable, maintainable, and a new developer can understand the structure in minutes.

Express is an excellent starting point. But when a project grows, without imposed structure, the code becomes unmanageable. NestJS solves this from the first commit.

NestJS vs Express: why structure matters

Express gives total freedom. That's its strength and its weakness. On a small project, it works. On a business app with 50 endpoints, complex business logic and 3 developers, the lack of conventions becomes a problem.

Modular architecture. NestJS organizes code into modules. Each module groups its controllers, services and providers. A users module, a billing module, a notifications module. Each is independent, testable, replaceable.

Dependency injection. Services are automatically injected where needed. No cascading require(), no manual singletons. The framework manages instance lifecycle.

TypeScript decorators. Routes, validations, guards, documentation are declared via decorators. @Get(), @Body(), @UseGuards(). Code is declarative and readable.

Validation pipes. Incoming data is automatically validated with class-validator. A malformed DTO returns a 400 error before even reaching the controller. No more scattered manual validations.

My approach with NestJS

Modules by business domain. I split each application by domain, not by technical layer. An orders module contains its controller, service, DTOs and tests. No global controllers/ folder with 30 files.

Typed DTOs for each operation. CreateUserDto, UpdateUserDto, UserResponseDto. Each operation has its own DTO with built-in validation. The frontend knows exactly what it can send and what it will receive.

Guards for security. JWT auth via Passport, role guards (@Roles('admin')), custom guards for business logic. Security is declarative, not scattered across code.

Interceptors for cross-cutting concerns. Logging, response transformation, caching, timing. Interceptors encapsulate logic that applies to all endpoints without polluting controllers.

Unit and e2e tests. Each service is unit tested with injected mocks. Critical endpoints have e2e tests that verify the complete flow from HTTP request to response.

Typical API architecture

Here's how I structure a production NestJS API:

Auth module. JWT + refresh tokens, Passport strategies (local, Google OAuth), rate limiting middleware. Centralized session and permission management.

Database module. TypeORM or Prisma with PostgreSQL. Versioned migrations, development seeds, transactions for critical operations.

Queue module. BullMQ with Redis for async tasks: email sending, PDF generation, third-party data sync. Jobs are typed, retryable and monitorable.

Config module. Environment variables validated at startup with @nestjs/config + Joi. If a critical variable is missing, the app won't start rather than crashing in production.

Health module. /health endpoint checking database, Redis, third-party services. Used by monitoring and load balancers.

What I build with NestJS

REST & GraphQL APIs

Typed endpoints, automatic validation, generated Swagger docs. Clean, testable APIs ready for production.

Multi-tenant SaaS

Per-tenant data isolation, auth middleware, role and permission management. Architecture designed for multi-client from day one.

Microservices

Inter-service communication via message queues (Redis, RabbitMQ), event-driven architecture, domain-based decomposition.

Business app backends

Complex business logic, automated workflows, third-party integrations (Stripe, email, CRM). The technical core of your product.

Gateways & BFF

Backend-for-Frontend that aggregates multiple data sources into a unified API for the frontend. Optimized per client (web, mobile).

Jobs & automations

Scheduled tasks, async workers, data processing pipelines. NestJS handles long-running processes and queues natively.

The ecosystem I use

TypeORM / Prisma

Typed ORM for PostgreSQL, automatic migrations.

Passport

JWT auth, OAuth2, sessions, multiple strategies.

Bull / BullMQ

Redis queues for async and scheduled jobs.

Swagger

Auto-generated API docs from decorators.

Class-validator

Input validation via TypeScript decorators.

CASL

Fine-grained permission and role management.

They trusted me

Founders and business owners who had a project, a need, a deadline. Here's what they have to say.

"Disponibilité, réactivité et implication. Valentin est professionnel et pédagogue."

A

Alban B.

CEO Belho Xper

"Il allie une expertise technique pointue à une solide vision business."

C

Charley A.

Co-fondateur Avnear

"La communication a toujours été fluide et les délais respectés, ce qui est rare et très appréciable."

C

Chihab A.

CEO E-commerce

"Valentin a su être à l'écoute de mes attentes et de mes besoins. Les résultats ont été plus que satisfaisants."

S

Sandrine V.

Gérante Sandrin's Nail

"Une entreprise qui sait s'adapter parfaitement au besoin client."

S

Stanislas M.

Commercial

"Depuis la mise en ligne, nous avons remarqué une nette augmentation des appels et des demandes de renseignements."

C

Christophe R.

PDG Ravi Groupe

Frequently asked questions

Express is minimalist: it provides routing and middleware, the rest is up to you. NestJS brings modular architecture, dependency injection, validation, guards, interceptors and an opinionated structure that prevents spaghetti code. For an API that will evolve, NestJS is an investment.

That's its strength. The modular architecture (modules, controllers, services, providers) lets you split a large application into independent domains. Each module is testable and separately deployable if needed.

Yes. I use NestJS with TypeORM or Prisma for PostgreSQL. Migrations are automatic, relations typed, and queries optimized. Supabase is also an option I integrate frequently.

A basic CRUD API with auth takes 1 to 2 weeks. A complete business API with complex logic, webhooks and third-party integrations takes 1 to 3 months. Weekly deliveries.

NestJS is built on Node.js (and Express or Fastify underneath). The real question is: do you want to assemble your own framework piece by piece, or start from a proven architecture? For serious projects, NestJS.

Yes. NestJS has a native GraphQL module with code-first (types generated from TypeScript) or schema-first support. I recommend GraphQL when the frontend needs flexible queries on complex relational data.

Complementary technologies

A project with NestJS ?

Free first call, no commitment.

Discover my resources