# π spboucher.ai
### Personal website of **Simon-Pierre Boucher**
*Financial econometrics researcher and macOS/AI developer.*
Professor β Department of Administrative Sciences, UniversitΓ© du QuΓ©bec en Outaouais (UQO)
[](https://www.spboucher.ai)
[](https://nextjs.org)
[](https://react.dev)
[](https://www.typescriptlang.org)
[](https://tailwindcss.com)
[](https://ui.shadcn.com)
[](https://www.framer.com/motion/)
[](https://pm2.keymetrics.io)
[](https://ngrok.com)
[](https://uqo.ca)
**[π Home](https://www.spboucher.ai)** Β·
**[π¬ Research](https://www.spboucher.ai/research)** Β·
**[π Teaching](https://www.spboucher.ai/teaching)** Β·
**[π₯οΈ Apps](https://www.spboucher.ai/apps)** Β·
**[π CV](https://www.spboucher.ai/cv)**
---
## π About
This repository powers **[www.spboucher.ai](https://www.spboucher.ai)** β the personal academic and developer website of Simon-Pierre Boucher. It presents his academic profile (research in financial econometrics, commodity markets, monetary policy announcements, high-frequency finance, volatility modelling, textual analysis, and financialization) alongside the **Zyquo suite**: six native macOS applications focused on AI and local LLMs.
## β¨ Features
- β‘ **Next.js 16 App Router** β server components everywhere, static prerendering on every page
- π¨ **Tailwind CSS v4 + shadcn/ui-style components** β clean academic aesthetic with a modern developer edge
- π **Dark mode** β system-aware with a manual toggle, no flash on load
- π¬ **Framer Motion** β subtle scroll reveals, with `prefers-reduced-motion` and no-JS fallbacks
- π± **Fully responsive** β mobile-first, 1/2/3-column app grid
- βΏ **Accessible** β semantic HTML, alt text on all app icons, keyboard-friendly nav
- π **Health endpoint** β `GET /api/health` for uptime monitoring
## πΊοΈ Site Map
| Route | Content |
|-------|---------|
| `/` | Hero, bio, education, research highlight, technical skills |
| `/research` | Publications, working papers, conference presentations |
| `/teaching` | Courses taught (lecturer & teaching assistant, UniversitΓ© Laval) |
| `/apps` | Zyquo macOS app portfolio |
| `/cv` | CV summary + contact |
| `/api/health` | JSON health check |
## π₯οΈ The Zyquo macOS Suite
Six native macOS applications for AI and local LLMs β Swift/SwiftUI, built for Apple Silicon.
| | App | Description | Links |
|---|-----|-------------|-------|
|
| **βοΈ 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) |
|
| **π» 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) |
|
| **π€ 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) |
|
| **π 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) |
|
| **βοΈ 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) |
|
| **π 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) |
## π Quick Start
```bash
git clone https://git.spboucher.ai/spboucher.ai.git
cd spboucher.ai
npm install # install dependencies
npm run dev # local dev server β http://localhost:3000
npm run build # production build
npm run start # serve production build
npm run typecheck # TypeScript check
```
## π Production Deployment (node m2u64)
The site runs on cluster node `m2u64` and is exposed publicly with **ngrok** bound to the custom domain. On m2u64 the app listens on **port 3100** (port 3000 is already in use on that node); both the app and the tunnel run under **PM2** for auto-restart.
```mermaid
flowchart LR
A["π Visitor"] --> B["π ngrok edge
www.spboucher.ai"]
B --> C["π₯οΈ m2u64 : 3100
next start (PM2: spboucher)"]
C --> D["π /api/health"]
```
```bash
# on m2u64
npm ci && npm run build
pm2 start scripts/start-production.sh --name spboucher --interpreter /bin/zsh
pm2 start "ngrok http --url=www.spboucher.ai 3100" --name spboucher-ngrok
pm2 save
```
- Always serve the production build (`npm run build && npm run start`) behind ngrok β never the dev server.
- If the tunnel drops, restart it: `pm2 restart spboucher-ngrok` (or run `ngrok http --url=www.spboucher.ai 3100` manually).
- Health check: `GET /api/health` β `{"status":"ok","service":"spboucher-ai"}`.
## π Project Structure
```
app/
βββ layout.tsx Root layout (theme init, header, footer)
βββ page.tsx Home β hero, bio, education, highlight, skills
βββ research/page.tsx Publications, working papers, presentations
βββ teaching/page.tsx Courses taught
βββ apps/page.tsx Zyquo macOS app portfolio
βββ cv/page.tsx CV summary + contact
βββ api/health/route.ts Health check endpoint
βββ globals.css Tailwind v4 theme tokens (light/dark)
components/
βββ site-header.tsx Sticky nav + mobile menu
βββ site-footer.tsx Footer
βββ theme-toggle.tsx Dark mode toggle
βββ reveal.tsx Framer Motion scroll reveal
βββ app-card.tsx Zyquo app card (icon, description, 3 links)
βββ ui/ shadcn/ui-style primitives (button, card, badge)
lib/
βββ apps.ts Zyquo suite data (single source of truth)
βββ utils.ts cn() class merger
public/icons/ Zyquo app icons (fetched from the app repos)
scripts/ Production start script (PM2)
```
## π Conventions
- π Every source file starts with the mandatory project header comment (see `CLAUDE.md`)
- π¬π§ All site content is in English
- π App download links on `/apps` (Repo / Release / DMG) must remain exactly as specified in `CLAUDE.md`
- π§© Server components by default; client components only where interactivity requires it
## π« Contact
| | |
|---|---|
| π Academic | [simon-pierre.boucher@uqo.ca](mailto:simon-pierre.boucher@uqo.ca) |
| βοΈ Personal | [contact@spboucher.ai](mailto:contact@spboucher.ai) |
| π GitHub | [@spboucher-ai](https://git.spboucher.ai) |
| π Office | UQO, Gatineau β Pavillon Alexandre-TachΓ© |
---
**Β© Simon-Pierre Boucher** β UniversitΓ© du QuΓ©bec en Outaouais (UQO)
*Built with Next.js Β· Tailwind CSS Β· shadcn/ui Β· Framer Motion β served from a Mac, tunneled to the world.* π