Federated Computer — Hugo Site
A Hugo template for the Federated Computer site, laid out like
nebius.com: a sticky dark navy top bar with dropdown
menus, a full-bleed navy hero (copy left, a visual right), then full-width
bands that alternate white and light grey inside a centered 1280px
container. Big, tight Inter headlines, rounded filled cards, a lime primary
button (#e0ff4f) and a violet accent (#614efa). Stats, the closing call
to action, and the footer return to navy. Copy still to be written is
filled with "lorem ipsum".
Requirements
- Hugo (extended version), recent enough to have
hugo.Data. Tested on v0.167.0.
Running it locally
hugo server
Then open http://localhost:1313/.
Building for production
hugo --minify
Output goes to public/.
How pages are built
Every page's content lives in its front matter as a sections: list —
each section has a type (e.g. hero, text, layers, stats, quote,
table, checklist, features, steps, faq, callout, founder,
diagram, final-cta, divider, paths, matrix, split, app-directory, pricing, savings) plus whatever fields that type needs.
layouts/partials/render-sections.html loops the list and hands each
section to its matching partial in layouts/partials/sections/.
This keeps content and layout separate: to change copy, edit the
content/*.md files; to change how a section type looks, edit the one
partial in layouts/partials/sections/.
Common section options
Any section can take:
id: "some-id"— anchor for links (e.g./start-now/#pricing). Without one, the id is made fromtoc,kicker, orheadline.
Sections alternate white and grey bands automatically (cards inside take
the opposite tone), so the older bordered, tinted, and dark options
are accepted but no longer change the look. stats always renders as a
navy band; final-cta always renders as the navy closing band. A text
section with a heading puts it on the left and the copy on the right; one
without a heading renders as a large statement.
Customer paths (Solutions)
The site speaks to four customer types, each with its own page under
content/solutions/, plus an overview with a side-by-side comparison:
| Page | Customer | Layers |
|---|---|---|
open-source-apps.md |
Wants open-source apps only | Core, Library |
apps-and-ai-development.md |
Wants the apps plus AI development | Core, Library, Data & Controls |
ai-for-your-apps.md |
Wants Federated AI on open-source apps they host themselves | Core, Data & Controls (Library: their own) |
full-stack.md |
Wants apps, AI development, and to run agents on Federated | All four |
Which layers a path uses is set with a fit map, e.g.
fit: { core: "yes", library: "own", sandbox: "no", controls: "yes" }.
States are yes (Included), own (Your own), and no (Add anytime).
Layer names, order, and links come from data/layers.yaml.
New section types:
paths— list of customer paths, each with its layer fit (home, Solutions).strip: truepins a four-layer strip above the list that lights up the hovered path's layers — and the rows of anylayerssection on the page (mouse devices only)matrix— capability-by-path comparison table; cells takeyes/own/noor free textsplit— two titled columns of short listsapp-directory— browsable app catalog;categories, each with anameand a list ofapps(name, optionaldescription, optionalurlwhich renders a "Learn more." link). Renders as collapsible<details>groups, no JS (Software Library)pricing— plan groups behind a CSS-only switch (e.g. "You host" / "We host"; up to four).groups, each with alabel, optionalid(so/pricing/#hostedopens that tab) andlede, plus any of:tiers(name,price,unit,note,intro,features),includes(headline,items,note),addons(headline,lede,itemsofname/price/unit/body),apps(headline,lede,itemsofname/category/body/price), andctas(Pricing)savings— a bar comparison (bars:name,amount,highlight) and a savings calculator (apps:name,cost,perSeat,selected; compared withfederatedAnnual) (Pricing)statsvalues that start with a number ("80%+", "100+") count up when scrolled into viewquotetakes onetext/cite, or several asitems. Withcards: true, items render as a two-column testimonial grid:text,name, optionalroleandphoto(initials show when there's no photo). Customer headshots live instatic/images/customers/(home page).savings:adds a compact savings calculator below the quotes: it picks the namedapps(and ticksselected) out of thesavingssection on the page atfrom(e.g./pricing), so app prices live in one place;morelinks to the full calculatorlogos— a logo wall.source: "apps"fills it fromdata/app_wall.yaml(home); otherwiseitemsofname+ optionalurlcards— a grid of rounded cards:itemswithtitle,body, optionallabel,image,link/linktext;visual: truedraws a gradient panel where there's no image;columns: 2or3fixes the gridnews— "What's new" cards:itemswithtag(Blog, Video, Event…),title,date,url, optionalimage(home; lorem ipsum for now)banner— an announcement plate:badge,kicker,headline,body,ctas(home; lorem ipsum for now)app-directoryitems can also takepage:— the app's own page on this siteheroacceptslog:— a list of lines (tag+text;think: truefor a greyed reasoning step with a spinner and a pause;done: trueto close the run) typed out in a fixed-height console window that scrolls like a terminal, as an agent's activity log (home page). Without JS or with reduced motion, all lines show at once.logTitlesets the window's title;logImageputs a photo behind the console in place of the blue field (home: Pikes Peak,static/images/hero-pikes-peak.jpg), andlogCaptionadds a small credit in its cornerheroacceptsfit:to show the layer panel under the actions (in place of the blue field);bars: falsedrops the field;compact: truemakes the field shorter. A photo set withlogImagesits behind the whole hero band
Every section type now renders kicker, headline, and an optional lede
through partials/sections/head.html.
App pages and legal pages
Some pages are long-form Markdown rather than a sections: list:
content/apps/*.md— one page per app, rendered bylayouts/apps/single.html. Front matter holds the facts (eyebrow,headline,dek,replaces,plans,price,projectUrl); each setsurl:to keep the old site's address (e.g./jitsi/). Screenshots live instatic/images/apps/.privacy-policy.mdandterms-and-conditions.mduselayout: "legal"(layouts/_default/legal.html), witheffective:for the date.
Site-wide links live in hugo.toml: params.demoUrl (the booking page),
params.supportUrl (the help portal), and the footer_social / footer_legal menus.
The app logo wall
The home page's logos section draws its tiles from data/app_wall.yaml
(name, url, optional icon). Icons are symbols in the sprite
static/images/app-icons.svg (from Simple Icons, CC0; DocuSeal from its own
repo). A tile without an icon shows its first letter.
Dropdown entries in the top bar can carry a one-line description:
[menu.product.params] desc = "..." in hugo.toml.
Adding a new page
- Create
content/your-page.mdwith asections:list in the front matter, following the patterns already incontent/*.md. - It will render through
layouts/_default/single.htmlautomatically, which just runsrender-sections.html. Add a link to it inhugo.toml's[[menu.main]](give it[menu.main.params] dropdown = "menu-name"to render a dropdown from another menu) (andfooter_*menus) if it should appear in nav. - If a page needs a layout the section system doesn't cover — like
sign-in.md, which uses a real<form>— setlayout: "your-layout"in its front matter and addlayouts/_default/your-layout.html.
Structure
content/
_index.md Home
product/
_index.md Product overview
federated-core.md
software-library.md
agent-sandbox.md
data-controls.md
solutions/
_index.md Solutions overview + comparison matrix
open-source-apps.md
apps-and-ai-development.md
ai-for-your-apps.md
full-stack.md
ai-privacy-advantage.md
pricing.md
start-now.md
about.md
sign-in.md
layouts/
_default/baseof.html Base HTML shell
_default/single.html Generic page (renders sections)
_default/sign-in.html Sign-in form page
index.html Home page (renders sections)
product/list.html Product overview (renders sections)
partials/
head.html, footer.html
header.html The top bar (nav with dropdowns, actions, mobile menu)
render-sections.html Dispatches each section to its partial
section-id.html Anchor id for each section
sections/*.html One partial per section type
static/
css/style.css The whole design system
hugo.toml Site config + nav/footer menus
Design notes
- Layout: a sticky top bar (
layouts/partials/header.html), thenmain, then the footer — all full width. Content sits in.wrap(max 1280px, centered). Below 1080px the nav folds into a Menu toggle. - Type: Inter (headlines and reading) and JetBrains Mono (small caps
labels and numbers), loaded from Google Fonts in
layouts/partials/head.html. - Color tokens are CSS custom properties at the top of
static/css/style.css(--navy-deep,--lime,--violet,--paper,--ink,--rule, etc.) — change the palette there and it cascades everywhere. Each section sets--section-bgand--surface(the card tone), which flip on alternating bands. - Buttons: CTA
style: primaryis the solid lime button (navy on white bands),ghostthe outlined one,texta violet link. A trailing→in a label is dropped; the arrow is drawn for you. - JS is optional. A small inline script in
baseof.htmlfades sections in and darkens the top bar on scroll. Without it everything still shows; the dropdowns are CSS (hover and focus), and the mobile menu, FAQ, and app directory use native<details>.