Reparaturplattform für Konsolen, Controller und Smartphones
Königslutter am Elm · fixplay.de · partners.fixplay.de
Fixplay verbindet die Werkstatt mit Kunden, Partnern und dem eigenen Werkstatt-Alltag — von der öffentlichen Website über die Auftragsabwicklung im Backoffice bis zur Hardware-Diagnose auf dem Werktisch:
- Kundenshop und Reparaturannahme auf fixplay.de: Preisanfrage, Auftrag, Versand, Zahlung und Statusverfolgung.
- Backoffice für Werkstatt, Lager und Rechnungen — im Browser und als Android-App, im Produktivbetrieb nur über VPN erreichbar.
- Partner-Portal für Sucher und Vertrieb mit eigenen Rechten und Sichtbarkeiten.
- diagnoseTool für NOR-Flash, UART, I²C und Controller-Diagnose direkt an der Werkbank — ohne Cloud-Zwang.
flowchart LR
subgraph Kunden["Kunden"]
WEB["fixplay.de<br/>Nuxt 4 · Nitro-BFF"]
end
subgraph Intern["Interne Oberflächen"]
ADMIN["Admin-Dashboard<br/>Vue 3 · Capacitor (Android)"]
PARTS["Partner-Portal<br/>Vue 3"]
end
subgraph Backend["Go-Backend"]
PUB["Public API :7000<br/>Firebase JWT"]
ADM["Admin API :7100<br/>Basic Auth · VPN"]
end
subgraph Daten["Daten & Integrationen"]
DB[("MongoDB")]
PAY["Mollie<br/>Zahlungen"]
SHIP["Sendcloud / DHL<br/>Versand"]
S3["Cloudflare R2<br/>Dokumente"]
EBAY["eBay Browse API<br/>Sourcing"]
KI["KI-Bewertung<br/>Sourcing-Eval"]
QL["QL-700 Printserver<br/>Etiketten"]
end
TOOL["diagnoseTool<br/>Tauri v2"]
HW["Werkstatt-Hardware<br/>flashrom · CH341A · DualSense"]
WEB --> PUB
PARTS --> PUB
ADMIN --> ADM
PUB --> DB
ADM --> DB
PUB --> PAY
PUB --> SHIP
PUB --> S3
PUB --> EBAY
PUB --> KI
ADM --> SHIP
ADM --> QL
TOOL -->|lokal, ohne Cloud| HW
Kurz erklärt
- Beide APIs teilen sich den Go-Code (
internal/), laufen aber als getrennte Binaries mit eigenen Ports, Auth-Verfahren und Deployments — der öffentliche Traffic erreicht nie die Admin-API. - Der Nitro-BFF des Kundenshops hält Firebase-Tokens aus dem Browser heraus und spricht die Public API über den versionierten OpenAPI-Contract an.
- diagnoseTool arbeitet vollständig lokal: Rust-Traits trennen Hardwarezugriff von der UI, Mock-Implementierungen erlauben Tests und Entwicklung ohne angeschlossenes Gerät.
| Repository | Zweck | Stack | Auslieferung |
|---|---|---|---|
fixplay-backend |
Public API (:7000, Firebase JWT) und Admin API (:7100, Basic Auth) |
Go 1.25 · Echo · MongoDB | Container-Images v* |
fixplay-frontend |
Kundenshop und Reparaturplattform auf fixplay.de | Nuxt 4 · Nitro-BFF · OpenAPI-Contract | Web-Image web-v* |
fixplay-frontend-admin |
Admin-Dashboard im Browser und als Android-App | Vue 3 · PrimeVue · Capacitor | Web-Image + APK |
fixplay-frontend-partners |
Partner-Portal für Sucher und Vertrieb | Vue 3 · Firebase Auth | Web-Image web-v* |
fixplay-diagnoseTool |
Desktop-Tool für NOR-Flash, UART, I²C und Controller-Diagnose | Tauri v2 · Rust · Svelte 5 | GitHub Releases (Win/Linux, AUR) |
ql700-printserver |
Etikettendruck-Server für den Brother QL-700 | Python · FastAPI · pyusb | systemd auf dem Print-Pi |
Archiviert: fixplay-frontend-legacy
(Vue-3-Kundenshop) und
fixplay-backend-legacy
(Java/Javalin-Backend) — bleiben als Referenz und für die Datenhistorie
erhalten.
Jedes Repository baut und veröffentlicht selbst; die Organisation ist nur der gemeinsame Namensraum. Der Ablauf ist derselbe:
flowchart LR
TAG["Git-Tag<br/>v1.2.3 oder web-v0.4.0"] --> CI["GitHub Actions<br/>Build · Tests · Signatur"]
CI --> GHCR["GHCR<br/>ghcr.io/fixplay-orga/…"]
CI --> REL["GitHub Release<br/>Artefakte · Changelog"]
GHCR --> DEPLOY["Coolify / Compose<br/>Server zieht Image"]
Sobald ein Release-Tag gesetzt wird, erscheinen die Images automatisch im Reiter Packages dieser Organisation:
| Package | Quelle | Tag-Schema |
|---|---|---|
ghcr.io/fixplay-orga/fixplay-public-api |
fixplay-backend |
v*, latest |
ghcr.io/fixplay-orga/fixplay-admin-api |
fixplay-backend |
v*, latest |
ghcr.io/fixplay-orga/fixplay-frontend-admin |
fixplay-frontend-admin |
web-v*, latest |
ghcr.io/fixplay-orga/fixplay-frontend |
fixplay-frontend |
web-v*, latest |
ghcr.io/fixplay-orga/fixplay-frontend-partners |
fixplay-frontend-partners |
web-v*, latest |
Die Workflows leiten den Namensraum aus ${{ github.repository_owner }} ab —
neue Pakete landen also ohne weitere Änderung in der Organisation. Bereits
vorhandene Images aus der Zeit vor dem Umzug behalten ihren alten Namespace,
bis sie neu getaggt oder in den Einstellungen des Packages übertragen werden.
- Contract-first: Das Backend veröffentlicht seine OpenAPI-Spec als Release-Asset; die Frontends pinnen Version und SHA256, statt eine Spec von Hand zu pflegen. Contract-Brüche fallen in CI auf, nicht im Browser.
- Getrennte Oberflächen: Kunden-, Admin- und Partner-Portal haben eigene APIs, Auth-Verfahren und Deployments. Interne Bereiche sind nie öffentlich verlinkt; fehlende Rechte führen bewusst auf 404 statt 403.
- Testbar ohne Hardware und ohne Fremdsysteme: Rust-Hardwarezugriffe laufen
hinter Traits mit Mocks, Go-Tests nutzen
testify/mock, die Frontends Vitest, MSW und Docker-Rezepte für reproduzierbare Builds. - Deutsch als Produktsprache, Code, Kommentare und Commits auf Englisch — mit deutschen Fachbegriffen dort, wo sie eindeutiger sind.
- Release über Tags, nicht über Handarbeit:
v*fürs Backend und diagnoseTool,web-v*für Web-Images.prodwird nur per Pull Request aktualisiert.
Bitte Schwachstellen nicht als öffentliches Issue melden. Nutze
Security → Report a vulnerability im betroffenen Repository oder wende dich
vertraulich an den Repository-Owner. Details stehen in
SECURITY.md. Zugangsdaten und API-Keys liegen ausschließlich in
GitHub Secrets bzw. .env-Dateien und werden nie committet.



