Premium car detailing studio website for WRP (Wrap, Reinforce, Protect) based in Dubai, UAE.
This project was migrated from Next.js 16 to Astro 5 and is deployed on Cloudflare Workers with server-side rendering.
- Framework: Astro 5 with SSR (server output mode)
- Adapter: Cloudflare with platformProxy enabled
- React: v19.2.0 (for interactive components)
- Alpine.js: v3.x (for lightweight client-side interactivity)
- TypeScript: Strict mode enabled
- Styling: Tailwind CSS v4
- UI Components: shadcn/ui (Radix UI primitives)
- Fonts: Playfair Display (serif), Inter (sans), Montserrat (logo)
- Package Manager: bun
- Deployment: Cloudflare Workers + D1 Database
- Bun installed
- Cloudflare account (for deployment)
- Wrangler CLI (installed via dev dependencies)
All commands are run from the root of the project:
# Install dependencies
bun install
# Start development server (localhost:4321)
bun dev
# Build for production
bun build
# Preview build locally with Wrangler
bun preview
# Deploy to Cloudflare Workers
bun deploy
# Generate Cloudflare types
bun cf-typegen
# Run Astro CLI commands
bun astro ...wrp-astro/
βββ public/ # Static assets (images, favicon)
βββ src/
β βββ components/
β β βββ ui/ # shadcn/ui React components
β β βββ Navigation.astro # Main navigation
β β βββ WRPFooter.astro # Footer component
β β βββ BaseHead.astro # SEO/meta tags
β βββ content/
β β βββ blog/ # Blog posts (Markdown/MDX)
β β βββ services/ # Service content (Markdown/MDX)
β βββ layouts/
β β βββ BaseLayout.astro # Main layout with nav/footer
β β βββ BlogPost.astro # Blog post layout
β β βββ ServiceLayout.astro # Service page layout
β βββ lib/
β β βββ utils.ts # Utility functions
β βββ pages/
β β βββ api/
β β β βββ contact.ts # Contact form API (POST)
β β βββ blog/
β β β βββ [...slug].astro # Dynamic blog routes
β β βββ services/
β β β βββ [slug].astro # Dynamic service routes
β β βββ index.astro # Homepage
β β βββ about.astro # About page
β β βββ more-about-wrp.astro# Extended about page
β β βββ contact-us.astro # Contact form page
β β βββ rss.xml.js # RSS feed
β βββ consts.ts # Site constants
β βββ content.config.ts # Content collection schemas
β βββ env.d.ts # Cloudflare runtime types
βββ astro.config.mjs # Astro configuration
βββ wrangler.jsonc # Cloudflare Workers config
βββ tailwind.config.mjs # Tailwind CSS config
βββ tsconfig.json # TypeScript config
- Database name:
wrp-contact-forms - Binding:
DB - Purpose: Stores contact form submissions
- Access:
locals.runtime.env.DBin API routes
- Worker entry:
./dist/_worker.js/index.js - Compatibility date: 2025-10-29
- Custom domains:
wrpdetailing.ae,www.wrpdetailing.ae - Email service binding for contact form notifications
- Static assets served via
ASSETSbinding
Located in src/content/services/, each service includes:
- Title, subtitle, description, hero image, price
- Package details (name, price, duration, features)
- Benefits list
- Step-by-step process
- FAQs
Located in src/content/blog/ (for reference/future use):
- Title, description, publication date
- Hero image support
- MDX support for rich content
- Brand Colors: Black & white luxury aesthetic
- Typography:
- Headings: Playfair Display (serif)
- Body: Inter (sans-serif)
- Logo: Montserrat 900 italic
- Responsive: Mobile-first approach
- UI Framework: Tailwind CSS v4 with shadcn/ui components
The site is deployed on Cloudflare Workers:
- Build:
bun build - Deploy:
bun deploy - Preview:
bun preview
Live domains:
This project was migrated from Next.js to Astro:
- Converted App Router pages β Astro pages
- Migrated API routes β Astro API routes
- Replaced Next.js Image β Astro image service
- Converted "use client" components β Alpine.js (where possible)
- Kept complex UI (shadcn/ui) as React islands
- Replaced Vercel β Cloudflare Workers
- Added D1 database for form persistence
- Phone: +971 54 717 3000
- Email: info@wrpdetailing.ae
- Instagram: @wrp_ae
- Location: Al Qusais Industrial Area 1, Dubai, UAE
Β© 2025 WRP Detailing. All rights reserved.
For detailed development instructions and architecture notes, see CLAUDE.md.