Uses
What I build with, day to day, across my own work and the products we run at Canyon. It changes; the habits mostly don't.
Back end
- Language
- PHP, kept on the current release. It's a much better language than its reputation.
- Framework
- Laravel, usually on the newest major within weeks of release. Queues, websockets, auth and OAuth from the first-party packages wherever they exist.
- Admin
- Filament on Livewire. Back-office screens in days, not sprints.
- Patterns
- Action classes, role-based permissions that deny by default, and an activity log on anything that matters.
Front end
- Apps
- SvelteKit with strict TypeScript, and Vue when a project already speaks it.
- Styling
- Tailwind and design tokens. No raw hex values in components.
- Tooling
- Vite and Bun. Fast feedback loops or nothing.
Data & infrastructure
- Database
- MySQL, including in tests. If it doesn't run against the real thing, it doesn't count.
- Queues & cache
- Redis, with a dashboard watching the workers.
- Hosting
- Zero-downtime deploys on managed servers for the apps. Push to the main branch, it ships.
- Edge
- Cloudflare Workers and object storage for anything that should be fast everywhere. Precompute it and put it close to people.
- Watching
- Application monitoring on every production app, so the first person to notice a bug isn't a customer.
AI
- Daily driver
- Claude Code. Every repo gets written instructions for it, a few specialist agents (architect, reviewer, security) and guardrails that run automatically.
- In the products
- Apps ship their own MCP servers so agents can work with real data: authenticated, read-only by default, and anything an agent writes starts as a draft.
- Evaluation
- If an AI feature can't be measured, it isn't finished. Retrieval respects permissions, and answers get tested like code.
IT & operations
- Scripting
- PowerShell for provisioning machines, audits and cleanup.
- Rules
- Dry run by default. Check for admin rights first. Never log a credential. Verify the machine's actual state instead of trusting an exit code. Every script gets a runbook.
How I like to work
- Delete before you add.
- Verify, never infer.
- One source of truth for every piece of data.
- Keep components small enough to read in one sitting.
- Write the decision down, especially the ones that stand.
- Check it locally before it ever reaches a reviewer.
This site
- Built with
- Plain HTML and CSS, no framework. Three.js and about 200 lines of shader code for the canyon. Built with Claude Code, bundled with esbuild, hosted on Vercel.
- Data
- The sun position is calculated live for greater Nashville, and the weather comes from Open-Meteo.