SPB Git

spb/spboucher.ai Public

spboucher.ai — personal website of Simon-Pierre Boucher.

TypeScript 93.4% HTML 5.5% CSS 1%

Apps: add 7 projects (HF Market Data, HFChart, Tendril, KHAELOR, SPB Git, SPB Drive, SVGarden)

New cards in openSourceProjects plus full /apps/[slug] detail pages
(hero, stats, features, tech stack, architecture, highlights) written
from each repo's README.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed 14 h ago (Aug 10, 2026) parent 419f5c3

Showing 2 changed files with +439 and −0

modified lib/apps.ts +77 −0
@@ -153,6 +153,83 @@ export const openSourceProjects: OpenSourceProject[] = [
153 153 repo: "https://git.spboucher.ai/qwhpi",
154 154 demo: "https://www.indexqc.house",
155 155 },
156 + {
157 + slug: "hfmarketdata",
158 + name: "HF Market Data",
159 + emoji: "📡",
160 + tagline: "Open high-frequency market data platform",
161 + description:
162 + "An open high-frequency market data platform: a full-history FirstRate downloader, a 26.5-billion-row DuckDB-over-Parquet lake, a keyless REST API, and a React documentation platform — live at www.hfmarketdata.io.",
163 + language: "Python",
164 + repo: "https://git.spboucher.ai/hfmarketdata",
165 + demo: "https://www.hfmarketdata.io",
166 + },
167 + {
168 + slug: "hfchart",
169 + name: "HFChart",
170 + emoji: "📈",
171 + tagline: "High-frequency charts, hand-built canvas engine",
172 + description:
173 + "A high-frequency financial charting platform where every pixel is drawn by hand on a 2D canvas — 14 chart types, 8 indicators, an options strategy lab, and a self-contained embed system in 4,805 lines with zero dependencies.",
174 + language: "JavaScript",
175 + repo: "https://git.spboucher.ai/hfchart",
176 + demo: "https://www.hfchart.io",
177 + },
178 + {
179 + slug: "tendril",
180 + name: "Tendril",
181 + emoji: "🕸️",
182 + tagline: "Web ingestion that reaches what others can't",
183 + description:
184 + "A scrape-and-map API running on a residential Mac in real WebKit — Safari's actual engine — with fully deterministic, LLM-free extraction. Ships a single-file MCP server and Agent Skill so any AI agent can use it out of the box.",
185 + language: "TypeScript",
186 + repo: "https://git.spboucher.ai/tendril",
187 + demo: "https://www.ten-dril.com",
188 + },
189 + {
190 + slug: "khaelor",
191 + name: "KHAELOR",
192 + emoji: "🌋",
193 + tagline: "The autonomous engineer you can replay",
194 + description:
195 + "A terminal-native autonomous coding agent that designs before it implements and verifies before it claims done. Every action lands in an append-only event log you can fork, replay, and diff — auditable autonomy, powered by Anthropic.",
196 + language: "TypeScript",
197 + repo: "https://git.spboucher.ai/khaelor",
198 + demo: "https://www.khaelor.sh",
199 + },
200 + {
201 + slug: "spbgit",
202 + name: "SPB Git",
203 + emoji: "🌿",
204 + tagline: "A self-hosted git forge for one",
205 + description:
206 + "A complete, self-hosted GitHub equivalent built for a single owner: streamed Git Smart HTTP hosting, a showcase SSR web UI, GitHub-style releases, a JSON API, and the spbgit CLI — live at git.spboucher.ai.",
207 + language: "JavaScript",
208 + repo: "https://git.spboucher.ai/spbgit",
209 + demo: "https://git.spboucher.ai",
210 + },
211 + {
212 + slug: "spbdrive",
213 + name: "SPB Drive",
214 + emoji: "🗄️",
215 + tagline: "Self-hosted personal cloud drive",
216 + description:
217 + "A self-hosted Google Drive / Dropbox replacement for one person: content-addressed storage with free dedup, a universal in-browser previewer, unguessable share links, full-text search inside file contents, and a companion CLI.",
218 + language: "JavaScript",
219 + repo: "https://git.spboucher.ai/drive",
220 + demo: "https://drive.spboucher.ai",
221 + },
222 + {
223 + slug: "svgarden",
224 + name: "SVGarden",
225 + emoji: "🌱",
226 + tagline: "A searchable bank of SVG + CSS animations",
227 + description:
228 + "A static-first library of 74 self-contained SVG + CSS animations across 14 categories, each with a live preview, a customizer, and copy-ready code that works when pasted into a blank HTML file — no frameworks, no CDNs.",
229 + language: "Astro",
230 + repo: "https://git.spboucher.ai/svgarden",
231 + demo: "https://www.svgarden.dev",
232 + },
156 233 {
157 234 slug: "os-vault",
158 235 icon: "/icons/os-vault.png",
modified lib/project-details.ts +362 −0
@@ -3735,5 +3735,367 @@ export const projectDetails: ProjectDetail[] = [
3735 3735 "Framer Motion animations degrade gracefully: prefers-reduced-motion respected and no-JS fallbacks in place.",
3736 3736 "Both processes — app and tunnel — run under PM2 with save/restore, making the deployment survive reboots."
3737 3737 ]
3738 + },
3739 + {
3740 + "slug": "hfmarketdata",
3741 + "hero": {
3742 + "headline": "26.5 billion rows of market data, no key required",
3743 + "subheadline": "A full-history downloader, a DuckDB-over-Parquet data lake and an open REST API serving intraday bars and complete options chains at www.hfmarketdata.io."
3744 + },
3745 + "overview": [
3746 + "HF Market Data is an open high-frequency market data platform built end to end: ingestion, storage, API and documentation. A single-file downloader pulls everything FirstRate Data publishes — stocks, ETFs, futures, crypto, indices, FX and options — and converts it straight into a query-ready Parquet lake. The full ingestion completed as 745/745 jobs with zero data loss.",
3747 + "The data layer is deliberately radical: 26,464,775,098 rows across 558,814 zstd Parquet files, queried in place by DuckDB with predicate pushdown — no database server anywhere in the stack. Bars span five timeframes from 1-minute to daily, and options coverage runs 66/66 quarters since 2010 across 5,800+ US underlyings with quotes, implied volatilities and full Greeks.",
3748 + "On top sits an open, keyless REST API (FastAPI) serving JSON and CSV — up to 2 million rows per CSV request — with endpoints for bars, multi-ticker watchlists, point-in-time snapshots, options chains and contract histories. The same process serves a React 18 + Vite documentation platform with a full endpoint reference, request snippets in curl, Python and JavaScript, and live example responses."
3749 + ],
3750 + "stats": [
3751 + { "value": "26.5B", "label": "Rows in the lake" },
3752 + { "value": "558,814", "label": "Parquet files" },
3753 + { "value": "350 GB", "label": "Lake size (zstd)" },
3754 + { "value": "5,800+", "label": "Options underlyings" },
3755 + { "value": "66/66", "label": "Options quarters since 2010" },
3756 + { "value": "7", "label": "Asset classes" }
3757 + ],
3758 + "features": [
3759 + { "icon": "Download", "title": "Full-history downloader", "description": "A single-file, fully resumable downloader ingests everything FirstRate Data publishes across a 745-job plan, with retries, a disk-space guard and a resume manifest." },
3760 + { "icon": "Database", "title": "DuckDB-over-Parquet lake", "description": "558,814 zstd Parquet files — one per instrument or segment — queried in place with predicate pushdown, no database server required." },
3761 + { "icon": "Globe", "title": "Open, keyless REST API", "description": "Every endpoint is public and key-free, returning JSON or CSV with precise start/end windows and up to 2 million rows per CSV request." },
3762 + { "icon": "LineChart", "title": "Intraday to daily bars", "description": "OHLCV bars at 1min, 5min, 30min, 1hour and 1day across stocks, ETFs, futures, crypto, indices and FX, with split and dividend adjustments." },
3763 + { "icon": "Layers", "title": "Complete options history", "description": "Every quarterly options archive since 2010 — quotes, bid/ask IV, open interest, volume and the full set of Greeks, 16 fields per row." },
3764 + { "icon": "Clock", "title": "Point-in-time snapshots", "description": "Query a whole watchlist at one precise moment, or pull multi-ticker bars in a single call with per-ticker limits." },
3765 + { "icon": "RefreshCw", "title": "Zero-loss ingestion", "description": "CSV converts to Parquet via DuckDB with raw archives deleted on the fly — 745/745 jobs completed with zero data loss." },
3766 + { "icon": "BookOpen", "title": "Live documentation platform", "description": "A React 18 + Vite docs site with parameter tables, curl/Python/JavaScript snippets, live responses and a real-time dataset status page." }
3767 + ],
3768 + "techStack": [
3769 + { "category": "Data", "items": ["Python", "DuckDB", "Parquet (zstd)", "pandas"] },
3770 + { "category": "API", "items": ["FastAPI", "Uvicorn", "OpenAPI / Swagger"] },
3771 + { "category": "Frontend", "items": ["React 18", "Vite 6", "Fraunces / Inter / JetBrains Mono"] },
3772 + { "category": "Ops", "items": ["ngrok", "Single-process API + static serving", "Resume manifest state"] }
3773 + ],
3774 + "architecture": [
3775 + { "title": "Ingest", "description": "frd_downloader.py works through a 745-job plan against the FirstRate Data API — options quarters since 2010, stocks and ETFs A–Z across all timeframes and adjustments, futures, crypto, indices and FX — fully resumable via a state manifest." },
3776 + { "title": "Convert", "description": "Each downloaded archive is converted CSV-to-Parquet through DuckDB with zstd compression, one file per instrument or segment, and the raw zips are deleted on the fly to keep the footprint at 350 GB." },
3777 + { "title": "Query in place", "description": "The API layer (FastAPI + DuckDB) queries the 26.5-billion-row lake directly with predicate pushdown into the Parquet row groups — no database server, no ETL into a warehouse." },
3778 + { "title": "Serve openly", "description": "Keyless endpoints expose the live inventory, ticker discovery, OHLCV bars, watchlist snapshots and full options chains with Greeks, in JSON or CSV up to 2 million rows." },
3779 + { "title": "Document and publish", "description": "The same process serves the React + Vite documentation platform, exposed publicly at www.hfmarketdata.io through ngrok." }
3780 + ],
3781 + "highlights": [
3782 + "26,464,775,098 rows queried in place — no database server anywhere in the stack",
3783 + "745/745 ingestion jobs completed with zero data loss",
3784 + "Full US options history since 2010: 66/66 quarters, 5,800+ underlyings, quotes, IV and all Greeks",
3785 + "Open and keyless — no signup, no API key, JSON and CSV out of the box",
3786 + "Serves up to 2 million rows in a single CSV request",
3787 + "The entire pipeline is two Python files: a 661-line downloader and a 480-line API"
3788 + ]
3789 + },
3790 + {
3791 + "slug": "hfchart",
3792 + "hero": {
3793 + "headline": "Every pixel drawn by hand. Zero dependencies.",
3794 + "subheadline": "A high-frequency financial charting platform built on a from-scratch canvas rendering engine — no TradingView, no chart library, no framework."
3795 + },
3796 + "overview": [
3797 + "HFChart is a catalogue-grade platform for high-frequency financial charts where every pixel is drawn by hand on a 2D canvas. There is no TradingView widget, no charting library, and no framework anywhere in the stack — the entire application weighs in at 4,805 lines of code with exactly zero dependencies, front end and server included.",
3798 + "Data flows straight from the open HF Market Data API (hfmarketdata.io), queried directly by the browser across 6 asset classes — indices, ETFs, stocks, futures, crypto, and FX — covering roughly 13,200 instruments. Fourteen chart types, from candlesticks and Heikin-Ashi to Renko, Kagi, Point & Figure, and dynamic percent-comparison of up to 4 symbols, are rendered by a custom engine with linear and log scales, multi-pane layouts, and full touch support including two-finger pinch-zoom.",
3799 + "Beyond charting, HFChart ships an Options Lab built on real historical option chains going back to 2010: dated chains as they traded that day, a multi-leg strategy builder with presets, exact payoff analysis with aggregated Greeks, and a day-by-day historical replay that marks positions to market using actual contract prices — not a Black-Scholes simulation. An export button generates a fully interactive, self-contained embed snippet that makes zero network requests."
3800 + ],
3801 + "stats": [
3802 + { "value": "0", "label": "Dependencies (front + server)" },
3803 + { "value": "14", "label": "Chart types" },
3804 + { "value": "8", "label": "Technical indicators" },
3805 + { "value": "~13,200", "label": "Instruments across 6 asset classes" },
3806 + { "value": "18.3 KB", "label": "Full embed bundle, gzipped" },
3807 + { "value": "4,805", "label": "Total lines of code" }
3808 + ],
3809 + "features": [
3810 + { "icon": "LineChart", "title": "14 chart types", "description": "Candles, hollow candles, OHLC bars, line, step, area, baseline, Heikin-Ashi, Renko, Three-Line Break, Range Bars, Kagi, Point & Figure, and percent comparison — all hand-rendered." },
3811 + { "icon": "Cpu", "title": "From-scratch canvas engine", "description": "A custom 867-line rendering engine handles panes, linear/log scales, axes, crosshair, and zoom/pan/pinch, with a high-density fast path that switches to hi-lo strokes below 2 px per bar." },
3812 + { "icon": "BarChart3", "title": "8 built-in indicators", "description": "SMA, EMA, Bollinger, session VWAP with ±2σ bands, and volume profile with POC as overlays, plus RSI, MACD, and ATR in dedicated panes — every calculation implemented from scratch." },
3813 + { "icon": "FlaskConical", "title": "Options Lab", "description": "Real historical option chains since 2010 with quotes, IV, open interest, and Greeks, a multi-leg builder with presets from covered calls to iron condors, and exact payoff analysis." },
3814 + { "icon": "Clock", "title": "Real historical replay", "description": "Mark-to-market a strategy day by day through expiry using actual historical contract prices — with a slider, realized P&L, and daily Greeks — not a Black-Scholes simulation." },
3815 + { "icon": "Package", "title": "Self-contained embeds", "description": "The export button generates an HTML snippet with the data baked in, so the pasted chart stays fully interactive while making zero network requests — one 18.3 KB gzipped script." },
3816 + { "icon": "Split", "title": "Percent comparison mode", "description": "Overlay up to 4 symbols with dynamic rebasing on the first visible bar, so every zoom and pan recomputes relative performance on the fly." },
3817 + { "icon": "Palette", "title": "Colorblind-safe by design", "description": "The classic green/red scheme is doubled by a blue/red pair that passes every palette-validator check (CVD ΔE 19.2, contrast ≥ 3:1 on both surfaces), with a fixed, never-recycled categorical series order." },
3818 + { "icon": "Globe", "title": "Shareable URL state", "description": "Symbol, timeframe, chart type, indicators, theme, and comparison sets all encode into the URL, so any view — including Options Lab setups — can be shared as a link." }
3819 + ],
3820 + "techStack": [
3821 + { "category": "Frontend", "items": ["Vanilla JavaScript", "Canvas 2D API", "Hand-written CSS design tokens (light/dark)", "Responsive layout with mobile drawer"] },
3822 + { "category": "Server", "items": ["Python (pure stdlib, 109 lines)", "ThreadingHTTPServer", "Concatenated /embed.js bundle with mtime caching"] },
3823 + { "category": "Data", "items": ["HF Market Data API (hfmarketdata.io)", "Client-side resampling (1h→4h, 1D→1W, 5min→15m)", "Capability detection via /v1/status"] },
3824 + { "category": "Testing & Deployment", "items": ["node --test (10/10 passing on options-math.js)", "PM2 + ngrok on custom domain"] }
3825 + ],
3826 + "architecture": [
3827 + { "title": "Static host & bundle route", "description": "A 109-line pure-stdlib Python server serves the app shell and exposes /embed.js — the full engine (transforms, indicators, renderers, engine, embed bootstrapper) concatenated into a single script with mtime-based caching." },
3828 + { "title": "Direct browser data fetch", "description": "The browser queries the HF Market Data API directly via a 185-line client; timeframes missing from the data lake are derived client-side by resampling, and timeframe buttons auto-enable through /v1/status as the lake fills." },
3829 + { "title": "Series transformation", "description": "Raw OHLC bars are reshaped by transforms.js into Heikin-Ashi, Renko (ATR-auto-sized bricks), Kagi, Point & Figure, Three-Line Break, and Range Bars before rendering." },
3830 + { "title": "Canvas rendering pipeline", "description": "engine.js orchestrates panes, linear/log scales, axes, crosshair, and zoom/pan/pinch interactions while renderers.js draws all 14 chart types plus volume columns, bands, and the volume profile — pixel by pixel." },
3831 + { "title": "Export & embed", "description": "The export button serializes visible bars, chart type, indicators, and settings into a self-contained snippet that embed-boot.js hydrates into a fully interactive chart with zero network requests; a live iframe variant (?embed=1) is also available." }
3832 + ],
3833 + "highlights": [
3834 + "4,805 lines of hand-written code with exactly zero dependencies — front end and server",
3835 + "The complete interactive embed bundle ships at 18.3 KB gzipped (68.5 KB raw)",
3836 + "14 chart types and 8 indicators drawn pixel-by-pixel on a 2D canvas — no chart library, no framework",
3837 + "Options Lab replays real historical option chains since 2010 with actual mark-to-market, not a Black-Scholes simulation",
3838 + "Colorblind-safe up/down scheme validated at CVD ΔE 19.2 with ≥ 3:1 contrast on both surfaces",
3839 + "The entire production server is 109 lines of pure Python stdlib"
3840 + ]
3841 + },
3842 + {
3843 + "slug": "tendril",
3844 + "hero": {
3845 + "headline": "Web ingestion that reaches what other crawlers can't",
3846 + "subheadline": "Tendril scrapes and maps the web from a residential Mac in real WebKit, returning deterministic Markdown and structured data you can regression-test."
3847 + },
3848 + "overview": [
3849 + "Cloud crawlers run in headless Chromium on datacenter IPs — and get blocked for it. Tendril takes the opposite bet: it runs on a residential Apple Silicon machine, in WebKit, Safari's actual engine, behind a real IP. Sites that block conventional scrapers often don't block Tendril at all.",
3850 + "Extraction is fully deterministic — zero LLMs in the pipeline. The same page always yields the same Markdown, which means golden-file tests, versioned extraction rules, and reproducible output that enterprise workflows can actually depend on. JSON-LD, OpenGraph, Readability with a density-based fallback, and hand-tuned Turndown rules do the work parsers were built for.",
3851 + "At its core sits a three-tier escalation router: every request starts at a cheap undici HTTP fetch with Safari-fidelity header ordering, and escalates toward a native WKWebView pool and a real Safari driver only on evidence of failure. The whole platform is live at www.ten-dril.com, hardened against SSRF, honouring robots.txt by default, and self-identifying with a bot User-Agent — stealth means matching a real browser's fingerprint, not hiding who you are."
3852 + ],
3853 + "stats": [
3854 + { "value": "86", "label": "Hermetic tests passing, zero network" },
3855 + { "value": "0", "label": "LLMs in the extraction path" },
3856 + { "value": "3", "label": "Tiers in the escalation router" },
3857 + { "value": "4", "label": "Public API endpoints" },
3858 + { "value": "3", "label": "MCP tools exposed to agents" },
3859 + { "value": "6", "label": "Workspace packages in the monorepo" }
3860 + ],
3861 + "features": [
3862 + { "icon": "Fingerprint", "title": "Real-browser fidelity", "description": "WebKit on macOS ARM behind a residential IP is not a headless-Chromium signature, so sites that block other crawlers often let Tendril through." },
3863 + { "icon": "FlaskConical", "title": "Deterministic extraction", "description": "No model inference anywhere in the pipeline — the same page always yields the same Markdown, so extraction is covered by golden-file tests." },
3864 + { "icon": "Map", "title": "Map without rendering", "description": "Merges sitemaps, robots directives, homepage links, and /llms.txt into one deduplicated URL list in seconds." },
3865 + { "icon": "Split", "title": "Three-tier escalation router", "description": "A pure, unit-tested shouldEscalate() function starts every request at cheap HTTP and escalates to WKWebView or real Safari only on evidence of failure." },
3866 + { "icon": "Braces", "title": "Structured data harvest", "description": "JSON-LD, OpenGraph, and standard meta are parsed into a normalized structured object alongside clean Markdown and deduplicated links." },
3867 + { "icon": "Bot", "title": "Agent-ready integrations", "description": "A single-file MCP server (tendril_scrape, tendril_map, tendril_status) and a drop-in Agent Skill plug Tendril into any AI agent with no npm install and no API key." },
3868 + { "icon": "ShieldCheck", "title": "SSRF-hardened egress", "description": "Resolve-then-validate with IP pinning blocks private addresses and re-checks every redirect hop before any byte is fetched." },
3869 + { "icon": "Scale", "title": "Fair by default", "description": "Identifiable bot User-Agent with a contact URL, full RFC 9309 robots.txt compliance, and per-host rate limiting are the defaults, not options." },
3870 + { "icon": "Server", "title": "Self-hosted on Apple Silicon", "description": "Runs on a single Mac under PM2 with ngrok as the sole ingress, the API bound strictly to 127.0.0.1." }
3871 + ],
3872 + "techStack": [
3873 + { "category": "Core", "items": ["TypeScript (strict)", "Node 22+", "Fastify 5", "pnpm workspaces", "Zod"] },
3874 + { "category": "Fetch & Rendering", "items": ["undici (Tier 0 HTTP)", "WKWebView pool (Swift, Tier 1)", "Safari + safaridriver (Tier 2)"] },
3875 + { "category": "Extraction", "items": ["linkedom", "Mozilla Readability", "Turndown", "JSON-LD / OpenGraph harvesting"] },
3876 + { "category": "Infrastructure & Testing", "items": ["macOS ARM", "PM2", "ngrok reserved domain", "Vitest", "Pino"] }
3877 + ],
3878 + "architecture": [
3879 + { "title": "Request intake", "description": "A POST to /v1/scrape or /v1/map hits the Fastify API, where Zod schemas validate the payload and SSRF checks resolve and pin the target IP before anything is fetched." },
3880 + { "title": "Tier 0 HTTP fetch", "description": "undici fetches the page with Safari's exact header order, manual redirect handling with per-hop SSRF revalidation, and gzip/brotli decoding — the cheapest path that serves most traffic." },
3881 + { "title": "Escalation decision", "description": "The pure shouldEscalate() function inspects status codes, challenge markers, and empty SPA shells; on evidence of blocking, the router escalates toward the WKWebView pool and real Safari tiers." },
3882 + { "title": "Deterministic extraction", "description": "Raw HTML flows through a versioned pipeline — linkedom parsing, JSON-LD/OpenGraph harvest, Readability with a text-density fallback, and custom Turndown rules — producing Markdown, structured data, and links." },
3883 + { "title": "Response & delivery", "description": "Every response is a uniform { success, data, error } envelope with an X-Request-Id header, served from a Mac where the API binds only to localhost and ngrok is the sole public ingress." }
3884 + ],
3885 + "highlights": [
3886 + "Runs in real WebKit on a residential Mac — not a headless-Chromium datacenter signature",
3887 + "Zero LLMs in the extraction path: the same page always yields the same Markdown, verified by golden-file tests",
3888 + "86 hermetic unit and contract tests that pass with no network, on strict TypeScript with Result<T,E> error handling",
3889 + "Full RFC 9309 robots.txt parsing, identifiable bot User-Agent with contact URL, and per-host rate limiting by default",
3890 + "Single-file MCP server and Agent Skill make it a drop-in tool for Claude and any MCP-capable agent — no API key required",
3891 + "SSRF-hardened with resolve-then-validate IP pinning re-checked on every redirect hop"
3892 + ]
3893 + },
3894 + {
3895 + "slug": "khaelor",
3896 + "hero": {
3897 + "headline": "The autonomous engineer whose every decision you can replay",
3898 + "subheadline": "KHAELOR understands first, designs second, implements third, and verifies always — writing every action, even the ones at 3 AM, into an append-only log you can fork, replay, and diff."
3899 + },
3900 + "overview": [
3901 + "KHAELOR is not another coding-agent clone. It is a terminal-native autonomous engineering agent built on a deliberate discipline — understand first, design second, implement third, verify always — enforced at runtime, not just in a prompt. Write tools stay locked behind phase gates until a design artifact is approved.",
3902 + "Every session is event-sourced: an append-only JSONL log with torn-write recovery and byte-exact replay, where the conversation, costs, diffs, and phases are all pure folds over the same history. That makes runs auditable by construction — you can /fork any checkpoint, /replay a run with another model in a throwaway worktree, and /sdiff the two runs.",
3903 + "Beyond the interactive TUI, khaelord is a persistent daemon that pursues structured, event-sourced goals on a schedule: throwaway worktrees, phase gates even at night, mandatory verification, hard budget ceilings, and an async approval queue where a suspended run costs zero. Every overnight decision is one line in a log you replay the next morning."
3904 + ],
3905 + "stats": [
3906 + { "value": "698", "label": "Tests passing" },
3907 + { "value": "40", "label": "Durable event types" },
3908 + { "value": "11", "label": "Tools in the runtime" },
3909 + { "value": "16 ms", "label": "Coalesced render frames" },
3910 + { "value": "6", "label": "Capabilities no other CLI agent combines" },
3911 + { "value": "0", "label": "Invented numbers — real API metadata only" }
3912 + ],
3913 + "features": [
3914 + { "icon": "Workflow", "title": "Phase gates", "description": "Understand → design → implement is a runtime mechanism — write tools stay locked until a design artifact is approved, with strict, auto, or off modes." },
3915 + { "icon": "CheckCircle2", "title": "Native verification", "description": "After each edit batch KHAELOR runs your own typecheck, tests, and lint, repairing failures in a bounded loop before handing back." },
3916 + { "icon": "Split", "title": "Fork, replay, sdiff", "description": "Fork any checkpoint, replay a run with another model in a throwaway worktree, then diff the two runs side by side." },
3917 + { "icon": "Network", "title": "Semantic repo index", "description": "The symbols and refs tools find definitions with signatures and map callers, callees, and importers before an edit — skeletons instead of whole files." },
3918 + { "icon": "Brain", "title": "Memory with provenance", "description": "The agent maintains its own MEMORY.md, with every entry anchored to the exact session and event that produced it." },
3919 + { "icon": "Boxes", "title": "Parallel worktrees", "description": "Spawn subtasks in isolated git worktrees with attenuated capabilities and supervised no-fast-forward merges — your working copy is never touched." },
3920 + { "icon": "Clock", "title": "khaelord daemon", "description": "A persistent daemon runs structured, scheduled goals overnight with hard budget ceilings, mandatory verification, and an approval queue where a suspended run costs zero." },
3921 + { "icon": "ShieldCheck", "title": "The honesty contract", "description": "Costs come from real API usage metadata, test results from real exit codes, and permissions are capability-based where silence is never consent." },
3922 + { "icon": "Terminal", "title": "Custom ANSI renderer", "description": "Print-once scrollback, a bounded live region, 16 ms coalesced frames, and sub-millisecond input latency keep the TUI instantaneous while the model thinks." }
3923 + ],
3924 + "techStack": [
3925 + { "category": "Core", "items": ["TypeScript", "Node.js ≥ 22", "ESM", "Small-kernel architecture (deriveNext as a pure fold)"] },
3926 + { "category": "AI Runtime", "items": ["Anthropic SDK", "Streaming model events", "Isolated ModelClient interface", "Real usage-metadata cost accounting"] },
3927 + { "category": "Terminal", "items": ["Custom ANSI renderer", "khaelis theme (obsidian + magma)", "OKLCH gradients", "truecolor → 256 → 16 → mono ladder"] },
3928 + { "category": "Quality & Tooling", "items": ["Vitest (698 tests)", "ESLint", "tsc strict typechecking", "Mandatory file-header CI check"] }
3929 + ],
3930 + "architecture": [
3931 + { "title": "Understand", "description": "The context engine builds tiered context from the semantic RepoGraph — symbols with signatures and reference maps of callers, callees, and importers — feeding the model skeletons instead of whole files." },
3932 + { "title": "Design", "description": "Phase gates keep all write tools locked until the agent submits a design artifact and it is approved, so implementation never starts before a plan exists." },
3933 + { "title": "Implement", "description": "The tool runtime executes 11 tools — including a 9-strategy edit replacer — through the Workspace, the single filesystem and process seam, under capability-based deny > ask > allow permissions." },
3934 + { "title": "Verify", "description": "After each edit batch KHAELOR runs the project's own typecheck, tests, and lint with real exit codes, repairing failures in a bounded loop before claiming anything is done." },
3935 + { "title": "Record and replay", "description": "Every step appends to a JSONL event log with torn-write recovery; the session state is a pure fold over 40 durable event types, enabling byte-exact replay, forking, and run-vs-run diffing." }
3936 + ],
3937 + "highlights": [
3938 + "Six capabilities no other CLI agent ships together: phase gates, native verification, fork/replay/sdiff, semantic index, memory with provenance, parallel worktrees",
3939 + "Byte-exact session replay from an append-only JSONL log with torn-write recovery",
3940 + "698 passing tests behind a single npm run check with typecheck, lint, and header enforcement",
3941 + "khaelord runs autonomous overnight goals under hard budget ceilings — a suspended run costs exactly zero",
3942 + "Custom ANSI renderer delivers sub-millisecond input latency with 16 ms coalesced frames",
3943 + "Zero invented numbers: every cost, token count, and test result comes from real API metadata and real exit codes"
3944 + ]
3945 + },
3946 + {
3947 + "slug": "spbgit",
3948 + "hero": {
3949 + "headline": "A personal GitHub, built from scratch",
3950 + "subheadline": "SPB Git is a self-hosted software forge where every repository is public and clonable, writes are owner-only, and the filesystem is the database."
3951 + },
3952 + "overview": [
3953 + "SPB Git is the canonical home for all of Simon-Pierre Boucher's repositories, live at git.spboucher.ai. It implements Git Smart HTTP v2 by hand — streamed upload-pack and receive-pack, anonymous clone and fetch, token-authenticated push, post-receive hooks, and zip/tar.gz snapshots — on a Node.js Fastify server with no SQL or NoSQL database anywhere.",
3954 + "The web UI is a server-rendered showcase designed to match GitHub's polish: pinned repos, an activity feed, a contribution heatmap, badge-perfect README rendering with mermaid diagrams and relative-image resolution, shiki-highlighted file browsing with line anchors, commits, diffs, blame, global search, dynamic Open Graph cards, and an Atom feed. Dark and light themes ship with self-hosted fonts and zero third-party requests.",
3955 + "Day-to-day, everything runs through the spbgit CLI — a terminal command center covering the full lifecycle from repo creation to multi-repo sync and GitHub-style release uploads with sha256 sidecars. Bare repos on disk are the source of truth, expensive renders are cached per repo-and-commit, and a push instantly busts and rewarms the cache."
3956 + ],
3957 + "stats": [
3958 + { "value": "15", "label": "CLI commands" },
3959 + { "value": "52", "label": "Weeks of contribution heatmap" },
3960 + { "value": "200/min", "label": "Public API rate limit" },
3961 + { "value": "14", "label": "Nightly backups retained" },
3962 + { "value": "≥ 95", "label": "Lighthouse performance target" },
3963 + { "value": "0", "label": "Databases — filesystem is the store" }
3964 + ],
3965 + "features": [
3966 + { "icon": "GitBranch", "title": "Git Smart HTTP v2", "description": "Streamed upload-pack and receive-pack with anonymous clone and token-gated push, packfiles never buffered in memory." },
3967 + { "icon": "Terminal", "title": "spbgit CLI", "description": "One terminal command center for init, create --push, clone --all, status, sync, releases, and a self-diagnosing doctor." },
3968 + { "icon": "FileText", "title": "GitHub-grade README rendering", "description": "Badges, mermaid diagrams, task lists, footnotes, emoji shortcodes, and relative images all render pixel-perfect in dark and light themes." },
3969 + { "icon": "Package", "title": "Releases with binary assets", "description": "DMG, pkg, and zip assets attach to git tags, stream to disk with sha256 sidecars, and download publicly per tag." },
3970 + { "icon": "KeyRound", "title": "PAT-secured writes", "description": "Personal access tokens are argon2id-hashed at rest, revocable, and tracked with last-used timestamps — reads never need an account." },
3971 + { "icon": "Search", "title": "Global search", "description": "A cache-backed inverted index searches repo names, descriptions, topics, and README content, refreshed on every push." },
3972 + { "icon": "Braces", "title": "JSON API", "description": "Public reads and bearer-token writes at /api/v1 cover repos, languages, commits, tokens, and site-wide stats." },
3973 + { "icon": "Database", "title": "Filesystem as the database", "description": "Bare repos are the source of truth, meta.json holds repo metadata, and every expensive artifact is cached per repo@sha and busted on push." },
3974 + { "icon": "ShieldCheck", "title": "Hardened by design", "description": "Double path-traversal checks, strict Markdown sanitization, nosniff plus sandbox CSP on raw files, and loopback-only hook routes." }
3975 + ],
3976 + "techStack": [
3977 + { "category": "Server", "items": ["Node.js 20+ (ESM)", "Fastify 5", "zod", "@fastify/rate-limit", "pino"] },
3978 + { "category": "Rendering", "items": ["Nunjucks SSR", "markdown-it + GFM plugins", "shiki", "mermaid", "satori + resvg OG cards", "sanitize-html"] },
3979 + { "category": "CLI & Auth", "items": ["commander", "picocolors", "native fetch", "argon2 PAT hashing"] },
3980 + { "category": "Ops", "items": ["pm2", "ngrok custom domain", "vitest e2e", "eslint", "nightly backup cron"] }
3981 + ],
3982 + "architecture": [
3983 + { "title": "Ingress via ngrok", "description": "The public domain git.spboucher.ai terminates TLS at an ngrok tunnel and forwards to the Fastify app on the host node." },
3984 + { "title": "One server, four surfaces", "description": "Fastify routes every request to the SSR web UI, the /api/v1 JSON API, the /:repo.git Smart HTTP backend, or raw/archive file serving." },
3985 + { "title": "Filesystem as source of truth", "description": "Bare repositories live under the git root, a single meta.json indexes descriptions, topics, and pins — no database process exists." },
3986 + { "title": "Push-driven cache lifecycle", "description": "A post-receive hook hits a loopback-only route that busts caches, recomputes language stats, rewarms the README render, logs the activity feed, and regenerates the OG image." },
3987 + { "title": "Resilient operations", "description": "pm2 keeps the server and tunnel alive across reboots, /healthz feeds monitoring, and a nightly cron archives repos and data, keeping 14 backups." }
3988 + ],
3989 + "highlights": [
3990 + "Implements the Git Smart HTTP protocol by hand — clone works for any stranger, push is rejected without a PAT",
3991 + "Zero databases: bare git repos plus one meta.json, cached per commit SHA and invalidated by push hooks",
3992 + "README rendering built to be indistinguishable from GitHub, badges and mermaid included",
3993 + "spbgit sync commits, rebases, and pushes every workspace repo in one command",
3994 + "GitHub-style releases serve DMG downloads for the entire Zyquo app suite",
3995 + "SSR pages with self-hosted fonts and no render-blocking third-party requests, targeting Lighthouse 95+"
3996 + ]
3997 + },
3998 + {
3999 + "slug": "spbdrive",
4000 + "hero": {
4001 + "headline": "Your files, your server, zero compromises",
4002 + "subheadline": "A private, self-hosted cloud drive that previews everything, shares anything, and never phones home."
4003 + },
4004 + "overview": [
4005 + "SPB Drive is a self-hosted Google Drive and Dropbox replacement designed for exactly one user. The entire drive sits behind a single argon2id-hashed password; the only public surfaces are share links you explicitly create. It runs live at drive.spboucher.ai from a Fastify server on a Mac Studio node, exposed through an ngrok custom domain.",
4006 + "At its core is a content-addressed blob store: every file is stored once by its sha256 hash, so identical files cost nothing extra, while a SQLite database (WAL mode, FTS5) maps the virtual folder tree onto blobs. Uploads are chunked and resumable in 8 MB slices, entire folder trees drag-and-drop with hierarchy preserved, and everything streams — nothing is ever buffered whole in memory.",
4007 + "Beyond storage, it is a universal previewer and a sharing machine. Video transcodes in the background to play anywhere, Office documents convert to PDF via headless LibreOffice, archives are browsable from the inside, and code highlights in 100+ languages. Any file or folder becomes a clean public URL with optional expiry, password, and download limits — and v2.0 added file versioning, an in-browser text editor, inbound file requests, and storage insights."
4008 + ],
4009 + "stats": [
4010 + { "value": "27", "label": "Tests passing" },
4011 + { "value": "100+", "label": "Code languages highlighted" },
4012 + { "value": "8 MB", "label": "Resumable upload chunks" },
4013 + { "value": "20", "label": "Versions kept per file" },
4014 + { "value": "30 days", "label": "Trash retention" },
4015 + { "value": "0", "label": "Third-party requests" }
4016 + ],
4017 + "features": [
4018 + { "icon": "HardDrive", "title": "Content-addressed vault", "description": "Files are stored once by sha256 hash for free deduplication, organized in unlimited nested folders with tags, stars, and folder colors." },
4019 + { "icon": "Eye", "title": "Universal previewer", "description": "Images, video, audio waveforms, PDF, Office-to-PDF, code, Markdown, CSV, notebooks, archives, fonts, and email all preview in-browser — with an elegant fallback for everything else." },
4020 + { "icon": "Globe", "title": "Sharing machine", "description": "Any file or folder becomes an unguessable base58 URL with optional expiry, argon2 password, download limits, QR codes, Open Graph unfurls, and instant revocation." },
4021 + { "icon": "Search", "title": "Full-content search", "description": "SQLite FTS5 indexes names, tags, and extracted file contents — it finds a word inside an uploaded PDF." },
4022 + { "icon": "GitBranch", "title": "File versioning", "description": "Replacing or editing a file archives the previous content, up to 20 CAS-backed versions per file, browsable and restorable from the Info panel." },
4023 + { "icon": "RefreshCw", "title": "Resumable uploads", "description": "Chunked 8 MB uploads survive interruptions and resume where they left off, with drag-drop of entire folder trees and paste-to-upload." },
4024 + { "icon": "PenTool", "title": "In-browser editor", "description": "Edit code, Markdown, JSON, or CSV directly in the drive, with every save archived as a new version." },
4025 + { "icon": "Terminal", "title": "Companion CLI", "description": "The spbdrive CLI handles list, upload, download, share, search, and one-way push sync from any terminal via API-token auth." },
4026 + { "icon": "ShieldCheck", "title": "Hardened by default", "description": "Argon2id auth with lockout, hashed session ids, CSRF protection, sandboxed previews, and a strict self-only CSP with no third-party requests anywhere." }
4027 + ],
4028 + "techStack": [
4029 + { "category": "Server", "items": ["Node.js 20+ (ESM)", "Fastify 5", "better-sqlite3 (WAL + FTS5)", "Nunjucks SSR", "pino", "zod"] },
4030 + { "category": "Media & Previews", "items": ["sharp", "ffmpeg", "LibreOffice headless", "pdf.js", "Shiki", "wavesurfer.js", "SheetJS", "pdftotext"] },
4031 + { "category": "Security", "items": ["argon2id", "signed base58 tokens", "double-submit CSRF", "CSP default-src 'self'", "sandboxed SVG/HTML"] },
4032 + { "category": "Ops", "items": ["pm2", "ngrok custom domain", "rsync --link-dest backups", "vitest", "ESLint"] }
4033 + ],
4034 + "architecture": [
4035 + { "title": "Edge & auth", "description": "An ngrok tunnel terminates TLS at drive.spboucher.ai and forwards to a Fastify server; every route except login, share pages, and healthz requires a session backed by a single argon2id-hashed password with per-IP lockout." },
4036 + { "title": "Content-addressed storage", "description": "Uploads stream in 8 MB resumable chunks and are sha256-hashed into a content-addressed blob store, so identical bytes are stored exactly once; a SQLite nodes table maps the virtual folder tree onto blobs and garbage-collects at refcount zero." },
4037 + { "title": "Preview pipeline", "description": "A small in-process job queue (concurrency 2) produces thumbnails, H.264 video transcodes, and LibreOffice PDF conversions, all cached by blob hash — each unique file is processed once, ever." },
4038 + { "title": "Sharing & search", "description": "Signed base58 tokens serve polished public share pages with expiry, passwords, download caps, and ZIP-all folder streaming, while an FTS5 index over names, tags, and extracted text powers instant full-content search." },
4039 + { "title": "Operations", "description": "pm2 keeps the server and tunnel alive across reboots; a nightly 02:30 backup writes a SQLite snapshot plus hardlinked blob copies, retaining 14 dailies and 8 weeklies, with a documented and tested restore procedure." }
4040 + ],
4041 + "highlights": [
4042 + "Previews virtually everything — mkv transcodes to H.264, Office converts to PDF, archives browse from the inside, and unknowns get a graceful fallback card",
4043 + "Zero third-party requests anywhere: fonts, pdf.js, and wavesurfer are all self-hosted behind a strict CSP",
4044 + "Content-addressed storage makes deduplication free — identical files and file versions cost zero extra bytes",
4045 + "Search reaches inside file contents: PDFs, Office documents, and code are text-extracted and FTS5-indexed",
4046 + "Full companion CLI with chunked uploads, share management, and one-way push sync",
4047 + "Nightly hardlink-deduplicated backups with a restore procedure that has actually been tested"
4048 + ]
4049 + },
4050 + {
4051 + "slug": "svgarden",
4052 + "hero": {
4053 + "headline": "Copy-ready SVG + CSS animations, taught properly",
4054 + "subheadline": "A searchable, zero-dependency bank of 74 self-contained animations where every snippet ships with a live customizer and a short lesson on how it works."
4055 + },
4056 + "overview": [
4057 + "SVGarden is a static-first web platform hosting a large, ever-growing library of SVG and CSS animations. Every animation is one self-contained .html file: paste it into a blank page and it works — no frameworks, no CDNs, no build step required by the snippets themselves. Each one carries a short \"How it works\" lesson, so the bank doubles as a course in modern SVG and CSS technique.",
4058 + "The bank currently holds 74 snippets across 14 categories — loaders, filters, backgrounds, scroll-driven scenes, charts, motion paths, text effects, and more — teaching 177 distinct techniques from feTurbulence and goo filters to @property sweeps, animation-timeline, and SMIL morphing. 67 of the 74 snippets need zero JavaScript, and cutting-edge CSS always sits behind @supports with a graceful static fallback and a documented browser-support caveat.",
4059 + "The platform is engineered to scale by design: adding an animation means adding one file, and the gallery, detail pages, category pages, search index, and tag filters all regenerate at build time. A validation script enforces attribution headers, YAML frontmatter, class scoping, self-containment, and a 150-line size cap on every build — and the site itself scores a perfect 100/100 on Lighthouse performance and accessibility."
4060 + ],
4061 + "stats": [
4062 + { "value": "74", "label": "Copy-ready snippets" },
4063 + { "value": "14", "label": "Categories" },
4064 + { "value": "177", "label": "Distinct techniques taught" },
4065 + { "value": "100/100", "label": "Lighthouse perf & accessibility" },
4066 + { "value": "90%", "label": "JavaScript-free snippets (67/74)" },
4067 + { "value": "0", "label": "Dependencies for visitors" }
4068 + ],
4069 + "features": [
4070 + { "icon": "Package", "title": "Self-contained snippets", "description": "Every animation is one .html file with inline styles that renders correctly when pasted into a blank page — no external assets, ever." },
4071 + { "icon": "Search", "title": "Instant client-side search", "description": "Lazy-loaded Fuse.js searches titles, tags, and techniques with category and difficulty filters, all on a fully static site." },
4072 + { "icon": "Palette", "title": "Live customizer", "description": "Controls auto-generated from each snippet's frontmatter tweak --sg-* custom properties in real time and rewrite the code block and clipboard output to match." },
4073 + { "icon": "BookOpen", "title": "A lesson in every snippet", "description": "Each animation ships with a genuine \"How it works\" explanation, turning the bank into a hands-on classroom for 177 techniques." },
4074 + { "icon": "Sparkles", "title": "Cutting-edge CSS, safely", "description": "Modern features like @property, animation-timeline, :has(), and linear() sit behind @supports with static fallbacks and rendered browser-support notes." },
4075 + { "icon": "ShieldCheck", "title": "Validation that fails the build", "description": "A validation script enforces attribution headers, frontmatter, sg- class scoping, self-containment, and the 150-line cap on all 74 snippets before Astro builds." },
4076 + { "icon": "Zap", "title": "Zero runtime cost", "description": "Astro emits pure static pages with Shiki highlighting done at build time, hitting 100/100 Lighthouse performance and accessibility." },
4077 + { "icon": "Eye", "title": "Accessible by rule", "description": "Every SVG is either aria-hidden or given role=\"img\" with a title, and all snippets are dark/light safe by design." },
4078 + { "icon": "Rocket", "title": "One-command deploys", "description": "A deploy script syncs to the node, runs npm ci and the build, restarts pm2, and health-checks both the local server and the public domain." }
4079 + ],
4080 + "techStack": [
4081 + { "category": "Site & Build", "items": ["Astro 5 (static output)", "Shiki build-time syntax highlighting", "Vanilla CSS with custom properties", "Node.js ≥ 20"] },
4082 + { "category": "Search & Snippets", "items": ["Fuse.js (lazy-loaded, client-side)", "YAML-in-comment frontmatter", "CSS custom properties (--sg-*)", "validate-snippets.mjs quality gate"] },
4083 + { "category": "Serving & Ops", "items": ["Express with gzip/brotli and immutable caching", "pm2 (svgarden-web + svgarden-tunnel)", "ngrok reserved domain (www.svgarden.dev)", "/healthz build-info endpoint"] }
4084 + ],
4085 + "architecture": [
4086 + { "title": "One file per animation", "description": "Each snippet lives at snippets/<category>/<slug>.html with an attribution header, YAML frontmatter (title, tags, difficulty, techniques, how_it_works, customizable), and the raw self-contained markup and CSS." },
4087 + { "title": "Validation gate", "description": "validate-snippets.mjs runs before every build and fails it if any of the 74 snippets breaks the rules: headers, frontmatter, sg- scoping, self-containment, or the 150-line cap." },
4088 + { "title": "Static generation", "description": "A single parser (src/lib/snippets.mjs) feeds Astro, which regenerates the gallery, per-snippet detail pages, category pages, tag filters, and the Fuse.js search index — 84 pages per build, never edited by hand." },
4089 + { "title": "Interactive layer", "description": "Detail pages pair a sandboxed live preview with a customizer whose controls come straight from frontmatter; changes update the preview, the Shiki-highlighted code block, and the copy/download output with attribution attached." },
4090 + { "title": "Production serving", "description": "An Express server (server.mjs) serves dist/ with compression and cache headers, kept alive by pm2 alongside an ngrok tunnel exposing https://www.svgarden.dev, with /healthz checks wired into deploy.sh." }
4091 + ],
4092 + "highlights": [
4093 + "74 snippets teaching 177 distinct techniques across 14 categories — average snippet is just 57 lines",
4094 + "Perfect 100/100 Lighthouse scores for both performance and accessibility",
4095 + "90% of snippets (67/74) need zero JavaScript — and visitors need zero dependencies",
4096 + "Every copied snippet works pasted into a blank .html file, paste-tested per batch",
4097 + "Adding an animation is adding one file: 84 pages, search index, and filters regenerate at build time",
4098 + "The site eats its own dog food — vanilla CSS and custom properties, no Tailwind, no third-party trackers"
4099 + ]
3738 4100 }
3739 4101 ];
3740 4102