Fitur lengkap: - Auth JWT + RBAC (Admin/Teacher) + halaman login - Shell 3 kolom (left nav, topbar, right rail dashboard) - CRUD siswa + follow up kanban + status calon/student/ex - Dashboard: siswa aktif, kehadiran, bar sumber lead, perlu follow up - Pembayaran prorata per pertemuan (cash/transfer/qris) - Kelas, enrollment, generate sesi, kehadiran bulk - Jurnal aktivitas + upload multi-foto - Raport + placement test (tampil di detail siswa) - Pengaturan & seed data contoh Stack: Next.js 16, TypeScript, Tailwind v4, Prisma (SQLite), Recharts, Zod
22 lines
966 B
TypeScript
22 lines
966 B
TypeScript
import type { Metadata } from "next";
|
|
import { Inter, JetBrains_Mono, Plus_Jakarta_Sans, Sora } from "next/font/google";
|
|
import "./globals.css";
|
|
|
|
const jakarta = Plus_Jakarta_Sans({ subsets: ["latin"], variable: "--font-jakarta", display: "swap" });
|
|
const inter = Inter({ subsets: ["latin"], variable: "--font-inter", display: "swap" });
|
|
const sora = Sora({ subsets: ["latin"], variable: "--font-sora", display: "swap" });
|
|
const mono = JetBrains_Mono({ subsets: ["latin"], variable: "--font-mono-jb", display: "swap" });
|
|
|
|
export const metadata: Metadata = {
|
|
title: "Kodeva — Sistem Manajemen Kursus Coding",
|
|
description: "Kelola kelas coding, follow up siswa, pembayaran prorata, jurnal, dan raport dalam satu tempat.",
|
|
};
|
|
|
|
export default function RootLayout({ children }: LayoutProps<"/">) {
|
|
return (
|
|
<html lang="id" className={`${jakarta.variable} ${inter.variable} ${sora.variable} ${mono.variable}`}>
|
|
<body>{children}</body>
|
|
</html>
|
|
);
|
|
}
|