← All projects

Estilo y Confort

A premium furniture brand needs a site that loads instantly, ranks on Google, and turns visitors into conversations — paired with a private CMS so the brand edits its own catalog.

AngularNestJSPrismaPostgreSQLTailwind CSSFirebase

A luxury furniture brand doesn’t need a shopping cart — it needs a showroom on the web. The kind that loads instantly on a phone, looks expensive, ranks on Google for the right searches, and turns a curious visitor into a WhatsApp message or a phone call. Estilo y Confort is exactly that: a premium, lead-generating furniture site backed by a private CMS so the brand can manage its own catalog without ever touching code.

What it does

The public site is an inspirational catalog, not a store. It presents the brand’s world — collections (by season and year), individual furniture pieces, premium fabrics, services, events, and customer testimonials — each with its own detail page and clean, image-led layout.

There’s no checkout. Every path is designed to end in a conversation: a WhatsApp message, a phone call, or a contact form. That’s the whole point — for a high-ticket product, the conversion isn’t a transaction, it’s a lead.

Behind it sits a private admin dashboard. The brand logs in and edits everything itself — adds a collection, publishes a new sofa, swaps fabrics, schedules an event, reorders what’s featured on the homepage. No developer in the loop for day-to-day content.

Under the hood

The front end is Angular 19 with server-side rendering and prerendering (SSG) — so the public pages are real HTML the moment they hit the browser. That’s what makes the site both fast on a phone and legible to Google’s crawler, which is non-negotiable for a brand that lives or dies on search.

It’s built the way Angular is meant to be in 2026: standalone components, OnPush change detection everywhere for performance, lazy-loaded routes, and a reusable in-house UI kit (buttons, cards, carousels, tabs, modals, breadcrumbs) sitting on a Tailwind design system with a defined palette and typography. SEO isn’t an afterthought — there’s a dedicated SEO service, per-page metadata, a JsonLd service emitting schema.org FurnitureStore structured data, a generated sitemap.xml and robots.txt, and WCAG accessibility baked into the components.

The back end is a separate NestJS + Prisma + PostgreSQL API following Clean Architecture — use cases, repositories, value objects and domain errors kept apart from the HTTP layer. It deliberately splits into two surfaces: a public, read-only API (/public/**) the website consumes, and a JWT-protected admin API (/admin/**) the dashboard uses. Public content only ever appears if it passes strict visibility rules — active, not soft-deleted, and for products, published with a valid primary image.

The details that signal a real product, not a demo: JWT access + refresh tokens with rotation, role guards, Helmet, rate limiting (in-memory, Redis-ready for multiple instances), soft deletes on every critical entity, class-validator DTOs on every endpoint, and a Swagger/OpenAPI spec. Images and the catalog PDF live in Firebase Storage, uploaded straight from the browser via signed URLs — the API issues the URL and never touches the binary.

The stack

  • Frontend — Angular 19 with SSR + prerender (SSG), standalone components, OnPush, RxJS, Angular Material + CDK, Tailwind CSS; deployed to Firebase Hosting.
  • Backend — NestJS 11 in strict TypeScript, Prisma 7 over PostgreSQL, Swagger/OpenAPI, split public/admin APIs.
  • Auth & security — JWT access/refresh with Passport, role guards, bcrypt, Helmet, rate limiting (@nestjs/throttler, optional Redis).
  • Storage — Firebase Storage with signed URLs for images and PDF.
  • Ops — Docker; backend deployed on Railway with migrations run as a release step.

Worth noting

I built this solo, end to end — frontend, backend, design and deployment — for a furniture brand, with the public site and the CMS designed as two cooperating systems rather than one monolith. The interesting engineering bet is that separation: a fast, SEO-first marketing site that reads from a hardened API, and a self-service dashboard so the brand owns its own content. It’s the kind of work that has to impress two very different audiences at once — the client who wants a showroom that sells, and the engineer who looks under the hood.

The codebase is now mine, and the build stays viewable as a live demo — open the demo.

Coffee & talk?

Like what you just read? I build products like this end to end — and I'm always up for a conversation. Let's talk about yours, or just trade notes over coffee.

Rentheria · Guadalajara, México