# Website and branding — local owner guide

Version 0.19 adds the optional preferred-date and bounded private-photo fields to the public contact form. See [Enquiry date and photos](ENQUIRY-DATE-AND-PHOTOS.md) for supported formats, privacy, retry behaviour and actual saved/reopened evidence. Broader website/gallery and device parity remain open.

Version 0.18 lets each fictional business personalise its pages, services, navigation, photos and business details. Use invented text and authorised neutral test images. **Save draft → Preview saved draft → Publish locally** is the normal sequence. Publishing changes only this local demo.

The bounded owner-to-visitor workflow has now been checked in the actual browser, including save/reopen, unpublished preview, publication, two distinct enquiries, conflict recovery and history-to-draft restoration. See the [tested walkthrough](WEBSITE-WORKFLOW-WALKTHROUGH.md). Broader gallery, phone and accessibility checks remain; no browser handoff is pending.

## Make the business your own

1. Sign in to the intended fictional business and open **Website → Business**.
2. Enter its name, service area, public email, phone and optional address. Add a logo and choose main/accent colours. Use a PNG, JPEG or WebP under 2 MB; images are converted to a bounded PNG without source metadata.
3. Add optional footer text and the message shown after an enquiry is saved. The local-demo/no-email notice remains visible.
4. Save the draft. Preview it, then choose **Publish locally**. The workspace uses the published name, logo and colour. Sign-in credentials and the business's fixed demo URL stay unchanged.

Draft changes do not silently update the public site or documents. Existing five-page sites, their distinct drafts and publication history upgrade without losing their previous text, services or images.

## Pages, sections and menus

In **Pages**, select a page, edit its title/menu label and choose whether it belongs in the main menu or footer. **Move up / Move down** changes page and menu order. Home and Contact remain available so the enquiry journey has a reliable destination.

Add a custom page when needed. It starts **unpublished**. Page URLs use lowercase letters, numbers and single hyphens, up to 64 characters. Home uses the site root; Contact keeps `/contact`; the original Services index keeps `/services` in the editor. App paths such as `api`, `admin`, `workspace`, `portal`, `preview`, `site`, `assets` and `documents` cannot be custom website URLs. URLs must be unique. Changing or removing a page does not create a redirect from its previous address.

Two visibility choices mean different things:

- **Page is available after publishing:** when switched off, that page and its content are private after the next publication.
- **Show in main menu / footer:** controls navigation only. A visible page left out of the menus is still available at its URL.

Open a section to edit it. Supported sections are a homepage introduction, business story, heading/introduction, text, photograph, service cards, shared photo gallery, contact/enquiry, call to action and questions/answers. Add, reorder, hide or remove sections. The Contact page must retain an enabled contact section.

The homepage introduction and business-story sections use the existing homepage/story fields, preserving the earlier site. Additional heading/text sections have their own text. Text is displayed as written with line breaks. HTML, scripts, arbitrary CSS and embedded widgets are not executed.

For a button, enter both its label and destination. Use a local page path such as `/contact`, `/about` or `/services/shelving`. External destinations must be HTTPS and open separately. Unsafe schemes, app paths, login details, custom ports and encoded/control characters are rejected. Saving a draft can retain an unfinished internal link, but publishing is blocked until each visible button points to an available page/service.

**Preview this saved page** also lets the owner inspect an unpublished page. It requires the correct owner's session. Signing out or changing that session clears the private preview; valid access checks retain its loaded saved content. Enquiries are disabled in every draft preview.

## Services and photos

In **Services**, add or select a service, give it a unique URL, a short card description and optional longer text. Add a photograph and descriptive alternative text, metadata and further sections. Reorder the service list or leave a service unpublished. Each visible service receives its own `/services/service-name` route. Service-card sections and the footer use the published service order. The service's **Ask about this service** button carries its exact published service slug to Contact and prefills the current title. Visitors can edit that wording. Unknown or unpublished service queries do not provide a prefill. After success, **Try another enquiry** clears contact/message fields but retains that service; it creates a new enquiry rather than linking a customer by matching text.

In **Photos**, add authorised pictures to the shared gallery, write captions and image descriptions, change their order or hide them. A gallery section on an available page/service displays the visible photos. A photograph is publicly retrievable only while the current publication uses it; hidden pages/sections/services/photos do not expose their private image IDs through public content.

Uploads remain in the owner's private library. Removing an image from a draft does not delete it from old publications or document snapshots. A later storage-cleanup workflow must account for those references. There are no copied SHS customer photos, testimonials or automatic external image downloads.

The current limits are 30 pages, 30 services, 20 sections per page, 12 extra sections per service and 60 shared gallery photos. This is a structured editor with one maintained layout; gallery project collections, before/after sets and reviewed job-photo promotion have a separate implementation and [photo guide](PHOTOS-AND-GALLERIES.md), with their wider browser journey still pending. Multiple themes and richer text formatting remain separate work.

## Search and social previews

Each page/service can have a title, short description, social image and sitemap exclusion. The Business panel supplies fallback title/description/image settings; its sitemap exclusion applies to the whole site. Blank page titles fall back to the page/business name. Blank descriptions use the site fallback or available introduction. Owned images are used for social previews; no external preview service is contacted.

Public page HTML includes escaped title, description, canonical and social tags before JavaScript runs. Available page/service routes are listed at `/site/business-slug/sitemap.xml`, excluding items marked out of the sitemap. Missing or unpublished pages return a real 404 with the business's normal page-not-found view and safe generic metadata; private draft titles and descriptions are not used. Links use the current permitted local host, never an SHS production domain or forwarded external host.

**All local pages remain noindex/nofollow**, and `robots.txt` disallows indexing. These controls suit a private demonstration; they do not establish a production search setup. Full server rendering of page bodies, structured data, crawler previews and production origin/domain configuration remain unverified or unimplemented.

Privacy, Terms and Cookies buttons add unpublished placeholders for the owner's own reviewed text. No legal wording, registration, consent policy or compliance claim is supplied for another business. No tracking, analytics, map or third-party embed is installed. A future integration may require a separate policy and consent decision.

## Document wording and historical identity

**Document wording** supports optional owner-provided company/VAT registration identifiers, footer text and payment terms. Unknown values stay blank. The prototype does not verify registration, select VAT rates, collect payments or establish compliant invoice wording. Saved owner-provided payment instructions are covered by the [portal and PDF guide](PORTAL-AND-PDF-GUIDE.md); real payment collection and production wording remain separate work.

Publishing applies this identity and wording to newly created document snapshots. Existing documents, including existing drafts, retain their saved identity. Invoices converted from an accepted quote retain that quote's business snapshot. Later logo changes do not rewrite older documents: an authorised customer can still see the logo saved with their own document even when it is no longer a public website image.

Restoring and publishing an earlier website publication also restores its business details and document defaults for future documents. Existing quotes, invoices, receipts and balances remain unchanged.

## Save, resolve conflicts and restore

Save before previewing or publishing. The editor distinguishes unsaved changes from the saved draft. Publishing is disabled while edits are unsaved. Leaving the editor warns about unsaved work; text is not stored as a durable offline draft. The tested Website leave dialog blocks background controls and preserves text when Keep editing is chosen. A same-origin sign-out in another window clears private owner content, including unsaved edits.

If another window has saved a newer version, keep your edits until you decide what to do. **Reload saved draft** offers a deliberate keep/discard choice. Review the latest saved content before retrying. A successful save followed by a failed reload blocks further changes until reload succeeds. Transport retries retain their operation ID so publication/history is not duplicated.

**History** lists earlier publications and recent website actions. Restore copies a selected publication into the saved draft only. Preview it before publishing. Saves, publication and restoration use version checks, transaction boundaries and a per-business audit.

## Upgrade, recovery and remaining checks

Version 0.18 retains recovery **format 11** and strictly supports pinned formats **1–10**. Its existing schema marker remains 0.14.0; this checkpoint adds no schema or dependency change. Older website JSON is upgraded inside a fresh restored copy; unknown schemas/content versions and unsafe content remain rejected. Keep the matching old code and a pre-upgrade snapshot. Never open a migrated folder with older code or downgrade it in place. See [the recovery guide](BACKUP-AND-RECOVERY.md).

The complete regression suite passes, including both-business loss/recovery with different draft/public sites, hidden images and sealed document branding. See [verification](VERIFICATION.md). The actual v0.18 browser-created website, two enquiries, separate customer records, assets and publication history also survived fresh recovery on this Mac. Restored access checks used test APIs, not a restored browser. Remaining checks include broader layouts, gallery/photo permission journeys, printing, phone/PWA use and a second machine. Dedicated visitor preferred-date and photo-upload fields from the original SHS enquiry page remain missing. Website editing does not create subscribers, staff memberships, roles, real domains, subscriptions or onboarding videos. The [full register](FULL-PARITY-REGISTER.md) retains those requirements and all other SHS workflows.
