feat: MVP 3D-Druck Kostenkalkulator
- Single-Page HTML-App mit allen 18 Eingabefeldern - 12 Berechnungen live (calc.js, reine Funktionen) - LocalStorage-Persistenz, Mehrfach-Projekte via Sidebar - Excel Im-/Export ueber SheetJS (vendored, MIT) - Drag&Drop + File-Picker-Import - Apple-Swiss-Styling, responsive - Vorlagen-Excel mit 3 Reitern (Eingabe/Kalkulation/Angebot), Formeln referenzieren Eingabe - openpyxl-Script fuer reproduzierbaren Template-Build - 5 Test-Szenarien validiert Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
96
README.md
Normal file
96
README.md
Normal file
@@ -0,0 +1,96 @@
|
||||
# 3D-Druck Kostenkalkulator
|
||||
|
||||
Apple-Swiss-minimalistischer Kostenkalkulator fuer 3D-Druck-Auftraege. Einzeldatei-Browser-App ohne Backend, ohne Build-Step, ohne externe Runtime-Calls.
|
||||
|
||||
## Setup / Start
|
||||
|
||||
Einfach `index.html` im Browser oeffnen:
|
||||
|
||||
```bash
|
||||
open index.html
|
||||
```
|
||||
|
||||
Alternativ auf einem beliebigen Webserver hosten (`python3 -m http.server 8000`, dann `http://localhost:8000`).
|
||||
|
||||
Die App funktioniert offline. Alle Daten liegen im LocalStorage des Browsers.
|
||||
|
||||
## Features (MVP)
|
||||
|
||||
- Single-Page-HTML-App, Vanilla JS, keine Frameworks, kein Build
|
||||
- Alle 18 Eingabefelder laut Spec
|
||||
- Alle 12 Berechnungen live ohne "Berechnen"-Button
|
||||
- Excel-Export (`.xlsx`) ueber SheetJS (vendored)
|
||||
- Excel-Import per Drag&Drop und File-Picker
|
||||
- LocalStorage-Persistenz, mehrere Projekte, Sidebar mit Liste / Neu / Duplizieren / Loeschen
|
||||
- Apple-Swiss-Style (8pt-Raster, system-ui-Font, viel Whitespace, dezente Farben)
|
||||
- Ergebnis-Kachel prominent: Stueckpreis netto + brutto, Gesamt, Marge
|
||||
- Responsive (Desktop / Tablet / Mobile)
|
||||
- Default-Sprache DE
|
||||
- **Mitgelieferte Vorlage:** `templates/3D-Druck-Kostenkalkulator.xlsx` mit Reitern "Eingabe" (Werte), "Kalkulation" (Formeln), "Angebot" (Druck-Ansicht). Formeln referenzieren "Eingabe", sodass Aenderungen live durchschlagen.
|
||||
|
||||
## Berechnungslogik
|
||||
|
||||
1. Materialkosten = Verbrauch(g) * (Preis/kg / 1000)
|
||||
2. Maschinenkosten = Druckzeit(h) * Maschinenstundensatz
|
||||
3. Energiekosten = Druckzeit * Stromverbrauch * Strompreis
|
||||
4. Nachbearbeitungskosten = (Min/60) * Nachbearb.-Stundensatz
|
||||
5. Gesamtherstellungskosten = 1+2+3+4 + Ruest + Verpackung + Versand
|
||||
6. Ausschuss-Zuschlag = 5 * Ausschussrisiko
|
||||
7. Zwischensumme netto = 5 + 6
|
||||
8. Marge = 7 * Gewinnaufschlag
|
||||
9. Kundenpreis netto = 7 + 8 +/- individueller Zuschlag/Rabatt
|
||||
10. Stueckpreis netto = 9 / Stueckzahl
|
||||
11. Stueckpreis brutto = 10 * (1 + MwSt)
|
||||
12. Gesamtpreis brutto = 11 * Stueckzahl
|
||||
|
||||
5 Test-Szenarien validiert: siehe `tests/manual-scenarios.md`.
|
||||
|
||||
## Dateistruktur
|
||||
|
||||
```
|
||||
.
|
||||
├── index.html
|
||||
├── assets/
|
||||
│ ├── styles.css
|
||||
│ ├── calc.js # 12 Berechnungen, reine Funktionen
|
||||
│ ├── state.js # LocalStorage + Defaults
|
||||
│ ├── excel.js # SheetJS Im-/Export
|
||||
│ ├── app.js # UI-Controller
|
||||
│ └── xlsx.full.min.js # SheetJS Community Edition (MIT), vendored
|
||||
├── templates/
|
||||
│ └── 3D-Druck-Kostenkalkulator.xlsx
|
||||
├── scripts/
|
||||
│ └── generate-template.py # openpyxl, erzeugt die Vorlage
|
||||
├── tests/
|
||||
│ └── manual-scenarios.md
|
||||
└── README.md
|
||||
```
|
||||
|
||||
## Template neu bauen
|
||||
|
||||
```bash
|
||||
python3 -m venv .venv
|
||||
.venv/bin/pip install openpyxl
|
||||
.venv/bin/python scripts/generate-template.py
|
||||
```
|
||||
|
||||
## Offen fuer Sprint 2
|
||||
|
||||
- `.xlsm` mit VBA-Makros (`ImportFromWebApp`, `ExportToAngebot`, `AngebotAlsPdf`, "Historie"-Reiter)
|
||||
- 3 Farb-Varianten (hell / dunkel / Accent) inkl. Theme-Switcher
|
||||
- DE/EN Sprach-Toggle fuer alle Oberflaechen-Texte
|
||||
- Lighthouse-Score-Polish (>= 95 Performance + A11y + Best Practices)
|
||||
- Etsy-Preview-PNGs (1000x1000)
|
||||
- Etsy-Listing-Text DE + EN
|
||||
- Angebots-Druck-Ansicht direkt in der HTML-App (PDF-Export via `window.print`)
|
||||
- Inter-WOFF2-Font vendored (aktuell `system-ui`-Fallback)
|
||||
|
||||
## Bekannte Einschraenkungen im MVP
|
||||
|
||||
- Druckzeit ist im UI als Dezimalstunden eingabbar (nicht als h:m-Picker)
|
||||
- Stromkosten werden aus `Stromverbrauch * Strompreis * Druckzeit` berechnet (keine separaten Fixwert-Eingabe)
|
||||
- Import liest nur den "Eingabe"-Reiter (keine Rekonstruktion aus "Kalkulation")
|
||||
|
||||
## Lizenz
|
||||
|
||||
Proprietaer — Einzelplatz-Lizenz, nicht zur Weiterverbreitung. Etsy-kompatible Lizenz folgt in Sprint 2.
|
||||
Reference in New Issue
Block a user