feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
'use client';
|
|
|
|
|
|
|
|
|
|
import { useTranslations } from 'next-intl';
|
|
|
|
|
import { motion } from 'framer-motion';
|
|
|
|
|
import { cn } from '@/lib/utils';
|
|
|
|
|
import Button from '@/components/ui/Button';
|
|
|
|
|
import Chip from '@/components/ui/Chip';
|
|
|
|
|
import ProgressBar from './ProgressBar';
|
|
|
|
|
import type { StepProps } from './WizardContainer';
|
|
|
|
|
|
|
|
|
|
// ─── Data ─────────────────────────────────────────────────────────────────────
|
|
|
|
|
|
2026-03-26 17:52:09 +01:00
|
|
|
const INDUSTRY_IDS = ['maritime', 'hospitality', 'technology', 'realestate', 'finance', 'ngo', 'other'] as const;
|
|
|
|
|
const TIMELINE_IDS = ['asap', '1-3months', '3-6months', 'exploring'] as const;
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
|
|
|
|
|
// ─── Component ────────────────────────────────────────────────────────────────
|
|
|
|
|
|
|
|
|
|
export default function StepDetails({ formData, setFormData, onNext, onBack }: StepProps) {
|
|
|
|
|
const t = useTranslations('configurator');
|
|
|
|
|
|
|
|
|
|
const selectIndustry = (id: string) => {
|
|
|
|
|
setFormData((prev) => ({
|
|
|
|
|
...prev,
|
|
|
|
|
industry: prev.industry === id ? null : id,
|
|
|
|
|
}));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const selectTimeline = (id: string) => {
|
|
|
|
|
setFormData((prev) => ({
|
|
|
|
|
...prev,
|
|
|
|
|
timeline: prev.timeline === id ? null : id,
|
|
|
|
|
}));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div className="flex flex-col gap-6">
|
|
|
|
|
<ProgressBar currentStep={2} />
|
|
|
|
|
|
|
|
|
|
<div>
|
|
|
|
|
<h3 className="font-serif text-2xl font-semibold tracking-headline text-on-surface">
|
|
|
|
|
{t('step2.title')}
|
|
|
|
|
</h3>
|
|
|
|
|
<p className="mt-1 text-sm text-outline">{t('step2.subtitle')}</p>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
{/* Industry */}
|
|
|
|
|
<div className="flex flex-col gap-2.5">
|
|
|
|
|
<label className="text-xs font-semibold uppercase tracking-label text-outline">
|
2026-03-26 17:52:09 +01:00
|
|
|
{t('fields.industry')}
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
</label>
|
|
|
|
|
<div className="flex flex-wrap gap-2">
|
2026-03-26 17:52:09 +01:00
|
|
|
{INDUSTRY_IDS.map((id, index) => (
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
<motion.div
|
2026-03-26 17:52:09 +01:00
|
|
|
key={id}
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
initial={{ opacity: 0, y: 6 }}
|
|
|
|
|
animate={{ opacity: 1, y: 0 }}
|
|
|
|
|
transition={{
|
|
|
|
|
delay: index * 0.04,
|
|
|
|
|
duration: 0.3,
|
|
|
|
|
ease: [0.16, 1, 0.3, 1],
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<Chip
|
2026-03-26 17:52:09 +01:00
|
|
|
active={formData.industry === id}
|
|
|
|
|
onClick={() => selectIndustry(id)}
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
>
|
2026-03-26 17:52:09 +01:00
|
|
|
{t(`industries.${id}`)}
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
</Chip>
|
|
|
|
|
</motion.div>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
{/* Scope / Goals */}
|
|
|
|
|
<div className="flex flex-col gap-2">
|
|
|
|
|
<label
|
|
|
|
|
htmlFor="scope-textarea"
|
|
|
|
|
className="text-xs font-semibold uppercase tracking-label text-outline"
|
|
|
|
|
>
|
2026-03-26 17:52:09 +01:00
|
|
|
{t('fields.scope')}
|
|
|
|
|
<span className="ml-1.5 normal-case font-normal text-outline/70">
|
|
|
|
|
{t('fields.scopeOptional')}
|
|
|
|
|
</span>
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
</label>
|
|
|
|
|
<textarea
|
|
|
|
|
id="scope-textarea"
|
|
|
|
|
value={formData.scope}
|
|
|
|
|
onChange={(e) =>
|
|
|
|
|
setFormData((prev) => ({ ...prev, scope: e.target.value }))
|
|
|
|
|
}
|
2026-03-26 17:52:09 +01:00
|
|
|
placeholder={t('fields.scopePlaceholder')}
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
rows={4}
|
|
|
|
|
className={cn(
|
|
|
|
|
'w-full resize-none rounded-xl border border-outline-variant/60 bg-surface-high',
|
|
|
|
|
'px-4 py-3 text-sm text-on-surface placeholder:text-outline/50',
|
|
|
|
|
'focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary',
|
|
|
|
|
'transition-colors duration-200',
|
|
|
|
|
'leading-relaxed',
|
|
|
|
|
)}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
{/* Timeline */}
|
|
|
|
|
<div className="flex flex-col gap-2.5">
|
|
|
|
|
<label className="text-xs font-semibold uppercase tracking-label text-outline">
|
2026-03-26 17:52:09 +01:00
|
|
|
{t('fields.timeline')}
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
</label>
|
|
|
|
|
<div className="flex flex-wrap gap-2">
|
2026-03-26 17:52:09 +01:00
|
|
|
{TIMELINE_IDS.map((id, index) => (
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
<motion.div
|
2026-03-26 17:52:09 +01:00
|
|
|
key={id}
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
initial={{ opacity: 0, y: 6 }}
|
|
|
|
|
animate={{ opacity: 1, y: 0 }}
|
|
|
|
|
transition={{
|
|
|
|
|
delay: index * 0.05,
|
|
|
|
|
duration: 0.3,
|
|
|
|
|
ease: [0.16, 1, 0.3, 1],
|
|
|
|
|
}}
|
|
|
|
|
>
|
|
|
|
|
<Chip
|
2026-03-26 17:52:09 +01:00
|
|
|
active={formData.timeline === id}
|
|
|
|
|
onClick={() => selectTimeline(id)}
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
>
|
2026-03-26 17:52:09 +01:00
|
|
|
{t(`timelines.${id}`)}
|
feat: complete agency site build (Phases 1-7)
Full Next.js 16 + Payload CMS 3.x agency site with:
- Homepage: Hero, TrustBar, Services, Configurator wizard, Process,
Selected Works, Philosophy, CTA Banner
- Sub-pages: /services (3 pillars + AI Layer), /work/[slug] (case
studies), /about (philosophy + story)
- Configurator: 3-step wizard with AI brief generation API
- i18n: Full EN/FR bilingual with next-intl
- Design system: Cormorant Garamond + Inter, celestial blue palette,
glassmorphism nav, Framer Motion animations
- Payload CMS collections: Projects, Services, Submissions, Media
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 20:37:38 +01:00
|
|
|
</Chip>
|
|
|
|
|
</motion.div>
|
|
|
|
|
))}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
{/* Navigation */}
|
|
|
|
|
<div className="flex gap-3">
|
|
|
|
|
<Button variant="ghost" onClick={onBack} className="flex-shrink-0">
|
|
|
|
|
{t('back')}
|
|
|
|
|
</Button>
|
|
|
|
|
<Button
|
|
|
|
|
variant="primary"
|
|
|
|
|
arrow
|
|
|
|
|
onClick={onNext}
|
|
|
|
|
className="flex-1"
|
|
|
|
|
>
|
|
|
|
|
{t('nextStep')}
|
|
|
|
|
</Button>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|