FIELD NOTES — THE CRAFT OF SMALL TOOLS
My Bot Runs on a $60 Computer Under My Desk
February 6, 2026 • 8 min read
Everyone has opinions about where your side project should live. Heroku. Railway. Fly.io. DigitalOcean. AWS Lambda.
My Discord bot runs on a Raspberry Pi under my desk. The web app runs on Vercel's free tier.
Total monthly cost: about $3 in electricity.
For a two-person book club, this is production.
The Math
Here's what we're running:
- ● A Discord bot that handles ~50 commands per month
- ● A web app that gets ~20 pageviews per month
- ● A Postgres database with ~100 rows
The infrastructure requirements are trivial. A hosted solution would cost $5-20/month for capabilities we'd never use.
The Pi cost $60 once. It's been running for months.
The math is simple.
Why Heroku/Railway Don't Make Sense Here
I'm not anti-cloud. For production apps with real traffic, managed platforms are often worth the cost.
But for side projects:
Sleep/cold start problem: Free tiers sleep after inactivity. Discord bots need to respond instantly—a sleeping bot misses messages.
Cost relative to value: $7/month for something two people use occasionally is hard to justify. That's $84/year for a toy project.
Overkill features: Auto-scaling, multi-region, CI/CD pipelines—none of this matters for 50 commands monthly.
The Pi eliminates all of this. It's always on, always local, always mine.
The Pi Setup
Here's the actual configuration:
Hardware: Raspberry Pi 5 (4GB model)
- ● $60 when I bought it
- ● Under my desk, connected to power and ethernet
- ● Running Raspberry Pi OS Lite (headless)
Software stack:
- ● Node.js 18 (for Discord.js)
- ● PM2 (process manager)
- ● SQLite (local database) → synced to Supabase
PM2 configuration:
// ecosystem.config.js
module.exports = {
apps: [{
name: 'bookclub-bot',
script: './bot/index.js',
watch: false,
env: {
NODE_ENV: 'production',
DISCORD_TOKEN: process.env.DISCORD_TOKEN,
SUPABASE_URL: process.env.SUPABASE_URL,
SUPABASE_KEY: process.env.SUPABASE_KEY
}
}]
}
Starting the bot:
pm2 start ecosystem.config.js
pm2 save
pm2 startup # Auto-start on Pi reboot
That's it. The bot has been running for months without intervention.
PM2: The Unsung Hero
PM2 is a Node.js process manager that does exactly what side projects need:
Process management: Start, stop, restart, reload—simple commands.
Log aggregation: pm2 logs bookclub-bot shows recent output.
Monitoring: pm2 status shows uptime, CPU, memory.
Auto-restart: If the process crashes, PM2 restarts it automatically.
Startup scripts: Survives Pi reboots.
No Docker. No Kubernetes. No container orchestration. Just a process manager doing its job.
$ pm2 status
+---------+-------------------+-------------+-------+--------+---------+--------+
| id | name | mode | ↑ | status | cpu | memory |
+---------+-------------------+-------------+-------+--------+---------+--------+
| 0 | bookclub-bot | fork | 2 | online | 0% | 45mb |
+---------+-------------------+-------------+-------+--------+---------+--------+
Unglamorous. Reliable.
Vercel for the Web App
The web app (Next.js) runs on Vercel's free tier:
Why Vercel:
- ● Free for hobby projects
- ● Zero configuration deploys from Git
- ● Environment variables via dashboard
- ● Automatic HTTPS
- ● Global CDN
What "free tier" actually includes:
- ● 100GB bandwidth/month (we use ~0.1GB)
- ● Unlimited deployments
- ● Serverless functions
- ● Preview deployments for branches
For a web app getting 20 pageviews monthly, the free tier is eternal.
Deployment workflow:
git push origin main
# That's it. Vercel handles the rest.
Cost Breakdown
| Component | Setup Cost | Monthly Cost |
|---|---|---|
| Raspberry Pi 5 | $60 | $0 |
| Power draw (~5W) | — | ~$3 |
| Vercel (free tier) | $0 | $0 |
| Supabase (free tier) | $0 | $0 |
| Domain (optional) | $12/yr | $1 |
| Total | $60 | ~$4 |
Compare to:
- ● Railway basic: $5/month
- ● Heroku basic: $7/month
- ● DigitalOcean droplet: $6/month
The Pi pays for itself in under a year. After that, it's essentially free.
Monitoring Without Infrastructure
You don't need DataDog for a side project. Here's the monitoring stack:
Bot health: PM2 status command. If uptime is high and restarts are low, things are fine.
Web app: Vercel dashboard shows request counts, errors, performance. Built-in, free.
Database: Supabase dashboard shows query counts and performance.
Alerting: If the bot stops responding to Discord commands, my book club partner will tell me. That's the alerting system.
For actual production, you'd want real monitoring. For two users, the infrastructure IS the monitoring.
When to Upgrade
This setup works until it doesn't. Here's when I'd move to hosted infrastructure:
More users: If the book club grew (it won't), I'd need more robust hosting.
Uptime requirements: If this were a commercial product, Pi-under-desk wouldn't cut it. Power outages, internet blips, Pi failures—all unacceptable for paid users.
Multiple bots: Scaling horizontally on a single Pi has limits.
Geographic distribution: A Pi in my home office has latency for users elsewhere.
For now, none of these apply. "Good enough" is actually good.
The Philosophy
"The cheapest, fastest, and most reliable components are those that aren't there."
— Gordon Bell
Production infrastructure should match production requirements.
Two users accessing 50 commands monthly doesn't need Kubernetes. It needs a Pi and PM2.
"Premature optimization is the root of all evil."
— Donald Knuth
"Premature optimization" applies to infrastructure too. Scale when you need to scale. Until then, simple works.
The Pi under my desk isn't impressive infrastructure. It's not ambitious architecture. It's a small computer doing a simple job well.
That's production.
The Takeaway
Production infrastructure scales down as well as up.
For side projects with tiny audiences:
- ● Pi + PM2 for always-on processes: ~$60 one-time
- ● Vercel free tier for web apps: $0
- ● Supabase free tier for database: $0
Total ongoing cost: less than a coffee.
The infrastructure matches the product. Two users don't need enterprise architecture. They need something that works.
When it needs to scale, I'll scale it. Until then, the Pi is production.
Building something that needs to actually run?
Textstone Labs helps teams deploy AI and automation that matches reality — right-sized infrastructure, not resume-driven architecture.
Let's Talk →Want more Field Notes?
Practical lessons from the field, delivered to your inbox. No spam.
Textstone Labs — AI implementation for people who build things.