Kyle's personal monorepo for maintained projects and the
infrastructure that runs them. This repo is treated as production:
changes go through PRs to main, dependencies stay at zero known
vulnerabilities, and the docs are kept accurate.
Experiments, half-baked ideas, and retired projects live in kylep/multi-sandbox instead — nothing there is maintained. When a project here stops earning its keep, it migrates to the sandbox (content moves; its history stays in this repo's git history).
| Project | Description | Tech |
|---|---|---|
| blog | Static blog + wiki for kyle.pericak.com, including the agent-facing wiki | Next.js (static export), Tailwind, Playwright |
| kytrade | Personal trading tools: API + CLI, Claude-integrated | Python 3.14/uv, FastAPI, Typer, PostgreSQL |
| robot-battle | Web robot-battle game built with Oliver | TypeScript, Vite, Vitest |
| llm-client | Browser chat UI for llama-server / OpenRouter, live at kyle.pericak.com/apps/llm-client | Next.js 16, Tailwind v4, pnpm |
| mods | Stellaris mods (3x Bigger Worlds, Multi-Megastructures) and a HOI4 mod, published on Steam Workshop | Paradox script, Python build tooling |
| xmasblocks | Find funny word combos from scrambled Christmas letter blocks | Python, OpenAI API |
| mcp-servers | 8 MCP servers wired into local Claude Code config (bitwarden, cc-usage, discord, google-news, google-search-console, openobserve, openrouter, screenshot) | TypeScript + Python |
| pai | Docs, backup and Terraform for the Pai agent system | Terraform, Markdown |
The Rancher Desktop cluster on the Mac laptop is the runtime for the
agent system. infra/ holds what deploys to it, plus supporting images:
| Directory | What it is |
|---|---|
| infra/local-k8s | Local cluster bootstrap (Vault etc.) |
| infra/ai-agents | Agent workloads: ai-agent-runtime image, cronjob Helm charts (journalist, pai-morning), agent-controller (Go) |
| infra/ai-security-toolkit-1 | semgrep + trivy + gitleaks scan image used by this repo's pre-PR checks |
Also: bin/ (scripts used by agents, e.g. github-trending.py for the
journalist cronjob), .claude/agents/ (the Claude Code agent team),
.ruler/ (sources that generate CLAUDE.md/AGENTS.md via ruler apply),
and secrets/ (gitignored real secrets; tracked .SAMPLE templates).
Copy secrets/export-kytrade.sh.SAMPLE, remove the .SAMPLE suffix,
fill in the values, then source it:
source secrets/export-kytrade.shRuns gitleaks on commit and push to detect secrets (plus ruff, biome, and semgrep on commit).
pre-commit install --hook-type pre-commit --hook-type pre-pushEach project has its own README. The short version:
- blog:
npm installinapps/blog/blog— see apps/blog/README.md - kytrade:
docker-compose upfrom the kytrade dir — see apps/kytrade/README.md - robot-battle:
npm install && npm run dev— see apps/games/robot-battle/ - llm-client:
pnpm install && pnpm dev— see apps/llm-client/README.md - mods: build scripts per mod — see apps/mods/
- xmasblocks:
pip install -r requirements.txt— see apps/xmasblocks/README.md