A one person lab, with uptime.
I build firmware for Bitcoin hardware wallets, management systems for the Brazilian public sector, and infrastructure that runs on hardware I own. All of it under Self-Labs, which is a laboratory, not a company: the "self" is literal. Self-hosted, self-custody, done by hand.
No managed database without a reason. No deploy that depends on someone logging into a server. No private key inside a machine that talks to the internet.
When something broke in production, it is written in the repository that it broke, with a date and a file reference. That is traceability, not modesty.
| System | What it solves | Notable detail |
|---|---|---|
| Wallet Store | Bitcoin only store, no payment processor in the middle | Watch only xpub, every address derived locally. Refuses to boot if the configured keys derive an unexpected address. Buyer data erased 72h after delivery. |
| ALFERES | Personnel, leave and health management for a military police unit | Around 500 people inside, in daily use |
| Jade DIY | Turns off the shelf ESP32 boards into a working Blockstream Jade | Signed firmware, web flasher, battery and touch logic for four different boards |
| Radar de Promo | Price tracking that pings when a deal is real | TypeScript, self-hosted, no affiliate noise |
| cups | Latest OpenPrinting CUPS for Debian and Ubuntu | Built from official source because the distro packages were years behind |
| selflabs.org | The lab's landing page | Astro, bilingual, Cloudflare Workers. Numbers on it come from the GitHub API, never typed by hand |
Pull requests accepted in 8 repositories owned by 7 different people, plus write access to somebody else's project.
| Project | What I sent |
|---|---|
| Blockstream/Jade | Five pull requests accepted into the official firmware of the Jade hardware wallet: swapped buttons on TTGO and USB JTAG on Waveshare S3 (#260), Windows connectivity and USB detection (#268), battery stability and power logic across T-Display, T-Display S3 and Waveshare S3 (#270, #271), and releasing the touch handles before deleting the i2c bus (#307) |
| oroderico/origo | Write access to someone else's repository, where I fix bugs. It generates a BIP39 seed from human thrown dice, built after roughly 88 million dollars left Coldcard wallets through a build flag that lowered entropy unnoticed for five years |
| akitaonrails/ai-memory | Native Windows hook command with no shell spawn, hook merging instead of overwriting third party hooks, JSON output to kill debug spam |
| akitaonrails/FrankMD | Multi arch amd64 and arm64 Docker publishing, tag normalisation, version in the About dialog |
| RobHofmann/HomeAssistant-GreeClimateComponent | Brazilian Portuguese translation |
| albaintor/homeassistant_electrolux_status | Two fixes on appliance status handling |
| ayghri/i-have-adhd | Raised the SessionStart hook timeout so the always on mode is not silently dropped under load |
Recurring theme: I run Windows and ARM64, which is exactly where most projects quietly break.
The Jade pull requests show as closed rather than merged because the maintainers land the changes through their own branch. The fixes are in the shipped firmware.
push to master
|
v
CI: tests, typecheck, image build on a NATIVE arm64 runner (never QEMU)
|
v
webhook -> Portainer stack pulls the repo
|
v
Orange Pi 5 / Ampere VPS
No manual step, no SSH at two in the morning, same path in every project. The deploy job fails loud on any HTTP status outside 2xx, so a broken redeploy never looks like a green build.
- The dev server died on every Vite re optimisation.
EPERM ... rmdir node_modules\.vite\deps, then a libuv assertion. Cause: 345 of 345 directories in the checkout carried the Windows ReadOnly attribute, and Node'srmdirreturns EPERM on those. Documented in self-labs/self-labsCLAUDE.md. - An animated trace where the dot vanished at 79% of the band. The trace scrolled and the head ran, so what you saw was the difference between two speeds, and that difference is always a whole multiple of 120 units while a browser window is any width at all. Fixed by removing the shape, not by patching the symptom.
| Layer | |
|---|---|
| Firmware | C ESP-IDF ESP32 / S3 |
| Web | TypeScript Node.js Astro Vanilla JS PHP Python C# |
| Data | PostgreSQL SQLite |
| Infra | Docker Portainer Cloudflare Workers Cloudflare Tunnel Caddy GitHub Actions Forgejo |
| Hardware | Orange Pi 5 Ampere VPS OpenWrt Home Assistant |
selflabs.org · store.selflabs.org · @self-labs · @gucateim · contato@selflabs.org


