Implement RFID tag dump PWA with REST API, auth, and CI

Add Next.js app with SQLite/Drizzle storage for sites and LF/HF tag
dumps, multi-user Auth.js (credentials + optional OIDC), personal API
tokens in Settings, versioned /api/v1 for UI and future CLI use,
MCT/Proxmark/JSON import-export, PWA offline shell, Vitest tests, and
GitHub Actions CI.
This commit is contained in:
Cursor Agent
2026-08-23 22:17:51 +00:00
parent 5029945cc2
commit 3331944773
65 changed files with 13689 additions and 1 deletions
+54
View File
@@ -0,0 +1,54 @@
import { DM_Sans, IBM_Plex_Mono } from "next/font/google";
import type { Metadata, Viewport } from "next";
import { Providers } from "@/components/Providers";
import { AppHeader } from "@/components/AppHeader";
import { ServiceWorkerRegister } from "@/components/ServiceWorkerRegister";
import "./globals.css";
const dmSans = DM_Sans({
subsets: ["latin"],
variable: "--font-dm-sans",
});
const ibmMono = IBM_Plex_Mono({
subsets: ["latin"],
weight: ["400", "500"],
variable: "--font-ibm-mono",
});
export const metadata: Metadata = {
title: "RFID Database",
description: "Store and look up LF/HF RFID tag dumps by site",
applicationName: "RFID DB",
appleWebApp: {
capable: true,
title: "RFID DB",
statusBarStyle: "black-translucent",
},
};
export const viewport: Viewport = {
themeColor: "#1a7f6e",
width: "device-width",
initialScale: 1,
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body className={`${dmSans.variable} ${ibmMono.variable} antialiased`}>
<Providers>
<AppHeader />
<main className="container" style={{ padding: "1.25rem 0 3rem" }}>
{children}
</main>
<ServiceWorkerRegister />
</Providers>
</body>
</html>
);
}