5f43c19878ac54c8081684c2ce1241d805302c17
🔧 Toollist
Verwaltung von Werkzeugen und Material für ein Renovierungs- / Sanierungsprojekt.
Tech Stack
| Schicht | Technologie |
|---|---|
| Sprache | Rust |
| Framework | Leptos 0.8 – Full-Stack SSR + Hydration |
| Server | Axum 0.8 |
| Datenspeicher | TOML-Datei (data/tools.toml) |
| Styles | SCSS (style/main.scss) |
| Build-Tool | cargo-leptos |
Entwicklung
# Entwicklungsserver mit Hot-Reload starten
cargo leptos watch
# Browser öffnen
http://localhost:3000
# Im Heimnetz erreichbar unter
http://<server-ip>:3000
Hinweis:
site-addrist auf0.0.0.0:3000gesetzt, die App ist also direkt im lokalen Netz erreichbar – kein Login, keine Auth.
Voraussetzungen
cargo install cargo-leptos
rustup target add wasm32-unknown-unknown
wasm-bindgen Version: Die Cargo.toml pinnt
wasm-bindgen = "=0.2.106", damit es mit dem in cargo-leptos 0.3.6 gebündelten CLI übereinstimmt. Falls cargo-leptos aktualisiert wird, ggf. beide Versionen anpassen.
Projektstruktur
toollist/
├── Cargo.toml Abhängigkeiten + cargo-leptos Konfiguration
├── data/
│ └── tools.toml Datenspeicher (wird automatisch angelegt)
├── public/ Statische Dateien
├── style/
│ └── main.scss Globales Stylesheet
└── src/
├── main.rs Server-Einstiegspunkt (Axum)
├── lib.rs Crate-Root, Hydration-Einstieg
├── app.rs App-Komponente + Routing
├── models/
│ └── tool.rs Datenmodell (Structs & Enums)
├── server/
│ ├── store.rs TOML lesen/schreiben [nur SSR]
│ └── api.rs Server Functions (HTTP-Endpunkte)
└── components/
├── tool_list.rs Hauptansicht – Liste, Filter, CSV-Import
├── tool_form.rs Erstellen / Bearbeiten Formular
└── filter_bar.rs Filterleiste (Suche, Status, Priorität, Tag)
Datenmodell
Tool (zentrale Entität)
| Feld | Typ | Beschreibung |
|---|---|---|
id |
String (UUID) |
Eindeutige ID, serverseitig generiert |
name |
String |
Name des Werkzeugs |
anzahl |
Anzahl |
Konkrete Zahl oder „Mehrere" |
beschaffung |
Beschaffung |
Wie das Werkzeug beschafft wird |
verwendung |
Vec<String> |
Liste von Verwendungszwecken |
tags |
Vec<String> |
Stichwörter (z.B. garten, schwer) |
status |
Status |
Offen · Organisiert · VorOrt |
prioritaet |
Prioritaet |
Hoch · Mittel · Niedrig |
notizen |
Option<String> |
Freitext |
verantwortlich |
Option<String> |
Wer kümmert sich darum? |
erstellt_am |
String (ISO-8601) |
Erstellungszeitpunkt |
Beschaffung
| Art | Zusatzfelder |
|---|---|
Unbekannt |
– |
InBesitz |
– |
Leihen |
von: Option<String> |
Mieten |
wo: Option<String>, preis: Option<f64> |
Kaufen |
wo: Option<String>, preis: Option<f64> |
TOML-Format (Beispiel)
[[tools]]
id = "3f2a1b..."
name = "Schubkarren"
status = "Offen"
prioritaet = "Mittel"
erstellt_am = "2025-01-01T10:00:00Z"
verwendung = ["Schutt abtransportieren"]
tags = ["transport", "garten"]
[tools.anzahl]
zahl = 2
[tools.beschaffung]
art = "InBesitz"
Server Functions (API)
Alle Endpunkte unter /api/ – automatisch von Leptos registriert.
| Funktion | Beschreibung |
|---|---|
tools_laden() |
Alle Werkzeuge laden |
tool_erstellen(input) |
Neues Werkzeug anlegen |
tool_aktualisieren(id, input) |
Bestehendes Werkzeug aktualisieren |
tool_loeschen(id) |
Werkzeug löschen |
csv_importieren(inhalt) |
CSV-Text importieren (Name + Anzahl) |
CSV-Import
Einfaches Format – nur name und anzahl werden ausgewertet.
Fehlende oder unbekannte Werte werden toleriert.
name,anzahl
Schubkarren,2
Betonmischer,1
Nadelrolle,mehrere
Besen,
Importierte Einträge erhalten Standardwerte:
Status = Offen, Priorität = Mittel, Beschaffung = Unbekannt.
Features (Stand)
- Werkzeuge anlegen, bearbeiten, löschen
- Listenansicht (Tabelle)
- Filter: Status, Priorität, Tag, Freitextsuche
- Dynamisches Formular (Felder je nach Beschaffungsart)
- CSV-Import (Name + Anzahl)
- Datenspeicherung in
data/tools.toml - Im Heimnetz erreichbar (
0.0.0.0:3000)
Mögliche nächste Schritte
- Detailansicht / Klappreihe (Verwendungsliste, alle Felder)
- Verwendungsliste im Formular als dynamische Liste (statt Textarea)
- Bauabschnitt als eigenes Feld (oder konsequent via Tags)
- Druckansicht / Export
- Sortierung der Tabellenspalten
- Zähler in der Kopfzeile (z.B. „3 von 12 offen")
Languages
Rust
85.5%
SCSS
8.8%
TypeScript
3.5%
Dockerfile
2.2%