Developer Blog
Dekkaru posted to Developer Blog -

When I first launched CubeCobra, I had a vision that one site could house every single tool that you would need to build a Cube, and that's what I attempted to build. As the site grew, and new features were added, we were in a spot where we had some good core functionality and a handful of features that quite honestly didn't work too well. Multiplayer drafting was the biggest offender here. I tried my best to design a reliable system, but it was riddled with many extremely difficult to solve bugs, that I just didn't have the capacity to solve them all. To make matters worse, our buggy client impacted singleplayer drafts as well, causing drafts to end early, or crash, despite not evening utilizing the multiplayer features. CubeCobra users felt this pain, and many opted to do multiplayer drafts on Draftmancer. While that site was reliable, drafting their resulted in draft logs that never made it to CubeCobra, and users wouldn't benefit from the draftbots we've worked so hard on.

This release changes all that. Unless opted out, all Cube drafts run on Draftmancer will now have their logs pushed to CubeCobra. I've added a button to the playtest page to quickly create a lobby on Draftmancer. I've also made our draftbots available to Draftmancer, so you may notice an improvement in the quality of bot picks over there. All in all, I think this integration will better suite the needs of the users of both site. You can still run playtest drafts on CubeCobra, against a pod full of our draft bots - and I expect this experience to have significantly improved as we gutted the complexity of the previous system.

This integration is part of larger shift in the goals of the website. I was wrong to think that there should be one site that should handle everything Cube-related. We are never going to out-Scryfall Scryfall, or provide a better multiplayer drafting service then a dedicated tool like Draftmancer. I want to focus instead on provided the best core services that we can provide, and create tools and integrations that other community projects can utilize to create a better Cube ecosystem for everyone.

Our last update in December saw a major migration to move our front end to Typescript. The goal of this change was to improve developer experience, and help reduce type related bugs. This has been a massive success, and we've seen a stark increase in the number of community contributions to the site. I've continued this work and now started partially migrated the backend to Typescript as well. This update is just the start of this work, but I'm thrilled to see a new wave of contributors help out with the site.

In just the past month, here are all the improvements new contributors have made:

New Features
  • Added an inline emoji to cards names if they are tagged with that emoji (you do need to enable the setting under display, you definitely want to try this one out :wink:)
  • Added "Borrowed" as a new card status
  • Added a transform button to view the back of DFCs to the card modal
  • Tag suggestions no longer require refreshing the page to update
  • Added many missing symbols, such as a, pw, tk
  • Update non-publioc Cube icon tooltip to match private or unlisted
  • Added arena export (copy to clipboard)
Bug Fixes
  • Fixed markdown code syntax highlighting
  • Fixed minor package page bugs including failing to apply keyword sorting, incorrect casing
  • Fixed label on "Show Total Prices"
  • Fixed card dragging on mobile
  • Fixed some modals not working on mobile
  • Fixed cards not being trashed during the draft
  • Align the old and new card details in changelist when there is a swap
  • Fixed some markdown regresssions from 1.0.0
  • Fixed bug where blog posts couldn't be modified
  • Fixed bug where card foiling wasn't visible in visual spoiler
  • Fixed issue where color categories weren't being read from CSV correctly
  • Fixed bug where enter/tab wasn't working correctly when modifying a Cube
  • Fixed amount of cards filtered text so it shows when there is no maybeboard
  • Fixed tag suggestion dropdown
  • Fixed token consolidation
  • Fixed bug with CSV encoding where only the first quotes were correctly encoded

One last note, regarding spambots. You probably have noticed a number of changes around the site to help mitigate this, including security questions, captchas, stricter content filtering, and report buttons around the site. Some amount of spam is still coming through, and it's very helpful for users to flag malicious Cubes and users for me to clean up. With the advancements in LLMs and cost of compute - this is probably just the reality we live in now, but every little bit helps in this constant battle against the spammers. Thank you for your understanding and support!

Dekkaru posted to Developer Blog -

Hi everyone, it's been just about a year since our last update. In that time I have done some small bugfixes here and there, but haven't made any big changes that warranted release notes. Today, I do have a major update to announce, an I'm calling it version 1.0.0, rather than sticking with our previous version scheme. The biggest change you'll see is a sweeping overhaul of the frontend. This is because we migrated away from Bootstrap and to Tailwind CSS. This change was made to make the frontend more maintainable and to make it easier to add new features in the future. I really hope you like the new look! I aimed to make things mostly 1:1 but there are noticable changes, in particular I cleaned up some areas I felt weren't up to par. We've also migrated our front end from Javascript to Typescript, which has fixed potentially hundreds of bugs in the process.

Since the front end has been overhauled so thoroughly, there may be some gaps in experience that I missed - I would love to hear your feedback! Please reach out if you encounter unexpected bugs or you feel something doesn't look good.

As the site has grown over the past year, so have our costs. We've been able to keep the site running through a combination of our generous patrons and the ads we show on the site. You may notice that I've tweaked the ads, including adding a small video ad in the corner. To be transparent, this is to help improve ad revenue to keep up with our rising costs that have been scaling faster than our patron support. I hope you understand and I hope the ads aren't too intrusive. If you'd like to support the site, please consider becoming a patron. You can find more information on our Patreon page.

Recently, you may have also noticed a sharp uptick on spam on the site. There are some mitigations I've added, included captchas on registration and on creating cubes. This has helped a lot, but there is still some spam that gets through. I've been collaborating with some other web admins who are also experiencing the same issues, and will be continuing to work on mitigations to prevent spam coming through.

We've also decided to stop using our Twitter page, and instead you can follow our Bluesky account for updates regarding the site.

There is a very long list of bugs fixed by myself and our community of developers who have graciously contributed to the site. I won't list them all here this time, but I want to thank everyone who has contributed to the site in the past year. I really appreciate all the help and support you've given us.

Dekkaru posted to Developer Blog -

It's been a while since our last official update, but I'm very happy to announce the results of an end of year bug squashing endeavor. There are a number of bugfixes that have been long-overdue, and I've tried to address to largest impact ones with this update. Special thanks to all the contributors who helped with this update, this is not something I can do alone easily and the extra help is very appreciated.

Some of the larger bugfixes include an issue where drafts would end early. We're not sure if we've completely fixed the issue, as it's a difficult issue to reproduce, but we believe this should happen significantly less often now. There have been some data errors with cubes, particularly when editing with multiple devices and an older cube list is loaded up in a browser. When trying to apply an update to an out-of-date cubelist, now we will correctly error, preventing the unintended removal of cards.

We've also taken the time to update our multi-purpose machine learning model that includes draftbots, deckbuilding, card suggestions, and the "synergy with" section on card pages. A re-train was necessary in order for the draftbots to recognize newer cards that were not in the prior training dataset. We removed elo from the model as we decided it wasn't needed, and it was negatively impacting high elo outlier cards. We added a new function to the model to help calculate synergy, which as a side effect helps all the other functions "understand" individual cards better.

On a more personal note, I want to thank all the users and supporters of the site for bearing with us while we have had so many outstanding bugs. I know it's been frustrating, and I'm sorry it's taken so long to get to this point. This year I've been faced with many distractions from fulfilling my role as the maintainer of Cube Cobra, including finishing up my final semesters in grad school and working on CubeCon. Fortunately I've graduated now, and hopefully that will translate into more free time to continue the work to improve Cube Cobra. I've also made the difficult decision to no longer work with CubeCon going forward, which frees up even more time and energy to focus on Cube Cobra. I'm excited to see what the future holds for Cube Cobra, and I hope you are too.

Bug fixes:

  • Fixed a bug that causes drafts to end on an earlier pack than expected
  • Invalid cards in packages fixed
  • New patreons can correctly link their accounts again
  • Fixed a bug with editing cubes where cards can be removed unintentionally
  • Featured cube queue has been fixed, including rotation automation
  • Podcast auto-fetching automation fixed
  • Fixed a bug where account email can't be updated
  • Special characters don't break autocomplete (looking at you, LTR)
  • Content creator dashboard fixed
  • Fixed a bug where comment reports fail to be delivered
  • "Synergy with" section on card pages no longer shows nonsense for high elo outlier cards
Dekkaru posted to Developer Blog -

Thank you for your patience during our downtime! This migration was important for the long term maintainability of Cube Cobra. We've been working on this update diligently since the last release, 9 months ago. As of writing this post, you will immediately notice that all of your old decks are missing, and that card analytics (like top cards) have no history, don't panic! This is going to take another few days to be migrated, and I didn't want that to be a blocker to use the website. I'll keep up a banner until those two processes are complete.

So, what's new with this update? In truth, only a handful of things. We've fixed many major bugs since the last release, and refactored the entire front end. The goals of the work we've done are more focused around scalability and maintainability of the project. That said, there are some major improvements to the core workflows of managing a cube. First, all cubes now have a history tab, that shows the history of the cube. We've backfilled this history based on blog posts, but moving forward, even changing attributes of cards will be tracked in the history. There's still a lot more work we can do to build on top of this, such as undoing changes, viewing a "point in time" view of a cube, and even comparing that point in time with another cube. The cube history system is designed to support these operations, so you can expect us to deliver those features in the future. With this update in how we handle edits to cubes, you'll notice blog posts have similarly been refactored. As a legacy remnant of the first implementation of the site, we were storing changelogs as plain text instead of the data the change represented. Since we now track the actual change in data, changelogs in blog posts will be easier to read, with consistent autocard and links, and updated symbols that I think you'll love.

Analytics is a big part of this update. While they're not going to migrated at the time of writing this blog post, they will be soon. The old system relied on a script running every day that saved the state of the system. This is problematic because if this script ever failed for any reason, we would have gaps in our data until the issue can be fixed. This has led to all sorts of various issues with our analytics including inconsistent Elo, and the graphs looking nonsensical. The new system leverages the fact that we have dated changelogs for every single cube, and will write updates as a function of the entire state of the system. This means that if there are gaps in the data, they will be backfilled. This also means that Elo will be calculated as a function of all drafts, instead of updated as drafts occur. If we change how we calculate Elo now, the Elo value for all cards will be adjusted as if the new calculation was in place since the launch of the site.

So, what does this update NOT do? This update is not a complete fix for all the drafting issues. We've been struggling significantly with our draftbots for quite honestly an unacceptable amount of time, and for that I'm sorry. There are still some open bugs related to drafts crashing, that will be my top priority now. The draftbots themselves will be slightly better, but not great. They are a simple function of Elo and Color Identity. However, I am currently working on a complete refactor that I believe will be a game changer.

Lastly, I want to say thank you to all the volunteers who decided to help test this release. I really cannot express the depth of my gratitude, this release would not have been nearly as polished without the time that you have all put in. This doesn't mean this release is perfect, and I will be working around the clock the next few weeks to squash any and all bugs reported, so if you encounter any unexpected behavior please let me know. This was a major refactor, and there will be corner cases we have missed.

Dekkaru posted to Developer Blog -

Today's the big day! It's our first major update since 5.7, seven months ago! I promise that the wait was well worth it though, as this is the update that brings multiplayer drafting to CubeCobra. All drafts on CubeCobra will use the new model, even singleplayer drafts. These drafts bring completely brand new draft bots - with the only major downside that we no longer support users drafting while not being logged on. The reasons for this is somewhat complicated, but the brief is that anonymous drafters leads to unique challenges that we want to avoid entirely.

In addition to the new major feature, we've also upgraded our front end styling library up a major version, which will have impacts on every page of the site. If something minor now looks wrong, like a button color being off, or a spacing issue, please let us know, as it's been difficult to find every small issue during this update. As a result, more components are now ctrl+clickable, such as cube previews - another highly requested feature.

This is the part where I'd usually list every new feature and bugfix, but seven months of small changes is a bit cumbersome to look through, so instead I'll omit this section. Moving forward, I'm implementing a new internal practice to ensure that even with these long lulls of no updates, we'll still have a comprehensive changelog.

Dekkaru posted to Developer Blog -

Today, we're releasing a batch of changes in order to fix a bug that was created by the "Heads I Win, Tails You Lose" secret lair, that caused our automated card update script to fail to import new cards from Scryfall. This should be fixed, and you can expect missing cards to be propagated up to a day after this announcement.

We definitely are in a bit of a lull for development of new features, and I wanted to give a special thanks to Vaasa (on discord, lunakv on GitHub) for implementing almost every change in this release. My personal development time has been quite limited, and the time that I do have I have spent on a large feature that is still not quite ready enough for release

Since our last release, CubeTutor has sunsetted their service, so we've accordingly removes all references to CubeTutor, including our "Import from Cubetutor" feature.

We've made major changes to how we handle private cubes, previously dubbed "Unlisted Cubes". Now, on a private cube, no one besides the owner can see the cube overview or any other pages, start a draft of the cube, generate sample packs of the cube, and view blog posts attached to that cube.

New Features:

  • Added 'banned' and 'restricted' filters
  • URL parameters carried over when editing cube, so your sort/filter won't be reset
  • Better private cube support
  • Added system for global notices (like "this site is in maintenance mode")
  • Blogposts now created when a cube is cleaned for invalid cards
  • Added 'Etched' as a finish, in addition to 'Foil' and 'Non-Foil'

Bugfixes:

  • Fixed a bug with banner advertisements blocking some UI elements
  • Several missing tokens added
  • Fixed a bug with bulk TXT upload format
  • Remove defunct CubeTutor import
  • Grist now filters correctly for being a commander
  • Fixed a bug with pagination calculations
  • Fixed parsing of reversible cards (such as cards from "Heads I Win, Tails You Lose")
Dekkaru posted to Developer Blog -

Thank you for your patience during our downtime. This maintenance was necessary to enable us to help build new features that are still in the pipeline.

It's been a considerable amount of time since our last release, and while we don't have any game-changing new features to bring to you today, we do have some significant quality of life features and bugfixes.

The biggest new feature is an automated featured cube rotation, for 'Coiling Oracle' level patrons. You can now add your cube to the queue, and easily track your cubes placement until it's your turn to have your cube featured.

New Features:

  • Automated the Patreon featured cubes queue
  • Adds a default seat count option to custom draft formats
  • Added a download button to the QR code modal and updated styling
  • Added an error message page for users who have javascript disabled in their browser
  • Added "is:reprint" filter
  • Added "is:firstprint" filter
  • Added "Add", "Remove", and "Total Size" counters when editing a cube
  • Notifications will now be sent when a cube has cards removed through the periodic data cleaning process

Bugfixes:

  • Fix some issues with editing a blogpost
  • Fixed adding a card to a cube from card pages
  • Accept "TRUE" as a value for maybeboard to support excel edits
  • Fixed a couple +2 Mace bugs
  • Fixed several edge case bugs around bulk upload
  • Fixed a bug with mass editing cards' CMC
  • Fixed card redirect URLs that used slash characters, such as split cards
  • Fixed an issue where users could not delete their own decks
  • Fixed the missing 5%-8% category in popularity sort
  • Fixed "Cannot read 'cards' of null" appearing when trying to draft a cube
  • Fixed several client-side warnings
  • Fixed a typo on filter syntax documentation
Dekkaru posted to Developer Blog -

We have a small release for you today, but a significant one. I want to preface this with a bit of context. I love working on Cube Cobra, and it makes me incredibly happy to see how far we've grown. I am dedicated to doing the best I can to provide the best possible service, and this would not be possible without the generosity of our patrons. But unfortunately, despite our successful Patreon campaign, we haven't been able to consistently meet our hosting costs, even between Patreon, affiliates, and merch. As much as I love maintaining and updating this project, I can't continue it if it becomes a significant monthly bill for me. That's why I've decided to run advertisements on the website. I know this isn't the direction you were hoping for us to go in, but I have gone out of my way to make them as non-intrusive as possible. If you're a patron, and you have your account linked, you will not see any ads. If you have an adblock on, please consider turning it off, as it will impact our bottom line. The ads will not occupy and previously used space, but please let me know if you have any feedback. And once again, thank you so much for all of your support so far, I really could not have done this without the incredible community behind me.

Let's move on from the sappy talk - we do have some nice quality of life features and bugfixes to roll out. I've made some requested UI tweaks that should noticeably improve user experience. In a previous release, we removed the dashboard blog post pagination, and now we're bringing back the ability to view older blogposts, with infinite scroll! If you want to see older posts, just keep scrolling... and scrolling... forever! Or, at least, until we run out of content to show you.

New Features:

  • Added infinite scroll to dashboard feed
  • Add show/hide unsorted cards to display dropdown
  • Added "Add new cube" option to your cubes dropdown
  • Card search now respect filters for set more strictly, card must be in set, not have a version in the set (only affects card search and top cards)
  • Onboarded with Nitro Pay(our advertising partner)

Bugfixes:

  • Fixed cube card count on bulk upload
  • Fixed clone and rebuild deck
  • Fixed issue where delete deck modal could not be dismissed
  • Fixed error handling on sample pack failure
  • Fixed content browsing pagination
  • Fixed playtest page crashing if logged out
  • Fixed viewing user pages when logged out
Dekkaru posted to Developer Blog -

In today's release, we've mostly fixed a few critical issues with the site around top cards and cube searching. The previous paradigms for both these pages turned out to not be scalable, and poorly utilized our database. Top Cards has been reworked to not even touch the database now, by utilizing some cached information, and should work perfectly. Cube search has been reworked completely as well, using the keyword indexing capabilities of our database. I'll still keep a close eye on cube search latencies, but I believe it should be significantly improved. I've also added a new way to search for cubes: tags. If you have a tag on your cube (set in overview), you can now click that tag to see all cubes with that tag. If you haven't tagged your cube yet, go try it out! It's potentially a great way for other users to find your cube with a specific theme!

We've also added a long-requested feature of popularity sort and filter. This value is a percentage of cubes a card is included in. You can also filter cards by cube count and pick count, by using the numerical filters pickcount and cubecount.

Another big improvement we made is an integration with Patreon. On your account information page, you can now find a tab to link your Cube Cobra account with your Patreon account. Currently, this won't accomplish anything, but we have plans to add some extra perks to patrons, like a cosmetic name alteration across the site to mirror our discord roles, and also a fully automated featured cube queue. I want to be clear, we will not ever put any cube curation features behind a paywall. The only patron only features will be either cosmetic, or related to amplifying exposure, such as the featured cube queue. We are also exploring the possibility of putting ads on certain pages to help cover our rising infrastructure costs, being a patron will automatically hide these, if we decide to move forward in that direction.

New Features:

  • Added popularity sort and filter
  • Implemented full cube tag functionality
  • Added Patreon Integration
  • Added cube count and pick count filters
  • Changed reminder banner background color

Bugfixes:

  • Top cards reworked and fixed
  • Cube querying improved
  • Fixed anonymous draft notifications
  • Fixed decklist uploading
  • Fixed an issue where the last pick of drafts wouldn't be submitted
  • Fixed an issue that prevented cube Elo from being updated
Dekkaru posted to Developer Blog -

Thank you for being patient during our downtime. This was a necessary measure to perform a data migration to enable some of our new features, help keep hosting costs low, and to lower the amount of data needed to be loaded for various activities.

With this release we updated cubes to only have 2 IDs. Previously cubes had a random long id, a random short id, and possibly a custom ID. We combined the short ID and custom ID so now when you define a custom ID for your cube it'll replace the short ID. This makes links much more consistent across the site. We also added the long ID to a modal on the overview page for the cube. You can access it by clicking the question mark next to the Cube ID field. Use the long ID if you need links that will always work since links using the short/custom ID will break when the custom ID is set or changed. This will break some links to existing cubes that used the short ID when the cube had a custom ID as well.

Now for the big stuff. Drafting got a major overhaul this release. Internally nearly all the code was edited or rewritten to modernize and improve functionality. What this means for you is that draft and deck pages should load faster now. The draftbots should also be improved and faster. Ruler501 will write about the draftbot improvements and what else is being done for them in her series on the draftbots at a later time. It is unlikely that these changes will destroy data in existing cubes/decks/drafts, but if you notice any please report it to Dekkaru who can get the previous version restored from our backups.

Custom formats were also greatly improved with this release with several all new, and much requested features. First you can now specify the steps to draft each pack in your cube. A step is an action such as

  • Pass the pack in the correct direction
  • Pick a card from the pack (can also have this be a random card).
  • Trash/Burn a card from the pack (which can also be random).

In the future we can add even more actions to this list as they are suggested. Using these actions you can implement things like the formats for Commander Legends, Double Masters, Sealed, Pancake and more. As a tip if you want to have the last N cards in a pack picked or trashed (like say a sealed pack) you can make it randomly pick that number of cards so you don't have to click through picking each one. The UI for this is experimental and we would greatly appreciate feedback on how to improve it.

New Features:

  • Reworked custom draft formats, adding a way to customize draft steps (pick, skip, burn/trash, pass)
  • Updated cubes to only have two IDs, a long canonical ID, and a customizable shortID.
  • Clarified cube ID presentation on cube overview page
  • Sort card version list by release date in card edit modal
  • Fixed links to Lucky Paper's cube map

Bugfixes:

  • Fixed an issue with adding a card while specifying versions when that card has multiple versions in the selected set
  • Fixed memory leak with analytics aggregation, should regularly update automatically now