+```
+
+---
+
+### Phase 3: Marketing Site Integration (Week 1 - Day 3-4)
+
+**Priority: MEDIUM** - Content updates, new sections
+
+#### Task 3.1: Homepage Restructure
+**File:** `app/(marketing)/page.tsx`
+**Time:** 2 hours
+
+**New Structure:**
+```tsx
+export default function HomePage() {
+ return (
+
+ {/* 1. Hero Section - KEEP */}
+
+
+ {/* 2. Statement Section - NEW */}
+
+
+ {/* 3. Timeline Section - NEW */}
+
+
+ {/* 4. CTA Section - SIMPLIFIED */}
+
+
+ )
+}
+```
+
+**Remove:**
+- ManifestoContent (long-form moved to separate /about page if needed)
+- ComparisonTable (moved to /epd page)
+- Multiple InsightBox components
+
+#### Task 3.2: Create Statement Section
+**File:** `app/(marketing)/components/statement-section.tsx` (NEW)
+**Time:** 1 hour
+
+```tsx
+export function StatementSection() {
+ return (
+
+
+ Software on Demand: Van €100k naar €200
+
+
+
+
+ Enterprise software kost gemiddeld €100.000+ en duurt
+ 12-24 maanden om te bouwen. Voor een GGZ-praktijk met
+ 5 therapeuten is dit onbereikbaar.
+
+
+
+ AI-powered development verandert dit. Met Claude als co-pilot, moderne
+ frameworks, en cloud infrastructure bouwen we hetzelfde EPD in
+ 4 weken voor €200 totale kosten.
+
+
+
+ Dit project is het bewijs. Volg hieronder de voortgang week voor week.
+
+
+
+ )
+}
+```
+
+#### Task 3.3: Integrate Timeline Component
+**File:** `app/(marketing)/components/timeline-section.tsx` (NEW)
+**Time:** 1 hour
+
+```tsx
+import { Timeline } from '@/components/ui/timeline'
+import { getContent } from '@/lib/content/loader'
+
+export async function TimelineSection() {
+ const timelineData = await getContent('nl', 'timeline')
+
+ // Transform to Timeline component format
+ const data = timelineData.map(week => ({
+ title: week.title,
+ content: (
+
+
+ {week.description}
+
+
+ {/* Metrics */}
+ {week.metrics && (
+
+
+
Dev Hours
+
+ {week.metrics.developmentHours}
+
+
+
+
Cost
+
+ €{week.metrics.infrastructureCost}
+
+
+
+ )}
+
+ {/* Achievements */}
+ {week.achievements && week.achievements.length > 0 && (
+
+ {week.achievements.map((achievement, i) => (
+
+ ))}
+
+ )}
+
+ ),
+ }))
+
+ return (
+
+
+
+ Build in Public: 4 Weken Progress
+
+
+ Transparantie vanaf dag 1. Volg elke week de voortgang,
+ kosten, en geleerde lessen.
+
+
+
+
+
+ )
+}
+```
+
+#### Task 3.4: Update CTA Section
+**File:** Update existing CTA in homepage
+**Time:** 20 min
+
+**Simplified CTA:**
+```tsx
+
+
+
+ Klaar om te experimenteren?
+
+
+
+
+
+```
+
+---
+
+### Phase 4: Content Updates (Week 1 - Day 4)
+
+**Priority: MEDIUM** - Supporting content
+
+#### Task 4.1: Fix EPD Page Links
+**File:** `app/(marketing)/epd/credentials-box.tsx`
+**Time:** 5 min
+
+```tsx
+// Line 80 or wherever login link is
+- href="/app/login"
++ href="/login"
+```
+
+#### Task 4.2: Update Navigation Content
+**File:** `content/nl/navigation.json`
+**Time:** 5 min
+
+```json
+{
+ "logo": {
+ "text": "AI Speedrun",
+ "href": "/"
+ },
+ "links": [
+ {
+ "label": "Home",
+ "href": "/"
+ },
+ {
+ "label": "EPD Prototype",
+ "href": "/epd"
+ },
+ {
+ "label": "Contact",
+ "href": "/contact"
+ },
+ {
+ "label": "Login",
+ "href": "/login"
+ }
+ ]
+}
+```
+
+#### Task 4.3: Create Timeline Content
+**File:** `content/nl/timeline.json` (NEW)
+**Time:** 30 min
+
+See Task 2.2 for structure. Populate with real Week 1 data.
+
+---
+
+### Phase 5: EPD App Foundation (Week 2 - Later)
+
+**Priority: LOW** - Can be done in Week 2
+
+#### Task 5.1: Coming Soon Dashboard
+**File:** `app/epd/clients/page.tsx` (NEW)
+**Time:** 45 min
+
+```tsx
+import { redirect } from 'next/navigation'
+import { createClient } from '@/lib/supabase/server'
+
+export default async function ClientsPage() {
+ const supabase = createClient()
+ const { data: { user } } = await supabase.auth.getUser()
+
+ if (!user) {
+ redirect('/login')
+ }
+
+ return (
+
+
+ {/* Icon */}
+
+
+ {/* Heading */}
+
+ EPD Dashboard - Coming Week 2
+
+
+ {/* Description */}
+
+ De EPD applicatie wordt momenteel gebouwd.
+ Volg de voortgang op de homepage timeline.
+
+
+ {/* Timeline Preview */}
+
+
+ Development Roadmap
+
+
+
+
+
+
Week 1: Foundation ✓
+
Marketing site, auth, database schema
+
+
+
+
+
+
+
Week 2: Client Management
+
CRUD operations, client list, detail views
+
+
+
+
+
+
+
Week 3: AI Integration
+
Intake editor, summarization, categorization
+
+
+
+
+
+
+
Week 4: Polish & Launch
+
Onboarding, optimization, demo prep
+
+
+
+
+
+ {/* Actions */}
+
+
+
+ )
+}
+```
+
+#### Task 5.2: Update Middleware Redirects
+**File:** `middleware.ts`
+**Time:** 10 min
+
+```typescript
+// Line 78-81: Update redirect target
+if (user && pathname === '/login') {
+ return NextResponse.redirect(new URL('/epd/clients', request.url))
+}
+
+// Ensure /epd/clients is protected
+const publicRoutes = [
+ '/', '/epd', '/contact', '/login',
+ '/auth/callback', '/auth/logout'
+]
+// /epd/clients is NOT in publicRoutes, so it's protected ✓
+```
+
+---
+
+### Phase 6: Documentation (Week 1 - Day 5)
+
+**Priority: LOW** - Can be done async
+
+#### Task 6.1: Update UX Stylesheet
+**File:** `docs/specs/ux-stylesheet.md`
+**Time:** 30 min
+
+Document the new teal-first system with:
+- Color palette updates
+- Component examples
+- Usage guidelines
+
+#### Task 6.2: Create Component Library Doc
+**File:** `docs/specs/component-library.md` (NEW)
+**Time:** 1 hour
+
+Document all reusable components:
+- AIButton
+- ModuleCard
+- Timeline
+- Badge variants
+- Button variants
+
+#### Task 6.3: Update Bouwplan
+**File:** `docs/specs/bouwplan-ai-speedrun-marketing-first-v1.1.md`
+**Time:** 15 min
+
+Update status:
+- E1 (Marketing Website): 100% complete → Mark timeline integration
+- E2 (Database & Auth): Update progress
+
+---
+
+## 7. Testing & Quality Assurance
+
+### 7.1 Visual Regression Checklist
+
+**Manual Testing:**
+- [ ] Homepage: Hero, statement, timeline, CTA flow correctly
+- [ ] EPD page: Features, credentials, comparison table visible
+- [ ] Contact page: Form submits, validation works
+- [ ] Login page: Both flows work (magic link + demo)
+- [ ] Coming Soon page: Roadmap displays, logout works
+
+**Cross-Browser:**
+- [ ] Chrome (latest)
+- [ ] Firefox (latest)
+- [ ] Safari (latest)
+- [ ] Edge (latest)
+
+**Responsive:**
+- [ ] Mobile (375px)
+- [ ] Tablet (768px)
+- [ ] Desktop (1440px)
+
+### 7.2 Accessibility Audit
+
+**WCAG AA Compliance:**
+- [ ] Color contrast ≥ 4.5:1 for normal text
+- [ ] Color contrast ≥ 3:1 for large text (18px+)
+- [ ] Focus states visible (teal ring)
+- [ ] Keyboard navigation works
+- [ ] Screen reader labels present
+- [ ] No color-only information (icons + text)
+
+**Tools:**
+- axe DevTools (Chrome extension)
+- Lighthouse (built into Chrome DevTools)
+- Color contrast analyzer
+
+### 7.3 Performance Benchmarks
+
+**Lighthouse Targets:**
+- [ ] Performance: > 90
+- [ ] Accessibility: 100
+- [ ] Best Practices: > 95
+- [ ] SEO: 100
+
+**Core Web Vitals:**
+- [ ] LCP (Largest Contentful Paint): < 2.5s
+- [ ] FID (First Input Delay): < 100ms
+- [ ] CLS (Cumulative Layout Shift): < 0.1
+
+**Optimization:**
+- Use next/image for all images
+- Lazy load timeline component
+- Code-split marketing vs EPD routes
+- Minimize CSS (Tailwind purge)
+
+---
+
+## 8. Migration Checklist (Quick Reference)
+
+### Global Changes
+- [x] tailwind.config.ts: blue → teal brand colors
+- [x] globals.css: --primary and --info variables
+- [x] Test contrast ratios (WCAG AA)
+
+### Component Updates
+- [ ] Sign-in: bg, buttons, stats content
+- [ ] Timeline: gradient, dots, timestamps
+- [ ] MinimalNav: links, active states
+- [ ] AIButton: create new component
+- [ ] Module cards: left-border pattern
+
+### Content Updates
+- [ ] navigation.json: add Login link
+- [ ] timeline.json: create Week 1 data
+- [ ] epd/credentials-box: fix login href
+
+### New Components
+- [ ] StatementSection: homepage pitch
+- [ ] TimelineSection: build-in-public
+- [ ] Coming Soon page: /epd/clients
+
+### Cleanup
+- [ ] Remove long-form manifesto from homepage
+- [ ] Move comparison table to /epd only
+- [ ] Archive unused InsightBox components
+
+---
+
+## 9. Success Metrics
+
+### Qualitative Goals
+- **Visual Impact:** Screenshots are instantly recognizable as AI Speedrun brand
+- **LinkedIn Shareability:** Timeline posts generate engagement
+- **Demo Effectiveness:** 10-min demo flows smoothly without confusion
+- **Brand Coherence:** Teal = innovation signal is clear to stakeholders
+
+### Quantitative Targets
+- **Lighthouse Performance:** > 90
+- **Accessibility Score:** 100 (WCAG AA)
+- **Load Time:** Homepage < 2s on 3G
+- **Conversion:** > 5% contact form completion from landing
+
+### Week 1 Review Questions
+1. Does teal feel "innovative but trustworthy"?
+2. Do GGZ stakeholders understand the AI Speedrun value prop?
+3. Is the timeline section compelling for LinkedIn?
+4. Does the Coming Soon page manage expectations well?
+
+---
+
+## 10. Rollback Plan (If Needed)
+
+### If Teal Doesn't Work
+
+**Scenario:** Stakeholder feedback is negative, teal feels wrong
+
+**Quick Rollback (< 1 hour):**
+1. Revert tailwind.config.ts: teal → blue
+2. Revert globals.css: --primary back to #3B82F6
+3. Git revert component changes
+4. Deploy previous version
+
+**Keep:** Timeline component, statement section, improved content
+**Revert:** Only color changes
+
+### Partial Rollback
+
+**Scenario:** Teal works for marketing, not for EPD
+
+**Hybrid Approach:**
+- Marketing site: Keep teal (#0D9488)
+- EPD app: Revert to blue (#3B82F6)
+- Justification: "Bold vision (marketing) + Familiar execution (product)"
+
+---
+
+## 11. Next Steps (Week 2+)
+
+### After Teal Implementation
+
+**Week 2 Focus:**
+1. Build actual EPD client list (replace Coming Soon)
+2. Client detail page with tabs (intake, profile, plan)
+3. Forms for client creation/editing
+
+**Week 3 Focus:**
+1. TipTap editor for intake notes
+2. AI integration (Claude API endpoints)
+3. AI-rail component for suggestions
+
+**Week 4 Focus:**
+1. Onboarding flow
+2. Polish & optimization
+3. Demo dry-run preparation
+
+---
+
+## 12. Resources & References
+
+### Design System Documentation
+- **Tailwind Docs:** https://tailwindcss.com/docs/customizing-colors
+- **WCAG Contrast:** https://webaim.org/resources/contrastchecker/
+- **Color Palette Tool:** https://coolors.co
+
+### Inspiration
+- **Linear:** https://linear.app (violet/purple primary)
+- **Vercel:** https://vercel.com/design (systematic grays)
+- **Notion:** https://notion.so (clean, minimal)
+
+### Internal Docs
+- FO v2.0: `docs/specs/fo-marketing-app-flow-v2.md`
+- UX Stylesheet (current): `docs/specs/ux-stylesheet.md`
+- Bouwplan: `docs/specs/bouwplan-ai-speedrun-marketing-first-v1.1.md`
+
+---
+
+## Changelog
+
+| Version | Date | Author | Changes |
+|---------|------|--------|---------|
+| v2.0 | 17-11-2024 | Colin | Initial UX Implementation Plan with teal-first design system. Strategic pivot from blue to teal based on AI Speedrun positioning as consultancy showcase. |
+
+---
+
+**Status:** Ready for Implementation
+**Next Action:** Begin Phase 1 (tailwind.config.ts update)
+**Owner:** Colin Lit
+**Timeline:** Week 1, Days 1-5
diff --git a/package.json b/package.json
index b0486b5..e0154b2 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,7 @@
"@supabase/supabase-js": "^2.81.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
+ "framer-motion": "^12.23.24",
"lucide-react": "^0.553.0",
"next": "16.0.1",
"next-themes": "^0.4.6",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 2190989..ae11b6b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,6 +26,9 @@ importers:
clsx:
specifier: ^2.1.1
version: 2.1.1
+ framer-motion:
+ specifier: ^12.23.24
+ version: 12.23.24(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
lucide-react:
specifier: ^0.553.0
version: 0.553.0(react@19.2.0)
@@ -1553,6 +1556,20 @@ packages:
fraction.js@5.3.4:
resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
+ framer-motion@12.23.24:
+ resolution: {integrity: sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==}
+ peerDependencies:
+ '@emotion/is-prop-valid': '*'
+ react: ^18.0.0 || ^19.0.0
+ react-dom: ^18.0.0 || ^19.0.0
+ peerDependenciesMeta:
+ '@emotion/is-prop-valid':
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
+
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -2023,6 +2040,12 @@ packages:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
+ motion-dom@12.23.23:
+ resolution: {integrity: sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==}
+
+ motion-utils@12.23.6:
+ resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==}
+
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -4292,6 +4315,15 @@ snapshots:
fraction.js@5.3.4: {}
+ framer-motion@12.23.24(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
+ dependencies:
+ motion-dom: 12.23.23
+ motion-utils: 12.23.6
+ tslib: 2.8.1
+ optionalDependencies:
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+
fsevents@2.3.3:
optional: true
@@ -4730,6 +4762,12 @@ snapshots:
minipass@7.1.2: {}
+ motion-dom@12.23.23:
+ dependencies:
+ motion-utils: 12.23.6
+
+ motion-utils@12.23.6: {}
+
ms@2.1.3: {}
mz@2.7.0:
diff --git a/tailwind.config.ts b/tailwind.config.ts
index 8dfd3b5..60b1b7a 100644
--- a/tailwind.config.ts
+++ b/tailwind.config.ts
@@ -57,12 +57,39 @@ const config: Config = {
// Borders
border: '#E2E8F0',
- // Brand & Primary
+ // Brand & Primary (Teal-first design system)
brand: {
- DEFAULT: '#3B82F6',
- hover: '#2563EB',
- active: '#1D4ED8',
- subtle: '#EFF6FF',
+ 50: '#F0FDFA',
+ 100: '#CCFBF1',
+ 200: '#99F6E4',
+ 300: '#5EEAD4',
+ 400: '#2DD4BF',
+ 500: '#14B8A6',
+ 600: '#0D9488', // PRIMARY
+ 700: '#0F766E',
+ 800: '#115E59',
+ 900: '#134E4A',
+ DEFAULT: '#0D9488',
+ hover: '#0F766E',
+ active: '#115E59',
+ subtle: '#F0FDFA',
+ },
+
+ // AI Features (Amber)
+ ai: {
+ 50: '#FFFBEB',
+ 100: '#FEF3C7',
+ 200: '#FDE68A',
+ 300: '#FCD34D',
+ 400: '#FBBF24',
+ 500: '#F59E0B', // PRIMARY AI
+ 600: '#D97706',
+ 700: '#B45309',
+ 800: '#92400E',
+ 900: '#78350F',
+ DEFAULT: '#F59E0B',
+ hover: '#D97706',
+ subtle: '#FFFBEB',
},
// Neutral CTA
@@ -104,8 +131,8 @@ const config: Config = {
subtle: '#FEF2F2',
},
info: {
- DEFAULT: '#3B82F6',
- subtle: '#EFF6FF',
+ DEFAULT: '#0D9488', // Uses brand teal
+ subtle: '#CCFBF1', // teal-100
},
// Severity badges (DSM-light)
@@ -131,7 +158,7 @@ const config: Config = {
placeholder: '#94A3B8',
border: '#CBD5E1',
'border-hover': '#94A3B8',
- focus: '#3B82F6',
+ focus: '#0D9488', // Teal focus states
disabled: {
bg: '#F1F5F9',
text: '#94A3B8',
@@ -145,7 +172,7 @@ const config: Config = {
'lg': '0 8px 20px rgba(15,23,42,0.10)',
},
ringColor: {
- DEFAULT: '#3B82F6',
+ DEFAULT: '#0D9488', // Teal ring for focus states
},
ringWidth: {
DEFAULT: '2px',