Skip to content

Repository files navigation

TrackFoundry

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.

Die Idee

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.

  1. 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.
  2. 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.
  3. 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.

Stand der Umsetzung

✅ Umgesetzt

  • 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

🔜 Geplant

  • 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.

Tech-Stack

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ür navigateFallback: index.html.

Entwicklung

Benötigt Node 18+.

npm install
npm run dev      # Dev-Server
npm test         # Testsuite (Vitest)
npm run build    # Typecheck + Production-Build

Deployment

Release-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.

Projektstruktur

  • src/geometry/ – Vektor-/Winkel-Mathematik, Teile-Verkettung über Ports, Schließ-Erkennung geschlossener Schleifen
  • src/pieces/ – Geometrie der Gleisteile (Gerade, Kurve) + Teile-Metadaten
  • src/data/ + src/sets/ – mitgelieferte Set-Datenbank und Set-Typ
  • src/inventory/ – Vorrat aus Sets + losen Teilen aggregieren
  • src/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 Layouts
  • src/screens/ + src/ui/ – die drei Bildschirme und gemeinsame UI-Typen
  • src/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-@theme
  • src/App.tsx – App-Shell + pfad-basiertes Routing (Wouter) über die vier Bildschirme

Design-Spezifikation & Umsetzungspläne: siehe docs/superpowers/.

About

Track planner for Duplo-compatible train rails — suggests buildable layouts from the pieces you own.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages