Static website built with Eleventy 3 (SSG) + Bootstrap 5.
- Eleventy 3 — static site generator, Nunjucks templates
- Bootstrap 5.3 — responsive UI (CDN, dark mode)
- Bootstrap Icons — icon set
- Client-side JS — download page pulls live data from GitHub API (no rebuild needed for new releases)
npm install
npm start # dev server on http://localhost:8080
npm run build # production build → _site/src/
├── _data/
│ ├── site.js ← global config (domain, GPG key, GitHub URLs)
│ ├── i18n.js ← i18n loader
│ └── i18n/
│ ├── en.json ← English UI strings
│ └── ru.json ← Russian UI strings
├── _includes/
│ ├── layouts/
│ │ ├── base.njk ← HTML shell (navbar, footer)
│ │ └── rpc.njk ← RPC docs layout (sidebar + content)
│ └── partials/
│ ├── nav.njk ← navigation
│ └── footer.njk ← footer
├── en/ ← English pages
│ ├── index.njk
│ ├── about.njk
│ ├── download.njk
│ ├── resources.njk
│ ├── blog/
│ └── development/
│ └── rpc/ ← one .njk file per RPC method
└── ru/ ← Russian pages (same structure)
static/
├── css/custom.css
├── js/download.js ← GitHub API, XSS-safe
├── js/rpc-sidebar.js ← accordion + search
└── img/logo.svg
Create src/en/blog/my-post.md:
---
layout: layouts/base.njk
locale: en
title: "My Post Title"
summary: "Short summary shown on index"
date: 2026-01-01
permalink: /en/blog/my-post/
---
Post content here (Markdown).Create src/en/development/rpc/methodname.njk:
---
layout: layouts/rpc.njk
locale: en
permalink: /en/development/rpc/methodname/
pageTitle: "methodname — RPC"
rpc_category: Blockchain
title: methodname
---The sidebar auto-generates from the collection — no manual edits needed.
Edit src/_data/site.js — one file, reflected everywhere.
Edit src/_data/i18n/en.json or ru.json — all pages share these strings.
Cloudflare Pages:
- Build command:
npm run build - Output dir:
_site - Security headers:
_headers(already in repo root, auto-picked up)
GitHub Pages:
- Build command:
npm run build - Output dir:
_site - Or use GitHub Actions workflow (add
.github/workflows/deploy.yml)