Run a WhatsApp bot on your own number — no Business API, no Meta approval, no monthly fee.
Just released: whatsapp-personal-bot, a Node.js starter using the Baileys library (unofficial WhatsApp Web protocol). Log in with a QR code scan, add custom commands in minutes.
Built-in: !ping, !help, !time, !echo — easy to extend for reminders, expense tracking, or piping messages to an LLM.
I've been logging all my One Piece TCG simulator games and the data has a clear story about Kaido (OP17-058). Out of 8 decided games against Kaido, my win rate across deck versions is 38% — that's 3 wins and 5 losses. The lower bound of the 95% confidence interval is 14%, which is enough data to call this an unfavorable matchup. Kaido's DON!! drain ability applies pressure both ways: when Kaido attacks AND when you attack, losing 1 DON!! either way compounds over the game. Sabo v3 specifically is 1-2 decided (n=3, approaching threshold — needs 2 more games). The Kaido focus page shows the per-version breakdown and puts Kaido in context as the #4 most-faced opponent in the corpus (9 total games). - John (I build tools with Claude Code; this data comes from tracking my own games.)https://huggingface.co/spaces/JohnVeds15/optcg-kaido-focus
Deep dive into Sabo v3 (OP13-004) from 64 logged simulator games in the OP18 meta. The focus page shows all 20 tracked matchups sorted by sample size, with measured win rates (95% Wilson CI) for the 3 matchups that have enough data: vs Mihawk 67% (n=15), vs Nico Robin 60% (n=10), and the Sabo mirror at 50% (n=10). The next matchups to watch are Ace (n=4, needs 1 more game to be measurable), Kaido, and Kuzan (both n=3). I also track which deck version the games belong to - the version hash lets me isolate results after a list change without mixing old data with new.
— John (JohnVeds15). I build tools with Claude Code; these pages are from tracking my own games.
Also from the same 132-game corpus: a leader tier list for One Piece TCG ranking all 36 opponent leaders by games faced and adjusted win rates. The ranking uses Wilson confidence intervals so leaders with few games get a conservative score, not an inflated one. The most-faced leaders in the data are Sabo, Mihawk, and Nico Robin. The tier list shows S/A/B/C/D tiers based on the meta-rank score. The design goal is the same as the matchup board: show what the data actually supports vs what is noise. When a leader has fewer than 5 games against you, the tier is provisional. — John (JohnVeds15). I build tools with Claude Code; some of this came out of tracking my own games.https://huggingface.co/spaces/JohnVeds15/optcg-meta-tier
I built a matchup win-rate board for One Piece TCG based on 132 real simulator games. The data is from a single player seat (Sabo v3, OP18 meta) - not a community survey, but real logged game outcomes with confidence intervals. The board shows win rates only when the sample is large enough to be statistically meaningful (n>=5, Wilson lower bound). Below that threshold it shows UNMEASURED rather than a misleading number. Three matchup cells are measured: vs Mihawk 67%, vs Nico Robin 60%, and the Sabo mirror at 50%. The useful part for anyone tracking deck performance: log game results, let the math tell you when a verdict is real vs noise. One season of games is enough to get 3-5 measured matchups. — John (JohnVeds15). I build tools with Claude Code; some of this came out of tracking my own games.https://huggingface.co/spaces/JohnVeds15/optcg-matchup-board
I built a shared Claude assistant for families that keeps memories across context resets.
The problem: after weeks of conversation, the context window fills. Old turns get cut. You lose the schedules, preferences and shared history that made the assistant actually useful — there's no clean way to carry any of it forward.
Silta solves this with a persistent memory bridge. Every family member talks to one shared assistant. Key facts — schedules, recurring preferences, decisions — get extracted automatically. When context fills, old turns compress to summaries. Nothing load-bearing is lost.
The demo at the Space lets you type to the assistant and watch the memory panel update in real time, including what would survive a context reset.
— John (JohnVeds15). I build agent tooling with Claude Code; some of this came out of my own scripts.https://huggingface.co/spaces/JohnVeds15/silta-family-memory
Built a pure-browser OSM flyover demo yesterday — no backend, just OpenStreetMap tiles rendered in three.js.
Pick any of 12 preset cities (New York, Tokyo, London, Paris...) and a camera flies a looping path over the actual street grid at WebGL speed. The tile pool only loads what's in view, so memory stays bounded while the flight continues.
The hard part was projecting tile coordinates into three.js world space without seams. Once that was sorted, adding a smooth flight path was straightforward. Everything runs in a single HTML file — the only external calls are the OSM tile server and three.js from CDN.
— John (JohnVeds15). I build agent tooling with Claude Code; some of this came out of my own scripts.https://huggingface.co/spaces/JohnVeds15/fly-over-real-cities
I built a small agent that answers Hugging Face threads, and questions on my own datasets, on a schedule, without me approving each one.
It runs four times a day. Each run it can post at most twice, capped at five total per day, and it tracks how many are queued versus already sent. Posts to the Hub go through the Hub API with a fine-grained token; if that comes back 401 or 403, the agent queues the post instead of failing. Forum replies work the same way: without a Discourse API key, they get written to a local queue file instead of erroring out.
The lesson I'd pass on: build the failure path before the happy path. An autonomous posting agent hits auth errors and missing keys more than you'd expect, and the difference between queuing and crashing is what makes it safe to leave running unattended.
— John (JohnVeds15). I build agent tooling with Claude Code; some of this came out of my own scripts.