Geschichte
spätis.berlin existiert seit 2015. Fünf Technologie-Stacks, drei abgebrochene Starts, eine Idee, die nie verschwunden ist.
Die erste Idee — und der erste Code
Entstanden als Uni-Projekt im Studiengang Mediendesign (WiSe 2015/16, Medienprojekt I). Konzept, Mockups, ein App-Icon — und drei definierte Markenfarben: Rot, Gold, Schwarz. Das App-Icon zeigt bereits das rot-goldene Leuchtreklame-Schild.
2026 wiederentdeckt: Der HTML-Code ist nicht verloren — er überlebte als NetBeans-Projekt auf einer alten Festplatte, und eine zweite Kopie tauchte im pzuschlag.de-Archiv auf. Erstellt am 12. Oktober 2015, 13:14 Uhr. Schon die allererste Navigation enthält Map, Top 10, Near By und Verzeichnis — alle vier Features fanden ihren Weg in die 2026er Version.
Die pzuschlag.de-Kopie war tatsächlich live deployed — und enthält
den allerersten PHP-Code des Projekts: from_response.php gibt
POST-Parameter als Tabelle aus. Kein Speichern, keine Datenbank — aber der erste
Schritt in Richtung Backend.
Original-Code ansehen: Navigation (index.html, 12.10.2015)
<!-- index.html — NetBeans HTML5Application, 12.10.2015 -->
<ul>
<li><a href="index.html">Map</a></li>
<li><a href="index.html">Top 10</a></li>
<li><a href="index.html">Near By</a></li>
<li><a href="verzeichnis.html">Verzeichnis</a></li>
</ul>Original-Code ansehen: Eintragen-Formular (verzeichnis.html, 2015)
<!-- verzeichnis.html — NetBeans HTML5Application, 2015 -->
<form action="form_spaetiConfig.php" method="post">
<input type="text" name="firstname" placeholder="Trinktempel" />
<input type="text" name="zip" placeholder="PLZ" />
<input type="text" name="street_nr" placeholder="Straße Nr." />
<input type="time" name="opening_from" />
<input type="time" name="opening_until" />
<input type="url" name="bild" />
<input type="submit" value="Eintragen" />
</form>Original-Code ansehen: Erster PHP-Code (from_response.php, 2015)
<?php // from_response.php — pzuschlag.de/spaetis-berlin, 2015
foreach ($_POST as $key => $value)
print("<tr><td><strong>$key</strong></td>
<td>$value</td></tr>");
?> Vollständiger Quellcode: docs/archiv/netbeans-html5-2015/
Der erste funktionierende Prototyp
PHP + MySQL-Backend, Bootstrap-Frontend, lokal via XAMPP. Vier Aufgabenphasen über zwei Semester: Konzept → JavaScript-Tests → Responsive Design → Datenbankanbindung. 124 Git-Commits. Nie öffentlich deployed.
Wichtigster Fund: searchSpaeti.php enthält die echte SQL-Abfrage mit allen 18 Tag-Feldnamen
— der direkte Ursprung des heutigen Tag-Katalogs.
Original-Code ansehen: searchSpaeti.php (2015)
// searchSpaeti.php — 2015/2016
$query = "SELECT * FROM spaetis
WHERE tag_beer >= '$tagBeer'
AND tag_tobacco >= '$tagTobacco'
AND tag_wine >= '$tagWine'
AND tag_spirits >= '$tagSpirits'
AND tag_sweets >= '$tagSweets'
AND tag_iceCream >= '$tagIceCream'
AND tag_bakeryProducts >= '$tagBakeryProducts'
AND tag_atm >= '$tagAtm'
AND tag_seat >= '$tagSeat'
AND tag_packageStore >= '$tagPackageStore'
AND tag_confetti >= '$tagConfetti'
AND tag_souvenirs >= '$tagSouvenirs'
AND tag_internet >= '$tagInternet'
AND tag_copy >= '$tagCopy'
AND tag_food >= '$tagFood'
AND tag_frozenFood >= '$tagFrozenFood'
AND tag_delicatessen >= '$tagDelicatessen'
AND tag_stationery >= '$tagStationery'"; Vollständige Git-History: git checkout archive/php-mysql-2016
Der Prototyp, der fast alles hatte
Kein Code erhalten — nur Screenshots und ein Screencapture-Video vom 22. März 2016. Was sichtbar ist: eine voll funktionierende App mit Karte, Suche, NearBy-Radius, Enter-New- Formular und Admin-Datentabelle. Josefin Slab als Font bereits explizit im Quellcode.
- Kiez-Dropdown als Filter
- „Jetzt offen?"-Toggle (Ja / Egal)
- NearBy: Spätis im Umkreis
- OnMyWay: Spätis entlang einer Route (geplant, nie fertig)
Der AngularJS-Quellcode ist verloren. Nur die Laufzeit-Screenshots belegen, was existiert hat.
Der vollständige Stack — und das Ende
Kompletter Neubau mit Angular 5, Node.js/Express-Backend und MongoDB. REST-API
(GET/POST/PUT/DELETE), sieben Routen (/map, /nearBy, /onMyWay, /enterNew, /data…), Grunt-Build mit LESS
und TypeScript-Kompilierung. iOS/Android „coming soon"-Badges — nie erschienen.
Original-Code ansehen: Spaeti-Modell (Angular 5, 2016)
// spaeti.model.ts — Angular 5, 2016–2018
export class Spaeti {
_id: string;
name: string; address: string; zip: string;
lng: number; lat: number; kiez: string;
open_from: string; open_until: string;
open_days_mon: boolean; open_days_tue: boolean;
open_days_wed: boolean; open_days_thu: boolean;
open_days_fri: boolean; open_days_sat: boolean;
open_days_sun: boolean;
tags_beer: boolean; tags_tobacco: boolean;
tags_wine: boolean; tags_spirits: boolean;
tags_sweets: boolean; tags_iceCream: boolean;
tags_bakeryProducts: boolean;
tags_atm: boolean; tags_seats: boolean;
tags_packageStore: boolean;
tags_confetti: boolean; tags_souvenirs: boolean;
tags_internet: boolean; tags_copy: boolean;
tags_food: boolean; tags_frozenFood: boolean;
tags_delicatessen: boolean;
tags_stationery: boolean;
tags_toilet: boolean; // neu gegenüber PHP
} Vollständige Git-History: git checkout archive/angular5-2018
Die Farbe bekommt einen Namen
Ein weiterer Neustart, diesmal mit Angular 6. Die Karte ist auskommentiert, das Backend fehlt, die Fonts laden nie. Aber: Zum ersten Mal wird Amber explizit als Markenfarbe im Code definiert — nicht als Standardwert eines Frameworks, sondern als bewusster Override.
Original-Code ansehen: Amber-Definition (styles.scss, 2018)
// styles.scss — Angular 6, 2018
// Erste explizite Amber-Definition im Code:
$brand-primary: #e6a756;
.btn-primary {
background-color: #e6a756;
&:hover { background-color: #df902a; }
}
.text-primary { color: #e6a756; } Erhalten als Git-Tag: git checkout v0-angular6
Dann: nichts. Eingefroren. Für 8 Jahre.
Der Neubau — diesmal fertig
Vollständiger Neustart ohne Rücksicht auf alte Codebasis. Alles, was aus der Geschichte
gelernt wurde, steckt drin: der vollständige Tag-Katalog aus dem PHP-Code von 2015,
Josefin Slab aus dem AngularJS-Prototyp, Amber #e6a756 aus Angular 6 2018, das
Leuchtreklame-Schild aus dem App-Icon von 2015. Kiez-Filter, Jetzt-offen-Toggle, NearBy — alle
aus dem Video von 2016 bekannten Features, jetzt tatsächlich deployed.
- 1.844 Berliner Spätis aus OpenStreetMap
- Sterni-Index: 0,5l Sternburg als Preisvergleich
- 21 kuratierte Tags
- Offline-fähig als PWA
- Keine Cookies, kein Tracking, kein Backend
Was nie umgesetzt wurde
- Login (Facebook / Google+ / Twitter) — sichtbar in Mockups von 2015, nie im Code
- Cordova-App — iOS/Android-Badges im Angular-5-Prototyp, nie gebaut
- OnMyWay — Spätis entlang einer Route, Route-Stub in Angular 6 vorhanden, Feature nie fertig
- Radar — in keiner Quelle jemals als Code gefunden