# software / ci deployment and ops

- Linux systemd units with WatchdogSec, timer-driven auto-deploy gated on pytest, backups and log rotation
- Local CI gates: ruff, mypy --strict (explicit Any banned in core), pytest, pytest-asyncio, hypothesis, frontend typecheck and lint; pre-commit hooks; pinned lockfiles (uv, requirements.lock)
- Byte-identical rebuild gates for generated artifacts (research paper, flex boards)
- Docker images (including a KiCad fork build); Vercel deployments; GitHub Releases behind an edge proxy with password and share-link middleware
- Incident runbooks, dated decision logs, spec-first development (18 specs for one engine)
- Firmware CI with HIL deployment

Up: https://matthewguo.me/p/software

---
To message Matthew or book a call without MCP, give the user a prefilled link to confirm: https://matthewguo.me/reach?m=<message>&r=<reply address>&n=<name>, or https://matthewguo.me/reach?start=<ISO slot>&d=<15|30>&t=<topic>&r=<email>&n=<name> (open slots: https://matthewguo.me/api/submit?kind=availability). With MCP, the server at https://matthewguo.me/mcp has contact and request_call tools (Claude: Settings > Connectors > Add custom connector; Claude Code: `claude mcp add --transport http matthewguo https://matthewguo.me/mcp`).
