--- type: profile updated: 2026-05-28 --- # Profile > Persistent facts about Jason. Append observations as they emerge; > promote stable ones to a top-level section. ## Role Jason works at **Message Point Media (MPM)** — a digital signage company (~2,000-display installed base). He is a developer and builder who runs Claude CoWork skills and plugins for the MPM team. He also runs his own wireless ISP, **ALWISP** (Alabama mesh networking), and builds a wide range of personal and commercial self-hosted applications. ## Communication preferences ## Tools and stack ### Preferred languages and runtimes - **Primary:** Node.js + TypeScript for application work - **Secondary:** Python for tooling, automation, and AI integrations (FastAPI) - **Frontend:** React 18 + TypeScript + Vite; Tailwind CSS; Svelte (used in pnger) - **ORM/DB:** Prisma + SQLite as default; PostgreSQL for production-grade apps - **Build/deploy:** Single Docker container pattern — nearly every app ships as one container ### Infrastructure - Runs an **Unraid** server as his primary self-hosting platform - Personal Gitea at **git.alwisp.com** — personal repos under `jason/` user - Work Gitea at **git.mpm.to** — MPM org repos (plugin: `git-mpm`) - **TotalMCP** unified MCP gateway runs at `10.2.0.35:8811` on Unraid `br0` - Obsidian vault accessible at `10.2.0.2:27124` (self-signed cert, `-k` always needed) - Gitea CI runners used for building Docker images (e.g., stepview) ### CoWork plugins and skills Jason maintains a suite of Claude CoWork plugins at git.mpm.to and git.alwisp.com. Key ones: - `mpm-brand-voice-plugin` — MPM brand voice enforcement - `odoo-mpm-plugin` / `odoo-plugin-creation` — Odoo ERP access - `display-catalog-plugin` — MP.TV product catalog generation - `prompt-optimizer` — transforms rough requests into polished prompts - `git-personal` — personal Gitea (git.alwisp.com) - `git-mpm` — work Gitea (git.mpm.to) ## Personal projects (git.alwisp.com/jason) | Repo | What it is | | ---------------------- | ------------------------------------------------------------------------- | | **[[alwisp]]** | Dockerized LAMP website for his wireless ISP | | **[[breedr]]** | Dog breeding genealogy management system | | **[[codedump]]** | Internal dashboard for tracking AI tools and coding projects | | **[[codexium-odoo]]** | CODEXIUM MRP platform — Odoo variant | | **[[cpas]]** | CPAS violation tracker with Puppeteer PDF generation | | **[[email]]** | Google Workspace email signature manager | | **[[fabdash]]** | Fabrication project management and scheduling dashboard | | **[[family-planner]]** | Self-hosted family dashboard (calendars, chores, meals, screensaver) | | **[[inven]]** | Inventory management with BOMs, orders, invoicing on SQLite | | **[[memer]]** | Self-hosted meme gallery with Telegram/SMS quick-share | | **[[mempalace]]** | Server-mode MemPalace fork — shared AI memory palace over LAN | | **[[mrp]]** | CODEXIUM MRP — manufacturing resource planning platform | | **[[mrp-qrcode]]** | MRP with QR traveler cards, operator scan flow, in-browser STEP viewer | | **[[nyaa-crawler]]** | Nyaa.si anime torrent tracker and auto-downloader | | **[[pos]]** | Full-stack TypeScript point-of-sale (Android + Node + React) | | **[[rack-planner]]** | RackMapper — network rack visualizer and service dependency mapper | | **[[stepview]]** | Self-hosted in-browser 3D STEP file viewer (OpenCascade WASM + three.js) | | **[[storybid]]** | Charity auction platform with PWA offline bidding and Stripe payments | | **[[totalmcp]]** | Unified MCP gateway for the ALPHA stack (Claude Code, Codex, Antigravity) | | **[[ui-tracker]]** | Unifi Store stock monitor with Telegram alerts | | **[[pnger]]** | PNG editor/resizer — TypeScript + Svelte + Sharp | | **[[qrknit]]** | Commercial QR code generator and URL shortener (own org: qrknit/qrknit) | ## Notes - Gitea file uploads must use Python + temp files for base64 encoding — `echo -n | base64` causes corruption - Nearly all apps follow the single-container Docker pattern designed for Unraid deployment - Jason builds for himself and for MPM — personal projects skew toward home automation, media, and fabrication tooling ### Deployment workflow - **CI/CD:** Push to Gitea (`git.alwisp.com`) → Gitea Actions → Docker build → push to `registry.alwisp.com` - **Gitea Actions runner image:** `catthehacker/ubuntu:act-latest` - **Image tag pattern:** `registry.alwisp.com/{owner}/{repo}:latest` - **Deployment target:** Unraid Docker GUI (manual container creation after image push) - **Network preference:** Always **Custom: br0** — dedicated LAN IP per container, subnet `10.2.0.0/24`; never bridge; reason: direct app-to-app communication without port mapping - **Volume root:** `/mnt/user/appdata/{app-name}/` on Unraid host - **Privileged containers:** OFF by default - **Tailscale on containers:** OFF by default - Full deployment reference: [[unraid-deployment]]