Alexis Bruneteau b83c7a7d6d
Some checks failed
Build and Deploy to k3s / build-and-deploy (push) Failing after 1m31s
feat(migration): migrate from Angular 20 to Next.js 15
Complete framework migration from Angular to Next.js with full feature parity.

## What Changed
- Migrated from Angular 20 to Next.js 15 with App Router
- Replaced Angular components with React functional components
- Implemented React Context API for state management (replacing RxJS)
- Integrated React Hook Form for form handling
- Added shadcn/ui component library
- Configured Tailwind CSS 4.1 with @tailwindcss/postcss
- Implemented JWT authentication with middleware protection

## Core Features Implemented
-  User registration and login with validation
-  JWT token authentication with localStorage
-  Protected dashboard route with middleware
-  Portfolio listing with status indicators
-  Create portfolio functionality
-  ZIP file upload with progress tracking
-  Portfolio deployment
-  Responsive design with Tailwind CSS

## Technical Stack
- Framework: Next.js 15 (App Router)
- Language: TypeScript 5.8
- Styling: Tailwind CSS 4.1
- UI Components: shadcn/ui + Lucide icons
- State: React Context API + hooks
- Forms: React Hook Form
- API Client: Native fetch with custom wrapper

## File Structure
- /app - Next.js pages (landing, login, register, dashboard)
- /components - React components (ui primitives, auth provider)
- /lib - API client, types, utilities
- /hooks - Custom hooks (useAuth, usePortfolios)
- /middleware.ts - Route protection
- /angular-backup - Preserved Angular source code

## API Compatibility
- All backend endpoints remain unchanged
- JWT Bearer token authentication preserved
- API response format maintained

## Build Output
- Production build: 7 routes compiled successfully
- Bundle size: ~102kB shared JS (optimized)
- First Load JS: 103-126kB per route

## Documentation
- Updated README.md with Next.js setup guide
- Created OpenSpec proposal in openspec/changes/migrate-to-nextjs-launchui/
- Added project context in openspec/project.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-17 00:34:43 +02:00

52 lines
1.8 KiB
TypeScript

import Link from 'next/link';
import { Button } from '@/components/ui/button';
export default function Home() {
return (
<div className="min-h-screen flex flex-col">
{/* Temporary Navbar */}
<nav className="border-b">
<div className="container mx-auto px-4 py-4 flex justify-between items-center">
<h1 className="text-2xl font-bold">Portfolio Host</h1>
<div className="flex gap-4">
<Link href="/login">
<Button variant="outline">Login</Button>
</Link>
<Link href="/register">
<Button>Sign Up</Button>
</Link>
</div>
</div>
</nav>
{/* Hero Section */}
<main className="flex-1 flex items-center justify-center">
<div className="container mx-auto px-4 text-center">
<h1 className="text-5xl font-bold mb-6 bg-gradient-to-r from-purple-600 to-pink-600 bg-clip-text text-transparent">
Host Your Portfolio
</h1>
<p className="text-xl text-muted-foreground mb-8 max-w-2xl mx-auto">
Deploy and manage your portfolio websites with custom domains.
Simple, fast, and professional hosting for creatives and developers.
</p>
<div className="flex gap-4 justify-center">
<Link href="/register">
<Button size="lg">Get Started</Button>
</Link>
<Button size="lg" variant="outline">
View Example
</Button>
</div>
</div>
</main>
{/* Footer */}
<footer className="border-t py-8">
<div className="container mx-auto px-4 text-center text-muted-foreground">
<p>© 2025 Portfolio Host. All rights reserved.</p>
</div>
</footer>
</div>
);
}