Job search tracker: CRUD, AI parse/tailor/cover via OmniRoute, legacy import

This commit is contained in:
Jonathan Sykes
2026-08-16 19:05:19 +08:00
parent 8aebc279db
commit 9ba9ae675a
31 changed files with 2294 additions and 85 deletions

26
src/app/resumes/page.tsx Normal file
View File

@@ -0,0 +1,26 @@
import { prisma } from "@/lib/db";
import Link from "next/link";
export const dynamic = "force-dynamic";
export default async function ResumesPage() {
const resumes = await prisma.resume.findMany({
orderBy: { updatedAt: "desc" },
include: { job: { select: { title: true, company: true } } },
});
return (
<div className="space-y-4">
<h1 className="text-2xl font-bold">Resumes ({resumes.length})</h1>
<ul className="space-y-2">
{resumes.map((r) => (
<li key={r.id} className="rounded-lg border border-zinc-200 dark:border-zinc-800 bg-white dark:bg-zinc-900 p-4">
<Link href={`/resumes/${r.id}`} className="font-medium hover:text-blue-600">{r.name}</Link>
<div className="text-sm text-zinc-500">
{r.kind}{r.job ? ` · for ${r.job.company} — ${r.job.title}` : ""} · updated {r.updatedAt.toISOString().slice(0, 10)}
</div>
</li>
))}
</ul>
</div>
);
}