Welcome back all 😄
Introduction
Building new tools never really gets “easy”… even with the experience from previous projects, you still run into design choices that seemed fine at first but turn out not to be ideal later on.
And yeah… this was one of those moments again.
I had to redesign part of the data collection layer. Honestly, I don’t think this will be the last time either 😅 but that’s part of the process and also what keeps it interesting.
For everyone that is still authorized, no worries. During the migration I wiped the old data and let the system re-pull everything fresh from Splinterlands. Sorry if that caused a bit of extra load, I tried to spread it out as much as possible.
If you are not authorized, once you re-authenticate your account will be placed in the queue for a full re-scan of your balances. Just so you know what’s happening in the background, this will again take a long while because of the first pull mechanism, complete balance history.
So what actually went wrong?
Previously I stored balances as one single accumulated value per type. Sounds fine… but it meant losing important detail. You could not properly see what was earned versus what was spent.
For most categories that is not a big issue since they are either always positive or always negative. But for things like market activity it really matters. Buying cards and selling cards ended up merged into one number, which is not what you want… especially when generating Hive blog reports.
That missing detail is what triggered this redesign and it actually unlocked some really nice improvements later on.
If you are not in the mood to read everything, you can always check the live version here
https://spl-stats.com/
🙌 Support the Project
Building these tools takes a lot of time and also infra cost.
I want to keep everything free so if you want to support:
✅ Upvote this post – it really helps!
👉 Vote for My SPS Validator Node
💬 Drop a comment or idea – weird edge cases welcome
v0.4.0 Release
Big Changes This Time
This release is one of those “under the hood but actually huge” updates. A lot of refactoring, cleanup and groundwork for better features going forward.
Unified Filters Everywhere
One thing that started to annoy me more and more was the filter system.
Each page had its own version. Dashboard, battles, card stats… all slightly different, all duplicated code.
So I finally fixed that.
There is now a single shared filter drawer used across the entire site. One source of truth. Much cleaner and way easier to maintain.
On top of that, I introduced a generic filter context factory. Sounds fancy, but it basically means I can spin up consistent filter logic without rewriting everything each time.
Bonus nice touch
your filter selections now persist in local storage, so navigating between pages no longer resets everything.
Earnings Data Fixed
Alright… this is THE big one of this release.
As mentioned in the intro, the old system stored everything as a single net value. That meant you could not properly distinguish between earnings and costs.
So I redesigned the SeasonBalance model.
Instead of one amount, we now have
- earned
- cost
This might sound simple, but it changes everything.
Now we actually preserve the full picture of what is happening. Especially for transaction types where both incoming and outgoing values exist.
Think about market activity. Before one number, now you clearly see what you bought and what you sold
This also required updates in the worker logic. All aggregation now splits values based on positive or negative amounts and tracks them separately.
Hive Blog Generation Upgrade
This change really shines in the Hive blog generation.
The earnings tables are now way more accurate and actually readable.
Previously you could end up with weird duplicate rows for the same transaction type. One positive, one negative… messy.
Now those are merged into a single clean row showing both earned and cost side by side.
Much better overview
much better storytelling for your reports
And honestly… this was one of the main reasons I wanted this redesign in the first place.
I also added a mechanism that allows me to ignore specific items when needed.
So if you come across any strange labels or completely irrelevant numbers, let me know and I can adjust it.
At the moment there is only one ignored type, swap_tokens.
On land this always results in the same balance afterwards, so it does not add much value.
The fees and burn fees are still included though, since those are real costs.
Codebase Cleanup
Another big internal improvement.
The massive hive-blog-actions.ts file was getting out of hand… around 900 lines 😅
So I split it into smaller service modules:
- earnings
- rewards
- tournaments
- markdown
- icons
Each part now has its own responsibility, making things easier to read, test and extend later on.
This does not directly change what you see… but it will make future updates much faster and cleaner.
Data Migration Notes
Because of the new data model, a migration was required.
What happened:
- Added new earned and cost fields
- Removed the old amount field
- Cleared existing season balance data
- Forced a full re-sync of balances
Yeah… a bit aggressive 😅 but the old data was simply not correct anymore without the split.
Everything rebuilds automatically, so no manual action needed besides re-auth if required.
Fixes
- Fixed link to jackpot prized chests
Link to this page was broken
Closing Thoughts
This was one of those updates that might not look huge at first glance… but it actually fixes a core part of the system.
- Better data means better insights
- better insights means better reports
- and in the end… a better tool overall
As always
if you run into bugs, things that feel off, or just have ideas… let me know 🙌
Curious to hear what you all think of the new changes.
Beaker signing off 🚀
Do you also want to be part of this amazing play to earn game consider using my refferal link.