// SloppyUniverse — bilingual copy bank // No brand names. No "fünf/five" lock-in. SloppyPay = Baukosten. // Status-Status: nur Module, deren Login in id.modules.login_enabled=True // freigeschaltet ist, sind „beta". Aktuell ist das ausschliesslich pay — // Scan/Fix/Plan/Rent stehen auf „soon" (Login serverseitig blockiert). const SU_MODULES_DATA = [ { key: "fix", pair: "fix", name: "SloppyFix", status: "soon", color: "#5A7C2A", tint: "#8FB055", en: { tag: "Facility & maintenance", claim: "Fix the building before it fixes you.", blurb: "Assets, maintenance schedules, findings. NFC/QR scan on the asset, log entry done." }, de: { tag: "Hausmeister & Wartung", claim: "Reparier das Gebäude, bevor es dich repariert.", blurb: "Anlagen, Wartungspläne, Mängel. NFC/QR-Scan an der Anlage, Eintrag im Logbuch erledigt." }, }, { key: "scan", pair: "scan", name: "SloppyScan", status: "soon", color: "#2E3CC6", tint: "#6A78E8", en: { tag: "Visitors & access", claim: "Knock, knock. Who's there?", blurb: "Visitors, badges, patrols, NFC keys. QR replaces clipboard." }, de: { tag: "Besucher & Zutritt", claim: "Klopf, klopf. Wer da?", blurb: "Besucher, Ausweise, Patrouillen, NFC-Schlüssel. QR statt Klemmbrett." }, }, { key: "plan", pair: "plan", name: "SloppyPlan", status: "soon", color: "#B63E8E", tint: "#D97AB8", en: { tag: "Plans & approvals", claim: "Plan versions with a traffic light.", blurb: "Plan versions, approval workflow, BCF export, long-term archive with viewer tokens." }, de: { tag: "Pläne & Freigabe", claim: "Plan-Versionen mit Ampel-Freigabe.", blurb: "Plan-Versionen, Freigabe-Workflow, BCF-Export, Langzeit-Archiv mit Viewer-Tokens." }, }, { key: "rent", pair: "rent", name: "SloppyRent", status: "soon", color: "#C86A2E", tint: "#E39A68", en: { tag: "Tenants & service", claim: "Light. Lighter. Oh — broken.", blurb: "Tenant tickets, appointments, handover protocols. Mobile app for residents and technicians." }, de: { tag: "Mieter & Dienstleister", claim: "Leicht. Leichter. Oh — kaputt.", blurb: "Mieter-Tickets, Termine, Übergabeprotokolle. Mobile App für Mieter und Techniker." }, }, { key: "pay", pair: "pay", name: "SloppyPay", status: "beta", color: "#A47913", tint: "#D9A93B", en: { tag: "Build-cost control", claim: "What is all this costing me?", blurb: "Bookings, photo receipts with OCR, project budget, plan-vs-actual per stakeholder." }, de: { tag: "Baukostenkontrolle", claim: "Was kostet mich das alles?", blurb: "Buchungen, Belege per Foto mit OCR, Projekt-Budget, Soll/Ist pro Beteiligtem." }, }, ]; // Manifesto — punchy, brand-name-free, focused. const SU_MANIFESTO = [ { en: "One login. Every module. One universe. No matrix of seat tiers.", de: "Ein Login. Alle Module. Ein Universum. Keine Matrix aus Sitzplatz-Stufen." }, { en: "Built by people who actually managed buildings. That's where the name comes from.", de: "Gebaut von Leuten, die selbst Häuser verwaltet haben. Daher der Name." }, { en: "We don't sprinkle 'AI' on every button. Only where it earns its rent.", de: "Wir streuen kein 'KI' auf jeden Knopf. Nur da, wo es seine Miete verdient." }, { en: "New modules ship when they're ready, not when the slide deck demands.", de: "Neue Module kommen, wenn sie fertig sind. Nicht, wenn die Präsentation es will." }, { en: "Boring is a feature. Software that just works is the rarest kind.", de: "Langweilig ist ein Feature. Software, die einfach läuft, ist die seltenste Sorte." }, ]; // FAQ — Anti-Sales tone, brand-name-free const SU_FAQ = [ { en: { q: "Is it actually called Sloppy?", a: "Yes. We picked the name on purpose. It reminds us not to over-engineer things nobody asked for." }, de: { q: "Heißt das wirklich Sloppy?", a: "Ja. Mit Absicht. Erinnert uns daran, nicht Sachen zu überbauen, die keiner wollte." } }, { en: { q: "Are all the modules online today?", a: "Not yet. Pay is in beta — usable for real work, rough around the edges. Scan, Fix, Plan and Rent are coming. The status badge on each card tells you exactly where it stands." }, de: { q: "Sind alle Module schon online?", a: "Noch nicht. Pay ist beta — für echte Arbeit nutzbar, ein bisschen kantig. Scan, Fix, Plan und Rent kommen. Der Status-Badge auf jeder Karte sagt, wo's steht." } }, { en: { q: "What does 'beta' mean for me?", a: "You can use beta modules for real work today, with one trade-off: limited guarantees against data loss. We back things up daily, but please don't run your only copy of anything important through a beta module yet." }, de: { q: "Was bedeutet 'Beta' für mich?", a: "Du kannst Beta-Module heute schon produktiv nutzen, mit einem Trade-off: eingeschränkte Garantien gegen Datenverlust. Wir sichern täglich, aber bitte verlass dich nicht ausschließlich auf ein Beta-Modul für etwas Wichtiges." } }, { en: { q: "Can I just use one module?", a: "Yes. Pick the module that fits your job. The other modules don't get in the way — they just sit dark in the sidebar until you need one." }, de: { q: "Kann ich nur ein Modul nehmen?", a: "Ja. Du nimmst das Modul, das gerade passt. Die anderen sitzen dunkel in der Sidebar, bis du sie brauchst." } }, { en: { q: "Where's my data?", a: "On a server in Germany (Hetzner). Daily backups stay on the same server for now — geo-redundancy is on the list, not yet live." }, de: { q: "Wo liegen meine Daten?", a: "Auf einem Server in Deutschland (Hetzner). Tägliche Backups liegen aktuell noch auf demselben Server — geografische Redundanz steht auf der Liste, ist aber noch nicht aktiv." } }, { en: { q: "What if I outgrow this?", a: "Then you outgrow this. We don't lock data. Export to CSV, JSON, whatever. We'll wave goodbye and mean it." }, de: { q: "Was, wenn ich rauswachse?", a: "Dann wächst du raus. Wir sperren keine Daten ein. Export als CSV, JSON, was auch immer. Wir winken zum Abschied und meinen das ernst." } }, ]; // Hero — module count avoided, "growing universe" framing const SU_HERO = { word1: "SLOPPY", word2: "UNIVERSE", en_strap: "A growing set of property tools that share one login, one design, one universe. As simple as possible — with maximum simplicity.", de_strap: "Eine wachsende Sammlung Immobilien-Tools, die ein Login, ein Design und ein Universum teilen. So simpel wie möglich — bei maximaler Einfachheit.", tagline_en: "As simple as possible. With maximum simplicity.", tagline_de: "So simpel wie möglich. Bei maximaler Einfachheit.", }; // Beta promise — fokussiert auf Funktion + Datenintegritaet, nicht Preis. const SU_BETA = { en: { badge: "BETA", title: "Beta = early access.", sub: "Modules in beta are real, just rough at the edges.", body: "We're shipping new pieces of the universe in public. While a module is in beta, you can use it for actual work — feedback travels back to us, fixes go out the same week.", catch: "The catch (we'd rather tell you up front):", points: [ "Limited guarantees against data loss during beta.", "Daily backups, but interfaces and data shapes can still change.", "Don't run your only copy of anything mission-critical through a beta module yet.", "When a module leaves beta, your data moves with you. No re-import.", ], }, de: { badge: "BETA", title: "Beta = Early Access.", sub: "Beta-Module sind echt, nur an den Kanten noch rauh.", body: "Wir bauen das Universum öffentlich aus. Solange ein Modul in der Beta ist, kannst du es für richtige Arbeit nutzen — Feedback kommt zurück, Fixes gehen dieselbe Woche raus.", catch: "Der Haken (wir sagen's lieber gleich):", points: [ "Eingeschränkte Garantien gegen Datenverlust während der Beta.", "Tägliche Backups, aber Oberflächen und Datenstrukturen können sich noch ändern.", "Bitte verlass dich nicht ausschließlich auf ein Beta-Modul für etwas Geschäftskritisches.", "Wenn ein Modul aus der Beta geht, ziehen deine Daten mit um. Kein Re-Import nötig.", ], }, }; window.SU_MODULES_DATA = SU_MODULES_DATA; window.SU_MANIFESTO = SU_MANIFESTO; window.SU_FAQ = SU_FAQ; window.SU_HERO = SU_HERO; window.SU_BETA = SU_BETA;