# πŸŽ“ 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)
[![Website](https://img.shields.io/website?url=https%3A%2F%2Fwww.spboucher.ai&up_message=online&down_message=offline&label=www.spboucher.ai&style=for-the-badge)](https://www.spboucher.ai) [![Next.js](https://img.shields.io/badge/Next.js-16-000000?style=for-the-badge&logo=nextdotjs&logoColor=white)](https://nextjs.org) [![React](https://img.shields.io/badge/React-19-61DAFB?style=for-the-badge&logo=react&logoColor=black)](https://react.dev) [![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org) [![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-4-06B6D4?style=flat-square&logo=tailwindcss&logoColor=white)](https://tailwindcss.com) [![shadcn/ui](https://img.shields.io/badge/shadcn%2Fui-components-18181B?style=flat-square)](https://ui.shadcn.com) [![Framer Motion](https://img.shields.io/badge/Framer_Motion-12-0055FF?style=flat-square&logo=framer&logoColor=white)](https://www.framer.com/motion/) [![PM2](https://img.shields.io/badge/PM2-managed-2B037A?style=flat-square&logo=pm2&logoColor=white)](https://pm2.keymetrics.io) [![ngrok](https://img.shields.io/badge/ngrok-tunnel-1F1E37?style=flat-square&logo=ngrok&logoColor=white)](https://ngrok.com) [![Made in QuΓ©bec](https://img.shields.io/badge/Made_in-QuΓ©bec_πŸ‡¨πŸ‡¦-1E40AF?style=flat-square)](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 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) | | 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) | | 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) | | 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) | | 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) | | 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) | ## πŸš€ 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.* πŸš‡