Everything a visitor sees before signing in shares one layout (src/layouts/marketing): the floating header (Features, Templates, Pricing, Docs; Sign in / Get started or Open app) and the footer (Product, Resources with Status, Legal, the language menu, the copyright and the business behind the site: name, address and PSE registration number when an address is set).
Pages
| Page | What it is | Where the text lives |
|---|---|---|
/ | The front page (Front page) | src/views/(marketing) |
/pricing | Plans, currencies, comparison, FAQ (Billing) | i18n app.pricing |
/terms, /privacy, /refund | Terms of Service, Privacy Policy, Refund and Cancellation Policy | content/page/<locale>/<page>.mdx |
/contact | A contact form | i18n app.contact |
/status | What works right now: web app, database, background services, each engine (Operations) | i18n app.status |
/docs, /docs/<path> | These docs | the repo's docs/ folder |
The legal texts are drafts: have them checked by a lawyer before launch (they name you responsible for the rules of the platforms you automate, the 7-day first-payment refund, data kept, and your rights).
Content pages
content/page/<locale>/<slug>.mdx with frontmatter title, description, updatedAt, rendered by src/app/[locale]/(marketing)/[page] (MDX with GitHub tables; headings get anchors). Add a page: a file in each language and a footer link. <Business name="Operated by" address="Address" email="Email" tax="Tax ID" pse="PSE registration" /> lists the business details from Admin › Configuration › Site (the attributes are its labels; MDX takes strings only); Terms and Privacy end with it. An unknown slug shows the not-found page.
Docs
/docs renders docs/index.md, /docs/billing renders docs/billing/index.md, /docs/overview/setup renders docs/overview/setup.md. The first # heading is the title; links between docs (./x.md, ../y/index.md#part) become /docs/… links. Docs are in English.
Contact
Name, email, topic (sales, support, billing, partnership, other) and message, with the captcha when it's on and at most 5 messages an hour per IP. It's queued as the site.contact email to Site › Contact email (Admin › Configuration › Site); reply from your inbox to the sender's address in the email. Without a contact email set, the form says so.
Search engines
/sitemap.xml: home, pricing, contact, status, the legal pages and every doc, in each language with alternates./robots.txt: allows the public site, keeps out/app,/admin,/checkout,/account,/invite,/form,/authenticationand/api.- Pricing, contact and content pages set their own title, description and canonical.
Announcement and maintenance
Admin › Configuration › Site:
| Setting | Effect |
|---|---|
| Show an announcement + text, link, tone (info or warning), hide after | A banner at the bottom of every page (site and app) until the date; each visitor can dismiss it (remembered in their browser until the text changes) |
| Maintenance banner + message | A banner on every page that can't be dismissed |
| Block changes and runs | The app is read-only for everyone but administrators (every change is refused with the message) and new runs are refused, so campaigns wait for their next start |
Configuration keys: site.announcement { enabled, message, tone, link, expiresAt }, site.maintenance { enabled, message, isBlock }.