2026-03-12 17:00:47 +01:00
2026-03-10 21:49:01 +01:00
2026-03-12 17:00:47 +01:00
2026-03-10 21:49:01 +01:00
2026-03-10 21:49:01 +01:00
2026-03-10 21:49:01 +01:00
2026-03-10 21:49:01 +01:00

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_SECRET muss 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
S
Description
No description provided
Readme 760 KiB
Languages
TypeScript 97.4%
JavaScript 2.2%
Dockerfile 0.3%
CSS 0.1%