SPB Git

spb/spboucher.ai Public

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

TypeScript 93.4% HTML 5.5% CSS 1%

feat: replace all GitHub links with git.spboucher.ai (self-hosted forge)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed yesterday (Aug 10, 2026) parent 9d12513

Showing 11 changed files with +107 and −107

modified CLAUDE.md +19 −19
@@ -88,7 +88,7 @@ ngrok http --domain=www.spboucher.ai 3000
88 88 - **Contact:**
89 89 - Academic: simon-pierre.boucher@uqo.ca
90 90 - Personal: contact@spboucher.ai
91 - GitHub: https://github.com/spboucher-ai
91 + - GitHub: https://git.spboucher.ai
92 92 - **Languages:** Bilingual — French and English
93 93
94 94 ### About / Bio
@@ -138,39 +138,39 @@ App icons: store them in `/public/icons/` (e.g. `/public/icons/zyquo-cloud.png`)
138 138
139 139 ### 1. ☁️ Zyquo Cloud — Multi-provider AI chat
140 140 Native macOS chat client supporting multiple AI providers (Anthropic, OpenAI, and more) in a single unified interface.
141 - Repo: https://github.com/spboucher-ai/zyquo-cloud
142 - Release: https://github.com/spboucher-ai/zyquo-cloud/releases/tag/v1.0.0
143 - DMG: https://github.com/spboucher-ai/zyquo-cloud/releases/latest/download/ZyquoCloud.dmg
141 +- Repo: https://git.spboucher.ai/zyquo-cloud
142 +- Release: https://git.spboucher.ai/zyquo-cloud/releases/tag/v1.0.0
143 +- DMG: https://git.spboucher.ai/zyquo-cloud/releases/latest/download/ZyquoCloud.dmg
144 144
145 145 ### 2. 💻 Zyquo Local — 100% local LLMs (MLX)
146 146 Run large language models entirely on-device with Apple MLX. Private, offline, no API keys required.
147 - Repo: https://github.com/spboucher-ai/zyquo-local
148 - Release: https://github.com/spboucher-ai/zyquo-local/releases/tag/v1.0.0
149 - DMG: https://github.com/spboucher-ai/zyquo-local/releases/latest/download/ZyquoLocal.dmg
147 +- Repo: https://git.spboucher.ai/zyquo-local
148 +- Release: https://git.spboucher.ai/zyquo-local/releases/tag/v1.0.0
149 +- DMG: https://git.spboucher.ai/zyquo-local/releases/latest/download/ZyquoLocal.dmg
150 150
151 151 ### 3. 🤖 Zyquo Agent — Autonomous agent for the Mac
152 152 An autonomous AI agent that can act on your Mac: tool calling, task automation, and multi-step workflows.
153 - Repo: https://github.com/spboucher-ai/zyquo-agent
154 - Release: https://github.com/spboucher-ai/zyquo-agent/releases/tag/v1.0.0
155 - DMG: https://github.com/spboucher-ai/zyquo-agent/releases/latest/download/ZyquoAgent.dmg
153 +- Repo: https://git.spboucher.ai/zyquo-agent
154 +- Release: https://git.spboucher.ai/zyquo-agent/releases/tag/v1.0.0
155 +- DMG: https://git.spboucher.ai/zyquo-agent/releases/latest/download/ZyquoAgent.dmg
156 156
157 157 ### 4. 🌍 Zyquo Atlas — AI-native web browser
158 158 A web browser built around AI from the ground up: page understanding, summarization, and assisted browsing.
159 - Repo: https://github.com/spboucher-ai/zyquo-atlas
160 - Release: https://github.com/spboucher-ai/zyquo-atlas/releases/tag/v1.0.0
161 - DMG: https://github.com/spboucher-ai/zyquo-atlas/releases/latest/download/ZyquoAtlas.dmg
159 +- Repo: https://git.spboucher.ai/zyquo-atlas
160 +- Release: https://git.spboucher.ai/zyquo-atlas/releases/tag/v1.0.0
161 +- DMG: https://git.spboucher.ai/zyquo-atlas/releases/latest/download/ZyquoAtlas.dmg
162 162
163 163 ### 5. ⚒️ Zyquo MLX — On-device model forge
164 164 Fine-tune and quantize models directly on Apple Silicon: LoRA/QLoRA fine-tuning, quantization, and model management with MLX.
165 - Repo: https://github.com/spboucher-ai/zyquo-mlx
166 - Release: https://github.com/spboucher-ai/zyquo-mlx/releases/tag/v1.0.0
167 - DMG: https://github.com/spboucher-ai/zyquo-mlx/releases/latest/download/ZyquoMLX.dmg
165 +- Repo: https://git.spboucher.ai/zyquo-mlx
166 +- Release: https://git.spboucher.ai/zyquo-mlx/releases/tag/v1.0.0
167 +- DMG: https://git.spboucher.ai/zyquo-mlx/releases/latest/download/ZyquoMLX.dmg
168 168
169 169 ### 6. 🔀 Zyquo Router — Local LLM gateway
170 170 A local gateway that routes requests across LLM providers and local models through a single unified endpoint.
171 - Repo: https://github.com/spboucher-ai/zyquo-router
172 - Release: https://github.com/spboucher-ai/zyquo-router/releases/tag/v1.0.0
173 - DMG: https://github.com/spboucher-ai/zyquo-router/releases/latest/download/ZyquoRouter.dmg
171 +- Repo: https://git.spboucher.ai/zyquo-router
172 +- Release: https://git.spboucher.ai/zyquo-router/releases/tag/v1.0.0
173 +- DMG: https://git.spboucher.ai/zyquo-router/releases/latest/download/ZyquoRouter.dmg
174 174
175 175 ## Design Guidelines
176 176
modified README.md +8 −8
@@ -72,17 +72,17 @@ Six native macOS applications for AI and local LLMs — Swift/SwiftUI, built for
72 72
73 73 | | App | Description | Links |
74 74 |---|-----|-------------|-------|
75 | <img src="public/icons/zyquo-cloud.png" width="48" alt="Zyquo Cloud icon"/> | **☁️ Zyquo Cloud** | Multi-provider AI chat — Anthropic, OpenAI, and more in one unified interface | [Repo](https://github.com/spboucher-ai/zyquo-cloud) · [Release](https://github.com/spboucher-ai/zyquo-cloud/releases/tag/v1.0.0) · [DMG](https://github.com/spboucher-ai/zyquo-cloud/releases/latest/download/ZyquoCloud.dmg) |
76 | <img src="public/icons/zyquo-local.png" width="48" alt="Zyquo Local icon"/> | **💻 Zyquo Local** | 100% local LLMs with Apple MLX — private, offline, no API keys | [Repo](https://github.com/spboucher-ai/zyquo-local) · [Release](https://github.com/spboucher-ai/zyquo-local/releases/tag/v1.0.0) · [DMG](https://github.com/spboucher-ai/zyquo-local/releases/latest/download/ZyquoLocal.dmg) |
77 | <img src="public/icons/zyquo-agent.png" width="48" alt="Zyquo Agent icon"/> | **🤖 Zyquo Agent** | Autonomous AI agent for the Mac — tool calling, automation, multi-step workflows | [Repo](https://github.com/spboucher-ai/zyquo-agent) · [Release](https://github.com/spboucher-ai/zyquo-agent/releases/tag/v1.0.0) · [DMG](https://github.com/spboucher-ai/zyquo-agent/releases/latest/download/ZyquoAgent.dmg) |
78 | <img src="public/icons/zyquo-atlas.png" width="48" alt="Zyquo Atlas icon"/> | **🌍 Zyquo Atlas** | AI-native web browser — page understanding, summarization, assisted browsing | [Repo](https://github.com/spboucher-ai/zyquo-atlas) · [Release](https://github.com/spboucher-ai/zyquo-atlas/releases/tag/v1.0.0) · [DMG](https://github.com/spboucher-ai/zyquo-atlas/releases/latest/download/ZyquoAtlas.dmg) |
79 | <img src="public/icons/zyquo-mlx.png" width="48" alt="Zyquo MLX icon"/> | **⚒️ Zyquo MLX** | On-device model forge — LoRA/QLoRA fine-tuning, quantization, model management | [Repo](https://github.com/spboucher-ai/zyquo-mlx) · [Release](https://github.com/spboucher-ai/zyquo-mlx/releases/tag/v1.0.0) · [DMG](https://github.com/spboucher-ai/zyquo-mlx/releases/latest/download/ZyquoMLX.dmg) |
80 | <img src="public/icons/zyquo-router.png" width="48" alt="Zyquo Router icon"/> | **🔀 Zyquo Router** | Local LLM gateway — one unified endpoint across providers and local models | [Repo](https://github.com/spboucher-ai/zyquo-router) · [Release](https://github.com/spboucher-ai/zyquo-router/releases/tag/v1.0.0) · [DMG](https://github.com/spboucher-ai/zyquo-router/releases/latest/download/ZyquoRouter.dmg) |
75 +| <img src="public/icons/zyquo-cloud.png" width="48" alt="Zyquo Cloud icon"/> | **☁️ Zyquo Cloud** | Multi-provider AI chat — Anthropic, OpenAI, and more in one unified interface | [Repo](https://git.spboucher.ai/zyquo-cloud) · [Release](https://git.spboucher.ai/zyquo-cloud/releases/tag/v1.0.0) · [DMG](https://git.spboucher.ai/zyquo-cloud/releases/latest/download/ZyquoCloud.dmg) |
76 +| <img src="public/icons/zyquo-local.png" width="48" alt="Zyquo Local icon"/> | **💻 Zyquo Local** | 100% local LLMs with Apple MLX — private, offline, no API keys | [Repo](https://git.spboucher.ai/zyquo-local) · [Release](https://git.spboucher.ai/zyquo-local/releases/tag/v1.0.0) · [DMG](https://git.spboucher.ai/zyquo-local/releases/latest/download/ZyquoLocal.dmg) |
77 +| <img src="public/icons/zyquo-agent.png" width="48" alt="Zyquo Agent icon"/> | **🤖 Zyquo Agent** | Autonomous AI agent for the Mac — tool calling, automation, multi-step workflows | [Repo](https://git.spboucher.ai/zyquo-agent) · [Release](https://git.spboucher.ai/zyquo-agent/releases/tag/v1.0.0) · [DMG](https://git.spboucher.ai/zyquo-agent/releases/latest/download/ZyquoAgent.dmg) |
78 +| <img src="public/icons/zyquo-atlas.png" width="48" alt="Zyquo Atlas icon"/> | **🌍 Zyquo Atlas** | AI-native web browser — page understanding, summarization, assisted browsing | [Repo](https://git.spboucher.ai/zyquo-atlas) · [Release](https://git.spboucher.ai/zyquo-atlas/releases/tag/v1.0.0) · [DMG](https://git.spboucher.ai/zyquo-atlas/releases/latest/download/ZyquoAtlas.dmg) |
79 +| <img src="public/icons/zyquo-mlx.png" width="48" alt="Zyquo MLX icon"/> | **⚒️ Zyquo MLX** | On-device model forge — LoRA/QLoRA fine-tuning, quantization, model management | [Repo](https://git.spboucher.ai/zyquo-mlx) · [Release](https://git.spboucher.ai/zyquo-mlx/releases/tag/v1.0.0) · [DMG](https://git.spboucher.ai/zyquo-mlx/releases/latest/download/ZyquoMLX.dmg) |
80 +| <img src="public/icons/zyquo-router.png" width="48" alt="Zyquo Router icon"/> | **🔀 Zyquo Router** | Local LLM gateway — one unified endpoint across providers and local models | [Repo](https://git.spboucher.ai/zyquo-router) · [Release](https://git.spboucher.ai/zyquo-router/releases/tag/v1.0.0) · [DMG](https://git.spboucher.ai/zyquo-router/releases/latest/download/ZyquoRouter.dmg) |
81 81
82 82 ## 🚀 Quick Start
83 83
84 84 ```bash
85 git clone https://github.com/spboucher-ai/spboucher.ai.git
85 +git clone https://git.spboucher.ai/spboucher.ai.git
86 86 cd spboucher.ai
87 87
88 88 npm install # install dependencies
@@ -157,7 +157,7 @@ scripts/ Production start script (PM2)
157 157 |---|---|
158 158 | 🎓 Academic | [simon-pierre.boucher@uqo.ca](mailto:simon-pierre.boucher@uqo.ca) |
159 159 | ✉️ Personal | [contact@spboucher.ai](mailto:contact@spboucher.ai) |
160 | 🐙 GitHub | [@spboucher-ai](https://github.com/spboucher-ai) |
160 +| 🐙 GitHub | [@spboucher-ai](https://git.spboucher.ai) |
161 161 | 📍 Office | UQO, Gatineau — Pavillon Alexandre-Taché |
162 162
163 163 ---
modified app/apps/[slug]/page.tsx +1 −1
@@ -337,7 +337,7 @@ export default async function ProjectDetailPage({ params }: PageProps) {
337 337 className={buttonVariants({ variant: "default", size: "sm" })}
338 338 >
339 339 <Github aria-hidden="true" />
340 View on GitHub
340 + View source
341 341 </a>
342 342 {project.demo && (
343 343 <a
modified app/cv/page.tsx +2 −2
@@ -129,13 +129,13 @@ export default function CvPage() {
129 129 contact@spboucher.ai (personal)
130 130 </a>
131 131 <a
132 href="https://github.com/spboucher-ai"
132 + href="https://git.spboucher.ai"
133 133 target="_blank"
134 134 rel="noopener noreferrer"
135 135 className="inline-flex items-center gap-3 rounded-2xl border border-border/50 bg-muted/40 px-4 py-3 text-muted-foreground transition-all hover:-translate-y-px hover:border-primary/30 hover:text-foreground"
136 136 >
137 137 <IconTile icon={Github} size="sm" />
138 github.com/spboucher-ai
138 + git.spboucher.ai
139 139 </a>
140 140 <span className="inline-flex items-center gap-3 rounded-2xl border border-border/50 bg-muted/40 px-4 py-3 text-muted-foreground">
141 141 <IconTile icon={MapPin} size="sm" />
modified app/page.tsx +1 −1
@@ -174,7 +174,7 @@ export default function HomePage() {
174 174 Apps &amp; Open Source
175 175 </Link>
176 176 <a
177 href="https://github.com/spboucher-ai"
177 + href="https://git.spboucher.ai"
178 178 target="_blank"
179 179 rel="noopener noreferrer"
180 180 className={cn(buttonVariants({ variant: "outline" }))}
modified app/research/page.tsx +2 −2
@@ -127,13 +127,13 @@ export default function ResearchPage() {
127 127 </p>
128 128 <div className="mt-4 flex flex-wrap gap-2">
129 129 <PillLink
130 href="https://github.com/spboucher-ai/phd-thesis/blob/main/these-ulaval/main.pdf"
130 + href="https://git.spboucher.ai/phd_thesis/blob/main/these-ulaval/main.pdf"
131 131 icon={FileText}
132 132 >
133 133 Full thesis (PDF)
134 134 </PillLink>
135 135 <PillLink
136 href="https://github.com/spboucher-ai/phd-thesis"
136 + href="https://git.spboucher.ai/phd_thesis"
137 137 icon={Github}
138 138 >
139 139 GitHub repository
modified app/teaching/page.tsx +5 −5
@@ -41,7 +41,7 @@ export const metadata: Metadata = {
41 41 "Courses taught by Simon-Pierre Boucher at Université Laval — capital markets, financial econometrics, financial management, and financial theory.",
42 42 };
43 43
44 const UQO_REPO = "https://github.com/spboucher-ai/UQO_COURS_PUBLIC";
44 +const UQO_REPO = "https://git.spboucher.ai/uqo_cours_public";
45 45 const UQO_RAW =
46 46 "https://raw.githubusercontent.com/spboucher-ai/UQO_COURS_PUBLIC/main";
47 47
@@ -148,7 +148,7 @@ const ulavalCourses: UlavalCourse[] = [
148 148 code: "GSF-3100",
149 149 title: "Capital Markets (Marché des capitaux)",
150 150 term: "Undergraduate · F2021–W2023",
151 repoName: "GSF3100",
151 + repoName: "gsf3100",
152 152 description:
153 153 "Fixed income and capital markets — LaTeX Beamer slides for every section of the course.",
154 154 groups: [
@@ -178,7 +178,7 @@ const ulavalCourses: UlavalCourse[] = [
178 178 code: "GSF-6053",
179 179 title: "Financial Econometrics I",
180 180 term: "Graduate · W2022",
181 repoName: "GSF6053",
181 + repoName: "gsf6053",
182 182 description:
183 183 "OLS, MLE, hypothesis testing, and time-series econometrics — session slides plus Stata lab sessions.",
184 184 groups: [
@@ -209,7 +209,7 @@ const ulavalCourses: UlavalCourse[] = [
209 209 code: "GSF-6053",
210 210 title: "Financial Econometrics I",
211 211 term: "Graduate · W2025",
212 repoName: "GSF6053_H25",
212 + repoName: "gsf6053_h25",
213 213 description:
214 214 "Full W2025 edition — lecture slides, typed lecture notes, formal proofs, and 14 exercise sets with complete solutions.",
215 215 groups: [
@@ -608,7 +608,7 @@ export default function TeachingPage() {
608 608 ))}
609 609 <div>
610 610 <PillLink
611 href={`https://github.com/spboucher-ai/${course.repoName}`}
611 + href={`https://git.spboucher.ai/${course.repoName}`}
612 612 icon={Github}
613 613 >
614 614 Full course repository
modified components/site-footer.tsx +2 −2
@@ -38,10 +38,10 @@ export function SiteFooter() {
38 38 <Mail className="h-3.5 w-3.5" aria-hidden="true" />
39 39 </a>
40 40 <a
41 href="https://github.com/spboucher-ai"
41 + href="https://git.spboucher.ai"
42 42 target="_blank"
43 43 rel="noopener noreferrer"
44 aria-label="GitHub profile"
44 + aria-label="Git profile"
45 45 className="inline-flex h-8 w-8 items-center justify-center border border-foreground/15 bg-card text-muted-foreground transition-all hover:-translate-y-px hover:border-foreground/50 hover:text-foreground"
46 46 >
47 47 <Github className="h-3.5 w-3.5" aria-hidden="true" />
modified lib/apps.ts +40 −40
@@ -66,7 +66,7 @@ export const openSourceProjects: OpenSourceProject[] = [
66 66 description:
67 67 "Claude-powered financial analysis platform: 265+ market-data endpoints, a quantitative Python engine (Monte Carlo, GARCH, VaR, Black-Scholes, portfolio optimization), multi-source web research, and streaming chat with PDF/Word/Slides export.",
68 68 language: "TypeScript",
69 repo: "https://github.com/spboucher-ai/vquant",
69 + repo: "https://git.spboucher.ai/vquant",
70 70 demo: "https://www.vquant.ai",
71 71 },
72 72 {
@@ -78,7 +78,7 @@ export const openSourceProjects: OpenSourceProject[] = [
78 78 description:
79 79 "The transparent, task-based AI job-exposure index — 923 occupations scored from 18,796 O*NET tasks by a multi-model LLM panel, with confidence intervals.",
80 80 language: "TypeScript",
81 repo: "https://github.com/spboucher-ai/airiskindex",
81 + repo: "https://git.spboucher.ai/airiskindex",
82 82 demo: "https://www.airiskindex.io",
83 83 },
84 84 {
@@ -90,7 +90,7 @@ export const openSourceProjects: OpenSourceProject[] = [
90 90 description:
91 91 "Self-hosted blockchain explorer for stablecoins and major crypto — 24 chains, free public RPCs only, zero API keys. Track balances, transfers, and token supplies across EVM and non-EVM networks.",
92 92 language: "Python",
93 repo: "https://github.com/spboucher-ai/coinexplorer",
93 + repo: "https://git.spboucher.ai/coinexplorer",
94 94 demo: "https://www.coinexplorer.io",
95 95 },
96 96 {
@@ -102,7 +102,7 @@ export const openSourceProjects: OpenSourceProject[] = [
102 102 description:
103 103 "Discriminative, contamination-resistant, live LLM ranking — IRT 2PL and Bradley–Terry scoring across 12 domains, with full methodological transparency.",
104 104 language: "TypeScript",
105 repo: "https://github.com/spboucher-ai/llmindex",
105 + repo: "https://git.spboucher.ai/llmindex",
106 106 demo: "https://www.llmindex.io",
107 107 },
108 108 {
@@ -114,7 +114,7 @@ export const openSourceProjects: OpenSourceProject[] = [
114 114 description:
115 115 "Independent rental-listing aggregator for Quebec: one dedicated connector per property manager normalizes every listing into a single schema, with full photos, standardized details, and a direct link to the original ad.",
116 116 language: "Python",
117 repo: "https://github.com/spboucher-ai/lou-ka",
117 + repo: "https://git.spboucher.ai/lou-ka",
118 118 demo: "https://www.lou-ka.com",
119 119 },
120 120 {
@@ -126,7 +126,7 @@ export const openSourceProjects: OpenSourceProject[] = [
126 126 description:
127 127 "A no-black-box property valuation engine covering 3.7 million Quebec properties and 745,119 real sales — every comparable, every dollar adjustment, and every confidence interval shown in full.",
128 128 language: "TypeScript",
129 repo: "https://github.com/spboucher-ai/vrai-prix",
129 + repo: "https://git.spboucher.ai/vrai-prix",
130 130 demo: "https://www.vrai-prix.com",
131 131 },
132 132 {
@@ -138,7 +138,7 @@ export const openSourceProjects: OpenSourceProject[] = [
138 138 description:
139 139 "Quebec's specialized plex valuation engine: 393,867 multi-unit buildings and 1.7 million doors valued with a scale-proof ratio hedonic model, plus a full interactive investor pro forma.",
140 140 language: "TypeScript",
141 repo: "https://github.com/spboucher-ai/valoplex",
141 + repo: "https://git.spboucher.ai/valoplex",
142 142 demo: "https://www.valoplex.com",
143 143 },
144 144 {
@@ -150,32 +150,32 @@ export const openSourceProjects: OpenSourceProject[] = [
150 150 description:
151 151 "A production-grade economic-measurement platform computing hedonic, hierarchically pooled housing price indexes for Quebec — province, 17 regions, and major cities by property type, with published uncertainty on every row.",
152 152 language: "Python",
153 repo: "https://github.com/spboucher-ai/qwhpi-platform",
153 + repo: "https://git.spboucher.ai/qwhpi",
154 154 demo: "https://www.indexqc.house",
155 155 },
156 156 {
157 157 slug: "os-vault",
158 158 icon: "/icons/os-vault.png",
159 dmg: "https://github.com/spboucher-ai/os-vault/releases/latest/download/OSVault-1.0.0.dmg",
159 + dmg: "https://git.spboucher.ai/os-vault/releases/latest/download/OSVault-1.0.0.dmg",
160 160 name: "OS Vault",
161 161 emoji: "🔐",
162 162 tagline: "Self-custody multi-chain crypto wallet",
163 163 description:
164 164 "Self-custody multi-chain crypto wallet for macOS — one phrase, six chain families (11 EVM chains, Bitcoin, Solana, Tron, XRPL, TON), zero API keys, and its own vault encryption.",
165 165 language: "Swift",
166 repo: "https://github.com/spboucher-ai/os-vault",
166 + repo: "https://git.spboucher.ai/os-vault",
167 167 },
168 168 {
169 169 slug: "metrika",
170 170 icon: "/icons/metrika.png",
171 dmg: "https://github.com/spboucher-ai/metrika/releases/latest/download/Metrika.dmg",
171 + dmg: "https://git.spboucher.ai/metrika/releases/latest/download/Metrika.dmg",
172 172 name: "Metrika",
173 173 emoji: "📊",
174 174 tagline: "GPU-accelerated statistics for macOS",
175 175 description:
176 176 "Stata-class statistics for macOS, GPU-accelerated by Apple Silicon — native Swift 6, DuckDB engine, MLX/Metal compute, R-validated to 1e-10. Regression, panel FE, IV, GLMs, GPU bootstrap, Bayesian Gibbs, lasso, gradient boosting.",
177 177 language: "Swift",
178 repo: "https://github.com/spboucher-ai/metrika",
178 + repo: "https://git.spboucher.ai/metrika",
179 179 },
180 180 {
181 181 slug: "forge",
@@ -185,19 +185,19 @@ export const openSourceProjects: OpenSourceProject[] = [
185 185 description:
186 186 "LLM training from scratch in pure C++20 + Metal on Apple Silicon — no PyTorch, no MLX, no ML dependencies. Fused flash attention (fwd+bwd) and simdgroup_matrix GEMM at 10.8 TFLOPS.",
187 187 language: "C++",
188 repo: "https://github.com/spboucher-ai/forge",
188 + repo: "https://git.spboucher.ai/forge",
189 189 },
190 190 {
191 191 slug: "forge-studio",
192 192 icon: "/icons/forge-studio.png",
193 dmg: "https://github.com/spboucher-ai/forge-studio/releases/latest/download/ForgeStudio-0.2.0.dmg",
193 + dmg: "https://git.spboucher.ai/forge-studio/releases/latest/download/ForgeStudio-0.2.0.dmg",
194 194 name: "Forge Studio",
195 195 emoji: "🎛️",
196 196 tagline: "macOS cockpit for Forge LLM training",
197 197 description:
198 198 "Native macOS cockpit for the Forge LLM training framework — SwiftUI dashboard with live loss charts, run supervision, dataset prep, checkpoints, and generation on Apple Silicon.",
199 199 language: "Swift",
200 repo: "https://github.com/spboucher-ai/forge-studio",
200 + repo: "https://git.spboucher.ai/forge-studio",
201 201 },
202 202 {
203 203 slug: "air",
@@ -207,7 +207,7 @@ export const openSourceProjects: OpenSourceProject[] = [
207 207 description:
208 208 "LLVM-style compiler infrastructure for accounting: LLMs emit economic events, a deterministic compiler produces balanced journal entries. Standalone hash-chained ledger, agent syscalls, and bank reconciliation.",
209 209 language: "Python",
210 repo: "https://github.com/spboucher-ai/air",
210 + repo: "https://git.spboucher.ai/air",
211 211 },
212 212 {
213 213 slug: "ultra-sharp-agent-skills",
@@ -217,7 +217,7 @@ export const openSourceProjects: OpenSourceProject[] = [
217 217 description:
218 218 "Research-first skill-authoring system plus 72 production-ready SKILL.md skills for AI agents — documents, frontend, databases, backend, writing, and US/CA tax & accounting. Linted, trigger-tested, validated.",
219 219 language: "Python",
220 repo: "https://github.com/spboucher-ai/ultra-sharp-agent-skills",
220 + repo: "https://git.spboucher.ai/ultra-sharp-agent-skills",
221 221 },
222 222 {
223 223 slug: "artificial-neural-networks-book",
@@ -227,7 +227,7 @@ export const openSourceProjects: OpenSourceProject[] = [
227 227 description:
228 228 "Artificial Neural Networks — Methods, Equations and Graphical Representations. A 119-page LaTeX book covering every architecture with rigorous equations, estimation algorithms, and native TikZ figures.",
229 229 language: "LaTeX",
230 repo: "https://github.com/spboucher-ai/artificial-neural-networks-book",
230 + repo: "https://git.spboucher.ai/artificial-neural-networks-book",
231 231 },
232 232 {
233 233 slug: "zyquo-cloud-web",
@@ -238,7 +238,7 @@ export const openSourceProjects: OpenSourceProject[] = [
238 238 description:
239 239 "Multi-provider AI chat (12 providers, 170 models) that runs entirely in your browser. Bring your own keys — no backend, no accounts.",
240 240 language: "TypeScript",
241 repo: "https://github.com/spboucher-ai/zyquo-cloud-web",
241 + repo: "https://git.spboucher.ai/zyquo-cloud-web",
242 242 demo: "https://www.zyquo.cloud",
243 243 },
244 244 {
@@ -249,7 +249,7 @@ export const openSourceProjects: OpenSourceProject[] = [
249 249 description:
250 250 "PhD thesis (Université Laval) — Three Essays on High-Frequency Return and Volatility Dynamics in Commodities and Financial Futures Markets. Full LaTeX source.",
251 251 language: "LaTeX",
252 repo: "https://github.com/spboucher-ai/phd-thesis",
252 + repo: "https://git.spboucher.ai/phd_thesis",
253 253 },
254 254 {
255 255 slug: "uqo-cours",
@@ -259,7 +259,7 @@ export const openSourceProjects: OpenSourceProject[] = [
259 259 description:
260 260 "Course material for UQO — Éléments d'évaluation immobilière (IMM1003) and Méthodes du coût (IMM1033): Beamer slides, practical assignments with Excel templates, and a Québec real-estate market report.",
261 261 language: "LaTeX",
262 repo: "https://github.com/spboucher-ai/UQO_COURS_PUBLIC",
262 + repo: "https://git.spboucher.ai/uqo_cours_public",
263 263 },
264 264 {
265 265 slug: "spboucher-ai",
@@ -269,7 +269,7 @@ export const openSourceProjects: OpenSourceProject[] = [
269 269 description:
270 270 "The source of this very site — Next.js 16 App Router, Tailwind CSS v4, shadcn/ui, and Framer Motion, with full dark-mode support.",
271 271 language: "TypeScript",
272 repo: "https://github.com/spboucher-ai/spboucher.ai",
272 + repo: "https://git.spboucher.ai/spboucher.ai",
273 273 demo: "https://www.spboucher.ai",
274 274 },
275 275 ];
@@ -283,9 +283,9 @@ export const zyquoApps: ZyquoApp[] = [
283 283 description:
284 284 "Native macOS chat client supporting multiple AI providers (Anthropic, OpenAI, and more) in a single unified interface.",
285 285 icon: "/icons/zyquo-cloud.png",
286 repo: "https://github.com/spboucher-ai/zyquo-cloud",
287 release: "https://github.com/spboucher-ai/zyquo-cloud/releases/tag/v1.0.0",
288 dmg: "https://github.com/spboucher-ai/zyquo-cloud/releases/latest/download/ZyquoCloud.dmg",
286 + repo: "https://git.spboucher.ai/zyquo-cloud",
287 + release: "https://git.spboucher.ai/zyquo-cloud/releases/tag/v1.0.0",
288 + dmg: "https://git.spboucher.ai/zyquo-cloud/releases/latest/download/ZyquoCloud.dmg",
289 289 },
290 290 {
291 291 slug: "zyquo-local",
@@ -295,9 +295,9 @@ export const zyquoApps: ZyquoApp[] = [
295 295 description:
296 296 "Run large language models entirely on-device with Apple MLX. Private, offline, no API keys required.",
297 297 icon: "/icons/zyquo-local.png",
298 repo: "https://github.com/spboucher-ai/zyquo-local",
299 release: "https://github.com/spboucher-ai/zyquo-local/releases/tag/v1.0.0",
300 dmg: "https://github.com/spboucher-ai/zyquo-local/releases/latest/download/ZyquoLocal.dmg",
298 + repo: "https://git.spboucher.ai/zyquo-local",
299 + release: "https://git.spboucher.ai/zyquo-local/releases/tag/v1.0.0",
300 + dmg: "https://git.spboucher.ai/zyquo-local/releases/latest/download/ZyquoLocal.dmg",
301 301 },
302 302 {
303 303 slug: "zyquo-agent",
@@ -307,9 +307,9 @@ export const zyquoApps: ZyquoApp[] = [
307 307 description:
308 308 "An autonomous AI agent that can act on your Mac: tool calling, task automation, and multi-step workflows.",
309 309 icon: "/icons/zyquo-agent.png",
310 repo: "https://github.com/spboucher-ai/zyquo-agent",
311 release: "https://github.com/spboucher-ai/zyquo-agent/releases/tag/v1.0.0",
312 dmg: "https://github.com/spboucher-ai/zyquo-agent/releases/latest/download/ZyquoAgent.dmg",
310 + repo: "https://git.spboucher.ai/zyquo-agent",
311 + release: "https://git.spboucher.ai/zyquo-agent/releases/tag/v1.0.0",
312 + dmg: "https://git.spboucher.ai/zyquo-agent/releases/latest/download/ZyquoAgent.dmg",
313 313 },
314 314 {
315 315 slug: "zyquo-atlas",
@@ -319,9 +319,9 @@ export const zyquoApps: ZyquoApp[] = [
319 319 description:
320 320 "A web browser built around AI from the ground up: page understanding, summarization, and assisted browsing.",
321 321 icon: "/icons/zyquo-atlas.png",
322 repo: "https://github.com/spboucher-ai/zyquo-atlas",
323 release: "https://github.com/spboucher-ai/zyquo-atlas/releases/tag/v1.0.0",
324 dmg: "https://github.com/spboucher-ai/zyquo-atlas/releases/latest/download/ZyquoAtlas.dmg",
322 + repo: "https://git.spboucher.ai/zyquo-atlas",
323 + release: "https://git.spboucher.ai/zyquo-atlas/releases/tag/v1.0.0",
324 + dmg: "https://git.spboucher.ai/zyquo-atlas/releases/latest/download/ZyquoAtlas.dmg",
325 325 },
326 326 {
327 327 slug: "zyquo-mlx",
@@ -331,9 +331,9 @@ export const zyquoApps: ZyquoApp[] = [
331 331 description:
332 332 "Fine-tune and quantize models directly on Apple Silicon: LoRA/QLoRA fine-tuning, quantization, and model management with MLX.",
333 333 icon: "/icons/zyquo-mlx.png",
334 repo: "https://github.com/spboucher-ai/zyquo-mlx",
335 release: "https://github.com/spboucher-ai/zyquo-mlx/releases/tag/v1.0.0",
336 dmg: "https://github.com/spboucher-ai/zyquo-mlx/releases/latest/download/ZyquoMLX.dmg",
334 + repo: "https://git.spboucher.ai/zyquo-mlx",
335 + release: "https://git.spboucher.ai/zyquo-mlx/releases/tag/v1.0.0",
336 + dmg: "https://git.spboucher.ai/zyquo-mlx/releases/latest/download/ZyquoMLX.dmg",
337 337 },
338 338 {
339 339 slug: "zyquo-router",
@@ -343,8 +343,8 @@ export const zyquoApps: ZyquoApp[] = [
343 343 description:
344 344 "A local gateway that routes requests across LLM providers and local models through a single unified endpoint.",
345 345 icon: "/icons/zyquo-router.png",
346 repo: "https://github.com/spboucher-ai/zyquo-router",
347 release: "https://github.com/spboucher-ai/zyquo-router/releases/tag/v1.0.0",
348 dmg: "https://github.com/spboucher-ai/zyquo-router/releases/latest/download/ZyquoRouter.dmg",
346 + repo: "https://git.spboucher.ai/zyquo-router",
347 + release: "https://git.spboucher.ai/zyquo-router/releases/tag/v1.0.0",
348 + dmg: "https://git.spboucher.ai/zyquo-router/releases/latest/download/ZyquoRouter.dmg",
349 349 },
350 350 ];
modified lib/research-details.ts +10 −10
@@ -22,7 +22,7 @@ export interface ResearchDetail {
22 22 export const researchDetails: ResearchDetail[] = [
23 23 {
24 24 "slug": "wp11",
25 "repo": "https://github.com/spboucher-ai/wp11_uqo",
25 + "repo": "https://git.spboucher.ai/wp11_uqo",
26 26 "hero": {
27 27 "headline": "Random cross-validation is the wrong experiment for valuation models",
28 28 "subheadline": "Twenty hedonic models raced on 514,212 Quebec sales under identical conditions — machine learning wins the random split and loses the forward-in-time one."
@@ -113,7 +113,7 @@ export const researchDetails: ResearchDetail[] = [
113 113 },
114 114 {
115 115 "slug": "wp2",
116 "repo": "https://github.com/spboucher-ai/wp2_uqo",
116 + "repo": "https://git.spboucher.ai/wp2_uqo",
117 117 "hero": {
118 118 "headline": "Listing narratives carry named, priceable information",
119 119 "subheadline": "Do agent-written property descriptions contain price-relevant information beyond structural attributes? Yes — 20 interpretable semantic scores lift adjusted R² from 0.452 to 0.511."
@@ -235,7 +235,7 @@ export const researchDetails: ResearchDetail[] = [
235 235 },
236 236 {
237 237 "slug": "wp3",
238 "repo": "https://github.com/spboucher-ai/wp3-hedonic-housing-us",
238 + "repo": "https://git.spboucher.ai/wp3_uqo",
239 239 "hero": {
240 240 "headline": "Random splits flatter machine learning in housing",
241 241 "subheadline": "How well do hedonic methods really generalize? XGBoost's R² of 0.833 under a random split collapses to 0.425–0.547 when ten entire states are held out."
@@ -353,7 +353,7 @@ export const researchDetails: ResearchDetail[] = [
353 353 },
354 354 {
355 355 "slug": "wp5",
356 "repo": "https://github.com/spboucher-ai/wp5_uqo",
356 + "repo": "https://git.spboucher.ai/wp5_uqo",
357 357 "hero": {
358 358 "headline": "Nearby Airbnb activity is priced into Quebec rents",
359 359 "subheadline": "Is short-term rental density associated with higher residential rents? Each additional Airbnb listing within 500 m corresponds to roughly +0.4% monthly rent."
@@ -471,7 +471,7 @@ export const researchDetails: ResearchDetail[] = [
471 471 },
472 472 {
473 473 "slug": "wp7",
474 "repo": "https://github.com/spboucher-ai/wp7_uqo",
474 + "repo": "https://git.spboucher.ai/wp7_uqo",
475 475 "hero": {
476 476 "headline": "What 3.8 Billion Option Contracts Know About Tomorrow",
477 477 "subheadline": "Do option-implied moments predict returns and volatility across assets? Weekly returns yes, daily no — and implied volatility dominates every realized-volatility benchmark."
@@ -593,7 +593,7 @@ export const researchDetails: ResearchDetail[] = [
593 593 },
594 594 {
595 595 "slug": "wp9",
596 "repo": "https://github.com/spboucher-ai/wp9_uqo",
596 + "repo": "https://git.spboucher.ai/wp9_uqo",
597 597 "hero": {
598 598 "headline": "Location Is Worth More Than Every Wall Combined",
599 599 "subheadline": "What do structure and neighbourhood each contribute to Canadian home prices? Absorbing 1,153 neighbourhood fixed effects lifts explained variance from 46% to 77%."
@@ -711,7 +711,7 @@ export const researchDetails: ResearchDetail[] = [
711 711 },
712 712 {
713 713 "slug": "wp10",
714 "repo": "https://github.com/spboucher-ai/wp10_uqo",
714 + "repo": "https://git.spboucher.ai/wp10_uqo",
715 715 "hero": {
716 716 "headline": "Quebec's Cheapest Homes Pay 65% Too Much Tax",
717 717 "subheadline": "Are municipal assessments equitable? Matching 522,769 sales to the roll shows systematic regressivity — 99% of municipalities fail the IAAO uniformity standard."
@@ -836,7 +836,7 @@ export const researchDetails: ResearchDetail[] = [
836 836 },
837 837 {
838 838 "slug": "chapter-1",
839 "repo": "https://github.com/spboucher-ai/phd-thesis",
839 + "repo": "https://git.spboucher.ai/phd_thesis",
840 840 "hero": {
841 841 "headline": "Speculators Dampen Macro News Shocks in Energy Futures",
842 842 "subheadline": "Does speculative trading amplify macroeconomic news in commodity futures? No — greater speculation dampens price drift, volatility, and spreads while improving liquidity."
@@ -939,7 +939,7 @@ export const researchDetails: ResearchDetail[] = [
939 939 },
940 940 {
941 941 "slug": "chapter-2",
942 "repo": "https://github.com/spboucher-ai/phd-thesis",
942 + "repo": "https://git.spboucher.ai/phd_thesis",
943 943 "hero": {
944 944 "headline": "Intraday iNAV Reveals Jump-Driven ETF Volatility Transmission",
945 945 "subheadline": "How does volatility flow between commodity ETFs and their underlyings? The intraday indicative NAV shows transmission runs through jumps, not diffusion."
@@ -1034,7 +1034,7 @@ export const researchDetails: ResearchDetail[] = [
1034 1034 },
1035 1035 {
1036 1036 "slug": "chapter-3",
1037 "repo": "https://github.com/spboucher-ai/phd-thesis",
1037 + "repo": "https://git.spboucher.ai/phd_thesis",
1038 1038 "hero": {
1039 1039 "headline": "Fed Tone Moves Prices, Novelty Moves Volatility",
1040 1040 "subheadline": "When the Fed speaks, what moves markets — what it says or how new it is? Tone drives directional returns; novelty drives volatility."
modified lib/research.ts +17 −17
@@ -29,7 +29,7 @@ export const uqoWorkingPapers: ResearchPaper[] = [
29 29 description:
30 30 "Adds sentence-transformer embeddings of listing descriptions to hedonic models of 17,087 Quebec houses — lifting adjusted R² from 0.452 to 0.511 beyond structural attributes alone.",
31 31 pdf: "/papers/wp2_uqo.pdf",
32 repo: "https://github.com/spboucher-ai/wp2_uqo",
32 + repo: "https://git.spboucher.ai/wp2_uqo",
33 33 },
34 34 {
35 35 slug: "wp3",
@@ -40,8 +40,8 @@ export const uqoWorkingPapers: ResearchPaper[] = [
40 40 "Hedonic Housing Price Models for the United States: A Multi-Method Comparison of Parametric, Quantile, and Machine Learning Approaches",
41 41 description:
42 42 "OLS, quantile regression, and gradient-boosting (XGBoost + SHAP) approaches compared on 788,842 Zillow listings covering all 50 states and DC.",
43 pdf: "https://github.com/spboucher-ai/wp3-hedonic-housing-us/blob/main/paper/main.pdf",
44 repo: "https://github.com/spboucher-ai/wp3-hedonic-housing-us",
43 + pdf: "https://git.spboucher.ai/wp3_uqo/blob/main/paper/main.pdf",
44 + repo: "https://git.spboucher.ai/wp3_uqo",
45 45 },
46 46 {
47 47 slug: "wp5",
@@ -53,7 +53,7 @@ export const uqoWorkingPapers: ResearchPaper[] = [
53 53 description:
54 54 "Hedonic, spatial, quantile, and machine-learning evidence from 8,303 Quebec rental listings and 3,456 Airbnb listings — each active Airbnb within 500 m is associated with roughly 0.4% higher asking rent.",
55 55 pdf: "/papers/wp5_uqo.pdf",
56 repo: "https://github.com/spboucher-ai/wp5_uqo",
56 + repo: "https://git.spboucher.ai/wp5_uqo",
57 57 },
58 58 {
59 59 slug: "wp7",
@@ -65,7 +65,7 @@ export const uqoWorkingPapers: ResearchPaper[] = [
65 65 description:
66 66 "Options-implied moments forecast returns and volatility on a panel of 264,383 ticker-days (69 tickers, 2010–2025); a kurtosis long/short strategy delivers a Sharpe ratio of 2.33.",
67 67 pdf: "/papers/wp7_uqo.pdf",
68 repo: "https://github.com/spboucher-ai/wp7_uqo",
68 + repo: "https://git.spboucher.ai/wp7_uqo",
69 69 },
70 70 {
71 71 slug: "wp9",
@@ -77,7 +77,7 @@ export const uqoWorkingPapers: ResearchPaper[] = [
77 77 description:
78 78 "140,931 MLS listings with 1,153 neighbourhood (FSA) fixed effects — location alone adds ~30 points of R² (46% → 77%), valuing held-out homes with a 15.8% median absolute error (OOS R² = 0.764).",
79 79 pdf: "/papers/wp9_uqo.pdf",
80 repo: "https://github.com/spboucher-ai/wp9_uqo",
80 + repo: "https://git.spboucher.ai/wp9_uqo",
81 81 },
82 82 {
83 83 slug: "wp10",
@@ -89,7 +89,7 @@ export const uqoWorkingPapers: ResearchPaper[] = [
89 89 description:
90 90 "First province-wide audit of property-assessment equity in Canada — 522,769 sales matched to the assessment rolls. 99% of municipalities fail the IAAO uniformity standard; the median dwelling in the bottom local price decile pays ~65% more property tax than uniform assessment would imply.",
91 91 pdf: "/papers/wp10_uqo.pdf",
92 repo: "https://github.com/spboucher-ai/wp10_uqo",
92 + repo: "https://git.spboucher.ai/wp10_uqo",
93 93 },
94 94 {
95 95 slug: "wp11",
@@ -101,7 +101,7 @@ export const uqoWorkingPapers: ResearchPaper[] = [
101 101 description:
102 102 "A controlled horse race of 20 hedonic models on 514,212 roll-matched Quebec sales — spatial controls are first-order (~10 pp of MdAPE), functional form second-order (±2 pp), and gradient boosting's edge under random validation reverses under a forward-in-time split.",
103 103 pdf: "/papers/wp11_uqo.pdf",
104 repo: "https://github.com/spboucher-ai/wp11_uqo",
104 + repo: "https://git.spboucher.ai/wp11_uqo",
105 105 },
106 106 ];
107 107
@@ -115,10 +115,10 @@ export const thesisChapters: ResearchPaper[] = [
115 115 "Speculative Trading in Energy Markets: Evidence from Macroeconomic Surprises",
116 116 description:
117 117 "How speculative positioning conditions the reaction of energy futures to macroeconomic news surprises.",
118 pdf: "https://github.com/spboucher-ai/phd-thesis/blob/main/phd_chap1_20260731/main.pdf",
118 + pdf: "https://git.spboucher.ai/phd_thesis/blob/main/phd_chap1_20260731/main.pdf",
119 119 source:
120 "https://github.com/spboucher-ai/phd-thesis/tree/main/phd_chap1_20260731",
121 repo: "https://github.com/spboucher-ai/phd-thesis",
120 + "https://git.spboucher.ai/phd_thesis/tree/main/phd_chap1_20260731",
121 + repo: "https://git.spboucher.ai/phd_thesis",
122 122 },
123 123 {
124 124 slug: "chapter-2",
@@ -129,10 +129,10 @@ export const thesisChapters: ResearchPaper[] = [
129 129 "Seeing Through the ETF: Indicative NAV and Commodity Volatility Transmission",
130 130 description:
131 131 "Uses intraday indicative NAV to trace how volatility and jumps transmit between commodity ETFs and their underlying assets.",
132 pdf: "https://github.com/spboucher-ai/phd-thesis/blob/main/phd_chap2_20260731/main.pdf",
132 + pdf: "https://git.spboucher.ai/phd_thesis/blob/main/phd_chap2_20260731/main.pdf",
133 133 source:
134 "https://github.com/spboucher-ai/phd-thesis/tree/main/phd_chap2_20260731",
135 repo: "https://github.com/spboucher-ai/phd-thesis",
134 + "https://git.spboucher.ai/phd_thesis/tree/main/phd_chap2_20260731",
135 + repo: "https://git.spboucher.ai/phd_thesis",
136 136 },
137 137 {
138 138 slug: "chapter-3",
@@ -143,10 +143,10 @@ export const thesisChapters: ResearchPaper[] = [
143 143 "Returns and Volatility Around FOMC Announcements: A High-Frequency Analysis of Policy Tone and Novelty",
144 144 description:
145 145 "High-frequency evidence on how the tone and novelty of FOMC communication move returns and volatility across asset classes.",
146 pdf: "https://github.com/spboucher-ai/phd-thesis/blob/main/PHD_chapitre3_theses_20260731/chapitre3.pdf",
146 + pdf: "https://git.spboucher.ai/phd_thesis/blob/main/PHD_chapitre3_theses_20260731/chapitre3.pdf",
147 147 source:
148 "https://github.com/spboucher-ai/phd-thesis/tree/main/PHD_chapitre3_theses_20260731",
149 repo: "https://github.com/spboucher-ai/phd-thesis",
148 + "https://git.spboucher.ai/phd_thesis/tree/main/PHD_chapitre3_theses_20260731",
149 + repo: "https://git.spboucher.ai/phd_thesis",
150 150 },
151 151 ];
152 152
153 153