The world's largest independent Shopify design & development partner
A high-performance, dual-brand website built with Astro and Sanity CMS, serving both Domaine (main agency) and Studio (creative services) brands through a unified codebase.
Live Sites:
- meetdomaine.com (Production)
- staging.meetdomaine.com (Staging)
- Framework: Astro 5.8.0 with hybrid rendering & i18n
- CMS: Sanity with Visual Editing & CDN caching
- UI Libraries: SolidJS (client components), React (CMS admin)
- Styling: Scoped CSS with GSAP animations & Lenis smooth scrolling
- Search: Pagefind for static site search with brand filtering
- Deployment: Cloudflare Pages (primary), Vercel (secondary)
The site serves two distinct brands from a single codebase:
- Domaine: Full-service agency focusing on enterprise Shopify solutions
- Studio: Creative services for design and development
Brand switching is handled through:
- Dedicated layout components (
Layout-Domaine.astro
,Layout-Studio.astro
) - CMS content filtering via
agencyBrand
references - Brand-specific styling and navigation
- Node.js >= 22.13.1
- npm or yarn
# Install dependencies
npm install
# Start development server
npm run dev
# → http://localhost:4321
# Start Sanity Studio (in separate terminal)
cd domaine-cms
npm run dev
# → http://localhost:3333/admin
Command | Description |
---|---|
npm run dev |
Start development server with host access |
npm run build |
Production build with search indexing (4GB memory) |
npm run preview |
Preview production build via Wrangler |
npm run astro |
Run Astro CLI commands |
cd domaine-cms
# Development
npm run dev # Start Sanity Studio
npm run build # Build Studio for production
npm run deploy # Deploy Studio to Sanity hosting
src/
├── components/ # Reusable UI components
├── layouts/ # Brand-specific layout templates
├── pages/ # Route pages with server/static rendering
├── lib/ # Utilities, CMS queries, cached content, animations
├── enums/ # TypeScript enums (brands, locales)
├── animation/ # GSAP and viewport animation components
└── content.config.js # Content collections configuration
domaine-cms/
├── schemaTypes/ # Sanity schema definitions
│ ├── sections/ # Modular page sections
│ ├── pages/ # Page-specific schemas
│ ├── siteSettings/ # Global settings
│ └── snippets/ # Reusable field groups
└── sanity.config.js # CMS configuration
The CMS provides a flexible page building system using reusable sections:
- Content Blocks: Rich text with media
- Media Carousels: Image/video galleries
- Service Feeds: Dynamic service listings
- Project Grids: Case study showcases
- Form Sections: Contact and lead capture
- Projects: Case studies with client details, services, and metrics
- Services: Service offerings organized by groups and types
- Blog Posts: Articles with categorization and author attribution
- Partners: Partner ecosystem with tier-based organization
- Team Members: Staff profiles with department grouping
- Events: Webinars, conferences, and speaking engagements
Multi-locale support for:
- English (default)
- German (
de
) - Dutch (
nl
)
Content localization handled through:
- Locale-specific content fields in CMS
- URL routing with locale prefixes
- Fallback content for missing translations
- Pagefind for client-side search
- Brand-filtered results
- Automatic indexing during build process via
prebuild
script
- Static site generation by default with hybrid rendering
- Optimized CMS queries with explicit field selection (no spread operators)
- Parallel database queries using
Promise.all()
- Cached content system via
src/lib/cached-content.js
- Image optimization via Sanity CDN and
astro-sanity-picture
- Timer cleanup for client-side intervals (prevents CPU spikes)
- Code splitting and lazy loading
- GSAP animations with proper licensing
- Lenis smooth scrolling with managed cleanup
- Production:
master
branch → meetdomaine.com - Staging:
staging
branch → staging.meetdomaine.com
Content editors can deploy directly from Sanity Studio using the Vercel Deploy plugin.
Key variables for deployment:
PUBLIC_SANITY_API_READ_TOKEN
: Sanity API access tokenPUBLIC_SANITY_VISUAL_EDITING_ENABLED
: Enable/disable visual editing modeHUBSPOT_*
: Form integration credentialsGREENSOCK_AUTH_TOKEN
: GSAP licensing token
Technical Questions: trey@meetdomaine.com
Agency Inquiries: hello@meetdomaine.com
Built with ⚡ by the Domaine team