Gleisplaner für LEGO-Duplo-kompatible Eisenbahnschienen: Du sagst der App, welche Schienen du hast – sie schlägt dir automatisch baubare Gleis-Layouts vor und zeigt sie als klare Draufsicht.
Hinweis: TrackFoundry ist ein unabhängiges Hobbyprojekt und steht in keiner Verbindung zur LEGO Gruppe. „LEGO" und „DUPLO" sind Marken der LEGO Gruppe.
Wer mit Kindern eine Duplo-Eisenbahn aufbaut, steht oft vor der Frage: Was kann ich aus genau diesen Teilen überhaupt Sinnvolles bauen? TrackFoundry beantwortet das automatisch.
- Vorrat erfassen – Teile aus bekannten Sets übernehmen, eigene Sets anlegen oder einfach lose Teile zählen („8 Geraden, 16 Kurven, 2 Weichen …"). Alles addiert sich zum Gesamtvorrat.
- Layouts vorschlagen lassen – Ein Algorithmus prüft, welche Gleis-Layouts sich aus dem Vorrat vollständig und geschlossen bauen lassen, und sortiert sie nach maximaler Teile-Nutzung.
- Nachbauen – Jeder Vorschlag wird als realistische Draufsicht mit einer „benötigte Teile"-Liste dargestellt.
Der Vorschlags-Kern arbeitet mit einem Vorlagen-Katalog: bekannte Layout-Familien (Kreis, Oval, Dreieck, Hundeknochen, Schleife mit Abstellgleis, Acht) sind als parametrische Formeln hinterlegt. Weil die Vorlagen vorab geprüft sind, sind alle Vorschläge garantiert geschlossen und überlappungsfrei. Die Geometrie nutzt das feste 30°-Raster der Duplo-Schienen (12 Kurven = ein Vollkreis), sodass sich jedes Layout exakt berechnen lässt.
- Geometrie-Kern – Teile mit Anschluss-Ports, Verkettung zu exakten Positionen, Erkennung geschlossener Schleifen (mit Toleranz)
- Gleisteile – Gerade, Kurve, Weiche, Prellbock & Kreuzung mit Geometrie (Maße angelehnt an echte Duplo-Gleise); Metadaten auch für Rampe, Bahnübergang, Brücke und Bahnhof (9 Teile-Typen gesamt)
- Layout-Vorlagen – Kreis, Oval, Dreieck, Hundeknochen (S-Bögen, die zusätzliche Kurven verbrauchen), Schleife mit Abstellgleis (Weiche + Prellbock), Acht (über eine Kreuzung) sowie die Umfahrungen Wendeschleife und Loop mit Ausweichgleis (je zwei Weichen, verifiziert nach der „goldenen Regel"); alle garantiert geschlossen/baubar
- Solver – passende Vorlagen je Vorrat finden, Ranking nach Teile-Nutzung (mit Vielfalt der Formen weiter oben)
- Generator – erzeugt aus dem Vorrat zufällig neue, geschlossene, überlappungsfreie Schleifen (Geraden + Kurven), optional mit Weichen-Abstellgleisen (Y-Weiche + Sackgasse + Prellbock); streut passende Umfahrungs-Vorlagen (Wendeschleife, Ausweichgleis) sowie zufällig gesuchte Umfahrungen/Außengleise (zwei Weichen, variabler Innenabschnitt + wieder-einmündendes Außengleis in wechselnden Größen und Formen) in die Entwürfe ein; auf Wunsch aus bekannten Layouts rekombinierte Anlagen (Kreis/Oval/Dreieck/Hundeknochen an ihren Schnittstellen zerlegt und neu kombiniert – garantiert fahrbar, bei jedem Klick neu gemischt); der „Abstellgleise"-Regler wirkt auch auf diese Rekombinationen; „Generieren/Refresh" für neue Entwürfe, Regler für max/min Teile, „Geraden einbeziehen", „Abstellgleise" und „Aus Bausteinen kombinieren"; Ergebnisse speicherbar
- Inventar – Vorrat aus 11 mitgelieferten Sets (2013–2025, × Anzahl), eigenen Sets und losen Teilen; alles addiert sich
- Persistenz – besessene/eigene Sets, lose Teile und gespeicherte Layouts lokal im Browser (IndexedDB via Dexie)
- Oberfläche – Bildschirme Meine Teile → Vorschläge / Generator / Gespeichert → Layout-Detail (mit Speichern), reaktiv an den Vorrat gebunden
- Rendering – Draufsicht mit Gleisbett, Schwellen und Lauffläche je Teil
- PWA – installierbar und offlinefähig
- Qualität – durchgängig testgetrieben (Vitest), Production-Build
- Bau nach innen – Stiche und Umfahrungen in den Loop-Innenraum legen
- Weiteres B2 – reichere Generator-Filter (Teile-Typen ein/aus, „mind. X eines Typs", konkrete Teile); echter Backtracking-Generator für asymmetrische Loops; Größen-Varianten der Umfahrungs-Vorlagen
- Render-Verbesserung – einzelne Teile in der Draufsicht unterscheidbar machen: sichtbare Teil-Grenzen und Anzahl gleichartiger Folgen (z. B. „6 Kurven" zählbar)
- Später – manueller Layout-Editor, PDF-Export zum Teilen/Nachbauen, Brücken/Rampen (3D), Anbindung externer Teile-Datenbanken (z. B. Rebrickable)
Gepflegte, detaillierte Aufgabenliste (inkl. UI-Redesign-Slices): siehe docs/TODO.md.
Vite · React · TypeScript · Vitest · Dexie (IndexedDB) · vite-plugin-pwa · Tailwind CSS v4 · shadcn-Style-Komponenten · self-hosted Fonts (@fontsource) · Wouter (pfad-basiertes Routing). Rein clientseitig, kein Backend.
Das UI-Fundament (Design-Tokens „Sonnentag" hell/dunkel als CSS-Variablen,
Tailwind-v4-Verdrahtung, shadcn-Basis-Komponenten, PieceChip und Hell/Dunkel-Umschalter)
sowie die App-Shell (feste Sidebar mit Navigation, Logo, Vorrat-Zusammenfassung
und Theme-Umschalter; auf schmalen Screens als Off-Canvas-Drawer) mit echtem
pfad-basiertem Routing (Wouter) stehen; das eigentliche Restyle der Bildschirm-Inhalte
folgt in weiteren Slices.
Hinweis zum Deployment: Das pfad-basierte Routing braucht beim Host einen SPA-Fallback (unbekannte Pfade →
index.html); der Service Worker setzt dafürnavigateFallback: index.html.
Benötigt Node 18+.
npm install
npm run dev # Dev-Server
npm test # Testsuite (Vitest)
npm run build # Typecheck + Production-BuildRelease-getrieben: Ein veröffentlichtes GitHub-Release baut per Action ein Multi-Arch-Image,
pusht es nach GHCR (ghcr.io/unconnect/trackfoundry) und stößt via Portainer-Webhook ein
Redeploy auf einem Raspberry Pi (arm64) hinter SWAG an — live unter
trackfoundry.nikolasreuber.de (Cloudflare davor). Einmalige Einrichtung und Ablauf:
siehe deploy/README.md.
src/geometry/– Vektor-/Winkel-Mathematik, Teile-Verkettung über Ports, Schließ-Erkennung geschlossener Schleifensrc/pieces/– Geometrie der Gleisteile (Gerade, Kurve) + Teile-Metadatensrc/data/+src/sets/– mitgelieferte Set-Datenbank und Set-Typsrc/inventory/– Vorrat aus Sets + losen Teilen aggregierensrc/templates/– parametrische Layout-Vorlagen (Kreis, Oval, Dreieck, Hundeknochen, Abstellgleis, Acht, Wendeschleife, Ausweichgleis)src/solver/– passende Layouts finden und nach Teile-Nutzung sortieren (suggest); voller Vorlagen-Katalog mit Baubarkeits-Prüfung + Fehlmengen (catalog)src/store/– IndexedDB-Schema, Repository-CRUD und reaktive Hooks (Dexie)src/render/– SVG-Draufsicht der Layoutssrc/screens/+src/ui/– die drei Bildschirme und gemeinsame UI-Typensrc/components/ui/– shadcn-Basis-Komponenten (Button, Card, Input, Label)src/components/– eigene UI-Bausteine (AppShell,Sidebar,Logo,InventorySummary,PieceChip,PieceChipRow,LayoutPreview,ThemeToggle,QuantityStepper)src/components/pieces/– „Meine Teile"-Karten (SetsCard,LoosePiecesCard,CustomSetCard)src/components/suggestions/–SuggestionCard(Vorlagen-Karte mit Baubarkeits-Badge)src/components/generator/–GeneratedCard(Entwurfs-Karte mit Vorschau, Chips und Inline-Speichern)src/components/saved/–SavedLayoutCard(gespeicherte Anlage mit Vorschau, Chips und Löschen)src/lib/– Utilities (cn) und Theme-Hook (theme.ts, hell/dunkel/system)src/index.css– Design-Tokens (CSS-Variablen) + Tailwind-v4-@themesrc/App.tsx– App-Shell + pfad-basiertes Routing (Wouter) über die vier Bildschirme
Design-Spezifikation & Umsetzungspläne: siehe docs/superpowers/.