2026-10-07 19:55:25 +02:00

Hinterstein Immobilien · Mieterportal

Mieterportal der Hinterstein Immobilien für 50 Wohnungen in 3 Häusern (Hauptstraße 12 · Ringweg 3 · Am Park 5) – analog zum Schulportal. Live-Ziel: https://mieterportal.hocks.eu.

Module

  1. Dashboard – persönliche Übersicht (Mieter) bzw. Kennzahlen, Belegung und Einnahmen (Verwaltung)
  2. Benutzerverwaltung (nur Verwaltung) – Konten anlegen/pflegen, Registrierungscodes erzeugen
  3. Mietkonto & Zahlungen – Buchungsverlauf, offene Forderungen, Nebenkosten; Verwaltung sieht Zahlungsstatus aller 50 Wohnungen
  4. Schadensmeldungen – Tickets erfassen, priorisieren und Status pflegen
  5. Dokumente – Verträge, Abrechnungen, Hausordnung; zentraler Such- und Filterzugriff
  6. Nachrichten – Direktkommunikation Mieter ↔ Verwaltung

Anmeldung erforderlich – Gruppen: Verwaltung und Mieter (Registrierung der Mieter per Code auf der Startseite). Demo-Zugänge (Passwort jeweils 0815): j.hinterstein (Verwaltung) · a.berger (Mieterin) · Demo-Registrierungscode: MP-2026-0815.

Architektur (v1.3)

  • Frontend: React-SPA (statisch, nginx-Container mp-portal)
  • API: Node/Express (server/, Container mp-api) – Auth, Daten, Rollenrechte, serverseitige E-Mail-Benachrichtigungen
  • Datenbank: PostgreSQL 16 (Container mp-db, Volume mp_pgdata) – zentrale Datenhaltung für alle Nutzer, kein localStorage mehr (außer Dark-Mode-Theme)
  • Sitzung: HttpOnly-Cookie (8 h), Passwörter als SHA-256-Hash

Entwicklung

npm install
npm run dev        # http://localhost:3000 (proxyt /api an localhost:3001)
npm run build      # Produktionsbuild nach dist/
python beispieldaten.py   # generiert server/seed/generated.json (Seed wählbar)

Projekt-Kontext für Kimi Work: kimi.md.

Deployment (bewährter Workflow, s. kimi.md Kap. 4)

./deploy.sh

baut das Frontend, lädt Paket (dist + compose + nginx-Template + server/) per pscp auf den Server (Port 38592, Pageant-Key Z:\Devel\ssh\priv_ionos_hocks_vps.ppk) und startet den Stack neu inkl. API-Image-Build (docker compose up -d --build): mp-portal (nginx), mp-api (Node-API), mp-db (PostgreSQL). TLS/Subdomain liefert der Nginx Proxy Manager (npm_default-Netz). Voraussetzung auf dem Server: portal.env mit MAIL_API_TOKEN + POSTGRES_PASSWORD und .env-Symlink darauf (s. kimi.md Kap. 4).

Alternativ lokal ohne Server: docker build -t mieterportal . && docker run -p 8080:80 mieterportal.

Mail-Stack & Benachrichtigungen

mail-server/ enthält den aus dem Schulportal übernommenen Aufbau: Postfix-Relay (nur intern, kein offenes Relay) + schlanke Python-API. Konfiguration über mail-server/mail.env (Vorlage: mail.env.example), nicht im Repo.

Auf dem Server läuft der Stack unter /opt/mp-mail. Das Portal ist verkabelt: Der nginx des mp-portal-Containers proxiet ausschließlich POST /api/mail/send an die Mail-API und authentifiziert sich dabei serverseitig mit dem Token aus portal.env (nur auf dem Server, gitignored). Die Node-API benachrichtigt die Verwaltung bei neuen Schadensmeldungen und die jeweilige Gegenstelle bei Nachrichten – Versand fire-and-forget, ein Ausfall der Mail-API beeinträchtigt das Portal nicht.

S
Description
Hocks Mieterportal – React-App mit Docker-Deployment (mieterportal.hocks.eu)
Readme
6.4 MiB
Languages
TypeScript 67.6%
JavaScript 26.7%
Python 4.2%
CSS 0.4%
Shell 0.4%
Other 0.6%