Chapter 23 — Public website builder
Module code: WEBSITE
Feature: website_editor
Home: /website/
Design detail is kept at
docs/TENANT_PUBLIC_WEBSITE.md.
23.1 What it is
The website builder gives your workspace a public home page at its own address — the same address staff sign in at, but showing your page to anyone who visits without signing in.
It is a content-block builder, not a free-form page designer. You choose a theme and stack a set of typed blocks. That constraint is deliberate: the result stays readable on a phone and consistent with your branding, without anyone needing design skills.
23.2 Screens
/website/ editor dashboard
/website/settings/ site settings
/website/theme/ choose a theme
/website/blocks/add/ add a block
/website/blocks/<id>/edit/ edit a block
/website/blocks/<id>/delete/ delete a block
/website/preview/ preview as a visitor
/website/publish/ publish
23.3 Settings
Screen: /website/settings/
| Setting | Effect |
|---|---|
| Site enabled | Whether the public page is reachable at all |
| Show sign-in button | Whether visitors see a link to the staff sign-in |
| Meta title | The browser tab title and the headline in search results |
| Meta description | The summary shown under it in search results |
| Contact email, phone, address | Shown on the contact block; fall back to the company record when blank |
| WhatsApp number | Adds a WhatsApp contact card |
| Social links | Facebook, Instagram and X appear as footer icons |
Fields left blank fall back to the company record (Chapter 3), so most sites need very little filled in here.
23.4 Choosing a theme
Screen: /website/theme/
Pick from the supplied themes. A theme sets the typography, colours and layout.
Switching a theme can offer to replace your existing blocks with that theme's starter content. Read the confirmation before accepting: it will discard what you have written.
23.5 Blocks
Blocks stack down the page in order. Seven types are available.
| Block | Use for |
|---|---|
| Hero | The banner at the top: headline, subheading and up to two buttons |
| Rich text | A body of formatted text |
| Features | A grid of items, each with an icon, a title and a description |
| Call to action band | A full-width strip with a message and a button |
| Contact | Email, phone, address, WhatsApp — drawn from settings |
| Image | A picture with an optional caption and an optional link |
| Custom HTML | Raw HTML, for embedding something the other blocks do not cover. Restricted — see 23.7. |
Adding a block
- Go to
/website/and choose Add block. - Choose the type.
- Fill in its fields. A question-mark icon beside a label explains what the field does and what format it expects.
- Set visible and the sequence.
- Save.
The features block
Each item has an icon, a title and a description. Add and remove items with the buttons — there is no need to write anything technical.
The icon picker shows a grid of icons to choose from, with a live preview. A text box below it accepts any icon name directly, for the cases the grid does not cover.
The image block
Upload the image, add a caption, and optionally make the whole block a link. Keep uploads to a sensible size — a photograph straight from a phone camera is far larger than a web page needs and will make your page slow.
Buttons and links
Button link fields accept three forms:
https://example.com/page a full address
/some/path a path inside this site
#section an anchor on this page
Anything else is rejected when you save. This is a safety check: a link field that accepted arbitrary content would be a way to run code in a visitor's browser.
23.6 Reordering, hiding and deleting
- Reorder by dragging blocks on the dashboard. The order saves immediately.
- Hide a block by clearing visible. It stays in the editor list and can be brought back — the right way to take something down temporarily.
- Delete removes it permanently.
23.7 Custom HTML — restricted
The Custom HTML block renders exactly what you type, unescaped, on a public page. Bad or malicious content there affects every visitor.
Only a superuser may create or edit a Custom HTML block. For anyone else the type does not appear in the menu, and an existing block of another type cannot be switched to HTML.
Use it for genuine embeds — a map, a video, a booking widget — from sources you trust, and prefer a normal block wherever one will do.
23.8 Preview and publish
/website/preview/ see it as a visitor would
/website/publish/ make it live
- Edit your blocks.
- Preview. Check it on a phone-sized window as well as a desktop one — most visitors will be on a phone.
- Publish.
Until published, visitors do not see the page. Staff visiting the address are taken to the dashboard as usual; the public page never gets in a signed-in user's way.
23.9 Permissions
Everything here is controlled by WEBSITE / website_editor:
| Right | Allows |
|---|---|
| View | Open the editor and see the content |
| Edit | Change settings, switch theme, reorder blocks, and publish |
| Create | Add blocks |
| Delete | Remove blocks |
Edit includes publishing. A read-only grant genuinely is read-only: it cannot save settings, switch theme, reorder, or push the site live.
Custom HTML additionally requires superuser, whatever the feature rights say.
23.10 Checklist before publishing
[ ] Meta title and description written — they are what search results show
[ ] Contact details correct
[ ] Every button link goes where it should
[ ] Images load and are not enormous
[ ] The page reads well at phone width
[ ] Social links point at the right accounts
[ ] Nothing internal or unfinished is left visible
23.11 Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Visitors see nothing | The site is not published, or is disabled in settings | Publish it; enable it |
| Settings will not save | View-only rights on website_editor |
Edit rights are required |
| Custom HTML is not offered | You are not a superuser | This is by design |
| A link is rejected on save | It is not a full address, a path, or an anchor | Use one of the three accepted forms |
| Switching theme lost the content | Theme switching can replace blocks with starter content | Rebuild the blocks; read the confirmation next time |
| An image does not appear | The upload failed, or the file is too large | Re-upload a smaller version |
| A hidden block still shows | Cached page | Reload; confirm visible is cleared and republish |
| The page is slow | Oversized images | Reduce them before uploading |