Projekte
Interface und InformationsarchitekturGebaut und im Einsatz2026

Das AI Museum

Neun Jahre KI-Geschichte, gebaut als Gebäude, durch das man geht, in dem ein Exponat vollständig aus fehlenden Daten besteht.

Next.jsTypeScriptTailwind v4React Three FiberThree.jsFramer Motion
Problem
Neun Jahre KI-Geschichte haben keine natürliche Form, und als Liste oder Zeitstrahl erzählt lernt eine Leserin Jahreszahlen, ohne die Veränderung zu spüren.
Ergebnis
Dreiundvierzig Seiten, gebaut als Räume, durch die man geht, mit einer geführten Tour für eine Viertelstunde und freiem Umherstreifen für einen Nachmittag.
Meine Rolle
Alleiniger Entwickler und Autor. Informationsarchitektur, Frontend, und jedes Exponat gegen Primärquellen recherchiert.
Stand
Live unter /ai-museum und Teil dieser Seite.

Das Problem

Neun Jahre KI-Geschichte sind ein Gegenstand ohne natürliche Form. Als Liste erzählt sind sie ein Wikipedia-Artikel, den niemand zu Ende liest. Als Zeitstrahl erzählt werden sie zu einer waagerechten Scrollstrecke mit einunddreißig Mal derselben Karte, und man lernt die Jahreszahlen, ohne die Veränderung je zu spüren.

Das schwierigere Problem ist, dass der interessante Teil dieser Geschichte nicht die Abfolge der Veröffentlichungen ist. Es ist die Verschiebung dessen, was das Fachgebiet über sich selbst preiszugeben bereit war, und ein Format, das nur Errungenschaften auflistet, kann keine Abwesenheit zeigen.

Also wurde es als Gebäude gebaut statt als Seite: acht Räume, durch die man geht, in denen die Architektur die Argumentation trägt und ein Exponat vollständig aus fehlenden Daten besteht.

Was gebaut wurde

Dreiundvierzig Seiten unter /ai-museum. Einunddreißig Meilenstein-Exponate in fünf Epochenräumen, sechs Porträts von Wegbereitern, fünf Essays zu Artefakten, ein Foyer mit Grundriss und eine geführte Tour durch acht Werke für alle, die eine Viertelstunde haben statt eines Nachmittags.

Jeder Raum ist ein randlos gesetzter Abschnitt mit eigener Wandfarbe, die im Lauf der Zeit von warm nach kühl wandert, sodass die frühen Jahre wie altes Papier wirken und die Gegenwart wie ein zeitgenössischer weißer Ausstellungsraum. Jeder Raum wird über eine Schwelle betreten: eine zentrierte Tafel mit Epochenziffer, Name, Jahren und Anzahl der Werke, und das ist eine bewusste Pause und keine Überschrift.

Der Inhalt ist Daten, kein Markup. Drei TypeScript-Arrays und zweiundvierzig JSON-Dateien treiben alle dreiundvierzig Seiten, die Sitemap, die strukturierten Daten, den Zeitstrahl auf der Startseite und die geführte Tour. Nichts wird zweimal von Hand verfasst, und genau das macht das Museum überhaupt erweiterbar.

Die Galerie schließt mit einem Diagramm aller veröffentlichten Parameterzahlen auf logarithmischer Skala, von den 65 Millionen des Transformers bis zu den 2,8 Billionen von Kimi K3. Zwei Three.js-Kugeln markieren Eingang und Ausgang, und der Weg von einem Werk in der Galerie zu seiner Exponatseite lässt den Titel über den Seitenwechsel hinweg überblenden, statt die Seite auszutauschen.

Wie es aufgebaut ist

Next.js App Router, statisch erzeugt. Jedes Exponat ist eine zur Bauzeit aus den Datendateien erzeugte Route, es gibt also keine Datenbank und keinen Server, der bei einer Anfrage arbeitet. Tailwind v4 mit in CSS deklarierten Tokens statt einer Konfigurationsdatei, Framer Motion für die Einblendungen, React Three Fiber für die beiden Kugeln.

Die tragende Entscheidung ist, dass die Epochendefinitionen an genau einer Stelle liegen. Raumfarbe, Akzent, Jahresgrenzen und Anzahl der Werke werden von der Galerie, der mitlaufenden Beschilderung, dem Grundriss und jeder Exponatseite gelesen. Ein Meilenstein, dessen Jahr außerhalb jeder Epochenspanne liegt, wird nirgends dargestellt und scheitert lautlos, und das ist die eine scharfe Kante in diesem Modell. Sie ist dort dokumentiert, wo jemand auf sie stoßen wird.

Der Weg eines Dokuments

  1. 01Ein Meilenstein ist ein Eintrag in einem TypeScript-Array plus eine JSON-Datei, die einer typisierten Form entspricht.
  2. 02Sein Jahr, eine Dezimalzahl, ordnet ihn genau einer Epoche zu, und die bestimmt, in welchem Raum er hängt und welche Akzentfarbe er trägt.
  3. 03Die Galerie stellt einen Abschnitt je Epoche dar, gestrichen im Wandton dieser Epoche, mit einem Werk an der Hauptwand und dem Rest als Katalogzeilen.
  4. 04Die Exponatseite übernimmt die Wandfarbe des Raums, sodass das Öffnen eines Werks den Raum nicht wechselt.
  5. 05Dasselbe Array speist die Sitemap, das JSON-LD, den Zeitstrahl der Startseite und die geführte Tour. Keines davon hält eine zweite Kopie.

Was eine Zeile bedeutet

lib/eras.ts → lib/milestones.ts → content/milestones/<slug>.json → /ai-museum/<slug>

Die Kette läuft in eine Richtung, und jeder Abnehmer liest von ihrem oberen Ende. Die Alternative, und so machen es die meisten Inhaltsseiten, besteht darin, eine Komponente ihre eigene Kopie der Liste erklären zu lassen, damit sie etwas leicht anderes darstellen kann. So kommt es dazu, dass ein Anriss auf der Startseite dem Index widerspricht, den er anreißt. Hier sind Anriss und Index dasselbe Array, nur unterschiedlich geschnitten, und können deshalb nicht auseinanderlaufen.

Modulübersicht

lib/eras.ts
Fünf Epochen: Jahresgrenzen, Wandton, Akzent. Gelesen von der Galerie, der mitlaufenden Beschilderung, dem Grundriss und jeder Exponatseite. Wird nie in einer Komponente erneut erklärt.
lib/milestones.ts
Einunddreißig Werke mit einem dezimalen Jahr und einer optionalen Parameterzahl. Das optionale Feld ist das Exponat; siehe die Entscheidungen weiter unten.
content/milestones/
Einunddreißig JSON-Dateien, jede gegen eine Schnittstelle typisiert. Eine fehlende Datei ergibt einen 404 und keine halb dargestellte Seite.
components/museum/
EraTimeline, die drei Navigationskomponenten, RoomPlate, ScaleRibbon, Colophon und der Speicher für das Besuchsgedächtnis.
lib/seo.ts
Der schema.org-Graph. Article für Exponate, ProfilePage für Wegbereiter, CollectionPage für das Museum, Brotkrumenpfade durchgehend. Rund 1 KB gzip je Seite, gegen die Produktivumgebung gemessen.

Die Anwendung

Der Museumsgrundriss auf nahezu schwarzem Grund: fünf Galerieräume, gezeichnet als Flucht verbundener Karten mit den Nummern 01 bis 05, jede mit einem kleinen Farbfeld der Wandfarbe, und darunter drei Seitenflügel mit den Bezeichnungen Pioneers, Artifacts und Horizon.
Der Plan, den man an der Tür in die Hand bekommt. Fünf Galerieräume in Folge mit ihren tatsächlichen Wandfarben als Farbfelder, und drei Flügel, die vom Gang darunter abgehen. Jeder Raum ist anklickbar und mit der Tastatur erreichbar. Er hat eine herkömmliche Navigation ersetzt, denn eine Liste von Links beschreibt eine Website und ein Grundriss beschreibt ein Gebäude.
Die Schwelle eines Galerieraums auf einer warmen gebrochen weißen Wand: eine übergroße blasse Ziffer 03, die Überschrift The Inflection Era in einer Serifenschrift, eine einzeilige Beschreibung, die Spanne 2022 bis 2023 mit sieben Werken, und eine Fotografie eines leeren Galerieinnenraums mit der Bildunterschrift Room 03.
Jeder Raum beginnt mit einer Schwelle statt mit einer Überschrift: Ziffer, Name, Jahre und Anzahl der Werke, dann eine Fotografie eines leeren Galerieraums, die wie ein Objekt an der Wand hängt statt als Banner zu dienen. Die Ziffer ist das größte Element im Gebäude und trägt keine Information, und genau deshalb ist sie vor Screenreadern verborgen.
Ein logarithmisches Diagramm mit dem Titel The scale of it, das veröffentlichte Parameterzahlen von 65 Millionen im Jahr 2017 bis 2,8 Billionen im Jahr 2026 aufträgt. Gefüllte Marker stehen für offene Gewichte, leere für geschlossene Modelle. Kurze unbeschriftete Striche entlang der Achse markieren fünfzehn Meilensteine, die keine Zahl veröffentlicht haben.
Das Exponat sind die Lücken, nicht die Kurve. Gefüllte Marker sind offene Gewichte, leere sind geschlossene Modelle, die dennoch eine Zahl veröffentlicht haben, und die bloßen Striche entlang der Achse sind die fünfzehn Werke, die nichts veröffentlicht haben. Die Reihen werden durch die Form getrennt, weil die beiden Farben in der Leuchtdichte nur 1,07:1 auseinanderlagen und in Graustufen verschmelzen würden.

Entscheidungen

Jede Epoche ist ein Raum, und die Wände verändern sich mit der Zeit.

Fünf Wandfarben laufen von gealtertem Hellbraun bis nahezu Weiß, sodass sich die Gründerepoche beleuchtet anfühlt und die agentische Epoche klinisch. Das ist die gesamte Argumentation des Stücks, vorgetragen ohne einen einzigen Satz Text. Sie leistet außerdem strukturelle Arbeit: Man weiß an der Farbe der Wand hinter sich immer ungefähr, wo man sich in neun Jahren befindet, und das schafft kein Fortschrittsbalken. Jede Wand wurde gegen jeden Textton und jeden Akzent geprüft, der auf ihr vorkommt, schlechtester Fall 5,3:1.

Eine fehlende Parameterzahl ist das Exponat und wird nie geschätzt.

Sechzehn von einunddreißig Werken haben eine Parameterzahl veröffentlicht. Fünfzehn nicht. Das Diagramm zeichnet die fünfzehn als unbeschriftete Striche auf der Achse: vorhanden, ungemessen. Sie mit einem Gerücht zu füllen hätte eine glattere Kurve ergeben und die einzige Erkenntnis zerstört, die das Exponat hat, nämlich dass nach 2023 jede veröffentlichte Zahl zu einem Modell mit offenen Gewichten gehört und kein einziges geschlossenes Spitzensystem seine Größe genannt hat. Die Messung wurde nicht schwieriger. Sie wurde nicht mehr angeboten.

Das Diagramm trennt seine Reihen durch Form, nicht durch Farbe.

Offene Gewichte sind gefüllte Kreise, geschlossene Modelle leere. Die beiden zuerst gewählten Farbtöne sahen deutlich unterscheidbar aus und lagen in der relativen Leuchtdichte nur 1,07:1 auseinander, was bedeutet, dass sie in Graustufen und für rot-grün-blinde Leser verschmelzen. Farbe ist hier Schmuck, und die Form trägt die Bedeutung. Das Diagramm liefert außerdem eine vollständige Datentabelle und ein aria-label, das die Erkenntnis in Worten nennt, denn ein Diagramm, das niemand sehen kann, sollte trotzdem lesbar sein.

Kontrast wird berechnet, nie beurteilt.

Das dunkle Foyer war der schlimmste Fall und sah gut aus: Sein gedämpfter Text maß 4,03:1 und zwei Grautöne darunter 2,58:1 und 1,89:1. Ein einziger Durchlauf eines Skripts, das Hexwerte in relative Leuchtdichte umrechnet und die WCAG-Formel anwendet, fand vier Verstöße, die alles Hinsehen nicht entdeckt hatte. amber-700 war monatelang der dokumentierte Akzent bei 3,93:1 und ist jetzt projektweit verboten. Nichts davon ist Geschmackssache; es ist Rechnen, und es ist billig durchzuführen.

Das Besuchsgedächtnis liest localStorage als externen Speicher.

Festzuhalten, welche Exponate jemand gesehen hat, ist der Lehrbuchfall für useState plus useEffect, und diese Fassung ist falsch: Sie stellt einmal mit dem leeren Wert dar und korrigiert sich dann selbst, was ein sichtbares Aufblitzen ist und ein Hydration-Fehler, der nur darauf wartet. useSyncExternalStore bildet es richtig ab, und die Server-Momentaufnahme ist leer, sodass die Hydration immer übereinstimmt. Die Feinheit ist, dass getSnapshot eine stabile Referenz zurückgeben muss, wenn sich nichts geändert hat. Bei jedem Aufruf ein frisch geparstes Array zurückzugeben besteht die Typprüfung, übersteht das Review und stellt endlos neu dar.

components/museum/useVisited.tsx
function getSnapshot(): string[] {
  let raw: string | null = null;
  try {
    raw = window.localStorage.getItem(KEY);
  } catch {
    raw = null;
  }
  if (raw !== cachedRaw) {
    cachedRaw = raw;
    try {
      const parsed = raw ? JSON.parse(raw) : [];
      cachedList = Array.isArray(parsed)
        ? parsed.filter((x): x is string => typeof x === "string")
        : EMPTY;
    } catch {
      cachedList = EMPTY;
    }
  }
  return cachedList;
}

Reduzierte Bewegung braucht zwei Mechanismen, weil einer den anderen nicht erreichen kann.

Eine CSS-Regel für prefers-reduced-motion kann Framer Motion nicht anhalten, denn das animiert über JavaScript-Transformationen und schaut nie ins Stylesheet. Auch die View Transitions API zieht die Einstellung nicht von sich aus heran. Also legt sich das Museum eine Bewegungskonfiguration um, die die Nutzereinstellung berücksichtigt, und schaltet die Übergangsanimationen zusätzlich in CSS ab. Nur die CSS-Hälfte auszuliefern hätte im Code-Review richtig ausgesehen und für die Person, die darum gebeten hat, nichts bewirkt.

Ein Geschwindigkeitsgewinn wurde dreimal abgelehnt, und die Ablehnung ist festgehalten.

content-visibility: auto würde den einunddreißig Katalogzeilen wirklich helfen. Es ist trotzdem nicht aktiviert, denn diese Zeilen blenden sich über eine vom Sichtbereich ausgelöste Animation ein, und wenn der Browser die Darstellung aufschiebt, wird die Einblendung womöglich nie ausgelöst und lässt eine Zeile bei null Deckkraft stehen. Dieser Fehler ist im Server-HTML unsichtbar und lässt sich deshalb nicht auf dem Weg finden, auf dem hier alles andere geprüft wird. Es kommt hinein, nachdem jemand es in einem echten Browser beobachtet hat, und nicht vorher.

Was dabei herauskam

4,03:1

Das Kontrastverhältnis von Text, der vollkommen lesbar aussah.

Gefunden durch Rechnen und nicht durch Hinsehen, zusammen mit zwei schlimmeren Fällen bei 2,58:1 und 1,89:1 im selben Durchlauf. Jede Kombination aus Text und Hintergrund im Museum erfüllt heute WCAG AA. Die Größe der Tippziele stieg in derselben Prüfung von etwa 23 auf 44 Pixel, und auch das war unsichtbar, bis es gemessen wurde.

16 von 31

Werke, die überhaupt eine Parameterzahl veröffentlicht haben.

Die übrigen fünfzehn sind als unbeschriftete Striche gezeichnet statt weggelassen oder geschätzt. Nach 2023 gehören alle acht veröffentlichten Zahlen zu Modellen mit offenen Gewichten. Das Exponat ist die Lücke, und es existiert nur, weil das Datenmodell zulässt, dass ein Feld tatsächlich fehlt, statt es auf null zu setzen.

43 Seiten, 3 Arrays

Alles wird aus Daten erzeugt, nichts zweimal verfasst.

Dreiundvierzig Routen, die Sitemap, die strukturierten Daten, der Zeitstrahl der Startseite und die geführte Tour lesen alle aus denselben drei TypeScript-Arrays und zweiundvierzig typisierten JSON-Dateien. Ein Werk hinzuzufügen ist ein Array-Eintrag plus eine Datei.

Was es nicht leistet

  • Es gibt weder Suche noch Filter über die einunddreißig Werke. Wer ein bestimmtes Modell sucht, blättert sich dorthin oder nutzt den Grundriss.
  • Räume sind keine eigenen Routen, eine Epoche lässt sich also nicht als Seite direkt verlinken, und die Galerie wird als ein langes Dokument ausgeliefert.
  • content-visibility ist auf den Katalogzeilen aus dem oben genannten Grund bewusst nicht aktiviert. Die dadurch verschenkte Geschwindigkeit ist real.
  • Nur auf Englisch. Drei Sprachen wurden untersucht und dann zurückgestellt, statt sie halb zu bauen.
  • Die Titelüberblendung zwischen Galerie und Exponat lässt sich nicht am Server-HTML prüfen, weil React den Übergangsnamen erst zum Zeitpunkt des Übergangs setzt. Sie ist so gebaut, dass sie zu einem gewöhnlichen Seitenwechsel wird, wo der Browser sie nicht unterstützt.
  • Das Museum ist ein Baustein für Autorität, kein Verkaufstrichter. Niemand geht hindurch und kauft anschließend etwas, und es ist nicht darauf gebaut, das zu bewirken.

Wo es steht

Live unter /ai-museum und Teil dieser Seite. Fertig statt angehalten: Es wird erweitert, wenn das Fachgebiet etwas hervorbringt, das es aufzuhängen lohnt, zuletzt um es bis August 2026 auf den Stand zu bringen, was neun Werke und eine fünfte Epoche hinzugefügt hat.

Jede Angabe darin wurde gegen Primärquellen recherchiert, und jede Quellenangabe führt zu einem erreichbaren Ziel. Die Raumfotografien stammen aus der Pexels-API und werden in einem Kolophon nachgewiesen, was eine Lizenzbedingung dieser API ist und keine Höflichkeit.