3a2a94ec1992eb8ec2cd6a4c30089e7193e4d3ce
Annas Rechnungsmanager
Buchhaltungs- und Rechnungsverwaltungssystem für Mandanten.
Features
- Mandantenverwaltung — Mehrere Unternehmen verwalten
- Rechnungen — Erstellen, verwalten, als PDF exportieren (§14 UStG konform)
- Kundenverwaltung — Kundenstammdaten pro Mandant
- Steuerberichte — USt-Voranmeldung, monatliche & quartalsweise Auswertungen
Tech Stack
- React Router v7 (Framework Mode, SSR) + TypeScript
- MariaDB via Prisma ORM
- Cookie-Session-Auth (bcryptjs)
- Tailwind CSS v4 + shadcn/ui
- @react-pdf/renderer für PDF-Generierung
- Docker für die Datenbank
Lokale Entwicklung
Voraussetzungen
- Node.js 22+
- Docker + Docker Compose
Installation
npm install
Umgebungsvariablen
.env im Projektstamm anlegen:
DATABASE_URL="mysql://annas_user:annas_password@localhost:3306/annas_rechnungen"
AUTH_SECRET="dein-zufaelliger-secret-string"
Datenbank einrichten
npm run db:migrate # Migrationen ausführen
npm run db:seed # Demo-Daten einspielen
Demo-Zugangsdaten: anna@example.de / demo123
Entwicklungsserver starten
npm run dev
Startet automatisch MariaDB via Docker und den Vite-Dev-Server auf http://localhost:5173.
Scripts
| Befehl | Beschreibung |
|---|---|
npm run dev |
DB starten + Dev-Server |
npm run build |
Produktions-Build |
npm run start |
Produktions-Server starten |
npm run typecheck |
TypeScript prüfen |
npm run db:migrate |
Prisma Migrationen ausführen |
npm run db:seed |
Demo-Daten einspielen |
npm run db:studio |
Prisma Studio öffnen |
Deployment
Docker Compose
Startet App + MariaDB als komplettes Setup:
docker compose up -d
Die App läuft auf http://localhost:3000. Migrationen werden automatisch beim Start ausgeführt.
AUTH_SECRETmuss als Umgebungsvariable gesetzt sein.
Kubernetes
# Secret-Werte in k8s.yml anpassen (auth-secret, ggf. Passwörter), dann:
kubectl apply -f k8s.yml
Das Manifest (k8s.yml) enthält: Namespace, Secret, MariaDB (PVC + Deployment + Service), App (Deployment mit Init-Container für Migrationen + Service + Ingress).
Projektstruktur
app/
components/ UI-Komponenten (ui/, layout/, company/, invoice/)
lib/ Hilfsfunktionen (prisma, tax, utils, invoice-number)
routes/ Route-Dateien (React Router v7, file-based)
session.server.ts Auth (Login, Logout, Session)
types/ Gemeinsame TypeScript-Typen
db/
docker-compose.yml MariaDB + phpMyAdmin für lokale Entwicklung
prisma/
schema.prisma Datenbankschema
migrations/ Migrationsverlauf
Rechnungs-Compliance (§14 UStG)
Alle PDFs enthalten die gesetzlich vorgeschriebenen Pflichtangaben:
- Name & Anschrift Rechnungssteller und -empfänger
- Steuernummer / USt-IdNr. des Ausstellers
- Rechnungsdatum & Rechnungsnummer (fortlaufend)
- Leistungsdatum / Lieferdatum
- Leistungsbeschreibung
- Nettobetrag, USt-Satz, USt-Betrag, Bruttobetrag
Description
Languages
TypeScript
97.4%
JavaScript
2.2%
Dockerfile
0.3%
CSS
0.1%