Some checks failed
Build and Deploy to k3s / build-and-deploy (push) Failing after 1m31s
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>
52 lines
1.8 KiB
TypeScript
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>
|
|
);
|
|
}
|