☠️ Bye Bye "Oh No" Screen🤞, Hello New Home!

Words
758
Reading
4 min
Listen
Play
1y


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:
image.png

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:

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 thejedo@thejedo 👏.

image.png

image.png

💡 Land DEC Efficiency (by azircon@azircon)

image.png

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 azircon@azircon 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! 🚀

image.png

image.png

You can also compare players easy with the filters:

image.png

🚪 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:

👉 https://land.spl-stats.com

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:

🐳 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:

image.png

image.png

🧠 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?

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:

⚠️ 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 😅

☠️ Bye Bye "Oh No" Screen🤞, Hello New Home! | Ecency