The public website for Nitamur Ad Caelum Ltd (NAC Limited), a UK holding company
backing operating businesses across five sectors. One hand-written page, no build step,
no framework — it opens straight from index.html and deploys unchanged to any static host.
/
├── index.html the page
├── assets/
│ ├── css/site.css tokens, chevron dividers, keyframes, motion
│ ├── js/site.data.js ← EDIT THIS: all group + subsidiary data
│ ├── js/site.js render, observers, motion, form (rarely needs edits)
│ ├── logo/ NAC logo pack (SVG)
│ ├── subsidiaries/ subsidiary logos (drop SVGs here)
│ └── social/og-image-1200x630.png
├── favicon.ico / favicon.svg / apple-touch-icon-180.png / icon-*.png
├── site.webmanifest
├── robots.txt / sitemap.xml
└── README.md
One rule that keeps the site maintainable: all content lives in
assets/js/site.data.js. The page renders itself from those
constants. You should almost never touch index.html or site.js to change what the site says.
-
Open
assets/js/site.data.js. -
Find the subsidiary object inside the
SUBSIDIARIESarray (each has anid). -
Edit its fields:
Field What it does nameBusiness name (heading + logo fallback). sectorMust match a SECTORSid— controls which block it appears in.taglineOne line under the name. descriptionThe paragraph. logoPath to its SVG in assets/subsidiaries/.capabilitiesArray of chips. Empty array = no chips. proofPointsArray of proof lines. Leave empty until you have real, confirmed figures — never invent one. status'operating'or'in development'— drives the badge.linkPublic URL, or nullif the site isn't live.regionsArray of regions — feeds the "Reach" section. -
Save and reload. No build, no restart.
Placeholders are deliberate. Any value left as null or written with [[ ... ]]
renders as a visibly unfinished, dashed placeholder — so an unconfirmed field can never be
shipped by accident. Replace the placeholder text with the real value to finish it.
Drop an SVG (or PNG) into assets/subsidiaries/ and point the subsidiary's logo field at it,
e.g. logo: 'assets/subsidiaries/zanith-chc.svg'. Supply a version that reads on the light
#F4F6F3 background. If the file is missing, the card automatically falls back to the
subsidiary name set in Sora 800 — the site still looks finished.
Add one object to the SUBSIDIARIES array in assets/js/site.data.js. Nothing else,
anywhere. The card, the nav, the "subsidiary of interest" form dropdown, the sitemap-worthy
anchor, and the JSON-LD subOrganization list all update themselves.
{
id: 'new-co', // unique slug
sector: 'software', // must match a SECTORS id
name: 'New Co',
tagline: 'What it does in a line',
description: 'A short paragraph.',
logo: 'assets/subsidiaries/new-co.svg',
accent: 'sage',
capabilities: ['One', 'Two'],
proofPoints: [], // keep empty until figures are confirmed
status: 'operating',
link: 'https://newco.example',
regions: ['England'],
}If the new business belongs to a brand-new sector, add a { id, label } to the SECTORS
array too (that array drives the section order, the nav and the progress rail).
The form is fully built. Until a key is added it validates normally but shows a clear "not yet connected" message instead of sending — it never fails silently.
-
Go to https://web3forms.com, enter the delivery email (
hello@NitamurAdCaelum.co.uk) and copy the free access key. -
Open
assets/js/site.data.jsand set:const WEB3FORMS_KEY = 'your-access-key-here';
-
Save and reload. Submissions now POST to Web3Forms and arrive by email. Success and failure states are handled for you.
No server, no backend, no account beyond the free Web3Forms signup.
The site is static — upload the whole folder as-is. Nothing to build.
- Push this folder to a GitHub repository.
- Settings → Pages → Build and deployment → Source: Deploy from a branch.
- Pick your branch and the
/ (root)folder. Save. - Your site publishes at
https://<user>.github.io/<repo>/. For the apex domain, add aCNAMEfile containingnitamuradcaelum.co.ukand set the DNS.
- Add new site → Deploy manually, then drag the project folder onto the drop zone (or connect the Git repo).
- Build command: none. Publish directory:
.(the root). - Add the custom domain under Domain settings.
- Create a project → Connect to Git (or Direct Upload the folder).
- Framework preset: None. Build command: empty. Build output directory:
/. - Save and deploy, then add the custom domain under Custom domains.
After deploying to a real domain, confirm the domain in
GROUP.domain(assets/js/site.data.js) and the absolute URLs inindex.html,robots.txtandsitemap.xmlmatch it — they currently assumehttps://nitamuradcaelum.co.uk.
Reach currently uses a typographic treatment of the four regions (Sora 600, uppercase,
0.22em tracking, chevron ticks), not country silhouettes. Accurate, projection-consistent
public-domain geometry could not be sourced and verified during the build, and a wrong-shaped
outline reads as a mistake to a government/NGO audience. To add real silhouettes later: drop
verified simplified paths (Natural Earth or Wikimedia public-domain SVGs) for England, South
Africa, Zimbabwe and Malawi into the Reach render in site.js, each normalised to its own
viewBox, forest fill on light / sage on dark, aria-hidden="true", with the region names kept
as real text for screen readers.
Note on England vs UK: the group operates in England, not the whole UK, so the label reads "England". If a subsidiary later trades UK-wide, update
REGIONSinsite.data.js.
Resolved so far: group founded (2014), regions (England, South Africa, Zimbabwe, Malawi),
and logos for Zanith CHC, CareBreak, CNote Solutions and Yimi Paper. 1920 VPT Ltd has been
removed; its Logistics slot is now a "Coming 2026" placeholder. Printing has no group subsidiary
— it is served by the partner Yimi Paper, which shows in the Printing sector as a muted
"Coming 2026" future-partner card. Partners are companies the group works with but does not own,
so they are kept out of the JSON-LD subOrganization list.
Still to confirm — these stay as null/placeholder until supplied:
- Web3Forms access key
- Logistics subsidiary — name and description (currently "Coming 2026")
- NGO / FCDO subsidiary — name
- Yimi Paper — public URL (
link) when available - Privacy policy — retention period and international-transfer details (
privacy.html) - The live domain (assumed
nitamuradcaelum.co.uk) - Whether Zanith CHC is a subsidiary or a partnership — wording depends on the answer
Partners live in the PARTNERS array in site.data.js — same shape as a subsidiary, plus a
status of 'future' or 'active', and a sector matching a SECTORS id so the card renders
inside the right sector block (a 'future' partner gets the muted "Coming 2026" treatment). Add
one object to show a new partner; partners never appear as group subsidiaries or in the JSON-LD.