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.
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.