{
  "_note": "One source for the things that were scattered across the site: support channels, social profiles, and the appearance defaults. Served as a static file so the plain-HTML pages and the React app read the SAME values — a phone number or an address must never be edited in two places again. Rules the renderers enforce: a channel with enabled:false is not rendered, and a social profile with no url is not rendered, so a dead link cannot appear by omission.",

  "support": {
    "hours": {
      "_note": "When a person answers Live support, in the team’s own time zone. Live support says Online now inside these hours and Offline now outside them, with when the team is back and the other routes (master prompt 26.15: never pretend to be live). days: 0 is Sunday. display is the line shown with it; while it says what the English here says, it is translated.",
      "timeZone": "Europe/Berlin",
      "days": [1, 2, 3, 4, 5, 6],
      "open": "09:00",
      "close": "20:00",
      "display": "Monday to Saturday, 9:00–20:00 Berlin time"
    },
    "askAi": {
      "enabled": true,
      "_note": "Exzi, the assistant, whose full page is /exzi.html. The corner assistant on every page is Exzi itself, so its live-support view does not list this; a renderer shows it only where its host asks (data-ask-ai).",
      "label": "Ask Exzi",
      "description": "Instant answers about courses, levels and prices",
      "url": "/exzi.html"
    },
    "whatsapp": {
      "enabled": true,
      "_note": "Digits only, country code first, no +, spaces or dashes — that is the wa.me path format. The previous value was 49000000000, a placeholder of nine zeros, so every visitor who clicked WhatsApp reached nothing.",
      "phone": "4915510400831",
      "display": "+49 1551 0400 831",
      "defaultMessage": "Hello Exzellent, I have a question about"
    },
    "email": {
      "enabled": true,
      "_note": "info@ is the canonical general address. hello@ was used by the support widget and several static pages while the contact page used info@; contact@ stays in the legal pages, where it is the registered address rather than a support channel.",
      "address": "info@exzellent.co",
      "subject": "Question about Exzellent"
    },
    "helpCenter": {
      "enabled": true,
      "label": "Book a call",
      "description": "15 minutes with a real teacher",
      "url": "/contact"
    }
  },

  "community": {
    "_note": "The Community button beside Exzi (master prompt §18, 26.12): a small selector, WhatsApp first, then Telegram, then the community on this site. A route with no url is not shown at all, so nothing ever points at a group that does not exist. Put the WhatsApp community's invite link (https://chat.whatsapp.com/...) and the Telegram link (https://t.me/...) here when they are ready; Discord stays hidden until a server exists.",
    "whatsapp": {
      "label": "WhatsApp community",
      "description": "Members and teachers, in one group",
      "url": null
    },
    "telegram": {
      "label": "Telegram",
      "description": "News and conversation on Telegram",
      "url": null
    },
    "discord": {
      "label": "Discord",
      "url": null,
      "_note": "No server yet; see socials.discord."
    },
    "site": {
      "label": "Exzellent community",
      "description": "Posts, groups and discussions on this site",
      "url": "/community"
    }
  },

  "tracker": {
    "_note": "The figures the team keeps, shown on the home page (master prompt §5, 26.7): leads as 'interested people' (people who asked about learning with us, never enrolled students), shown in the hero's live line under News until the website v2 hero band replaced that hero on 2026-10-27 and kept here for when the line comes back; b2b, projects, partnerships and integrations beside 'Who we work with'. The live ones (platform members, people on the site now) come from GET /api/stats and are not set here. A value written as a plain number (31295) is shown exactly, grouped the way the page's language groups it (31,295); any other figure ('20+', '3–5') is shown as written. show:false hides a figure without touching the page: the WhatsApp community has no place on the home page since 2026-10-09 (the owner: one line of live figures, no more), so it is kept here, switched off. asOf is the day the figures were last checked; a figure checked later carries its own. All six were confirmed by the owner on 2026-10-08; leads was updated to 31,295 by the owner on 2026-10-09.",
    "asOf": "2026-10-08",
    "metrics": {
      "leads": { "value": "31295", "show": true, "asOf": "2026-10-09" },
      "whatsapp": { "value": "100+", "show": false },
      "b2b": { "value": "20+", "show": true },
      "projects": { "value": "5", "show": true },
      "partnerships": { "value": "3–5", "show": true },
      "integrations": { "value": "15+", "show": true }
    }
  },

  "socials": [
    {
      "key": "instagram",
      "label": "Instagram",
      "url": "https://www.instagram.com/exzellent.co"
    },
    {
      "key": "linkedin",
      "label": "LinkedIn",
      "url": "https://www.linkedin.com/company/exzellent-co/"
    },
    {
      "key": "youtube",
      "label": "YouTube",
      "url": "https://www.youtube.com/@exzellentco"
    },
    {
      "key": "facebook",
      "label": "Facebook",
      "url": "https://www.facebook.com/profile.php?id=61575114642504",
      "_note": "Confirmed official by the site owner, 11 September 2026."
    },
    {
      "key": "tiktok",
      "label": "TikTok",
      "url": null,
      "_note": "No account yet. Null means the icon is not rendered at all, rather than rendered pointing at '#'."
    },
    {
      "key": "x",
      "label": "X",
      "url": "https://x.com/Exzellent_co",
      "_note": "Confirmed official by the site owner, 11 September 2026."
    },
    {
      "key": "discord",
      "label": "Discord",
      "url": null,
      "_note": "No server yet."
    }
  ],

  "company": {
    "_note": "Read by /about.html. team: the people and what they do, names and designations only (no photos on company pages); each entry is { \"name\", \"role\" }. The About page renders the list only when it has entries, so an empty list shows an honest note instead of an empty section. Add a person here only once they have agreed to be named.",
    "team": []
  },

  "appearance": {
    "_note": "Decorative background layers no longer run unless the visitor asks for them. The stored key is exz-fx; absent means off.",
    "effectsEnabledByDefault": false
  },

  "notifications": {
    "_note": "The header bell reads GET <endpoint> (with the signed-in session) and expects { data: [{ id, kind: offer|credits|course, title, body, at, link, read }] }. The backend has no notifications yet, so this is null and the panel says there are none. Set it once the endpoint exists; nothing else changes.",
    "endpoint": null
  }
}
