Hardware Configuration
This is the full parts list. Every component was chosen for a reason — no filler, no unnecessary spend.
| Component | Model | Spec | Notes |
|---|---|---|---|
| SBC | Raspberry Pi 5 | 8GB LPDDR4X RAM, BCM2712 quad-core Cortex-A76 @ 2.4GHz | Official Pi 5 — not a clone |
| Case | Argon ONE V5 M.2 NVMe PCIe | Active fan, passive heatsink, GPIO access | Designed for Pi 5, exposes full PCIe 3.0 |
| Storage | Crucial P310 1TB M.2 NVMe SSD | PCIe 3.0 x1 (Pi limitation), ~900 MB/s read | Connected via Argon's PCIe bridge — no USB bottleneck |
| Power | Official Raspberry Pi 27W USB-C PSU | 5V/5A, PD-compliant | Required for stable NVMe + Pi 5 — do not use cheap adapters |
| Thermal pad | Included with Argon V5 | Blue thermal pad between board and heatsink | Pre-applied during build |
What We're Running On It
Seven projects, one machine. This is the current stack living on the Pi.
Why Run This Locally?
Seven projects, zero ongoing compute cost. API spend is kept to €9–15 per month by running heavy polling, scheduling, and LLM inference locally. Cloud APIs — Gemini Flash, DeepSeek, Claude — are used only for high-value outputs where quality matters and frequency is low. This machine is the filter layer: it decides what is worth sending to an expensive API and what can be handled on-device.
The stack also runs pgvector inside the same PostgreSQL instance, storing vector embeddings for each automation's outputs. Over time this enables lightweight reinforced learning loops — job match scores improve as the career tracker learns preferences, product recommendations sharpen as the e-commerce center logs conversions, and finance alerts self-calibrate against actual spending patterns. All inference stays local; nothing leaves the machine.
The Build — Key Steps
- Boot from NVMe, not SD card — flash Raspberry Pi OS directly to the NVMe via Raspberry Pi Imager using a USB-to-M.2 adapter, then set PCIe boot order via
raspi-configorrpi-eeprom-config. The SD slot is not used at all. - Enable PCIe Gen 3 — add
dtparam=pciex1_gen=3to/boot/firmware/config.txtto unlock full Gen 3 speeds. Without this line the drive runs at Gen 2 by default. - Argon ONE fan control — install the Argon ONE script which registers a systemd service and sets a temperature-based fan curve. The fan stays silent under 55°C and spins up gradually above that.
- PostgreSQL + port mapping — one shared PostgreSQL instance serves multiple projects, each with its own database and user. Ports for each dashboard are mapped explicitly so nothing collides.
- Docker + Portainer — containerised services run via Docker Compose. Portainer provides a lightweight web UI for container management without needing to SSH in for every restart.
- Tailscale — remote access to every service is handled by Tailscale. No ports open on the router, no VPN configuration overhead. The Pi is reachable from anywhere with a stable private IP on the tailnet.
This build replaced a cloud VM that was costing €15/month and is faster for local inference. Total hardware cost: one-time, already paid for itself in three months.