feat: scaffold frontend routes and layout
This commit is contained in:
parent
4d9af1d25c
commit
608bf086ec
9 changed files with 128 additions and 0 deletions
8
app/(dashboard)/candidates/page.tsx
Normal file
8
app/(dashboard)/candidates/page.tsx
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
export default function CandidatesPage() {
|
||||
return (
|
||||
<div className="bg-white p-6 rounded-lg shadow-sm border border-slate-200">
|
||||
<h1 className="text-xl font-bold text-slate-900 mb-2">Candidates</h1>
|
||||
<p className="text-slate-600 text-sm">View and evaluate parsed candidate profiles.</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
8
app/(dashboard)/interviews/page.tsx
Normal file
8
app/(dashboard)/interviews/page.tsx
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
export default function InterviewsPage() {
|
||||
return (
|
||||
<div className="bg-white p-6 rounded-lg shadow-sm border border-slate-200">
|
||||
<h1 className="text-xl font-bold text-slate-900 mb-2">Interviews</h1>
|
||||
<p className="text-slate-600 text-sm">Schedule and monitor candidate evaluations.</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
8
app/(dashboard)/jobs/page.tsx
Normal file
8
app/(dashboard)/jobs/page.tsx
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
export default function JobsPage() {
|
||||
return (
|
||||
<div className="bg-white p-6 rounded-lg shadow-sm border border-slate-200">
|
||||
<h1 className="text-xl font-bold text-slate-900 mb-2">Jobs</h1>
|
||||
<p className="text-slate-600 text-sm">Manage job vacancies and candidate matches.</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
36
app/(dashboard)/layout.tsx
Normal file
36
app/(dashboard)/layout.tsx
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import Link from "next/link";
|
||||
|
||||
export default function DashboardLayout({
|
||||
children,
|
||||
}: {
|
||||
children: React.ReactNode;
|
||||
}) {
|
||||
return (
|
||||
<div className="min-h-screen bg-slate-50 flex flex-col">
|
||||
<header className="bg-white border-b border-slate-200 shadow-sm">
|
||||
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 h-16 flex items-center justify-between">
|
||||
<div className="flex items-center gap-8">
|
||||
<span className="text-slate-900 font-bold text-lg">AI Recruitment</span>
|
||||
<nav className="flex gap-4">
|
||||
<Link href="/jobs" className="text-sm text-slate-600 hover:text-slate-900 font-medium">
|
||||
Jobs
|
||||
</Link>
|
||||
<Link href="/candidates" className="text-sm text-slate-600 hover:text-slate-900 font-medium">
|
||||
Candidates
|
||||
</Link>
|
||||
<Link href="/interviews" className="text-sm text-slate-600 hover:text-slate-900 font-medium">
|
||||
Interviews
|
||||
</Link>
|
||||
<Link href="/workflows" className="text-sm text-slate-600 hover:text-slate-900 font-medium">
|
||||
Workflows
|
||||
</Link>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<main className="flex-1 max-w-7xl mx-auto w-full p-6 sm:p-8">
|
||||
{children}
|
||||
</main>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
8
app/(dashboard)/workflows/page.tsx
Normal file
8
app/(dashboard)/workflows/page.tsx
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
export default function WorkflowsPage() {
|
||||
return (
|
||||
<div className="bg-white p-6 rounded-lg shadow-sm border border-slate-200">
|
||||
<h1 className="text-xl font-bold text-slate-900 mb-2">Workflows</h1>
|
||||
<p className="text-slate-600 text-sm">Configure automated recruitment pipelines orchestrated by n8n.</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
BIN
app/favicon.ico
Normal file
BIN
app/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
5
app/globals.css
Normal file
5
app/globals.css
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
@import "tailwindcss";
|
||||
|
||||
body {
|
||||
@apply bg-slate-50 text-slate-600 antialiased;
|
||||
}
|
||||
33
app/layout.tsx
Normal file
33
app/layout.tsx
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
import type { Metadata } from "next";
|
||||
import { Geist, Geist_Mono } from "next/font/google";
|
||||
import "./globals.css";
|
||||
|
||||
const geistSans = Geist({
|
||||
variable: "--font-geist-sans",
|
||||
subsets: ["latin"],
|
||||
});
|
||||
|
||||
const geistMono = Geist_Mono({
|
||||
variable: "--font-geist-mono",
|
||||
subsets: ["latin"],
|
||||
});
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Create Next App",
|
||||
description: "Generated by create next app",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
children,
|
||||
}: Readonly<{
|
||||
children: React.ReactNode;
|
||||
}>) {
|
||||
return (
|
||||
<html
|
||||
lang="en"
|
||||
className={`${geistSans.variable} ${geistMono.variable} h-full antialiased`}
|
||||
>
|
||||
<body className="min-h-full flex flex-col">{children}</body>
|
||||
</html>
|
||||
);
|
||||
}
|
||||
22
app/page.tsx
Normal file
22
app/page.tsx
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
import Link from "next/link";
|
||||
|
||||
export default function Home() {
|
||||
return (
|
||||
<main className="flex min-h-screen flex-col items-center justify-center bg-slate-50 p-6">
|
||||
<div className="w-full max-w-md bg-white p-8 rounded-lg shadow-sm border border-slate-200 text-center">
|
||||
<h1 className="text-2xl font-bold text-slate-900 mb-2">
|
||||
AI Recruitment Platform
|
||||
</h1>
|
||||
<p className="text-slate-600 mb-6 text-sm">
|
||||
Welcome to the ATS. Access your workspace below.
|
||||
</p>
|
||||
<Link
|
||||
href="/jobs"
|
||||
className="inline-block w-full bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-4 rounded-md shadow-sm transition-colors text-sm"
|
||||
>
|
||||
Go to Dashboard
|
||||
</Link>
|
||||
</div>
|
||||
</main>
|
||||
);
|
||||
}
|
||||
Loading…
Reference in a new issue