Vom Nachrichten-Wirrwarr zum schlanken Mieterportal – SaaS ohne PHP-Framework im Alltag

mo

Administrator
Teammitglied
2026-06-22_vom-nachrichten-wirrwarr-zum-schlanken-mieterportal-saas-ohn_c86983.jpg

Chaos im Alltag – und wie man rauskommt​


Typischer Montag bei einer Hausverwaltung: Fünf Nachrichten zum selben Wasserschaden. Eine WhatsApp mit Handyfoto („läuft wieder!“), zwei E-Mails („Was ist jetzt mit der Heizung?“), ein Anruf vom Mieter, später noch ein Rückruf vom Handwerker. Übersicht? Gleich null. Die Frage, die immer wieder kommt: Was ist eigentlich schon erledigt – und was gammelt seit Wochen ungesehen im Postfach?

Genau diese Baustelle will mieterportal.net zuschütten. Ziel: Alle Meldungen, Kommunikation und Verwaltung an einem Platz. Keine Zettelwirtschaft mehr, keine Excel-Inseln, keine Nachtschichten zum Sortieren der letzten 30 E-Mails. Funktioniert das? Ja. Aber der Weg dahin ist holpriger als die meisten Tutorials glauben machen.

Tech-Stack: Der Abspeck-Plan​


Große Frameworks? Gab's nicht. Laravel, Symfony, React – alles draußen gelassen. Stattdessen:

- PHP 8.3 mit `declare(strict_types=1)` (ohne das geht heute eh nichts mehr)
- SQLite, weil niemand Lust auf MySQL-Server hat, der nachts um 3 Uhr abschmiert
- Vanilla JavaScript (also kein Vue, kein React, kein npm-Gewürge)
- Handgebauter Mini-Router, bisschen MVC – das reicht meist
- Chart.js für ein paar hübsche Auswertungen
- Bootstrap Icons und eigenes CSS, weil das Auge mitklickt

Klingt nach Bastelbuden-Stack? Vielleicht. Aber: Weniger Abhängigkeiten, weniger Hosting-Ärger. Gerade auf Shared Hosting ein echter Vorteil. Wer schon mal Composer samt 20 Abhängigkeiten auf einem 2-Euro-Hoster zum Laufen gebracht hat, weiß, was gemeint ist.

Natürlich: Eigenbau hat seinen Preis. Alles, was Frameworks sonst erledigen (Routing, CSRF, E-Mail, Rechte), muss selbst gebaut werden. Dauert. Kostet Nerven.

Trotzdem: Für klar umrissene SaaS-Produkte spart das oft Zeit. Und graue Haare. Wer PHP- und JS-Architektur genauer sehen will: PHP mit etwas JS: Wieso Agenturen 2026 meist keinen Framework-Zirkus brauchen.

Was kann das Ding?​


Nicht nur ein schicker Bug-Tracker: Das System ist in mehreren Iterationen gewachsen.

- Schadensmeldungen mit Foto-Upload, Statuswechsel („neu“ bis „erledigt“)
- Kommentare, intern & öffentlich, Benachrichtigungen per E-Mail
- Verwaltung für Wohnungen, Mietverträge, Mieterwechsel
- Fünf Benutzerrollen, sauber getrennt
- Mandantenfähig: Jeder Vermieter sieht nur seine Daten
- Abo & Paketverwaltung – Testphasen, Kündigung, Erinnerungen laufen per Cronjob
- CSV/XLSX-Import für Objekte – bisschen KI, wenn’s sein muss
- Homeday-Preisatlas eingebunden, damit die Miete nicht auswürfeln
- Dashboard für Reaktionszeiten, Aktivitätslog, Newsletter-Tool, DSGVO-Pflichtprogramm

Was nervt – und wie es trotzdem geht​


Die echten Probleme tauchen nie im Tutorial auf. Ein paar Klassiker aus dem Alltag:

Mandantenfähigkeit nachrüsten: Einmal Hölle und zurück​


Erst für einen Vermieter gebaut. Dann plötzlich Wunsch: Multi-Tenancy. Nachträglich. Bedeutet: Jede Abfrage muss Mandant filtern. Ein falscher Join, fremde Daten im Dashboard. Spaßig ist anders.

Klartext: Mandantentrennung muss von Anfang an ins Datenmodell. Nachrüsten? Never again.

E-Mail-Versand: Spam ahoi!​


Gmail App-Passwörter als Startlösung – bequem, aber landet fix im Spam. Absender @gmail.com? Sieht nach Scam aus. Erst mit eigenem SMTP-Server, SPF & DKIM gibt’s stabile Zustellung.

Log & Versandwarteschlange sind Pflicht. Sonst sucht man Fehler im Dunkeln.

Rechte & Datenschutz: Wenn „Darf der das sehen?“ die Woche dominiert​


Zehnmal am Tag die Frage: Wer darf was sehen? Sichtbarkeitsregeln nerven, aber ohne geht’s nicht. Viele kleine `if`-Abfragen führen zu Sicherheitslücken. Lösung: Zentrale Rechte-Matrix, editierbar nur vom Vermieter. Alles andere wird zur Dauerbaustelle.

500er Fehler: Eigenbau = Blackbox?​


Fehlerseite kommt, aber warum? Fehlendes Logging, Routing-Fehler, PHP-Exceptions – ohne systematisches Server-Log keine Chance. Erst mit sauberem Logfile lässt sich jeder 500er auflösen.

404 – läuft lokal, knallt live​


Lokal alles prima, live 404. Ursache: Pfadprobleme, Groß/Kleinschreibung, .htaccess, Rechte. Demos finden das selten. Erst echte Nutzer mit echten Rollen stolpern drüber.

Filter ohne Formular-Absenden: Nur für Geduldige​


Filter sollen sofort reagieren, kein Button-Klick – klingt nach Luxus, nervt beim Programmieren. JS-Logik muss sitzen, sonst verschwindet die halbe Tabelle. Einheitliche Suchmuster helfen.

Zeitumrechnung: UTC vs. Lokalzeit – Klassiker​


SQLite speichert UTC, angezeigt wird Berlin. Ohne penible Umrechnung falsche Zeitstempel. Lösung: Immer UTC speichern, lokal ausgeben. Sonst gibt’s Chaos im Protokoll.

Sicherheit: Wenn alles selbst gebaut werden muss​


CSRF, Rate-Limiting, Passwort-Reset, Host-Header-Check – alles selbst gebastelt. Besonders wichtig: Host-Header per Regex prüfen, sonst landet der Link im Nirwana.

SEO hinterm Login: Was draußen bleiben muss​


Die App ist fast komplett hinterm Login. Indexiert werden dürfen nur Startseite, Impressum, Datenschutz. Der Rest: `noindex, nofollow` – sonst steht das nächste Datenschutzproblem vor der Tür.

Robots.txt blockt Admin & Nutzerbereiche. Sitemap? Nur öffentliche Seiten. JSON-LD für Org, Website, FAQ. Landingpage? Klare Reihenfolge: Problem, Lösung, Features, Preis, FAQ. Ohne Schnickschnack.

Kritisch: Wer Admin-Bereiche oder Tickets indexieren lässt, spielt mit Feuer. Im Zweifel: Weniger veröffentlichen, kein Risiko eingehen.

Nach 30 Jahren Webentwicklung: Mein Fazit​


Frameworks haben ihren Platz – bei Großprojekten, wildem Feature-Wachstum, wechselnden Anforderungen. Für klar abgezirkelte Produkte reicht ein Eigenbau-Stack oft. Updates und Abhängigkeiten bleiben so überschaubar, Hosting läuft auch auf einfacheren Setups. Aber: Disziplin nötig. Mandanten, Rechte, Logging, E-Mail – alles von Anfang an mitdenken. Sonst wird’s teuer.

Für Agenturen mit 5 bis 10 Leuten: Schneller deployen, weniger Hosting-Kosten, aber mehr Verantwortung beim Testen. Einzelkämpfer? Kommen mit dem Stack klar, wenn sauber dokumentiert und getestet wird. Nachbessern dauert sonst ewig.

Weiterlesen – was noch hilft​


Wer tiefer einsteigen will:

- PHP 8.4: Neue Stolpersteine, neue Chancen – was jetzt ansteht
- PHP-Altprojekte absichern: OWASP-Check für SQL-Injection, XSS und Session-Fixation

Was bleibt?​


mieterportal.net beweist: Mandantenfähige SaaS mit PHP 8.3, SQLite, Vanilla JS – geht ohne Framework, wenn Routing, Sicherheit, E-Mail und Datenmodell stimmen. Heißt konkret:

- Mandantenfähigkeit von Anfang an einplanen
- Rechte zentral, nicht überall verstreut
- E-Mail? Nur mit eigener Domain, Logging, Zustellbarkeit prüfen
- Ohne Logging ist alles Rätselraten
- Testen: Echte Rollen, echte Daten, keine Demos

Für klar abgegrenzte Produkte bleibt der schlanke Weg oft der beste. Schnell gebaut, wartbar, günstig im Betrieb. Wenn Sicherheit und Datentrennung stimmen.


*Live: mieterportal.net · Stack: PHP 8.3, SQLite, Vanilla JS, Chart.js · Hosting: Plesk/Shared*

bye
mo
 
Zurück
Oben