June was another absolute whirlwind of activity at the AFoG laboratory! This was the first full month of development not artificially shortened by European escapades since March! We took full advantage of the opportunity and after a hard grind we have a downright juicy changelog to share today! As promised in Blog #9, the primary focus for the month of June has been on supporting guild administrators, both by building out and delivering their most requested features and by raising sponsorship money for them.
We’ll get to the new features and functions below, but first an enormous shoutout to those individuals and groups who responded positively to our sponsorship drive. This exercise has been an excellent way to kick the tires on the guild-sponsor mechanisms we delivered last month, but of course it has also been a great encouragement to see people so enthusiastic about the project that they’re willing to contribute resources to juice the prize pools. In total, during the month of June, sponsors contributed a staggering ~629 million satoshis (worth ~$2497 at the time of this writing) to AFoG guilds!
Many of those contributions were anonymous from donors who are simply excited about AFoG as a means of introducing new people to BCH, and for those people especially I am happy to report that results are being yielded. The MTGADailyChallenge guild in particular is thriving! With new members joining up almost every day, they’re approaching 70 active players!
Obviously it’s exciting to see so many new people downloading Selene Wallet and experiencing BCH for the first time, but this big pile of new users to AFoG has also been a treasure trove of valuable feedback!
Without further ado, let’s jump into the changelog!
NEW FEATURES
- Swiss format tournament events are now live! This is a BIG upgrade for AFoG as a tournament platform since Swiss is what pretty much all serious-mode tournament organizers use for competitive head-to-head games like Magic and Chess. Tournament guild administrators on AFoG now have access to a dropdown allowing them to specify the format they want to use (double-elimination and swiss are the two options, but we expect to add more in the future). Existing events will be unchanged, but newly created events will use the currently-selected format.
- A "standings" tab has been added to the bracket widget. Current standings are especially important for Swiss events, but they will now be visible for all formats.
- Guild administrators of tournament guilds can now write their own custom tournament rules using a new rich text editor widget on the admin page. These rules will automatically be displayed on the event pages at the appropriate times.
- Guild administrators now have the ability to specify the cadence (frequency) of their events. Existing events will not be changed, any modifications to cadence will only effect newly created events
- Admins of tournament guilds can now set the entry fee for their events. The change will take effect immediately (even for already-created events that are in their registration phase).
- The field of players for an event is now automatically shuffled before an event starts to ensure random seeding and a fair (unbiased, unpredictable) distribution of round byes.
- A "Resign" button has been added to the "My Matches" section of the tournament page, which a player can click to automatically forfeit the remainder of their matches. Not terribly important for double-elimination, but this should be a huge time-save for admins in large Swiss events.
- The line directly underneath the "matches" header on the tournament event page has been replaced with a progress bar showing what portion of matches have been completed vs still remain to be played.
UI/UX
- QR codes displayed across the entire site have been standardized and upgraded. The address when displayed will always be a link that will launch your device’s default BCH wallet. The link has both the amount (when applicable) and a label. The QR code will also always have the amount (when applicable) and a label embedded in it. And of course the QR image itself is larger, crisper, colored, and styled!
- The guild detail page has been cleaned up, dramatically simplified, and standardized across all guild types. It also now uses an even cooler piece of fan art for the "current game" display!
- The guild vault and guild fund pages have been simplified and merged into a single "Vault" page. In addition to containing all the information contained on the old pages, the new page ALSO includes the current value (in USD) of the BCH stored in the guild's vault, the list of all sponsors of this guild (along with their current sponsorship score and tier), and a single QR code for easy access for anyone who wants to contribute to the guild anonymously.
- The guild history page now defaults to showing the largest historical events first, since those are the most interesting. The game icons on the grid (which had been broken for quite some time) are now displaying correctly.
- When a sponsor logo on an event page is clicked, the user is now redirected straight to the sponsors website rather than to the AFoG sponsorship page.
- A new "event info" section has been added to the top of the session detail pages for Social guilds.
- The "anonymous" sponsor has been renamed to "bch community" because, let's be serious, they're the ones who have been donating anonymously!
- The sponsors list is now immediately refreshed when a new sponsorship payment is received
- There is now a proper error page for 500 (server-side) issues to replace the "developer mode" page. If all goes well, nobody will ever see it, but it’s now there just in case!
- The interval for AFoG checking for updating tournament states has been shortened from 5 minutes to 2 minutes. This should drastically reduce the gap between an event’s start time and the moment when AFoG kicks off the event and displays the bracket
- The tournament event page will now automatically refresh whenever somebody registers, so viewers can watch an event fill up without needing to manually reload the page.
- For clarity, the word "competitive" in the "guild type" dropdown on the guild creation screen has been replaced with “tournament”
BUG FIXES
- The "next session date" value on the guild page was occasionally incorrect. Fixed.
- There were a couple of days where newly created tournaments were not being seeded correctly. Fixed the problem, then recreated the affected events to get their prize pools appropriately funded.
- Viewing a multi-player team event while not on a team was throwing an error. Fixed.
- An apparent fluke in the Challonge API resulted in an AFoG event making it to the payout phase without the tournament being finalized. An unfinalized tournament doesn't have final standings, so AFoG couldn't detect any winners that needed to be paid, and so it simply advanced the event to "completed" without paying anyone. Moving forward, AFoG won't advance an event to "payout" until receiving confirmation from Challonge that the finalization command has been successfully processed and if it DOES somehow end up in payout state with no winners, it will abandon the process rather than advancing to "completed". No funds were lost during the anomaly; the winners received their prize payouts once the fix was deployed.
API
- The "get tournaments" endpoint has been cleaned up significantly, dramatically reducing the unnecessary data being sent across the wire.
- The "get tournaments" endpoint now allows requests from any origin domain so 3rd parties can fetch the list of upcoming events for their own purposes.
July 2024
Unlike with previous blog entries, here I’m not going to pick out a specific set of tasks for next month. There are still a handful of lingering feature requests before I’m ready to put bows on the “sponsors”, “admin tools” and “swiss format” story arcs, but after that I can imagine traveling in one of several directions for the rest of the month.
So, what I’d like to do instead is lay out the list of things I’m actively thinking about and can see on the horizon and would like to complete during the coming months of the journey. I’m always happy to hear feedback and additional ideas! These are in no particular order!
~Stats page~ – A page where anyone can view metrics in the form of charts about activity on the AFoG platform. So things like number of unique logins per month, the number of tournaments completed per month, how much BCH was paid in registration fees by month, how much sponsorship money came in per month, all that fun stuff!
~Revamp email~ – The current automated emails are ugly, unhelpful, and too frequent. Would love to send out beautiful HTML emails with summary info about what’s coming up in the next few days, both for guilds the user belongs to and others they might be interested in. Messages should go out less often as well, maybe twice per week at the max.
~Instant BCH pay-ins~ – At the moment, AFoG pay-OUTS are instant in the sense that the moment AFoG needs to send money, it gets sent and the user can instantly see the funds in their wallet. AFoG pay-INS (tournament registration, sponsorship payment, guild vault contribution, etc) are also instant in the sense that AFoG-controlled wallets immediately receive the funds. But they are VERY slow from the user’s perspective. They send in money and it might be hours before they can see that reflected on AFoG. This has been a sore spot for me for many months at this point (since one of the main goals of AFoG is to show people how fast and awesome BCH is), but fixing it involves a set of unique engineering challenges that historically have made this task appear daunting and time-consuming, especially next to more urgent matters in the development backlog. However I’ve recently stumbled across a tool that might make this possible, and I’d like to explore that in more detail.
~Upgrade BitcoinCashClient~ – the nuget library that provides the payment rails on which AFoG runs is in need of some work. It’s due for an upgrade to .net 8 and c# 12, but also I would like to add some functionality to it. It is missing the ability to broadcast a transaction that has multiple destination outputs, and it is also currently incapable of indicating in its responses whether or not a request has failed. This is only a problem when the block explorer API is offline (so almost never), but when it does happen, the responses the API sends back are the same as they would be if all went well and the wallet balances were simply 0. Null and 0 are not the same thing and need to be distinguished accordingly so the calling business logic can decide what it wants to do. I’m also considering switching to a different block explorer API behind the scenes.
~User profile pages~ – Clicking on a user (for example from the leaderboard page) will land you on a user’s profile page. Here you can see their tournament wins, the guilds they belong to, most played games, winnings, all that fun stuff. As part of the user profile upgrades, I want to also add the ability to upload a profile image to be displayed in all the right places around the site
~Meeting of the Five~ – This is MTGA guild I’ve been administering for the last 9 months. There are now FOUR active Magic guilds running events on AFoG, so I decided recently I wanted to set MotF apart from the others by making its events big and very infrequent affairs. So I’ve set the guild cadence to 25 (five fives) days, and the registration fee to $10. My goal is to raise enough sponsorship money and entry fees to make the prize pools of these events big enough every month that the Magic players who have been winning prizes in the smaller every-day tournaments being run by the other 3 guilds will be enticed enough to spend some of that money (getting the “send BCH” experience) on a bigger event with a juicier prize pool. Obviously this isn’t really a development task but it’s something I’m expecting to be working on over the coming months.
Get Involved
As always, thank you so much for reading this dev blog! The excited engagement of the community is fuel on the fire of AFoG’s development engine! If you want to contribute, there are very specific things you can do to help in a big way!
- Play in a tournament! Come play in our upcoming MotF event! https://afifthofgaming.com/Session/next/17 If you’re from the BCH community, come hang out and lose your entry fee to someone in the MTGA community who’s new to BCH. If you’re from the MTGA community, come win the easiest money of your life from BCH players who just downloaded MTGA! It should be a fun time for everyone!
- Become a Sponsor! As I mentioned above, I’m looking for sponsors specifically for the MotF guild (I directed all the sponsorship money from the drive to the other guilds) for ongoing monthly events. If that sounds neat to you, support that initiative here: https://afifthofgaming.com/Guild/Vault/17
- Follow us on social media! We are especially active on X, but you should for sure also join our Discord server.
\"No remuneration do I ask of you, but me cap would be glad of a copper or two!\"