2015 HTML · CSS · JS

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/

„Eigeninitiative hat nie ausgereicht ein solches Projekt umzusetzen." — Konzept-Präsentation, Medienprojekt II, WiSe 2016/17
2015–16 PHP · MySQL · Bootstrap

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

2016 AngularJS · Bootstrap

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.

2016–18 Angular 5 · Node.js · MongoDB

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

2018 Angular 6

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.

2026 SvelteKit · MapLibre · OpenStreetMap

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