// LUXOMES — Blog system: index page + post detail page
// Posts live in this file (BLOG_POSTS array). Add new entries here.

const BLOG_POSTS = [
  // ───────────────────────────────────────────────────────────────────
  // Pillar / SEO posts — high-keyword-volume topics for AI portals + Google
  // ───────────────────────────────────────────────────────────────────
  {
    slug: "was-ist-ein-serviced-apartment",
    date: "2026-05-15",
    readMinutes: 6,
    category: { de: "Wissen", en: "Knowledge" },
    image: "/assets/munich/IMG_2012.jpg",
    title: {
      de: "Was ist ein Serviced Apartment? Definition, Vorteile und Abgrenzung zu Hotel & Ferienwohnung",
      en: "What is a serviced apartment? Definition, benefits and how it differs from hotels & vacation rentals",
    },
    excerpt: {
      de: "Ein Serviced Apartment ist eine voll möblierte Wohnung mit hotelähnlichen Services — Reinigung, WLAN, voll ausgestattete Küche, oft digitaler Check-in. Wir erklären, was das genau bedeutet, wie sich Serviced Apartments von Hotels und Ferienwohnungen unterscheiden und für wen sie sich lohnen.",
      en: "A serviced apartment is a fully furnished apartment with hotel-like services — cleaning, WiFi, fully equipped kitchen, often digital check-in. We explain exactly what that means, how serviced apartments differ from hotels and vacation rentals, and who they're for.",
    },
    body: {
      de: [
        {
          h: "Die kurze Definition",
          p: "Ein Serviced Apartment ist eine möblierte Wohnung, die wie ein Hotel betrieben wird: tageweise oder wochenweise buchbar, mit voll ausgestatteter Küche, Bad, Schlafbereich und Arbeitsbereich. Es gibt hotelähnliche Dienstleistungen — regelmäßige Reinigung, frisch bezogene Betten, WLAN, oft auch Smart-TV und Schreibtisch. Anders als im Hotel hast Du aber den Komfort einer eigenen Wohnung: keine geteilten Flure mit Lärm, keine Mini-Bar zum Wucherpreis, kein Buffet mit fixen Zeiten — sondern Dein eigenes Zuhause auf Zeit."
        },
        {
          h: "Was unterscheidet ein Serviced Apartment vom Hotel?",
          p: "Im Hotel lebst Du auf einem Zimmer. Im Serviced Apartment lebst Du in einer Wohnung. Das klingt banal, macht aber einen großen Unterschied: Du hast eine Küche und kannst Dir Frühstück selbst zubereiten, abends mit einem Glas Wein auf dem Sofa entspannen oder vom Schreibtisch aus arbeiten. Es gibt keine täglich klopfende Reinigung, sondern feste Intervalle — was viele Geschäftsreisende schätzen. Die Preise sind bei Aufenthalten ab drei Nächten meist günstiger als Hotels vergleichbarer Qualität, weil Du keinen Aufpreis für Dauer-Service zahlst, den Du gar nicht nutzt."
        },
        {
          h: "Und worin unterscheidet es sich von einer Ferienwohnung?",
          p: "Eine klassische Ferienwohnung wird von Privatpersonen vermietet — oft mit persönlicher Schlüsselübergabe, individueller Einrichtung in unterschiedlicher Qualität und ohne professionellen Reinigungs-Standard. Ein Serviced Apartment wird gewerblich betrieben: einheitliche Qualität über das ganze Portfolio, professionelle Reinigung zwischen Aufenthalten, durchgängiger Support, Rechnung mit ausweisbarer Mehrwertsteuer (wichtig für Geschäftsreisende), digitaler Check-in rund um die Uhr. Du weißt vorher, was Du bekommst — keine Überraschungen."
        },
        {
          h: "Für wen lohnt sich ein Serviced Apartment?",
          p: "Geschäftsreisende, die mehrere Tage oder Wochen am gleichen Ort sind — Projektreisen, Beratung, Schulungen. Familien, die nicht im Hotelzimmer zusammengepfercht übernachten wollen. Paare oder Solo-Reisende auf Städtetrip, die mehr Privatsphäre und Küche schätzen als Hotel-Frühstück. Menschen in Übergangsphasen — Umzug, Renovierung, Arbeitsstart in einer neuen Stadt. Wer für mehr als 2–3 Nächte unterwegs ist, fährt mit einem Serviced Apartment fast immer komfortabler als im Hotel."
        },
        {
          h: "Worauf solltest Du bei der Buchung achten?",
          p: "Erstens: gibt es eine voll ausgestattete Küche oder nur eine \"Kitchenette\" mit Wasserkocher? Zweitens: was ist im Preis enthalten — Endreinigung, Bettwäsche, Handtücher, WLAN? Drittens: wie funktioniert der Check-in — digital und rund um die Uhr (komfortabel) oder nur zu festen Zeiten? Viertens: gibt es einen echten Ansprechpartner, falls etwas schiefgeht? Fünftens: wie sind die letzten Gästebewertungen — gerade bei Aufenthalten von einer Woche oder länger machen kleine Mängel über die Zeit einen Unterschied."
        },
        {
          h: "Der LUXOMES-Standard",
          p: "Wir betreiben designorientierte Serviced Apartments in München, Nürnberg, Ingolstadt und Vilshofen — alle nach dem gleichen Qualitätsanspruch eingerichtet, mit kostenfreiem Highspeed-WLAN, Smart-TV, voll ausgestatteter Küche und digitalem Check-in rund um die Uhr. Was uns wichtig ist: dass es sich nicht wie ein Hotel anfühlt und auch nicht wie eine anonyme Privatwohnung — sondern wie das eigene Zuhause, nur besser eingerichtet. Schau Dir unsere Standorte an und buche direkt über uns, ohne Plattform-Umweg."
        },
      ],
      en: [
        {
          h: "The short definition",
          p: "A serviced apartment is a furnished apartment run like a hotel: bookable by the night or week, with a fully equipped kitchen, bathroom, sleeping area and workspace. It comes with hotel-like services — regular cleaning, fresh linens, WiFi, often smart TV and a desk. Unlike a hotel, you get the comfort of your own home: no shared corridors with noise, no overpriced mini-bar, no buffet with fixed times — just your own home away from home."
        },
        {
          h: "How does a serviced apartment differ from a hotel?",
          p: "In a hotel you live in a room. In a serviced apartment you live in an apartment. That sounds trivial but matters a lot: you have a kitchen, you can make your own breakfast, relax with a glass of wine on the sofa, or work from a real desk. There's no daily knocking maid — cleaning runs on fixed intervals, which most business travellers prefer. For stays of three nights or more the price is usually lower than hotels of comparable quality, because you don't pay a premium for daily service you don't actually use."
        },
        {
          h: "And how does it differ from a vacation rental?",
          p: "A classical vacation rental is run by private individuals — typically with in-person key handover, individual furnishings of varying quality and no professional cleaning standard. A serviced apartment is operated commercially: consistent quality across the portfolio, professional cleaning between stays, ongoing support, VAT-itemised invoices (important for business travel), digital check-in around the clock. You know what you're going to get — no surprises."
        },
        {
          h: "Who is a serviced apartment for?",
          p: "Business travellers staying multiple days or weeks at the same location — project work, consulting, training. Families who don't want to be crammed into one hotel room. Couples or solo travellers on a city break who value privacy and a kitchen more than hotel breakfast. People in transition — relocation, renovation, starting work in a new city. If you're travelling for more than 2–3 nights, a serviced apartment is almost always more comfortable than a hotel."
        },
        {
          h: "What to look for when booking",
          p: "First: is there a fully equipped kitchen or just a 'kitchenette' with a kettle? Second: what's included in the price — final cleaning, bed linens, towels, WiFi? Third: how does check-in work — digital and 24/7 (convenient) or only at fixed times? Fourth: is there a real point of contact if something goes wrong? Fifth: what do recent guest reviews say — especially for stays of a week or longer, small issues add up over time."
        },
        {
          h: "The LUXOMES standard",
          p: "We operate design-driven serviced apartments in Munich, Nuremberg, Ingolstadt and Vilshofen — all furnished to the same quality standard, with free highspeed WiFi, smart TV, fully equipped kitchens and digital check-in around the clock. What matters to us: it shouldn't feel like a hotel and it shouldn't feel like an anonymous private apartment — it should feel like home, just better equipped. Browse our locations and book directly, without a platform detour."
        },
      ],
    },
  },
  {
    slug: "master-lease-vs-klassische-vermietung",
    date: "2026-05-08",
    readMinutes: 7,
    category: { de: "Real Estate", en: "Real Estate" },
    image: "/assets/munich/exterior.jpg",
    title: {
      de: "Master-Lease vs. klassische Vermietung: Was bringt für Eigentümer wirklich mehr?",
      en: "Master-lease vs. classical letting: which actually pays off more for owners?",
    },
    excerpt: {
      de: "Privat vermieten oder einen Master-Lease mit einem gewerblichen Mieter abschließen? Wir vergleichen die beiden Wege ehrlich — mit Rechenbeispiel, Risiken, und der Frage, wann sich welcher Weg lohnt.",
      en: "Should you let privately or sign a master-lease with a commercial tenant? We compare the two paths honestly — with a worked example, risks, and the question of when each model pays off.",
    },
    body: {
      de: [
        {
          h: "Die zwei Wege im Vergleich",
          p: "Als Eigentümer eines Apartmenthauses, einer Pension oder eines Mehrfamilien-Objekts hast Du grundsätzlich zwei Optionen: Du vermietest selbst an Privatmieter, mit allen klassischen Herausforderungen — oder Du übergibst das gesamte Objekt an einen einzigen gewerblichen Mieter, der einen langfristigen Mietvertrag abschließt und es selbst betreibt. Das ist ein Master-Lease (auch: Generalmietvertrag). Beide Wege haben ihre Berechtigung — aber sie führen zu sehr unterschiedlichen Cashflow-Profilen und Aufwandsmustern."
        },
        {
          h: "Klassische Privatvermietung: was passiert wirklich?",
          p: "Auf dem Papier sieht es einfach aus: Du suchst Mieter, schließt Mietverträge, kassierst monatlich. In der Praxis trägst Du jedoch deutlich mehr Risiken, als die Kaltmiete vermuten lässt. Mieterwechsel kosten Zeit und Geld (Schlüsselübergabe, Wohnungsabnahme, Inserate, Besichtigungen, Mietausfall in der Übergangszeit). Mieter, die nicht zahlen, dauern in Deutschland mit Räumungsklage 6–12 Monate. Renovierungen nach Auszug sind nicht selten. Statistisch fällt bei mehrjähriger Privatvermietung im Schnitt 7–10 % der theoretischen Kaltmiete weg — durch Leerstand, Mietausfall und Renovierungsreserven."
        },
        {
          h: "Master-Lease: wie es funktioniert",
          p: "Beim Master-Lease vermietest Du das gesamte Objekt an einen einzigen gewerblichen Mieter — eine GmbH — die das Objekt anschließend betreibt. Der Mieter zahlt Dir eine vertraglich zugesicherte Festmiete, jeden Monat, unabhängig von Belegung oder Saison. Du hast einen einzigen Vertragspartner statt zehn oder zwanzig Privatmietern. Setup, Möblierung (falls nötig), Vermarktung, Vermietung, Gäste-Operations, Reinigung und kleinere Instandhaltung trägt der Mieter selbst. Du bleibst Eigentümer, hast aber operativ nichts mehr zu tun."
        },
        {
          h: "Konkretes Rechenbeispiel: 8-Zimmer-Objekt in einer süddeutschen B-Stadt",
          p: "Ortsübliche Kaltmiete bei Privatvermietung: ca. 3.500 €/Monat. Davon ziehst Du realistisch ab: Leerstands-Risiko (durchschnittlich 7 %): −245 €; Verwaltungs- und Mietausfall-Aufwand: −180 €. Effektive Privatmiete: ca. 3.075 €/Monat. Master-Lease bei LUXOMES für das gleiche Objekt: garantierte Festmiete 4.200–4.800 €/Monat, Leerstandsrisiko 0 €, eigener Verwaltungsaufwand 0 €. Effektive LUXOMES-Miete: 4.200–4.800 €/Monat. Differenz: +37–56 % mehr Cashflow, 100 % planbar. (Beispielhafte Zahlen — konkrete Konditionen hängen vom Objekt, der Lage und dem Zustand ab.)"
        },
        {
          h: "Wann lohnt sich welcher Weg?",
          p: "Privatvermietung ist meist sinnvoll, wenn das Objekt in einer reinen Wohnlage liegt, ohne Nachfrage nach Kurzaufenthalten — etwa ein klassisches Wohnhaus in einer Schlafstadt. Master-Lease lohnt sich, wenn Lage und Objekt prinzipiell auch für Kurzzeit-Beherbergung geeignet sind: Innenstadtnähe, Bahn-/Flughafenanbindung, Messe-Nähe, Tourismus oder Gesundheitsstandort. Auch ein leerstehendes Apartmenthaus, eine schwach laufende Pension oder ein Neubauprojekt, das noch in der Planung ist, sind oft perfekte Kandidaten. Entscheidend ist die Qualität der Nachfrage — nicht die Größe der Stadt."
        },
        {
          h: "Häufige Sorgen — und was wirklich passiert",
          p: "\"Ein Master-Lease bindet mich 10 Jahre.\" — Stimmt. Aber: 10 Jahre Festlaufzeit ist die Voraussetzung dafür, dass wir das Setup, die Vermarktung und das Operations-Team finanzieren können, das Dir den planbaren Cashflow liefert. Außerdem profitierst Du davon, dass das Objekt durch professionellen Betrieb meist im Wert gewinnt. \"Was passiert, wenn der Mieter nicht mehr zahlt?\" — Wir sind eine GmbH mit operativem Betrieb seit 2020 und über 40 Apartments in der DACH-Region. Bonität, laufende Bilanzen und ein nachvollziehbarer Track-Record sind Teil des Erstgesprächs. \"Was, wenn ich verkaufen will?\" — Ein laufender Master-Lease mit vertraglich gesichertem Cashflow macht ein Objekt für Investoren attraktiver, nicht weniger. Du kannst jederzeit verkaufen — der Lease läuft beim Käufer weiter."
        },
        {
          h: "Lass uns über Dein Objekt sprechen",
          p: "Wir prüfen Dein Objekt unverbindlich. Innerhalb einer Woche bekommst Du eine erste Einschätzung — ob ein Master-Lease grundsätzlich passt, in welcher Größenordnung wir Miete zahlen können, und welche Voraussetzungen wir gemeinsam noch klären müssen. Wenn es passt, machen wir konkret weiter. Wenn nicht, sagen wir es offen — und vielleicht ist die Erkenntnis selbst schon hilfreich für Deine Entscheidung."
        },
      ],
      en: [
        {
          h: "The two paths compared",
          p: "As the owner of an apartment building, guesthouse or multi-unit property, you have two main options: let privately to individual tenants — with all the classic challenges — or hand the whole asset to a single commercial tenant who signs a long-term lease and operates it themselves. That's a master-lease. Both paths have merit, but they produce very different cashflow profiles and very different workloads."
        },
        {
          h: "Classical private letting: what really happens?",
          p: "On paper it looks simple: you find tenants, sign agreements, collect monthly. In practice you carry a lot more risk than the headline rent suggests. Tenant changeovers cost time and money (handover, condition checks, listings, viewings, vacancy in between). Tenants who stop paying take 6–12 months to evict in Germany. Post-tenant renovations are not rare. Statistically, over multi-year private letting roughly 7–10 % of theoretical gross rent is lost to vacancy, default and refurbishment reserves."
        },
        {
          h: "Master-lease: how it works",
          p: "Under a master-lease you let the entire asset to a single commercial tenant — a GmbH — that then operates the asset. The tenant pays a contractually guaranteed monthly rent, every month, regardless of occupancy or season. You have one counterparty instead of ten or twenty private tenants. Setup, furnishing (if needed), marketing, letting, guest ops, cleaning and minor maintenance sit with the tenant. You remain the owner — but operationally have nothing more to do."
        },
        {
          h: "Worked example: 8-room asset in a southern-German secondary city",
          p: "Local market rent under private letting: ~€3,500/month. Realistic deductions: vacancy risk (avg 7 %): −€245; management & default reserves: −€180. Effective private rent: ~€3,075/month. LUXOMES master-lease for the same asset: guaranteed fixed rent €4,200–4,800/month, vacancy risk €0, owner workload €0. Effective LUXOMES rent: €4,200–4,800/month. Difference: +37–56 % more cashflow, 100 % predictable. (Illustrative figures — actual terms depend on the asset, location and condition.)"
        },
        {
          h: "When does each path pay off?",
          p: "Private letting usually makes sense when the asset sits in a pure residential area with no short-stay demand — a classic apartment building in a commuter town. A master-lease pays off when location and asset are at least viable for short-stay accommodation: city-centre proximity, train/airport access, trade-fair area, tourism or healthcare hubs. An empty apartment building, an under-performing guesthouse or a new-build project still in planning are often perfect candidates too. What matters is the quality of demand — not the size of the city."
        },
        {
          h: "Common concerns — and what really happens",
          p: "\"A master-lease ties me up for 10 years.\" — True. But: a 10-year fixed term is what enables us to finance the setup, marketing and operations team that produce the predictable cashflow for you. You also benefit from the asset typically gaining value through professional operation. \"What if the tenant stops paying?\" — We're a GmbH operating since 2020 with 40+ apartments across the DACH region. Creditworthiness, current financial statements and a verifiable track-record are part of the first call. \"What if I want to sell?\" — A running master-lease with contractually secured cashflow makes an asset more attractive to investors, not less. You can sell anytime — the lease continues with the buyer."
        },
        {
          h: "Let's talk about your asset",
          p: "We evaluate your asset without obligation. Within a week you'll get a first read — whether a master-lease fits in principle, what rent range we can support, and what we still need to clarify together. If it fits, we move forward concretely. If it doesn't, we say so openly — and that clarity alone may help your decision."
        },
      ],
    },
  },
  {
    slug: "aparthotel-statt-pension",
    date: "2026-04-30",
    readMinutes: 5,
    category: { de: "Verwaltung", en: "Management" },
    image: "/assets/nuernberg/DSC02192.jpg",
    title: {
      de: "Aparthotel statt Pension: Warum jetzt der richtige Zeitpunkt zur Umstellung ist",
      en: "Aparthotel instead of guesthouse: why now is the right moment to make the shift",
    },
    excerpt: {
      de: "Klassische Pensionen verlieren Gäste an Aparthotels und Serviced Apartments. Wir erklären, woran das liegt, was Du als Inhaber tun kannst — und warum die Umstellung oft weniger Aufwand bedeutet, als es zunächst klingt.",
      en: "Traditional guesthouses are losing guests to aparthotels and serviced apartments. We explain why, what owners can do — and why the shift often requires less effort than it first sounds.",
    },
    body: {
      de: [
        {
          h: "Die Pension ist nicht das Problem — das Modell drumherum schon",
          p: "Wenn Du eine Pension oder Frühstückspension betreibst, kennst Du es: Auslastung über 60 % zu halten wird schwieriger, der Stammgast-Anteil schrumpft, OTAs nehmen einen größeren Anteil weg, junge Gäste bewerten skeptisch, und immer mehr Anfragen kommen am Telefon — was Mitarbeiterzeit bindet, die Du eigentlich nicht hast. Das liegt selten am Objekt selbst. Pensionen liegen oft in guten Lagen, haben sympathische Inhaber und solide Substanz. Das Problem ist das operative Modell drumherum — und das lässt sich umbauen."
        },
        {
          h: "Was Gäste heute erwarten",
          p: "Selbst gehobene Geschäftsreisende und Familien buchen heute überwiegend digital. Sie wollen rund um die Uhr einchecken können, ohne anzurufen oder auf die Rezeption zu warten. Sie wollen eine voll ausgestattete Küche oder mindestens eine Kitchenette — Frühstücks-Buffet im Hauptgebäude reicht nicht mehr. Sie wollen verlässliches WLAN, einen Schreibtisch, ein bequemes Bett, eine ordentliche Dusche. Was sie nicht wollen: feste Check-in-Zeiten, leere Frühstücksräume, Schlüssel an einer Haken-Tafel. Eine Pension, die heute noch wie 2005 betrieben wird, fühlt sich für junge Gäste an wie ein Museum."
        },
        {
          h: "Aparthotel — was das überhaupt bedeutet",
          p: "Ein Aparthotel ist ein professionell betriebenes Beherbergungskonzept, das die Vorteile von Hotel und Wohnung kombiniert: einheitliche Qualität über alle Einheiten, voll ausgestattete Küchen, digitaler Check-in rund um die Uhr, gewerbliche Buchungs- und Rechnungsstellung, klare Standards für Reinigung und Wäsche. Anders als ein klassisches Hotel ohne tägliche Reinigung, ohne Frühstücks-Pflicht — was die Personalkosten drastisch senkt. Anders als eine Ferienwohnung mit professionellem Operating-Team im Hintergrund."
        },
        {
          h: "Drei Hebel, die den Unterschied machen",
          p: "Erstens: Sichtbarkeit. Dein Objekt muss dort gefunden werden, wo Gäste tatsächlich suchen — auf Google Hotels, Booking.com, Direct, Airbnb für längere Aufenthalte. Jeder Kanal will eigene Listings, eigene Bilder, eigene Preise — gleichzeitig synchron, ohne Doppelbuchungen. Zweitens: digitales Operating. Self-Check-in mit Smart-Lock, automatisierte Gäste-Kommunikation, klar definierte Reinigungsprozesse. Drittens: gewerbliche Konditionen. Vorauszahlung statt Nachzahlung, klare Stornobedingungen, ausweisbare Mehrwertsteuer auf jeder Rechnung — das macht Dich für Business-Kunden buchbar."
        },
        {
          h: "Was sich für Dich als Inhaber ändert",
          p: "Wenn wir die Verwaltung übernehmen, machst Du das, was Du am besten kannst — Dein Objekt da, Deine Lage, Deine Beziehung zur Region — und lässt den operativen Teil bei uns. Du musst kein eigenes Channel-Management-System lernen, keine Schlüssel mehr persönlich übergeben, keine Buchungen am Telefon annehmen. Was Du behältst: Eigentum, Hausrecht, langfristige Entscheidungen über das Objekt. Was Du abgibst: Dein Tagesgeschäft. Was Du gewinnst: meist deutlich höhere Auslastung, deutlich höhere Durchschnittspreise — und vor allem deutlich weniger Stunden pro Woche, die das Objekt von Dir verlangt."
        },
        {
          h: "Wir machen das nicht für Dich — wir machen das mit Dir",
          p: "Wir sind keine Berater, die Dir ein Konzept hinterlassen und dann verschwinden. Wir übernehmen die Verwaltung Deines Objekts dauerhaft — drei Tier-Pakete von Basic (15 % vom Netto-Umsatz) bis Premium (25 % vom Netto-Umsatz), ohne Onboarding-Kosten, ohne langfristige Bindung im ersten Jahr. Wenn es nach 6 Monaten nicht funktioniert, gehen wir wieder. Aber das ist noch nie passiert — weil unsere Erfahrungen aus heute über 40 Apartments in der DACH-Region zuverlässig in Dein Objekt einfließen. Schau Dir unsere Verwaltungs-Seite an oder buche direkt ein kostenloses 30-Minuten-Gespräch."
        },
      ],
      en: [
        {
          h: "The guesthouse isn't the problem — the model around it is",
          p: "If you run a Pension or B&B-style guesthouse, you know the pattern: keeping occupancy above 60 % gets harder, returning-guest share shrinks, OTAs take a bigger cut, younger guests review skeptically, and more and more inquiries come by phone — burning staff time you don't really have. That's rarely the property itself. Guesthouses often sit in great locations, with friendly owners and solid bones. The problem is the operating model around them — and that can be rebuilt."
        },
        {
          h: "What guests today expect",
          p: "Even premium business travellers and families now book mostly digitally. They want to check in around the clock without phoning or waiting at reception. They want a fully equipped kitchen — or at least a real kitchenette — a breakfast buffet in the main building isn't enough anymore. They want reliable WiFi, a real desk, a comfortable bed, a decent shower. What they don't want: fixed check-in windows, empty breakfast rooms, keys on a wall-mounted board. A guesthouse run today like it was in 2005 feels to younger guests like a museum."
        },
        {
          h: "Aparthotel — what does that actually mean?",
          p: "An aparthotel is a professionally run accommodation concept that combines the upsides of a hotel and an apartment: consistent quality across all units, fully equipped kitchens, digital check-in around the clock, commercial booking and invoicing, clear cleaning and laundry standards. Unlike a classical hotel: no daily cleaning, no mandatory breakfast — which dramatically lowers staffing cost. Unlike a vacation rental: a professional operations team running everything in the background."
        },
        {
          h: "Three levers that make the difference",
          p: "First: visibility. Your asset needs to be found where guests actually search — Google Hotels, Booking.com, direct site, Airbnb for longer stays. Each channel wants its own listings, photos, pricing — synchronised, with no double-bookings. Second: digital operations. Self check-in via smart-lock, automated guest communication, clearly defined cleaning processes. Third: commercial terms. Pre-payment instead of post-payment, clear cancellation policies, VAT-itemised invoices on every booking — that's what makes you bookable for corporates."
        },
        {
          h: "What changes for you as the owner",
          p: "When we take over the management, you keep doing what you do best — your asset, your location, your relationship with the region — and we handle the operating side. You don't have to learn a channel manager, no more in-person key handovers, no more taking bookings on the phone. What you keep: ownership, house rights, long-term decisions about the property. What you hand over: your day-to-day. What you gain: typically much higher occupancy, much higher average daily rates — and most importantly, far fewer hours per week the property demands from you."
        },
        {
          h: "We don't do it for you — we do it with you",
          p: "We're not consultants who hand you a strategy deck and disappear. We take over the management of your asset on an ongoing basis — three tier packages from Basic (15 % of net revenue) to Premium (25 % of net revenue), no onboarding cost, no long-term lock-in in the first year. If it doesn't work after 6 months, we move on. But that hasn't happened — because experience from 40+ apartments across the DACH region flows reliably into your asset. Browse our management page or book a free 30-minute call."
        },
      ],
    },
  },
  {
    slug: "aparthotel-takeover",
    date: "2026-04-18",
    readMinutes: 5,
    category: { de: "Verwaltung", en: "Management" },
    // Traditional Bavarian / Austrian Gasthof exterior — fits the "before LUXOMES took over" story
    image: "/assets/blog/pension-gasthof.jpg",
    title: {
      de: "Vom Reservierungsbuch zum professionellen Beherbergungsbetrieb — +312% Direktbuchungen in 6 Monaten",
      en: "From paper reservation book to a professional operation — +312% direct bookings in 6 months",
    },
    excerpt: {
      de: "Eine bayerische Pension war ausschließlich auf Booking.com sichtbar, hat Direktbuchungen telefonisch entgegengenommen und alles handschriftlich in ein Reservierungsbuch eingetragen. Wir haben die komplette Verwaltung übernommen und den Betrieb professionalisiert — mit messbarem Erfolg.",
      en: "A Bavarian guesthouse was visible only on Booking.com, took direct bookings by phone and logged everything by hand in a paper reservation book. We took over the full management and professionalised the operation — with measurable results.",
    },
    body: {
      de: [
        {
          h: "Ausgangslage",
          p: "Der Eigentümer betrieb eine 8-Zimmer-Pension in Süddeutschland mit einem ambitionierten Konzept, aber alten Strukturen. Die einzige Buchungsquelle: Booking.com. Direktbuchungen liefen ausschließlich übers Telefon — und wurden anschließend mit Bleistift in ein Reservierungsbuch eingetragen, das am Tresen lag. Rechnungen wurden manuell verfasst, Schlüssel persönlich übergeben. Auslastung: 38%. Aufwand: 30+ Stunden pro Woche."
        },
        {
          h: "Das eigentliche Problem",
          p: "Hinter den schwachen Zahlen steckte ein operatives Problem, das dem Eigentümer Umsatz gekostet hat, ohne dass er es richtig greifen konnte: Aufgrund falscher Plattform-Einstellungen reisten regelmäßig Gäste nicht an, ohne dass eine Zahlung gesichert war. No-Shows ohne Folgekosten — der Eigentümer hat die ganze Vorbereitung gemacht, das Zimmer freigehalten, und am Ende kam weder Gast noch Geld. Jede Woche aufs Neue. Das ist die Art von stillem Verlust, der sich über Monate addiert."
        },
        {
          h: "Wo wir angesetzt haben",
          p: "Bei unserer ersten Begehung war schnell klar: das Objekt selbst war solide, die Lage war gut, das Konzept stimmig. Was fehlte, war die Professionalisierung dahinter — Sichtbarkeit dort, wo Gäste tatsächlich suchen, eine Buchungsstrecke, die nicht von Mitarbeiterzeit abhängt, und Konditionen, die den Umsatz vor Risiken schützen. Wir haben die komplette Verwaltung übernommen. Wie wir das im Detail aufsetzen, ist Teil unserer Arbeit — der Eigentümer konnte sich auf das konzentrieren, was er am besten kann: Gastgeber sein."
        },
        {
          h: "Was sich geändert hat",
          p: "Statt einer einzigen Buchungsquelle kommen Anfragen jetzt parallel über alle relevanten Portale rein — abgestimmt, ohne Doppelbuchungen, mit für jeden Kanal optimierten Listings. Statt eines handschriftlichen Reservierungsbuchs läuft alles in einem zentralen System, das in Echtzeit zeigt, was wo gebucht ist. Statt Telefon-Annahmen mit unsicherer Zahlung kommen Buchungen mit gesicherter Vorauszahlung. Statt persönlicher Schlüsselübergaben checken Gäste eigenständig ein. Die Apartments selbst haben wir behutsam aufgewertet — nichts Aufdringliches, einfach das, was Gäste heute erwarten."
        },
        {
          h: "Ergebnisse nach 6 Monaten",
          p: "Die Zahlen sprechen für sich: Auslastung gestiegen von 38% auf 78%. Durchschnittlicher Übernachtungspreis von €68 auf €94. Direktbuchungen +312%. Gruppenbuchungen für Firmenkunden von 2 auf 11 pro Monat. Und vielleicht das Wichtigste: der Verwaltungsaufwand des Eigentümers ist von 30+ Stunden in der Woche auf etwa 4 Stunden gesunken. Was vorher Improvisation war, läuft jetzt verlässlich. Was vorher Zeit gekostet hat, läuft jetzt nebenbei."
        },
        {
          h: "Wenn Dir das bekannt vorkommt",
          p: "Wenn Du ein Objekt hast, das mehr kann als es aktuell zeigt — wenn das Tagesgeschäft Dich daran hindert, das zu tun, wofür Du eigentlich gestartet bist — sprich mit uns. In einem unverbindlichen 30-Minuten-Gespräch verschaffen wir uns einen Eindruck von Deinem Betrieb und sagen Dir ehrlich, ob und wie wir helfen können. Das Setup, das wir bei der Pension aufgebaut haben, läuft auch heute noch verlässlich. Der Eigentümer macht das, wofür er ursprünglich gestartet ist. Den Rest übernehmen wir."
        }
      ],
      en: [
        {
          h: "Starting point",
          p: "The owner ran an 8-room guesthouse in southern Germany — an ambitious concept on top of dated structures. The only booking source: Booking.com. Direct bookings ran exclusively via phone — then got pencilled into a paper reservation book sitting on the counter. Invoices were written manually, keys handed over in person. Occupancy: 38%. Workload: 30+ hours per week."
        },
        {
          h: "The actual problem",
          p: "Behind the soft numbers sat an operational problem that was quietly costing the owner real money without him being able to put a finger on it: due to misconfigured platform settings, guests regularly didn't arrive — and no payment was secured. No-shows with no consequence. The owner prepared the room, kept it blocked — and at the end of the day, neither the guest nor the money showed up. Every week. That's the kind of silent loss that compounds over months."
        },
        {
          h: "Where we stepped in",
          p: "On our first walkthrough it was clear: the property itself was solid, the location was good, the concept was right. What was missing was the professionalisation behind it — visibility where guests actually search, a booking flow that doesn't depend on staff hours, and terms that protect revenue from risk. We took over the full management. Exactly how we set things up is part of our work — what mattered for the owner was that he could focus on what he does best: being a host."
        },
        {
          h: "What changed",
          p: "Instead of a single booking source, requests now come in parallel across all relevant portals — coordinated, no double-bookings, with each listing tuned to its channel. Instead of a hand-written reservation book, everything runs in one central system that shows in real time what's booked where. Instead of phone bookings with uncertain payment, bookings now arrive with secured pre-payment. Instead of in-person key handover, guests check in on their own. The apartments themselves we upgraded carefully — nothing flashy, just what modern guests expect."
        },
        {
          h: "Results after 6 months",
          p: "The numbers speak for themselves: occupancy up from 38% to 78%. Average daily rate from €68 to €94. Direct bookings +312%. Corporate group bookings from 2/month to 11/month. And maybe most importantly: the owner's admin workload dropped from 30+ hours/week to roughly 4 hours. What was improvisation before now runs reliably. What used to cost time now runs in the background."
        },
        {
          h: "If this sounds familiar",
          p: "If you have a property that can do more than it currently shows — if day-to-day operations stop you from doing what you originally set out to do — talk to us. In a no-obligation 30-minute call we get a feel for your operation and tell you honestly whether and how we can help. The setup we built for that guesthouse still runs reliably today. The owner does what he originally started for. We take care of the rest."
        }
      ]
    }
  },
  {
    slug: "vilshofen-launch",
    date: "2026-03-22",
    readMinutes: 5,
    category: { de: "Real Estate", en: "Real Estate" },
    image: "/assets/blog/vilshofen/title-vilshofen-altstadt.jpg",
    title: {
      de: "Vilshofen: Wie ein leerstehendes Lagergebäude zum ersten Aparthotel der Stadt wurde",
      en: "Vilshofen: How an empty warehouse became the town's first aparthotel",
    },
    excerpt: {
      de: "Ein altes Lagergebäude im Zentrum Vilshofens stand seit Jahren leer. Der Eigentümer hat sich für einen langfristigen Mietvertrag mit LUXOMES entschieden — statt selbst zu vermarkten oder zu verkaufen. Wir haben das Objekt umgebaut, möbliert und betreiben es heute als ersten professionellen Beherbergungsbetrieb der Stadt. Der Eigentümer bekommt seine vertraglich zugesicherte Monatsmiete — ohne Vermietungs- oder Mieterausfall-Risiko.",
      en: "An old warehouse in the centre of Vilshofen had been sitting empty for years. The owner chose a long-term lease with LUXOMES — instead of marketing or selling himself. We converted, furnished and now operate the building as the town's first professional accommodation provider. The owner receives his contractually guaranteed monthly rent — with no letting or tenant-default risk.",
    },
    body: {
      de: [
        {
          h: "Die Ausgangslage",
          p: "Vilshofen an der Donau, eine niederbayerische Kleinstadt mit rund 17.000 Einwohnern, liegt landschaftlich reizvoll am Donauradweg, zwischen Passau und Deggendorf, mit guter Verkehrsanbindung zur Audi-Zone Ingolstadt und zum Schaeffler-Werk vor Ort. Eine echte Beherbergungsstätte für Kurzaufenthalte gab es bisher allerdings nicht. Bestehende kleine Pensionen richteten sich primär an Tagesgäste oder bedienten ein sehr begrenztes Segment — viele Übernachtungsanfragen mussten nach Passau oder Deggendorf weiterverwiesen werden."
        },
        {
          h: "Das Objekt",
          p: "Im Stadtzentrum von Vilshofen stand seit Jahren ein altes Lagergebäude leer — gewerblich genutzt war es zuletzt vor langer Zeit, Wohnnutzung gab es nie. Der Eigentümer suchte nach einer wirtschaftlich tragfähigen Umnutzung des Objekts, da reine Lagerflächen in der Lage nicht mehr nachgefragt wurden und die laufenden Erhaltungskosten ohne Nutzungskonzept nicht zu rechtfertigen waren.",
          media: {
            type: "image",
            src: "/assets/blog/vilshofen/objekt-hero.jpg",
            caption: {
              de: "Der Innenhof des Bestandsgebäudes — keine Erschließung der oberen Stockwerke, algenbewachsene Wände, kein Wohnkonzept.",
              en: "The inner courtyard of the existing building — no access to the upper floors, algae-stained walls, no residential concept.",
            },
          },
        },
        {
          h: "Was wir mitgebracht haben: einen erfahrenen Betreiber",
          p: "Wir sind keine Berater. Wir sind keine Architekten. Wir sind ein Hospitality-Unternehmen, das seit 2020 operativ Apartments betreibt — heute über 40 Einheiten in vier Städten der DACH-Region, mit einer durchschnittlichen Auslastung von 75–85% und einem festen Operations-Team. Diese Erfahrung haben wir vom ersten Termin an in das Vilshofen-Projekt eingebracht: welcher Apartment-Mix wirklich bucht, welche Grundrisse zu hohen Bewertungen führen, welche Details Gäste tatsächlich erwarten — und vor allem: was es bedeutet, ein Objekt langfristig wirtschaftlich zu führen."
        },
        {
          h: "Unser Angebot: ein verlässlicher Mieter über 20 Jahre",
          p: "Statt das Objekt selbst zu vermarkten, Privatmieter zu suchen oder es zu verkaufen, haben wir dem Eigentümer einen gewerblichen Mietvertrag über 10 Jahre Festlaufzeit plus 10 Jahre Verlängerungsoption angeboten — als LUXOMES GmbH. Er bekommt eine vertraglich zugesicherte Monatsmiete, pünktlich zum Ersten, unabhängig von Belegung oder Saison. Setup, Möblierung, Vermarktung, Gäste-Operations und Pflege übernehmen wir — auf eigene Kosten und eigenes Risiko. Kein Mieterausfall, kein Leerstand, keine Kommunikation mit Gästen. Ein einziger Vertragspartner, klare Konditionen, planbare Cashflows — das macht das Objekt für Banken finanzierbar und für den Eigentümer mental entlastend."
        },
        {
          h: "Wie wir die Bauphase begleitet haben",
          p: "Sobald die Konditionen abgestimmt waren, sind wir parallel zur Bauplanung eingestiegen. Wir haben mitentschieden, in welchem Verhältnis welche Apartment-Kategorien entstehen sollen, wie die Grundrisse für eine optimale Buchungsperformance geschnitten werden müssen und welche technische Infrastruktur das Gebäude braucht, um später effizient betreibbar zu sein. Wo der Eigentümer eine architektonische Entscheidung treffen musste, hat er nicht im Bauch gewählt, sondern auf Basis tatsächlicher Belegungsdaten aus unserem Bestand.",
          media: {
            type: "gallery",
            images: [
              { src: "/assets/blog/vilshofen/begleitet-raw-shell.jpg", caption: { de: "Rohzustand der Bestandsflächen — Putzbruch, blanke Versorgungsleitungen, alte Bodenkacheln.", en: "Raw state of the existing space — chipped plaster, exposed services, old floor tiles." } },
              { src: "/assets/blog/vilshofen/begleitet-staircase-build.jpg", caption: { de: "Neue tragende Stahlkonstruktion im Innenhof — der bauliche Eingriff, der die Umnutzung erst möglich gemacht hat.", en: "New load-bearing steel structure in the courtyard — the structural intervention that made the conversion possible." } },
              { src: "/assets/blog/vilshofen/during-inspection.jpg", caption: { de: "Vor-Ort-Begehung während der Innenausbauphase — Apartment-Mix und Layout in Echtzeit überprüft.", en: "On-site walkthrough during fit-out — unit mix and layout reviewed in real time." } },
              { src: "/assets/blog/vilshofen/begleitet-outdoor-inspection.jpg", position: "center 80%", caption: { de: "Begehung der neuen Außenerschließung — letzte Abstimmungen vor der Einrichtung.", en: "Walkthrough of the new exterior access — last alignments before fit-out begins." } },
            ],
          },
        },
        {
          h: "Das Ergebnis",
          p: "Aus der leerstehenden Bestandsfläche sind 9 Einheiten in 4 Kategorien entstanden: 1× Penthouse (120 m², Donaublick), 2× 3-Zimmer-Apartments mit Stadtblick (95 m²), 2× 2-Zimmer-Apartments (55 m²) und 4× Studios (32 m²) — exakt der Mix, von dem unsere Erfahrungswerte sagten, dass er für diesen Standort die optimale Auslastung liefert. Self-Check-in, durchgängig hochwertige Möblierung, einheitliches Design — Gäste finden bei jedem unserer Apartments die gleiche Qualität wieder. Seit der Eröffnung läuft der Standort verlässlich, der Eigentümer bekommt seine vertraglich zugesicherte Miete monatlich pünktlich überwiesen.",
          media: {
            type: "tripleStage",
            comparisons: [
              {
                title: { de: "Vergleich 1 — Wohnraum (gleicher Winkel, drei Zeitpunkte)", en: "Comparison 1 — Living space (same angle, three points in time)" },
                stages: [
                  { src: "/assets/blog/vilshofen/compare-room1-stage1-rohbau.jpg", label: { de: "Rohbau", en: "Shell" } },
                  { src: "/assets/blog/vilshofen/compare-room1-stage2-renovated.jpg", label: { de: "Renoviert", en: "Renovated" } },
                  { src: "/assets/blog/vilshofen/compare-room1-stage3-furnished.jpg", label: { de: "Möbliert & vermietet", en: "Furnished & let" } },
                ],
                caption: { de: "Vom Rohbau über den fertigen Innenausbau bis zum vermieteten Apartment — gleicher Raum, gleicher Winkel.", en: "From shell through finished build-out to a let apartment — same room, same angle." },
              },
              {
                title: { de: "Vergleich 2 — Badezimmer", en: "Comparison 2 — Bathroom" },
                stages: [
                  { src: "/assets/blog/vilshofen/compare-bath-stage1-rohbau.jpg", label: { de: "Rohbau", en: "Shell" } },
                  { src: "/assets/blog/vilshofen/compare-bath-stage2-laying.jpg", label: { de: "Bauphase", en: "Build" } },
                  { src: "/assets/blog/vilshofen/compare-bath-stage3-furnished.jpg", label: { de: "Möbliert & vermietet", en: "Furnished & let" } },
                ],
                caption: { de: "Vom unverkleideten Bestand über die Fliesen-Verlegephase bis zum eingerichteten Gäste-Bad.", en: "From the bare existing shell, through the tile-laying phase, to a fully-fitted guest bathroom." },
              },
              {
                title: { de: "Vergleich 3 — Studio Apartment", en: "Comparison 3 — Studio apartment" },
                stages: [
                  { src: "/assets/blog/vilshofen/compare-studio-stage1-rohbau.jpg", label: { de: "Rohbau", en: "Shell" } },
                  { src: "/assets/blog/vilshofen/compare-studio-stage2-build.jpg", label: { de: "Bauphase", en: "Build" } },
                  { src: "/assets/blog/vilshofen/compare-studio-stage3-furnished.jpg", label: { de: "Möbliert & vermietet", en: "Furnished & let" } },
                ],
                caption: { de: "Vom kahlen Bestand mit Baumaterial über das Möbel-Setup bis zum buchungsfertigen Studio.", en: "From a bare shell with building materials, through furniture setup, to a booking-ready studio." },
              },
            ],
          },
        },
        {
          h: "Was es für die Stadt — und den Eigentümer — bedeutet hat",
          p: "Vilshofen verfügt nun erstmals über eine professionelle Aparthotel-Infrastruktur, die für Aufenthalte von einer Nacht bis zu mehreren Wochen geeignet ist. Wir bekommen regelmäßige Anfragen vom örtlichen Tourismusverband, von Unternehmen, die Schulungen ausrichten, sowie von Hochzeitsgesellschaften, die ihre Gäste an einem Ort unterbringen möchten. Im ersten Quartal lagen wir bei 71% Auslastung — deutlich über unserer ursprünglich konservativen Prognose. Für den Eigentümer ist die wichtigste Zahl aber eine andere: 100% Mietzahlungs-Quote über die gesamte Vertragslaufzeit. Auslastungs-Schwankungen tragen wir, nicht er."
        },
        {
          h: "Was das für andere Eigentümer und Investoren bedeutet",
          p: "Leerstehende oder schwer vermietbare Bestandsimmobilien — Pensionen, Mehrfamilienhäuser, alte Gewerbeflächen — sind oft mehr wert, als ihre aktuelle Nutzung vermuten lässt. Was fehlt, ist meistens kein Käufer, sondern ein verlässlicher Betreiber, der langfristig mietet und dem Eigentümer das operative Risiko abnimmt. Genau diese Lücke füllen wir. Für Bauträger und Developer kommen wir schon in der Planungsphase dazu und sichern den späteren Mietvertrag mit einer Letter of Intent ab — Banken und Investoren schätzen diese Planungssicherheit. Für Bestandshalter übernehmen wir bestehende Objekte mit Auf- oder Umbau, soweit nötig — auf unsere Kosten."
        },
        {
          h: "Lass uns über Dein Objekt sprechen",
          p: "Wenn Du als Eigentümer oder Investor ein Objekt hast, das mehr abwerfen sollte — leerstehende Pension, untervermietetes Mehrfamilienhaus, Gewerbefläche mit Umnutzungspotenzial — und Dir einen verlässlichen, langfristigen Mieter wünschst, der das gesamte operative Risiko übernimmt: sprich uns an. 30 Minuten, unverbindlich, vertraulich. Am Ende weißt Du, ob ein LUXOMES Master-Lease für Dein Objekt passt und in welcher Größenordnung. Und wenn Du gerade ein Neubau- oder Sanierungsprojekt planst — je früher wir an Bord sind, desto besser passt das fertige Objekt zum späteren Betrieb."
        }
      ],
      en: [
        {
          h: "Starting point",
          p: "Vilshofen an der Donau, a Lower-Bavarian town of about 17,000, sits scenically along the Danube cycle route, between Passau and Deggendorf, with strong road access to Ingolstadt's Audi corridor and the local Schaeffler plant. Yet there was no proper accommodation infrastructure for short stays. The existing small guesthouses catered primarily to day-trippers or served a very limited segment — many booking inquiries had to be redirected to Passau or Deggendorf."
        },
        {
          h: "The property",
          p: "In the centre of Vilshofen, an old warehouse had stood empty for years — last commercially used a long time ago, never used for residential purposes. The owner was looking for an economically viable repurposing of the building, as pure storage space was no longer in demand in this location and ongoing maintenance costs could not be justified without a usage concept.",
          media: {
            type: "image",
            src: "/assets/blog/vilshofen/objekt-hero.jpg",
            caption: {
              de: "Der Innenhof des Bestandsgebäudes — keine Erschließung der oberen Stockwerke, algenbewachsene Wände, kein Wohnkonzept.",
              en: "The inner courtyard of the existing building — no access to the upper floors, algae-stained walls, no residential concept.",
            },
          },
        },
        {
          h: "What we brought: an experienced operator",
          p: "We're not a consultant. We're not an architect. We're a hospitality company that has been operating apartments since 2020 — today over 40 units across four cities in the DACH region, with an average occupancy of 75–85% and a dedicated operations team. We brought that experience into the Vilshofen project from day one: which unit mix actually books, which floor plans drive strong reviews, which details guests really expect — and most importantly, what it takes to run an asset profitably over the long term."
        },
        {
          h: "Our offer: a reliable tenant over 20 years",
          p: "Instead of marketing the asset himself, hunting for private tenants or selling it, we offered the owner a commercial lease with a 10-year fixed term plus a 10-year extension option — as LUXOMES GmbH. He gets a contractually guaranteed monthly rent, on the 1st of every month, regardless of occupancy or season. Setup, furnishing, marketing, guest operations and upkeep are on us — at our cost and risk. No tenant default, no vacancy, no guest communication. A single counterparty, clear terms, predictable cashflows — bankable for financing and mentally light for the owner."
        },
        {
          h: "How we accompanied the construction phase",
          p: "As soon as terms were aligned, we joined the build-planning process in parallel. We co-decided which mix of apartment categories the asset should hold, how floor plans needed to be cut for optimal booking performance, and what technical infrastructure the building needed to be operable efficiently later. Wherever the owner faced an architectural decision, he didn't have to guess — he chose based on actual occupancy data from our portfolio.",
          media: {
            type: "gallery",
            images: [
              { src: "/assets/blog/vilshofen/begleitet-raw-shell.jpg", caption: { de: "Rohzustand der Bestandsflächen — Putzbruch, blanke Versorgungsleitungen, alte Bodenkacheln.", en: "Raw state of the existing space — chipped plaster, exposed services, old floor tiles." } },
              { src: "/assets/blog/vilshofen/begleitet-staircase-build.jpg", caption: { de: "Neue tragende Stahlkonstruktion im Innenhof — der bauliche Eingriff, der die Umnutzung erst möglich gemacht hat.", en: "New load-bearing steel structure in the courtyard — the structural intervention that made the conversion possible." } },
              { src: "/assets/blog/vilshofen/during-inspection.jpg", caption: { de: "Vor-Ort-Begehung während der Innenausbauphase — Apartment-Mix und Layout in Echtzeit überprüft.", en: "On-site walkthrough during fit-out — unit mix and layout reviewed in real time." } },
              { src: "/assets/blog/vilshofen/begleitet-outdoor-inspection.jpg", position: "center 80%", caption: { de: "Begehung der neuen Außenerschließung — letzte Abstimmungen vor der Einrichtung.", en: "Walkthrough of the new exterior access — last alignments before fit-out begins." } },
            ],
          },
        },
        {
          h: "The result",
          p: "From the empty existing footprint, 9 units across 4 categories emerged: 1× penthouse (120 sqm, Danube view), 2× 3-room apartments with city view (95 sqm), 2× 2-room apartments (55 sqm), and 4× studios (32 sqm) — exactly the mix our experience said would maximise occupancy for this location. Self check-in throughout, premium furnishing across all units, a consistent design language — guests find the same level of quality across our portfolio. Since opening, the location runs reliably, and the owner receives his contractually guaranteed rent every month on time.",
          media: {
            type: "tripleStage",
            comparisons: [
              {
                title: { de: "Vergleich 1 — Wohnraum (gleicher Winkel, drei Zeitpunkte)", en: "Comparison 1 — Living space (same angle, three points in time)" },
                stages: [
                  { src: "/assets/blog/vilshofen/compare-room1-stage1-rohbau.jpg", label: { de: "Rohbau", en: "Shell" } },
                  { src: "/assets/blog/vilshofen/compare-room1-stage2-renovated.jpg", label: { de: "Renoviert", en: "Renovated" } },
                  { src: "/assets/blog/vilshofen/compare-room1-stage3-furnished.jpg", label: { de: "Möbliert & vermietet", en: "Furnished & let" } },
                ],
                caption: { de: "Vom Rohbau über den fertigen Innenausbau bis zum vermieteten Apartment — gleicher Raum, gleicher Winkel.", en: "From shell through finished build-out to a let apartment — same room, same angle." },
              },
              {
                title: { de: "Vergleich 2 — Badezimmer", en: "Comparison 2 — Bathroom" },
                stages: [
                  { src: "/assets/blog/vilshofen/compare-bath-stage1-rohbau.jpg", label: { de: "Rohbau", en: "Shell" } },
                  { src: "/assets/blog/vilshofen/compare-bath-stage2-laying.jpg", label: { de: "Bauphase", en: "Build" } },
                  { src: "/assets/blog/vilshofen/compare-bath-stage3-furnished.jpg", label: { de: "Möbliert & vermietet", en: "Furnished & let" } },
                ],
                caption: { de: "Vom unverkleideten Bestand über die Fliesen-Verlegephase bis zum eingerichteten Gäste-Bad.", en: "From the bare existing shell, through the tile-laying phase, to a fully-fitted guest bathroom." },
              },
              {
                title: { de: "Vergleich 3 — Studio Apartment", en: "Comparison 3 — Studio apartment" },
                stages: [
                  { src: "/assets/blog/vilshofen/compare-studio-stage1-rohbau.jpg", label: { de: "Rohbau", en: "Shell" } },
                  { src: "/assets/blog/vilshofen/compare-studio-stage2-build.jpg", label: { de: "Bauphase", en: "Build" } },
                  { src: "/assets/blog/vilshofen/compare-studio-stage3-furnished.jpg", label: { de: "Möbliert & vermietet", en: "Furnished & let" } },
                ],
                caption: { de: "Vom kahlen Bestand mit Baumaterial über das Möbel-Setup bis zum buchungsfertigen Studio.", en: "From a bare shell with building materials, through furniture setup, to a booking-ready studio." },
              },
            ],
          },
        },
        {
          h: "What it meant for the town — and for the owner",
          p: "Vilshofen now has, for the first time, professional aparthotel infrastructure suited for stays from one night to several weeks. We receive regular inquiries from the local tourist office, from companies running corporate training, and from wedding parties wanting to house their guests in one place. First quarter of operation: 71% occupancy — well above our originally conservative forecast. For the owner, the more important number is a different one: 100% rent-payment rate across the entire lease term. Occupancy swings are on us, not him."
        },
        {
          h: "What this means for other owners and investors",
          p: "Empty or hard-to-let existing properties — guesthouses, multi-unit buildings, dated commercial space — are often worth more than their current use suggests. What's usually missing is not a buyer, but a reliable operator who leases long-term and takes operational risk off the owner's shoulders. That's exactly the gap we fill. For developers we engage early in the planning phase and secure the future lease with a letter of intent — banks and investors love that kind of certainty. For owners with existing assets we take over, with conversion or fit-out where needed — at our own cost."
        },
        {
          h: "Let's talk about your property",
          p: "If you're an owner or investor with a property that should be performing better — empty guesthouse, under-let multi-unit building, commercial space with conversion potential — and you want a reliable, long-term tenant who takes the full operational risk: get in touch. 30 minutes, no obligation, confidential. By the end you know whether a LUXOMES master lease fits your asset and in what range. And if you're planning a new build or refurb — the earlier we're on board, the better the finished asset will match real operations later."
        }
      ]
    }
  }
];

window.BLOG_POSTS = BLOG_POSTS;


// ---------- Blog Index ----------
function BlogIndexPage({ lang, setPage }) {
  const sortedPosts = [...BLOG_POSTS].sort((a, b) => b.date.localeCompare(a.date));
  return (
    <>
      <section style={{ paddingTop: 72, paddingBottom: 48 }}>
        <div className="container">
          <div className="eyebrow">{lang === "de" ? "Stories aus der Praxis" : "Stories from the field"}</div>
          <h1 className="h-display" style={{ marginTop: 18, marginBottom: 22, fontSize: "clamp(40px, 5.4vw, 72px)" }}>
            {lang === "de" ? "LUXOMES Blog" : "LUXOMES Blog"}
          </h1>
          <p className="body-lg" style={{ maxWidth: 680 }}>
            {lang === "de"
              ? "Konkrete Case-Studies aus unserer Arbeit mit Eigentümern, Gastgebern und Investoren — was wir umgesetzt haben, welche Hebel funktioniert haben und welche Lektionen wir daraus ziehen."
              : "Concrete case studies from our work with owners, hosts and investors — what we built, which levers worked, and the lessons we draw from them."}
          </p>
        </div>
      </section>

      <section style={{ paddingTop: 0, paddingBottom: 96 }}>
        <div className="container">
          <div className="grid" style={{ gridTemplateColumns: "repeat(2, 1fr)", gap: 32 }}>
            {sortedPosts.map(post => (
              <BlogCard key={post.slug} post={post} lang={lang} setPage={setPage}/>
            ))}
          </div>
        </div>
      </section>
    </>
  );
}

function BlogCard({ post, lang, setPage }) {
  return (
    <a onClick={() => { setPage("blog-" + post.slug); window.scrollTo(0, 0); }}
       style={{ display: "block", cursor: "pointer", background: "var(--surface)", borderRadius: 8, overflow: "hidden", border: "1px solid var(--line)", transition: "transform .3s ease, box-shadow .3s ease" }}
       onMouseEnter={e => { e.currentTarget.style.transform = "translateY(-4px)"; e.currentTarget.style.boxShadow = "var(--shadow-lift)"; }}
       onMouseLeave={e => { e.currentTarget.style.transform = ""; e.currentTarget.style.boxShadow = ""; }}>
      <div className="ph" style={{ aspectRatio: "16/10", backgroundImage: `url(${post.image})` }}/>
      <div style={{ padding: "28px 30px 32px" }}>
        <div style={{ display: "flex", gap: 12, fontSize: 11, letterSpacing: "0.18em", textTransform: "uppercase", color: "var(--muted)", marginBottom: 14 }}>
          <span style={{ color: "var(--accent)", fontWeight: 600 }}>{post.category[lang]}</span>
          <span>·</span>
          <span>{new Date(post.date).toLocaleDateString(lang === "de" ? "de-DE" : "en-US", { year: "numeric", month: "long", day: "numeric" })}</span>
          <span>·</span>
          <span>{post.readMinutes} {lang === "de" ? "Min. Lesezeit" : "min read"}</span>
        </div>
        <h2 style={{ fontFamily: "var(--font-display)", fontSize: "clamp(22px, 1.8vw, 28px)", lineHeight: 1.2, marginBottom: 14, color: "var(--ink)" }}>
          {post.title[lang]}
        </h2>
        <p className="body-md" style={{ marginBottom: 20 }}>{post.excerpt[lang]}</p>
        <span className="btn-link">
          {lang === "de" ? "Weiterlesen" : "Read more"} <Icon name="arrow" size={14}/>
        </span>
      </div>
    </a>
  );
}


// ---------- Inline media for blog sections ----------
// Supports four kinds:
//   { type: "image", src, caption }
//   { type: "gallery", images: [{src, caption}, ...] }
//   { type: "beforeAfter", pairs: [{before, after, label}, ...] }
//   { type: "tripleStage", stages: [{src, label, ...}, ...]  } — same room from same angle across three time-points
function BlogMedia({ media, lang }) {
  if (!media) return null;

  if (media.type === "image") {
    return (
      <figure style={{ margin: "28px 0 8px" }}>
        <div className="ph" style={{ aspectRatio: "3/2", backgroundImage: `url(${media.src})`, borderRadius: 6 }}/>
        {media.caption && (
          <figcaption style={{ fontSize: 13, color: "var(--muted)", marginTop: 10, lineHeight: 1.5, fontStyle: "italic" }}>
            {media.caption[lang] || media.caption}
          </figcaption>
        )}
      </figure>
    );
  }

  if (media.type === "gallery") {
    return (
      <div style={{ margin: "28px 0 8px", display: "grid", gridTemplateColumns: "repeat(2, 1fr)", gap: 14 }}>
        {media.images.map((img, i) => (
          <figure key={i} style={{ margin: 0 }}>
            <div className="ph" style={{ aspectRatio: "4/3", backgroundImage: `url(${img.src})`, backgroundPosition: img.position || "center", borderRadius: 4 }}/>
            {img.caption && (
              <figcaption style={{ fontSize: 12, color: "var(--muted)", marginTop: 8, lineHeight: 1.45, fontStyle: "italic" }}>
                {img.caption[lang] || img.caption}
              </figcaption>
            )}
          </figure>
        ))}
      </div>
    );
  }

  if (media.type === "tripleStage") {
    // Same room from same angle across three time-points.
    // Stage colors: stage 1 (dark ink), stage 2 (muted), stage 3 (accent green).
    const stageColors = ["oklch(0 0 0 / 0.78)", "oklch(0.45 0.012 100 / 0.88)", "var(--accent)"];
    // Normalise: support both `comparisons: [...]` (multiple) and the legacy single-comparison shape.
    const comparisons = media.comparisons || [{ title: media.title, stages: media.stages, caption: media.caption }];
    const renderOne = (cmp, key) => (
      <div key={key} style={{ margin: key === 0 ? "28px 0 0" : "36px 0 0" }}>
        {cmp.title && (
          <div style={{ fontSize: 12, letterSpacing: "0.18em", textTransform: "uppercase", color: "var(--accent)", fontWeight: 600, marginBottom: 14 }}>
            {cmp.title[lang] || cmp.title}
          </div>
        )}
        <div className="blog-triple-stage" style={{ display: "grid", gridTemplateColumns: "repeat(3, 1fr)", gap: 10, position: "relative" }}>
          {cmp.stages.map((stage, i) => (
            <figure key={i} style={{ margin: 0, position: "relative" }}>
              <div className="ph" style={{ aspectRatio: "4/3", backgroundImage: `url(${stage.src})`, borderRadius: 4 }}/>
              <div style={{
                position: "absolute", top: 10, left: 10,
                padding: "4px 10px",
                background: stageColors[i] || stageColors[stageColors.length - 1],
                color: i === 2 ? "var(--accent-ink, #fff)" : "#fff",
                fontSize: 10, letterSpacing: "0.15em", textTransform: "uppercase",
                fontWeight: 600, borderRadius: 2,
                display: "flex", alignItems: "center", gap: 6,
              }}>
                <span style={{ opacity: 0.85 }}>{String(i+1).padStart(2,"0")}</span>
                <span>{(stage.label && (stage.label[lang] || stage.label)) || (lang === "de" ? ["Rohbau","Renoviert","Möbliert"][i] : ["Shell","Renovated","Furnished"][i])}</span>
              </div>
            </figure>
          ))}
        </div>
        {cmp.caption && (
          <p style={{ fontSize: 13, color: "var(--muted)", marginTop: 12, lineHeight: 1.55, fontStyle: "italic" }}>
            {cmp.caption[lang] || cmp.caption}
          </p>
        )}
      </div>
    );
    return <div style={{ marginBottom: 8 }}>{comparisons.map(renderOne)}</div>;
  }

  if (media.type === "beforeAfter") {
    const t = lang === "de" ? { before: "Vorher", after: "Nachher" } : { before: "Before", after: "After" };
    return (
      <div style={{ margin: "28px 0 8px", display: "grid", gap: 24 }}>
        {media.pairs.map((pair, i) => (
          <div key={i}>
            {pair.label && (
              <div style={{ fontSize: 12, letterSpacing: "0.18em", textTransform: "uppercase", color: "var(--accent)", fontWeight: 600, marginBottom: 10 }}>
                {pair.label[lang] || pair.label}
              </div>
            )}
            <div style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 12 }}>
              <figure style={{ margin: 0, position: "relative" }}>
                <div className="ph" style={{ aspectRatio: "4/3", backgroundImage: `url(${pair.before})`, borderRadius: 4 }}/>
                <div style={{ position: "absolute", top: 10, left: 10, padding: "4px 10px", background: "oklch(0 0 0 / 0.7)", color: "#fff", fontSize: 10, letterSpacing: "0.15em", textTransform: "uppercase", fontWeight: 600, borderRadius: 2 }}>{t.before}</div>
              </figure>
              <figure style={{ margin: 0, position: "relative" }}>
                <div className="ph" style={{ aspectRatio: "4/3", backgroundImage: `url(${pair.after})`, borderRadius: 4 }}/>
                <div style={{ position: "absolute", top: 10, left: 10, padding: "4px 10px", background: "var(--accent)", color: "var(--accent-ink, #fff)", fontSize: 10, letterSpacing: "0.15em", textTransform: "uppercase", fontWeight: 600, borderRadius: 2 }}>{t.after}</div>
              </figure>
            </div>
          </div>
        ))}
      </div>
    );
  }

  return null;
}


// ---------- Blog Post Detail ----------
function BlogPostPage({ slug, lang, setPage }) {
  const post = BLOG_POSTS.find(p => p.slug === slug);
  if (!post) {
    return (
      <section style={{ padding: "120px 0" }}>
        <div className="container">
          <h1 className="h-xl">404 — {lang === "de" ? "Beitrag nicht gefunden" : "Post not found"}</h1>
          <p className="body-lg" style={{ marginTop: 16 }}>
            <a onClick={() => setPage("blog")} style={{ color: "var(--accent)", cursor: "pointer", borderBottom: "1px solid var(--accent)" }}>
              ← {lang === "de" ? "Zurück zum Blog" : "Back to blog"}
            </a>
          </p>
        </div>
      </section>
    );
  }

  const related = BLOG_POSTS.filter(p => p.slug !== slug).slice(0, 2);

  return (
    <>
      {/* Article header — aligned to article body column (760) for visual continuity */}
      <section style={{ paddingTop: 72, paddingBottom: 32 }}>
        <div className="container" style={{ maxWidth: 760 }}>
          <button onClick={() => setPage("blog")} style={{ fontSize: 13, letterSpacing: "0.15em", textTransform: "uppercase", color: "var(--muted)", marginBottom: 24, padding: 0 }}>
            ← {lang === "de" ? "Zum Blog" : "To blog"}
          </button>
          <div style={{ display: "flex", gap: 12, fontSize: 11, letterSpacing: "0.18em", textTransform: "uppercase", color: "var(--muted)", marginBottom: 18 }}>
            <span style={{ color: "var(--accent)", fontWeight: 600 }}>{post.category[lang]}</span>
            <span>·</span>
            <span>{new Date(post.date).toLocaleDateString(lang === "de" ? "de-DE" : "en-US", { year: "numeric", month: "long", day: "numeric" })}</span>
            <span>·</span>
            <span>{post.readMinutes} {lang === "de" ? "Min." : "min"}</span>
          </div>
          <h1 className="h-display" style={{ fontSize: "clamp(36px, 5vw, 58px)", lineHeight: 1.1, marginBottom: 28 }}>
            {post.title[lang]}
          </h1>
          <p className="body-lg" style={{ maxWidth: 760, color: "var(--ink-soft)" }}>{post.excerpt[lang]}</p>
        </div>
      </section>

      {/* Hero image — 16:9 cover, balanced crop */}
      <section style={{ paddingTop: 16, paddingBottom: 64 }}>
        <div className="container">
          <div className="ph" style={{ aspectRatio: "16/9", backgroundImage: `url(${post.image})`, backgroundPosition: "center", borderRadius: 6 }}/>
        </div>
      </section>

      {/* Article body */}
      <section style={{ paddingTop: 32, paddingBottom: 96 }}>
        <div className="container">
          <article style={{ maxWidth: 760, margin: "0 auto" }}>
            {post.body[lang].map((section, i) => (
              <div key={i} style={{ marginBottom: 48 }}>
                <h2 style={{ fontFamily: "var(--font-display)", fontSize: "clamp(24px, 2.2vw, 32px)", marginBottom: 18, color: "var(--ink)" }}>
                  {section.h}
                </h2>
                <p style={{ fontSize: 17, lineHeight: 1.75, color: "var(--ink-soft)" }}>
                  {section.p}
                </p>
                {section.media && <BlogMedia media={section.media} lang={lang}/>}
              </div>
            ))}

            {/* CTA box */}
            <div style={{ marginTop: 64, padding: "40px 44px", background: "var(--surface)", borderLeft: "3px solid var(--accent)", borderRadius: 6 }}>
              <div className="eyebrow" style={{ marginBottom: 14 }}>
                {lang === "de" ? "Klingt nach Deinem Setup?" : "Sounds like your setup?"}
              </div>
              <div style={{ fontFamily: "var(--font-display)", fontSize: "clamp(22px, 2vw, 28px)", lineHeight: 1.25, marginBottom: 22 }}>
                {lang === "de"
                  ? "Erstanalyse Deines Betriebs — 30 Minuten, unverbindlich."
                  : "Free 30-minute analysis of your operation."}
              </div>
              <button onClick={() => { setPage("contact"); window.scrollTo(0, 0); }} className="btn btn-primary">
                {lang === "de" ? "Gespräch vereinbaren" : "Book a call"} <Icon name="arrow" size={16}/>
              </button>
            </div>
          </article>
        </div>
      </section>

      {/* Related posts */}
      {related.length > 0 && (
        <section style={{ paddingTop: 64, paddingBottom: 96, background: "var(--surface)" }}>
          <div className="container">
            <div className="eyebrow" style={{ marginBottom: 18 }}>
              {lang === "de" ? "Weitere Stories" : "More stories"}
            </div>
            <h2 className="h-xl" style={{ marginBottom: 40 }}>
              {lang === "de" ? "Vielleicht auch interessant" : "You might also like"}
            </h2>
            <div className="grid" style={{ gridTemplateColumns: "repeat(2, 1fr)", gap: 32 }}>
              {related.map(p => <BlogCard key={p.slug} post={p} lang={lang} setPage={setPage}/>)}
            </div>
          </div>
        </section>
      )}
    </>
  );
}

// ---------- Embeddable Case Study Section ----------
// Drop into any page (Verwaltung, Real Estate, …) to surface one specific blog post
// as a prominent, contextual case study right where the audience matches.
function CaseStudySection({ slug, lang, setPage, accent }) {
  const post = (window.BLOG_POSTS || []).find(p => p.slug === slug);
  if (!post) return null;

  const isDark = accent === "dark";
  const bgStyle = isDark
    ? { background: "var(--ink)", color: "oklch(0.95 0.005 110)" }
    : { background: "var(--surface)" };
  const labelColor = isDark ? "var(--accent)" : "var(--accent)";
  const bodyColor = isDark ? "oklch(0.85 0.005 110)" : "var(--ink-soft)";
  const titleColor = isDark ? "#fff" : "var(--ink)";

  // Pick 3 most-quoted metrics from the body — first 3 sections are usually setup, this scans for %/€/numbers
  const metricRegex = /(\d+[%€$+]\S*|\+\d+%|\d+×|\d+\s*(?:Monat|Stunden|Apartments|Nächten?))/g;
  const allText = post.body[lang].map(s => s.p).join(" ");
  const metrics = [...new Set([...(allText.match(metricRegex) || [])])].slice(0, 3);

  return (
    <section style={bgStyle}>
      <div className="container">
        <div style={{ display: "grid", gridTemplateColumns: "1.1fr 1fr", gap: 64, alignItems: "center" }}>
          {/* Left: Big image */}
          <div className="ph" style={{ aspectRatio: "4/5", backgroundImage: `url(${post.image})`, borderRadius: 6 }}/>

          {/* Right: Story */}
          <div>
            <div style={{ fontSize: 12, letterSpacing: "0.2em", textTransform: "uppercase", color: labelColor, fontWeight: 600, marginBottom: 14 }}>
              {lang === "de" ? "Case Study" : "Case study"} · {post.category[lang]}
            </div>
            <h2 className="h-xl" style={{ marginTop: 0, marginBottom: 24, color: titleColor, fontSize: "clamp(28px, 3vw, 44px)" }}>
              {post.title[lang]}
            </h2>
            <p style={{ fontSize: 17, lineHeight: 1.7, color: bodyColor, marginBottom: 32 }}>
              {post.excerpt[lang]}
            </p>

            {/* Metric chips */}
            {metrics.length > 0 && (
              <div style={{ display: "flex", flexWrap: "wrap", gap: 12, marginBottom: 32 }}>
                {metrics.map((m, i) => (
                  <div key={i} style={{
                    padding: "10px 18px",
                    background: isDark ? "oklch(1 0 0 / 0.06)" : "var(--bg)",
                    border: `1px solid ${isDark ? "oklch(1 0 0 / 0.15)" : "var(--line)"}`,
                    borderRadius: 999,
                    fontFamily: "var(--font-display)",
                    fontSize: 18,
                    color: labelColor,
                  }}>
                    {m}
                  </div>
                ))}
              </div>
            )}

            <button onClick={() => { setPage("blog-" + post.slug); window.scrollTo(0, 0); }}
                    className="btn btn-primary">
              {lang === "de" ? "Vollständige Case Study lesen" : "Read the full case study"} <Icon name="arrow" size={16}/>
            </button>
          </div>
        </div>
      </div>
    </section>
  );
}

Object.assign(window, { BlogIndexPage, BlogPostPage, BlogCard, CaseStudySection, BLOG_POSTS });
