chore: Projektgeruest mit Next.js 15, TypeScript und Tailwind CSS 4

Grundlage fuer Nebula, das Dashboard fuer Vibe-Coding Projekte.

- Next.js 15 (App Router) mit React 19 und TypeScript im strict-Modus
- Tailwind CSS 4 ueber @tailwindcss/postcss, ohne separate Config-Datei
- output: "standalone", damit dasselbe Build sowohl nativ als auch im
  Docker-Image laeuft
- Pfad-Alias @/* auf src/
- .gitattributes erzwingt LF fuer Shell-Skripte (wichtig fuers Image)
- MIT-Lizenz

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-25 19:33:12 +02:00
co-authored by Claude Opus 5
commit ceafcc6d1e
10 changed files with 206 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
node_modules
.next
.git
.gitignore
Dockerfile
.dockerignore
docker-compose*.yml
README.md
FEATURES.md
data
postgres-data
*.log
.env
.env.local
.env.*.local
.idea
.vscode
+12
View File
@@ -0,0 +1,12 @@
# Zeilenenden vereinheitlichen – wichtig fuer Shell-Skripte im Docker-Image.
* text=auto eol=lf
*.sh text eol=lf
Dockerfile text eol=lf
*.ps1 text eol=crlf
*.png binary
*.jpg binary
*.ico binary
*.woff binary
*.woff2 binary
+49
View File
@@ -0,0 +1,49 @@
# dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz
# next.js
/.next/
/out/
next-env.d.ts.bak
# production
/build
/dist
# misc
.DS_Store
*.pem
Thumbs.db
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# env
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
!.env.example
# typescript
*.tsbuildinfo
# prisma
/prisma/*.db
/prisma/*.db-journal
# docker volumes / data
/data
/postgres-data
# editors
.idea/
.vscode/*
!.vscode/extensions.json
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 Florian Wilde
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+5
View File
@@ -0,0 +1,5 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
+19
View File
@@ -0,0 +1,19 @@
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
// "standalone" erzeugt einen self-contained Server unter .next/standalone.
// Das Docker-Image nutzt genau diesen Output; im Standalone-Betrieb ohne
// Docker stoert die Option nicht ("npm start" laeuft weiterhin ueber next start).
output: "standalone",
reactStrictMode: true,
poweredByHeader: false,
experimental: {
// Prisma darf nicht gebundlet werden, sonst findet der Client seine Engine nicht.
serverActions: {
bodySizeLimit: "2mb",
},
},
serverExternalPackages: ["@prisma/client", "prisma"],
};
export default nextConfig;
+52
View File
@@ -0,0 +1,52 @@
{
"name": "nebula",
"version": "0.1.0",
"private": true,
"description": "Nebula – Dashboard fuer Vibe-Coding Projekte mit Git-Anbindung (GitHub, GitLab, Gitea)",
"scripts": {
"dev": "next dev",
"build": "prisma generate && next build",
"start": "next start",
"lint": "next lint",
"typecheck": "tsc --noEmit",
"db:generate": "prisma generate",
"db:migrate": "prisma migrate deploy",
"db:migrate:dev": "prisma migrate dev",
"db:push": "prisma db push",
"db:studio": "prisma studio",
"db:seed": "prisma db seed",
"db:reset": "prisma migrate reset",
"docker:db": "docker compose up -d db",
"docker:db:down": "docker compose stop db",
"docker:up": "docker compose --profile full up -d --build",
"docker:down": "docker compose --profile full down",
"docker:logs": "docker compose --profile full logs -f app",
"docker:tools": "docker compose --profile tools up -d",
"setup": "node scripts/setup.mjs",
"postinstall": "prisma generate"
},
"prisma": {
"seed": "tsx prisma/seed.ts"
},
"dependencies": {
"@prisma/client": "^6.8.2",
"lucide-react": "^0.511.0",
"next": "^15.3.3",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"zod": "^3.25.28"
},
"devDependencies": {
"@tailwindcss/postcss": "^4.1.7",
"@types/node": "^22.15.21",
"@types/react": "^19.1.5",
"@types/react-dom": "^19.1.5",
"prisma": "^6.8.2",
"tailwindcss": "^4.1.7",
"tsx": "^4.19.4",
"typescript": "^5.8.3"
},
"engines": {
"node": ">=20.11"
}
}
+8
View File
@@ -0,0 +1,8 @@
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: {
"@tailwindcss/postcss": {},
},
};
export default config;
View File
+23
View File
@@ -0,0 +1,23 @@
{
"compilerOptions": {
"target": "ES2022",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"plugins": [{ "name": "next" }],
"paths": {
"@/*": ["./src/*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}