Public site for interchouette.net: Gregory Roussac / Interchouette ITC.
- Angular 22 (standalone, signals, zoneless, OnPush, SCSS)
- Fonts / icons / motion via npm (
@fontsource/*,font-awesome,animate.css) built into the CSS bundle (no CDN links inindex.html) - Build-time prerender for public pages (see Pages)
- Per-route SEO: unique titles/descriptions, canonical, Open Graph / Twitter, JSON-LD
- URLs: no trailing slash (
/CV/→/CVon the static host) - Vitest (unit) · Playwright desktop / mobile / tablet (host Chrome; no browser download)
- Render Static Site (CDN; build on deploy)
Live site: https://interchouette.net/ MCP: https://mcp.interchouette.net/
| URL | Page |
|---|---|
| https://interchouette.net/ | Home |
| https://interchouette.net/news | News |
| https://interchouette.net/archive | News archive index |
| https://interchouette.net/archive/2026-W36 | Archived week (ISO week id) |
| https://interchouette.net/CV | CV (HTML + PDF) |
| https://interchouette.net/about | About |
| https://interchouette.net/privacy | Privacy Policy |
| https://interchouette.net/terms | Terms of Service |
| https://interchouette.net/login | Client Google sign-in |
| https://interchouette.net/account | Client account |
| https://interchouette.net/gis-signin | Google sign-in callback |
| https://interchouette.net/feed | News RSS feed |
| https://interchouette.net/rss.xml | News RSS |
| https://interchouette.net/atom.xml | News Atom |
Host redirect/rewrite rules for the static site live in www/public/_redirects (operator config, not duplicated here).
| Path | Role |
|---|---|
www/ |
Angular site (package.json, node_modules) |
mcp/ |
Interchouette MCP crate (interchouette-mcp); see mcp/README.md |
backend/ |
Website chat crate (interchouette-chat) |
db/ |
Committed SQLite (interchouette.db) for MCP |
cd www
npm ci
npm startcd www
npm run buildPublish directory for Render: www/dist/interchouette/browser
Node: 24.19.0 (or 22.22.3+ / 24.15.0+). See www/.node-version. On Render set NODE_VERSION=24.19.0, root directory / build command under www/, and clear build cache after changing it.
cd www
npm testFull local gate (same shape as GitHub Actions):
cd www
npm run ciCI (GitHub Actions on dev / PRs into dev): Prettier, npm audit --audit-level=high, production build + prerender, unit tests, and a static publish layout check (including MCP discovery files). Pin Node with www/.nvmrc (24.19.0). On push to dev after those steps succeed, CI calls the static-site Render deploy hook (RENDER_DEPLOY_HOOK_URL org secret). Keep Render Auto-Deploy Off so only that hook triggers production. A nightly workflow (04:00 Europe/Paris) calls the same hook so prerendered /news and /archive/* stay aligned with the API cache.
Chat API (api.interchouette.net): Render builds Docker from backend/Dockerfile (context .). Auto-Deploy Off; chat-ci.yml on dev calls RENDER_DEPLOY_HOOK_URL_API only when backend/** changes (not on db/news.db-only commits). Runtime archive sync commits db/news.db to dev via NEWS_GITHUB_TOKEN without redeploying the API.
Interchouette MCP: CI builds and pushes Hub image interchouette/interchouette-mcp (:dev, :latest); Render runs that image (not a repo build). Hook RENDER_DEPLOY_HOOK_URL_MCP after mcp/ / db/interchouette.db / Docker changes.
E2E: Playwright specs in www/e2e/ (npm run e2e from www/) with desktop, mobile (Pixel 7), and tablet (834×1194) projects via host Chrome. Do not run playwright install or download browsers in this repo. If you install npm deps in an environment that would fetch browsers, set PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1.
This site and its services stand on excellent open-source projects and hosts:
| Project | Role here |
|---|---|
| Angular | Public SPA (www/) |
| Rust | MCP and website chat backends |
| Axum / Tokio | HTTP, WebSocket, async runtime |
| rmcp | MCP Streamable HTTP server |
SQLite (rusqlite / sqlx) |
Knowledge and news stores |
| Render | Static site, API, and MCP hosting |
| Vitest / Playwright | Unit and e2e tests |
| Fontsource / Font Awesome / animate.css | Fonts, icons, motion (bundled, no CDN) |
Thank you to their maintainers and communities.
Business Source License 1.1 (source-available). See LICENSE.
You may run your own personal or internal deployment; you may not resell or
offer it as a competing hosted product. Change license: Apache-2.0 on 2099-01-01.