
Hey folks — welcome back!
It’s been one of those weeks again… you know the kind — the “Oh No” screen kept popping up like an annoying ghost, and it started haunting me in my sleep 😅. So… I finally did something about it.
I replace it with this one:
I'm giving up, closing down shop and move on 🤣.
Just kidding move it over to a other domain later more about that in this post.
Want to directly go there:
👉 https://land.spl-stats.com
This is a new domain so let me know if you experiencing any problems!
🙌 Liking the tools? Show Some Free Support 😍
I want to keep these tools free and accessible for everyone — and you can help out without spending a dime:
- ✅ Upvote this post — it keeps the motivation flowing!
- 🗳️ Vote for my SPS validator 👉 Vote for My SPS Validator Node here
Every bit of support helps — thank you! 🙏
➕ New Features
Not much in this drop (you’ll see why in a sec 🤯), but here’s what’s new:
📊 Formula Explanations
Added tooltips and breakdowns on the LCE/LPE/LDE page. Thanks for the suggestion 👏.
Added a new metric based on Azircon’s excellent write-up:
👉 Land Efficiency: The Good, The Bad, and The Ugly
🏆 Leaderboard? Sure, Why Not! (last minute action)
After crunching all those ratios and ranks, I always had the idea in the back of my mind to eventually build a leaderboard overview… someday. 😅
Well — turns out someday was yesterday evening (for me), when casually dropped a message asking,
"Hey, can we get a leaderboard?"
And I thought — what the heck, that shouldn’t be too hard, right?
One hour later, it was live on the site! 💪
While testing it, Azircon also noticed a bug in the DEC calculation. Good catch! That’s been fixed too.
Just for the record: taxes were previously applied after the DEC/hr calculation, which could offset the value by up to 10%. That’s now corrected.
So yeah, leaderboard’s up — enjoy! 🚀
You can also compare players easy with the filters:
🚪 New Domain
After fighting with free-tier hell on half the internet, I decided to pack my bags and move the whole thing to a new home:
I gave Supabase, Koyeb, Neon, and Render a fair shot — but each came with limitations: storage, rate limits, or surprise quota bombs. Each one took at least a day to test and… fail. 🥲
So here's where I tried:
🧰 Tech Upgrade
To avoid all that, I decided to Dockerize the whole thing. Now anyone can run it locally or deploy it anywhere — from your dusty old laptop to AWS/GCP/Azure.
There are three Docker images:
- 💼 Posgres DB
- 🐍 splinter-lands — Python (Streamlit frontend)
- 🌐 splinter-lands-next — Next.js + Prisma backend
Docker images are available here:
- https://hub.docker.com/r/gamerbeaker/splinter-lands/tags
- https://hub.docker.com/r/gamerbeaker/splinter-lands-next/tags
🐳 Want to run it locally?
You’ll need:
Docker Desktop: https://www.docker.com/products/docker-desktop/
3 files: docker-compose.yml, .env, and secrets.toml
Example:
# docker-compose.yml
services:
db:
container_name: db
image: postgres:17
restart: always
environment:
POSTGRES_USER: <define your own user>
POSTGRES_PASSWORD: <define your own password>
POSTGRES_DB: spl
ports:
- "5432:5432"
volumes:
- spl_db_data_local:/var/lib/postgresql/data
spl-next:
container_name: spl-next
image: gamerbeaker/splinter-lands-next:latest
depends_on:
- db
env_file: .env
volumes:
- ./cron.log:/var/log/cron.log
ports:
- "3000:3000"
spl-py:
container_name: spl-py
image: gamerbeaker/splinter-lands:v1.0.0
depends_on:
- db
- spl-next
volumes:
- ./secrets.toml:/app/.streamlit/secrets.toml
ports:
- "8501:8501"
environment:
- PYTHONUNBUFFERED=1
volumes:
spl_db_data_local:
.env:
NODE_ENV=production
DATABASE_URL=postgresql://:@db:5432/spl
secrets.toml:
[database]
url = "postgresql://:@db:5432/spl"
Once ready, run:
docker compose pull
docker compose up -d
Initial data gets injected daily at 1AM UTC, but you can also manually run:
docker ps
docker exec -it spl-next /bin/sh
cd /app
npm run data:inject
Access the app:
- Python UI: http://localhost:8501
- Next.js (Not much here yet only some experiments for myself): http://localhost:3000
Some sneak peaks:
🧠 The Tech Learning Journey
So why only a few features?
Because I’ve been deep in the weeds learning new stuff:
- 🧱 React / Next.js — structure, API routes, optimization
- 🧬 Prisma — DB modeling + migrations
- 🎨 Tailwind CSS + DaisyUI — styling from scratch
- 📊 Nivo & Plotly — charting for the modern web
Still figuring out things like:
- Single large DB fetch vs many smaller queries
- Caching vs real-time updates
- Filtering client-side vs server-side
Python? I got that.
JavaScript/TS/React? Still fumbling, but getting there. Learning like this burns brain cells but also feels like a level-up 🧠⚡
📁 GitHub Repos
Want to peek under the hood?
- 🔗 Python: https://github.com/gamerbeaker007/splinter-lands
- 🔗 Next.js: https://github.com/gamerbeaker007/splinter-lands-next
Feel free to PR, suggest improvements, or even just send me a “WTF is this” reaction — I’m still new to TypeScript, so be gentle 😅
🙌 How You Can Support
I’d love to keep the tool free for everyone. You can help — totally free:
- ✅ Upvote this post to keep me motivated!
- 🗳️ Vote for my validator to fund future dev time
👉 Vote for My SPS Validator Node
⚠️ Final Note
This is a hobby project — built late at night with ☕ and a half-broken brain. If things break, be chill and ping me. I’ll fix it eventually 😅