Files
nextcraft/apps/web/app/(learner)/page.tsx
T
CIAgent c93aace56b docs(P01): complete project-scaffolding phase
---ci---
phase: 1
milestone: v0.1
status: complete
requirements:
  covered: [REQ-001, REQ-002, REQ-003, REQ-004, REQ-005]
  partial: []
---/ci---

Phase 1 (project-scaffolding) complete:
- Monorepo: pnpm workspaces + turborepo
- packages/types: all domain, marketplace, user, UI types
- packages/mock-data: 5 competency stacks (70 competencies), 20 jobs, 15 candidates, 10 employers, learner progress, AI tutor responses
- packages/ui: design tokens + 5 primitives (Button, Input, Card, Badge, Avatar)
- apps/web: Next.js 15 with App Router, Tailwind v4, Inter font, 4 route groups, navigation shell, dark mode toggle, role switcher
- Build passes: 4/4 packages, 10 routes prerendered
- Typecheck passes: 7/7 tasks
2026-09-10 21:53:18 +00:00

78 lines
2.7 KiB
TypeScript

import Link from 'next/link';
import { ArrowRight, GraduationCap, ShoppingBag, Building2, Shield } from 'lucide-react';
import { Button, Card, CardBody, Badge } from '@nextcraft/ui';
const SURFACES = [
{
href: '/dashboard',
title: 'Learner',
description: 'Competency stacks, microcredentials, AI tutors, oral defenses.',
icon: GraduationCap,
color: 'text-primary-600',
},
{
href: '/marketplace',
title: 'Marketplace',
description: 'AI-era job board matching verified competencies to roles.',
icon: ShoppingBag,
color: 'text-accent-600',
},
{
href: '/employer',
title: 'Employer',
description: 'Talent pipelines, evidence-based hiring, culture pages.',
icon: Building2,
color: 'text-primary-600',
},
{
href: '/admin',
title: 'Admin',
description: 'Cohort oversight, content governance, system health.',
icon: Shield,
color: 'text-rose-600',
},
];
export default function LearnerHome() {
return (
<div className="flex flex-col gap-12">
<section className="flex flex-col items-start gap-6">
<Badge variant="info">v0.1 · UI/UX Prototype</Badge>
<h1 className="max-w-3xl text-4xl font-bold tracking-tight text-slate-900 sm:text-5xl dark:text-slate-50">
Prove what you can build, not what you can write.
</h1>
<p className="max-w-2xl text-lg text-slate-600 dark:text-slate-300">
Nextcraft is an AI-native outcome school and talent marketplace. Learners earn
microcredentials backed by artifacts, process traces, and oral defenses and employers
hire on evidence, not résumés.
</p>
<div className="flex items-center gap-3">
<Link href="/dashboard">
<Button size="lg" iconRight={<ArrowRight className="h-4 w-4" />}>
Enter the learner surface
</Button>
</Link>
<Link href="/marketplace">
<Button variant="outline" size="lg">
Browse the marketplace
</Button>
</Link>
</div>
</section>
<section className="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4">
{SURFACES.map((s) => (
<Link key={s.href} href={s.href}>
<Card className="h-full transition-shadow hover:shadow-md">
<CardBody className="flex flex-col gap-3">
<s.icon className={`h-6 w-6 ${s.color}`} />
<h3 className="text-base font-semibold text-slate-900 dark:text-slate-100">{s.title}</h3>
<p className="text-sm text-slate-600 dark:text-slate-400">{s.description}</p>
</CardBody>
</Card>
</Link>
))}
</section>
</div>
);
}