chore: Next.js-Grundgerüst mit AdminLTE-CSS und Bootstrap Icons (#001)

Next.js 16 (App Router, TypeScript strict), admin-lte 4.9.1 (nur CSS),
bootstrap 5.3.8, bootstrap-icons, zod. Version 0.1.0-dev.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-17 19:43:50 +02:00
co-authored by Claude Opus 5
parent a54c1b6285
commit 2f8bab5721
11 changed files with 7525 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
<!-- BEGIN:nextjs-agent-rules -->
# This is NOT the Next.js you know
This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` (resolved from this file's directory; in monorepos the `next` package may not be visible from the repo root) before writing any code. Heed deprecation notices.
This block is written and re-added by `next dev` — verify at `node_modules/next/dist/server/lib/generate-agent-files.js`. Removing it from a diff only re-creates the uncommitted change; committing it with your work keeps the tree clean.
<!-- END:nextjs-agent-rules -->
+1
View File
@@ -0,0 +1 @@
@AGENTS.md
+24
View File
@@ -0,0 +1,24 @@
# ProxLedger
Zentrales Dashboard für den Subscription-Status aller Proxmox-Hosts (VE, Backup Server, Mail Gateway).
Auf jedem Host meldet ein schlanker Agent täglich per HTTPS seinen Status (Push-Modell) – auch aus Kundennetzen hinter NAT.
> **Status:** in Entwicklung (0.1.0-dev). Noch nicht produktiv einsetzen.
## Entwicklung
Voraussetzungen: Node.js ≥ 24, Docker (für PostgreSQL ab #003).
```bash
npm install
npm run dev # http://localhost:3000
npm run lint
npm run typecheck
npm test
```
## Dokumentation
- [Architektur- und Umsetzungsplan](docs/architektur.md)
- [Issues](docs/issues/README.md)
- [Changelog](CHANGELOG.md) · [Devlog](DEVLOG.md)
+7
View File
@@ -0,0 +1,7 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
/* config options here */
};
export default nextConfig;
+7379
View File
File diff suppressed because it is too large Load Diff
+39
View File
@@ -0,0 +1,39 @@
{
"name": "proxledger",
"version": "0.1.0-dev",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint",
"typecheck": "tsc --noEmit",
"test": "vitest run",
"test:watch": "vitest",
"format": "prettier --write ."
},
"dependencies": {
"admin-lte": "^4.9.1",
"bootstrap": "^5.3.8",
"bootstrap-icons": "^1.13.1",
"next": "16.3.5",
"react": "19.2.8",
"react-dom": "19.2.8",
"zod": "^4.6.5"
},
"devDependencies": {
"@types/node": "^24.13.5",
"@types/react": "^19",
"@types/react-dom": "^19",
"eslint": "^9",
"eslint-config-next": "16.3.5",
"eslint-config-prettier": "^10.1.8",
"prettier": "^3.9.7",
"typescript": "^5",
"vitest": "^5.0.1"
},
"description": "Proxmox Subscription Dashboard",
"engines": {
"node": ">=24"
}
}
+1
View File
@@ -0,0 +1 @@
/* Wird in #002 durch das ProxLedger-Theme ersetzt. */
+17
View File
@@ -0,0 +1,17 @@
import type { Metadata } from "next";
import "admin-lte/dist/css/adminlte.css";
import "bootstrap-icons/font/bootstrap-icons.css";
import "./globals.css";
export const metadata: Metadata = {
title: "ProxLedger",
description: "Proxmox Subscription Dashboard",
};
export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
return (
<html lang="de">
<body>{children}</body>
</html>
);
}
+10
View File
@@ -0,0 +1,10 @@
import { APP_VERSION } from "@/lib/version";
export default function Home() {
return (
<main className="container py-5">
<h1>ProxLedger</h1>
<p className="text-body-secondary">Proxmox Subscription Dashboard · Version {APP_VERSION}</p>
</main>
);
}
+4
View File
@@ -0,0 +1,4 @@
import pkg from "../../package.json";
/** Anwendungsversion aus package.json, wird im Footer angezeigt. */
export const APP_VERSION: string = pkg.version;
+34
View File
@@ -0,0 +1,34 @@
{
"compilerOptions": {
"target": "ES2017",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "react-jsx",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": ["./src/*"]
}
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts",
".next/dev/types/**/*.ts",
"**/*.mts"
],
"exclude": ["node_modules"]
}