- Add btn-outline CSS class with explicit hover state
- Button outline variant now properly shows cream text on hover
- Add text-cream utility class
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Document Editorial Fresh design system (fonts, colors, classes)
- Add basePath gotchas for middleware and email redirect
- Update phase 1 status with design system note
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Complete visual overhaul with distinctive editorial aesthetic:
Design System:
- New fonts: Fraunces (display) + DM Sans (body)
- Color palette: Cream background, ink text, coral accents
- Custom CSS variables and utility classes
- Sharp edges (no rounded corners) for editorial feel
Components:
- Updated Button with new variants and colors
- Updated Input with editorial styling
- New card-editorial class with accent bar
Pages:
- Homepage: Full redesign with hero, features, CTA
- Auth layout: Split screen with branding side
- Login/Register: Editorial styling with tags
- Dashboard: Cards with accent bars
- Subscription: Clean feature comparison table
Typography:
- Fraunces for all headings (serif, characterful)
- DM Sans for body text (clean, readable)
- Editorial tags (uppercase, accent color)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Change title from 'Create Next App' to 'Leopost'
- Add proper Italian description
- Set html lang to 'it'
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use NEXT_PUBLIC_APP_URL instead of window.location.origin
- Ensures email confirmation redirects to /leopost/auth/callback/
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Test 6 (middleware redirect) now passes after fix
- 12/12 tests passing
- Phase 1 UAT complete
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use request.nextUrl.clone() instead of new URL() for redirects
- This preserves the /leopost basePath in redirect URLs
- Fixes 404 error when unauthenticated user visits /dashboard
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Issue found:
- Middleware redirect missing basePath (redirects to /login/ instead of /leopost/login/)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Document nginx buffer configuration for Supabase Auth OAuth
- Document Next.js basePath/trailingSlash configuration
- Document middleware matcher best practices
- Add useful commands and current phase status
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove hardcoded /leopost path from Google OAuth redirect
- Use environment variable for flexible deployment URL
- Fallback to window.location.origin for local development
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Display all plans (Free, Creator, Pro) in card grid
- Highlight current plan with 'Piano attuale' badge
- Add feature comparison table
- Include FAQ section
- Show payment deferral notice
- All text in Italian
- Create switchPlan server action for plan changes
- Create getCurrentPlan utility function
- Build PlanCard component with feature display
- Handle plan switching with loading state
- Revalidate dashboard and subscription pages on change
- Add Plan and PlanFeatures TypeScript interfaces
- Add Profile type with plan relationship
- Create plan utility functions with Italian labels
- Add formatPrice, formatFeatureValue, getPlanBadgeColor helpers
Tasks completed: 3/3
- Create middleware helper and main middleware
- Create protected dashboard layout and page
- Update home page to redirect appropriately
SUMMARY: .planning/phases/01-foundation-auth/01-05-SUMMARY.md
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Redirect authenticated users to dashboard
- Show landing page with value proposition for visitors
- Add clear CTAs for register and login
- Italian copy reflecting core product value
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create UserNav component with logout functionality
- Add dashboard layout with header, navigation, and user info
- Create dashboard page displaying plan info and onboarding steps
- All text in Italian for target audience
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create updateSession helper for Supabase session management
- Add main middleware with protected and auth route handling
- Configure matcher to exclude static files for performance
- Session refresh on every request prevents random logouts
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Email/password auth was implemented by 01-04 during parallel wave execution.
All must-haves verified present in codebase.
Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>
- Handle OAuth and email verification callback
- Exchange code for session using Supabase SSR
- Redirect to next param or /dashboard on success
- Redirect to /login with error on failure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Tasks completed: 3/3
- Create Google Sign-In button component
- Add Google button to login and register pages
- Document Google OAuth setup process
SUMMARY: .planning/phases/01-foundation-auth/01-04-SUMMARY.md
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Zod validation schemas for auth operations
- Add server actions for register, login, reset, update password
- Add clsx and tailwind-merge for class utilities
- Password validation: 8+ chars, 1 number, 1 uppercase
- Error messages in Italian per user requirement
- Specific error messages (not generic 'invalid credentials')
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Step-by-step Google Cloud Console configuration
- Supabase Dashboard provider setup instructions
- Environment variables section
- Test integration checklist
- Troubleshooting guide for common errors
- Security notes and best practices
- Local vs production comparison table
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add auth layout with centered card design
- Add Input component for form fields
- Add LoginForm component with email/password and validation
- Add RegisterForm component with password requirements
- Add login page with Google button + 'oppure' divider + email form
- Add register page with Google button + 'oppure' divider + email form
- Italian text throughout (Accedi, Registrati, oppure)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add cn() utility function for class name merging
- Add Button component with default/outline/ghost variants
- Add Card component with Header, Title, Description, Content, Footer
- Add GoogleSignInButton with signInWithOAuth for Google provider
- Italian text: 'Accedi con Google'
- Redirects to /auth/callback after consent
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- src/lib/supabase/client.ts: Browser client for Client Components
- Uses createBrowserClient from @supabase/ssr
- Reads NEXT_PUBLIC_* env vars
- src/lib/supabase/server.ts: Server client for SSR/Actions
- Uses createServerClient from @supabase/ssr
- Async cookies() for Next.js 15+ compatibility
- Cookie handlers for session management
- Try/catch in setAll for Server Component safety
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- .env.example template for required variables
- .env.local with placeholders (gitignored)
- NEXT_PUBLIC_SUPABASE_URL for API endpoint
- NEXT_PUBLIC_SUPABASE_ANON_KEY for client-side auth
- SUPABASE_SERVICE_ROLE_KEY for server-side operations
- NEXT_PUBLIC_APP_URL for callback URLs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Tasks completed: 3/3
- Create database migration with plans and profiles
- Create seed file for development
- Document database schema
SUMMARY: .planning/phases/01-foundation-auth/01-02-SUMMARY.md
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Document plans and profiles tables with all columns
- Document RLS policies and performance notes
- Document helper functions with TypeScript examples
- Document triggers and migration options
- Include security notes and best practices
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Verify plans exist before seeding
- Log seed completion with NOTICE
- Minimal seed - plans created in migration, profiles via trigger
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>