1
// das Projekt, auf das ich am meisten stolz bin
2
export const everythingApp: Project = {
4
tagline: "Eine App für alles – meine persönliche Super-App, inklusive eigenem Backend.",
5
description: "Eine als PWA gebaute Allround-App, die rund 20 Alltags-Tools unter einem Dach vereint: von Reiseplanung über Haushalt und Rezepte bis zur Zeiterfassung. Dahinter läuft ein eigenes Express-Backend, das die Firestore-Zugriffe absichert, Überstunden serverseitig berechnet und Mails verschickt; geplante Jobs und Push-Benachrichtigungen übernehmen Firebase Cloud Functions. Schreibvorgänge funktionieren offline und werden beim Reconnect feldweise zusammengeführt.",
6
stack: ["Next.js", "React", "TypeScript", "Express", "Node.js", "Firestore", "Cloud Functions", "Material UI", "styled-components", "i18next", "PWA", "Sentry", "Vercel", "Kotlin"],
8
runtime: "Express 5 + TypeScript auf Node 22",
9
data: "Firestore über firebase-admin, Collection-Allowlist + Schema-Validierung",
10
auth: "Firebase-ID-Token + API-Token, serverseitiges Owner-Scoping",
11
jobs: "Firebase Cloud Functions (Cron): Push-Versand, Überstunden- & Buchungs-Checks",
12
types: "aus dem Backend generierte API-Typen, mit dem Frontend synchronisiert",
13
deploy: "Vercel · api.everythingapp.me",
16
"Reiseplaner mit Karten & Tagesplanung",
17
"Haushaltsplaner: Essensplan, Rezepte, Vorräte, Einkaufsliste",
18
"Zeiterfassung mit serverseitiger Überstundenberechnung",
19
"Kanban-Board, To-dos & Notizen",
20
"Habit-Tracker mit Statistiken",
21
"Wheel of Names, Umfragen & GameMaker",
22
"Push-Benachrichtigungen & geplante Jobs",
23
"Offline-Sync mit Merge beim Reconnect",
24
"Native Android-Widgets"
29
// mein freiberufliches Nebengewerbe, siehe Erfahrung
30
export const kochWebservice: Project = {
31
name: "Sebastian Koch Webservice",
32
tagline: "Websites für Vereine und kleine Betriebe, komplett selbst gebaut und betreut.",
33
description: "Eine eigene Plattform, auf der ich Kundenwebsites baue und dauerhaft betreibe. Aufgebaut als Monorepo aus einem geteilten Komponenten-Katalog (als rohes TypeScript-Paket ausgeliefert), mandantenfähigen Kundenprojekten, einem Verwaltungs-Tool und einem Kundenportal. Jedes Kundenprojekt ist für sich baubar und wird einzeln auf Vercel deployt. Ein eigenes Express-Backend übernimmt transaktionale Mails über benannte Absenderprofile und versorgt das Portal, das Firestore nie direkt anfasst, sondern feldweise gefilterte Daten über das Backend bezieht. Ein Preisrechner auf der Marketing-Seite erzeugt individuelle Angebote.",
34
stack: ["Next.js", "React", "TypeScript", "Express", "Node.js", "Firebase", "Firestore", "Material UI", "Monorepo", "Vercel"],
36
runtime: "Express + TypeScript auf Node",
37
mail: "transaktionale Mails über POST /api/v1/mail/send, Absender als benannte Profile in der Server-Umgebung",
38
portal: "Portal-Endpunkte, die Firestore per Positivliste feldweise filtern, damit Rules keine sensiblen Felder durchreichen",
39
data: "Firebase (Firestore, Auth, Storage) über das Admin-SDK, je Kundenprojekt ein eigenes Dienstkonto",
40
deploy: "Vercel, je Projekt npm ci, geteiltes globals-Paket per Versionssprung propagiert",
43
"Mandantenfähige Kundenprojekte, je eigenes Repo und eigener Vercel-Build",
44
"Geteilter Komponenten-Katalog als rohes TypeScript-Paket (transpilePackages)",
45
"Verwaltungs-Tool für Kunden, Firebase-Rules und Logins",
46
"Kundenportal: Stammdaten, gebuchte Leistungen, Rechnungen, Adminzugänge",
47
"Preisrechner, der individuelle Angebote erzeugt",
48
"Zentrale .env, die schlüsselweise in alle Apps synchronisiert wird"
53
// ein Agent pflegt die Daten, ich pflege nur die Regeln
54
export const fasnetTracker: Project = {
55
name: "Fasnettracker",
56
tagline: "Alle Fasnetstermine einer Region an einer Stelle – täglich automatisch eingesammelt.",
57
description: "Eine öffentliche Terminübersicht für die schwäbisch-alemannische Fasnet: Suche, Liste nach Datum und Karte. Die Termine sammelt ein täglicher Lauf selbst von den Seiten der Vereine ein – ein Sprachmodell liest die Terminseite und gibt strukturierte Veranstaltungen zurück. Eine Kostenbremse hasht den Seitentext und ruft das Modell nur bei echten Änderungen auf, ein Grabstein-Eintrag verhindert, dass von Hand gelöschte Termine beim nächsten Lauf zurückkommen. Lesen darf jeder ohne Anmeldung, schreiben nur der Admin: durchgesetzt allein über Firestore-Security-Rules, an denen auch die Pflegeskripte nicht vorbeikommen.",
58
stack: ["Next.js", "React", "TypeScript", "Material UI", "styled-components", "Firestore", "Security Rules", "Cloud Functions", "Claude", "Leaflet", "OpenStreetMap"],
60
sync: "geplante Cloud Function, die Terminseiten lädt und per Modell in Veranstaltungen übersetzt",
61
kosten: "Hash je Seite, Modellaufruf nur bei geändertem Text; Modell je Aufgabe im Admin umstellbar",
62
auth: "keine Registrierung, Adminrechte hängen an einem Dokument in admins",
63
data: "Firestore, öffentlich lesbar, schreibend nur über Rules mit struktureller Validierung",
64
tests: "Skript, das die eingespielten Rules im echten Projekt abklopft – lesen muss gehen, schreiben nicht",
67
"Suche über Vereine, Orte und Veranstaltungen",
68
"Terminliste nach Datum, serverseitig gerenderte Detailseiten",
69
"Karte auf Leaflet & OpenStreetMap",
70
"Täglicher Sync mit Protokoll je Lauf inkl. gemessener Kosten",
71
"Vereinsregister mit Skripten für Terminseiten, Logos, Mails und Koordinaten",
72
"Admin für Vereine, Termine und Sync-Einstellungen"
76
// privates Projekt – Details bleiben unter Verschluss, kein öffentlicher Link
77
export const weddingPlanner: Project = {
78
name: "Wedding Planner",
79
tagline: "Private Hochzeits-Web-App – Gäste, Sitzplan, Fotos.",
80
description: "Eine geschlossene Web-App für ein Hochzeitspaar: Gäste verwalten, Rückmeldungen einsammeln, den Sitzplan per Drag & Drop bauen und Fotos hochladen. Statt Logins gibt es personalisierte Zugangscodes mit QR-Deeplink; autorisiert wird ausschließlich über Firestore- und Storage-Security-Rules mit struktureller Validierung – bewusst ohne eigenes Backend.",
81
stack: ["Next.js", "React", "TypeScript", "Material UI", "styled-components", "Firestore", "Firebase Storage", "Security Rules", "PWA"],
83
"Gästeverwaltung mit Excel-Import/-Export",
84
"Personalisierte Zugangscodes & QR-Codes als Bulk-Download",
85
"Rückmeldungen inkl. Familien & Begleitungen",
86
"Drag-&-Drop-Sitzplan mit Raum-Editor und Export",
87
"Foto-Upload mit clientseitigem Resizing & Foto-Challenges",
88
"Budget-Übersicht, FAQ & Wunschliste",
89
"Feature-Flags zum Zu- und Abschalten von Bereichen"