SPB Git

spb/spboucher.ai

Public

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

Apps page: add Web Platforms & Open Source section (8 new repos)

New ProjectCard component and openSourceProjects data: VQuant,
AI Risk Index, Metrika, Forge, Zyquo Cloud Web, PhD Thesis,
UQO Course Material, and the site itself — each with GitHub link,
live demo when available, and language badge. Zyquo macOS cards
unchanged. Home hero button renamed to 'Apps & Open Source'.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Aug 5, 2026) parent 5a6607b Browse files

4 changed files +189 −4

modified app/apps/page.tsx +23 −3
@@ -8,13 +8,14 @@
8 import type { Metadata } from "next"; 8 import type { Metadata } from "next";
9 9
10 import { AppCard } from "@/components/app-card"; 10 import { AppCard } from "@/components/app-card";
11+import { ProjectCard } from "@/components/project-card";
11 import { Reveal } from "@/components/reveal"; 12 import { Reveal } from "@/components/reveal";
12−import { zyquoApps } from "@/lib/apps"; 13+import { openSourceProjects, zyquoApps } from "@/lib/apps";
13 14
14 export const metadata: Metadata = { 15 export const metadata: Metadata = {
15− title: "Apps — Zyquo macOS Suite", 16+ title: "Apps — Zyquo macOS Suite & Open Source",
16 description: 17 description:
17− "The Zyquo suite: six native macOS applications for AI and local LLMs — multi-provider chat, on-device MLX models, autonomous agents, an AI-native browser, model fine-tuning, and LLM routing.", 18+ "The Zyquo suite: six native macOS applications for AI and local LLMs — plus open-source platforms and research: VQuant, AI Risk Index, Metrika, Forge, and more.",
18 }; 19 };
19 20
20 export default function AppsPage() { 21 export default function AppsPage() {
@@ -37,6 +38,25 @@ export default function AppsPage() {
37 </Reveal> 38 </Reveal>
38 ))} 39 ))}
39 </div> 40 </div>
41+
42+ <Reveal className="mt-20">
43+ <h2 className="text-2xl font-bold tracking-tight sm:text-3xl">
44+ Web Platforms &amp; Open Source
45+ </h2>
46+ <p className="mt-3 max-w-2xl text-muted-foreground">
47+ Open-source platforms, research code, and teaching material — from an
48+ AI-powered financial analysis platform to LLM training in pure C++ on
49+ Apple Silicon.
50+ </p>
51+ </Reveal>
52+
53+ <div className="mt-10 grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
54+ {openSourceProjects.map((project, i) => (
55+ <Reveal key={project.slug} delay={i * 0.06} className="h-full">
56+ <ProjectCard project={project} />
57+ </Reveal>
58+ ))}
59+ </div>
40 </div> 60 </div>
41 ); 61 );
42 } 62 }
modified app/page.tsx +1 −1
@@ -137,7 +137,7 @@ export default function HomePage() {
137 href="/apps" 137 href="/apps"
138 className={cn(buttonVariants({ variant: "secondary" }))} 138 className={cn(buttonVariants({ variant: "secondary" }))}
139 > 139 >
140− Zyquo macOS Apps 140+ Apps &amp; Open Source
141 </Link> 141 </Link>
142 <a 142 <a
143 href="https://github.com/spboucher-ai" 143 href="https://github.com/spboucher-ai"
added components/project-card.tsx +67 −0
@@ -0,0 +1,67 @@
1+/*
2+ project-card.tsx
3+ spboucher.ai Web
4+ Author: Simon-Pierre Boucher
5+ Mail: contact@spboucher.ai
6+*/
7+
8+import { ExternalLink, Github } from "lucide-react";
9+
10+import type { OpenSourceProject } from "@/lib/apps";
11+import { buttonVariants } from "@/components/ui/button";
12+import {
13+ Card,
14+ CardContent,
15+ CardDescription,
16+ CardFooter,
17+ CardHeader,
18+ CardTitle,
19+} from "@/components/ui/card";
20+import { cn } from "@/lib/utils";
21+
22+export function ProjectCard({ project }: { project: OpenSourceProject }) {
23+ return (
24+ <Card className="flex h-full flex-col transition-shadow hover:shadow-md">
25+ <CardHeader className="flex-row items-center gap-4 space-y-0">
26+ <div
27+ aria-hidden="true"
28+ className="flex h-16 w-16 shrink-0 items-center justify-center rounded-2xl bg-muted text-3xl shadow-sm"
29+ >
30+ {project.emoji}
31+ </div>
32+ <div className="min-w-0">
33+ <CardTitle className="text-lg">{project.name}</CardTitle>
34+ <CardDescription className="mt-1">{project.tagline}</CardDescription>
35+ </div>
36+ </CardHeader>
37+ <CardContent className="flex-1">
38+ <p className="text-sm text-muted-foreground">{project.description}</p>
39+ </CardContent>
40+ <CardFooter className="flex flex-wrap items-center gap-2">
41+ <a
42+ href={project.repo}
43+ target="_blank"
44+ rel="noopener noreferrer"
45+ className={cn(buttonVariants({ variant: "outline", size: "sm" }))}
46+ >
47+ <Github aria-hidden="true" />
48+ GitHub Repo
49+ </a>
50+ {project.demo ? (
51+ <a
52+ href={project.demo}
53+ target="_blank"
54+ rel="noopener noreferrer"
55+ className={cn(buttonVariants({ variant: "default", size: "sm" }))}
56+ >
57+ <ExternalLink aria-hidden="true" />
58+ Live Demo
59+ </a>
60+ ) : null}
61+ <span className="ml-auto rounded-full border px-2.5 py-0.5 text-xs text-muted-foreground">
62+ {project.language}
63+ </span>
64+ </CardFooter>
65+ </Card>
66+ );
67+}
modified lib/apps.ts +98 −0
@@ -17,6 +17,104 @@ export interface ZyquoApp {
17 dmg: string; 17 dmg: string;
18 } 18 }
19 19
20+export interface OpenSourceProject {
21+ slug: string;
22+ name: string;
23+ emoji: string;
24+ tagline: string;
25+ description: string;
26+ language: string;
27+ repo: string;
28+ demo?: string;
29+}
30+
31+export const openSourceProjects: OpenSourceProject[] = [
32+ {
33+ slug: "vquant",
34+ name: "VQuant",
35+ emoji: "📈",
36+ tagline: "AI financial intelligence platform",
37+ description:
38+ "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.",
39+ language: "TypeScript",
40+ repo: "https://github.com/spboucher-ai/vquant",
41+ demo: "https://www.vquant.ai",
42+ },
43+ {
44+ slug: "airiskindex",
45+ name: "AI Risk Index",
46+ emoji: "🤖",
47+ tagline: "Task-based AI job-exposure index",
48+ description:
49+ "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.",
50+ language: "TypeScript",
51+ repo: "https://github.com/spboucher-ai/airiskindex",
52+ demo: "https://www.airiskindex.io",
53+ },
54+ {
55+ slug: "metrika",
56+ name: "Metrika",
57+ emoji: "📊",
58+ tagline: "GPU-accelerated statistics for macOS",
59+ description:
60+ "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.",
61+ language: "Swift",
62+ repo: "https://github.com/spboucher-ai/metrika",
63+ },
64+ {
65+ slug: "forge",
66+ name: "Forge",
67+ emoji: "🔥",
68+ tagline: "LLM training in pure C++ + Metal",
69+ description:
70+ "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.",
71+ language: "C++",
72+ repo: "https://github.com/spboucher-ai/forge",
73+ },
74+ {
75+ slug: "zyquo-cloud-web",
76+ name: "Zyquo Cloud Web",
77+ emoji: "🌐",
78+ tagline: "Browser edition of Zyquo Cloud",
79+ description:
80+ "Multi-provider AI chat (12 providers, 170 models) that runs entirely in your browser. Bring your own keys — no backend, no accounts.",
81+ language: "TypeScript",
82+ repo: "https://github.com/spboucher-ai/zyquo-cloud-web",
83+ demo: "https://www.zyquo.cloud",
84+ },
85+ {
86+ slug: "phd-thesis",
87+ name: "PhD Thesis",
88+ emoji: "🎓",
89+ tagline: "Three essays in high-frequency finance",
90+ description:
91+ "PhD thesis (Université Laval) — Three Essays on High-Frequency Return and Volatility Dynamics in Commodities and Financial Futures Markets. Full LaTeX source.",
92+ language: "LaTeX",
93+ repo: "https://github.com/spboucher-ai/phd-thesis",
94+ },
95+ {
96+ slug: "uqo-cours",
97+ name: "UQO Course Material",
98+ emoji: "🏫",
99+ tagline: "Real-estate appraisal & cost methods",
100+ description:
101+ "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.",
102+ language: "LaTeX",
103+ repo: "https://github.com/spboucher-ai/UQO_COURS_PUBLIC",
104+ },
105+ {
106+ slug: "spboucher-ai",
107+ name: "spboucher.ai",
108+ emoji: "🏠",
109+ tagline: "This website",
110+ description:
111+ "The source of this very site — Next.js 16 App Router, Tailwind CSS v4, shadcn/ui, and Framer Motion, with full dark-mode support.",
112+ language: "TypeScript",
113+ repo: "https://github.com/spboucher-ai/spboucher.ai",
114+ demo: "https://www.spboucher.ai",
115+ },
116+];
117+
20 export const zyquoApps: ZyquoApp[] = [ 118 export const zyquoApps: ZyquoApp[] = [
21 { 119 {
22 slug: "zyquo-cloud", 120 slug: "zyquo-cloud",
23 121
Menu

Theme