Skip to main content
Borrissol Espai Creatiu is the production website for a textile workshop studio located at Carrer de Sant Antoni, 17, baix in Mataró, Barcelona, founded by Belén Vilanova. The site was built as a freelance project from brief to deployment and serves as both a marketing landing page and an editorial platform for the studio’s workshops in tufting, embroidery, punch needle, felting, and loom weaving. It is live at borrissol.com.

Stack

Key features

4-language i18n

Catalan (default, no prefix), Spanish /es, English /en, and French /fr — all driven by a single [lang] dynamic route with zero duplicated page files. All copy lives in src/i18n/ui.ts.

Token-based design system

Full token set in src/styles/theme.css covering colors, spacing, typography, radius, borders, and icons. Monochromatic 5-step palette with a utility-class layer for consistent type rendering.

SEO & structured data

JSON-LD LocalBusiness + FAQPage schemas, Open Graph + Twitter Card tags, AggregateRating, canonical URLs, hreflang in both <head> and sitemap XML, and a social-bot robots.txt allowlist.

Analytics & consent

Google Analytics 4 with Consent Mode v2 Advanced — GA loads on every visit in cookieless mode by default; cookies are only granted after explicit user consent via a custom banner persisted in localStorage.

Workshop landing pages

Per-technique landing pages (tufting, punch needle, felting, loom weaving) composed from shared section components, fully translated across all four languages.

Keystatic CMS

Git-backed CMS at /keystatic. Posts are MDX files in src/content/blog/, authored by Belén in Catalan. Auth is handled via Keystatic Cloud; public page reads are fully static.

Lighthouse scores

Scores measured on mobile with Lighthouse: Performance 99 · Accessibility 97 · Best Practices 100 · SEO 100.Core Web Vitals (mobile): FCP 1.5 s · LCP 1.8 s · TBT 30 ms · CLS 0.

Studio information

Node version requirement

The project requires Node ≥ 22.12.0, as mandated by Astro 6. This version is pinned in netlify.toml (NODE_VERSION = "22.12.0") and in package.json ("engines": { "node": ">=22.12.0" }). Running an older Node version will cause the build to fail.