Canonical public site: https://getsillage.github.io/
Source repository: getsillage/getsillage.github.io
This is the product showcase site for Sillage — a self-hosted, single-user space for private records, history review, and AI answers grounded in your own notes.
This repository is separate from the product monorepo. Documentation, releases, engineering governance (make check, constitution, CI), and the application itself live in the main project (sillage). Keep the public one-line product description and “no multi-user / no official hosting” claims aligned with the monorepo READMEs.
- Single-page product landing (English / Simplified Chinese)
- Light and dark themes
- SEO: Open Graph, Twitter cards, JSON-LD, robots.txt, sitemap
- Hash-based Content Security Policy, security headers, and HTML cache controls
- Latest release tag pulled from GitHub for the Docker quick start
- Static build suitable for Cloudflare Pages, GitHub Pages, Netlify, etc.
- Vite + React + TypeScript
- Tailwind CSS v4
- Node.js 20+
npm install
npm run devmake check # install, audit, lint, typecheck, tests, build, docs, Actions pins
make check-web
make check-docs
make check-actionsCI runs make check on pull requests and main. The gate includes component, interaction, accessibility, release-fallback, and post-build security/SEO tests. The GitHub Pages workflow runs the same gate before uploading a deployable artifact. Third-party Actions are pinned to immutable commit SHAs, dependency lifecycle scripts are deny-by-default, and Dependabot checks npm plus GitHub Actions weekly.
Optional local env (see .env.example):
cp .env.example .env
# set VITE_SITE_URL=https://your.domainVITE_SITE_URL=https://your.domain npm run build
npm run previewOutput is written to dist/. The post-build step rewrites robots.txt / sitemap.xml, injects absolute canonical / OG URLs when VITE_SITE_URL is set, generates a base-aware 404.html, and applies a CSP whose hashes match the final inline bootstrap scripts. Production jobs may set REQUIRE_SITE_URL=1 to reject missing, non-HTTPS, or base-mismatched public URLs.
- Use the organization Pages repository name
getsillage.github.io. - Settings → Pages → Source: GitHub Actions.
- The default public URL is
https://getsillage.github.io/; set the repository variableSITE_URLonly when using a custom domain. - Push to
main— workflow Deploy GitHub Pages builds and publishesdist/at the root path.
For a custom domain, add a CNAME file under public/ (or configure it in the Pages UI) and set SITE_URL to that domain.
| Setting | Value |
|---|---|
| Build command | npm run build |
| Build output | dist |
| Node version | 22 (or 20) |
| Env var | VITE_SITE_URL = your public origin |
public/_headers and public/_redirects are included for security headers and SPA fallback.
Upload the contents of dist/ after npm run build.
Copy tracks the main repository:
Update src/config/site.ts (defaultReleaseTag) if the pinned fallback release changes. The live site prefers GitHub’s latest release API.
MIT (aligned with Sillage).