Kanka 2.0 new landing

Kanka 2.0 – Harder, better, faster, stronger

Celebrating six years of worldbuilding together, we are thrilled to announce the brand new and exciting release of Kanka 2.0. This update will create a new foundation for the years to come. As we look back on the incredible journey of the past six years, we are filled with gratitude for your continued support, and we can’t wait to introduce you to the next chapter in our story. Get ready to embark on a new adventure with us, as we unveil an update that represents several years in the making.

Releasing Kanka 2.0

Nearly two years after the release of Kanka 1.0, we’re back with a big number change. We’ve grown a lot in those two years on every metric, and intend to continue on this trajectory with Kanka 2.0 and future updates.

A brand new homepage

What we refer to as our homepage is the pages people discovering Kanka see. This impacts pages like the landing, pricing, features, and team ones. I built these original pages years ago with a free theme that I had found online in under 2 minutes, and have always felt like we can do better.

Here’s what the landing site looked like in Kanka’s early years.

old frontend

Our new homepage is accessible at the usual kanka.io. It’s sleeker, has a more consistent layout, and works a lot better on mobile and large screens.

kanka 2.0 frontend

On a technical note, we no longer host the new homepage. Instead, it is “on the edge“, meaning that in theory, the website is much closer to our users, reducing latency and increasing loading speeds. We built the new website using Nuxt, a fun framework to learn.

Moving Kanka to app.kanka.io

With kanka.io no longer hosted by us, this means that we need to find a solution for the actual Kanka code. We thought about campaign, world, dash, but ultimately settled for the faster to type app.kanka.io. With us changing all the URLs of Kanka, this means that we can finally fix a lot of pain points over the years.

Firstly, we removed the language code from URLs. Logged in users clicking on a link with another language would always result in a redirection, slowing down their time for Kanka to load. The language switcher is still at the bottom of the page, which also got a better design to clearly mark it as a clickable element.

Secondly, say goodbye to the /campaign/ part of the URL. Instead, we now use /w/, which is short for world. We will slowly move our nomenclature to the more general world in the upcoming releases.

This change forced us to completely re-write Kanka’s internal routing and linking logic, which allows us the first big new feature of this release.

Introducing vanity URLs

Premium campaigns now have a vanity url field when editing a campaign.

vanity url

The vanity URL will replace the campaign number in all of the URLs of campaign. For example, have all the campaign links show up as w/exandria-unlimited instead of w/3/. It is not possible to modify this value, and it has to be unique amongst all the Kanka campaigns.

Premium campaigns that loose their premium status still keep their vanity URL.

New smarter sidebar

The first thing you’ll notice logging in to your Kanka account is the new sidebar. We’ve replaced all the default icons to be duotone and clearer. Quick links is now the clerarer bookmarks. Campaign becomes Game. History becomes Recent Changes. A new section called Time makes its appearance in the sidebar, under which are Calendars, Timelines, Events and Journals.

sidebar 2.0 time

Lastly, Campaign and Game (previously Campaign) no longer take you to the campaign settings page. This is now under the new Settings link at the end of the sidebar. This change removed 10% of questions we get on the Discord.

sidebar 2.0 settings

Context-aware sidebar

When in the campaign/world settings pages, there are no longer two sidebars. Instead, the sidebar now contains links to the various settings pages, with the first link going back to the dashboard.

campaign setup sidebar 2.0

Lookup links and bookmarks

Now, say you are looking at a beautiful map, or updating a plugin of the campaign, and want to go to the characters list, or one of the bookmarks. That’s a lot of clicks and waiting for pages to load, right? At least, we think so. So here is our fix.

Bring up the lookup interface by clicking on the search field or by clicking k on your keyboard. Below your recent searches, a new section with the bookmarks is visible.

lookup 2.0 bookmarks

Click on Lists to bring up an alphabetically ordered list of entities of the campaign, click, and voilà!

lookup 2.0 sidebar lists

Unified popups and modals

We’ve updated all of our popups and modals to now use the same look and feel, which results in a more consistent experience. From a technical perspective, we’re no longer relying on Bootstrap’s modals and using our down <dialog> elements instead, which in theory are friendlier for screen readers.

dialog 2.0 layout

Updated dark theme

In our eyes, our dark theme has always been a bit of an eye sore. Something that works good enough, but doesn’t actually follow any conventions for dark themes, ending up feeling a bit random in places.

We now use the Catppuccin Mocha theme for our dark theme.

2.0 dark theme

Enabling the gallery for all

We’re now allowing all campaigns to use the gallery feature. A 50 MB storage space is in place for free tiers (equivalent of uploading 50 images). For premium campaigns (this includes the legacy boosted and superboosted campaigns), it’s 1 GB. With 10 MB images, that’s about 1’000 images.

gallery 2.0

On the topic of the gallery, it is now possible to shift-click elements to bulk delete them.

gallery 2.0 bulk gallery delete

Adapting Kanka for 4K screens

We’re tweaking the layout for the ever growing amount of users using 4k screens and other ultra-wide screens. On most pages except for the entity view itself, content no longer grows to more than 1280 pixels. This means no more awkward form fields stretching thousands of pixels.

ultra-wide layout 2.0

Interactive tooltips

Tooltips are now interactive, meaning it is now possible to click on elements in them. The entity’s title is now a link, making it easy to go to an entity from the calendar. Tags are also clickable, and we now allow links to render the tooltip field. On a side note, I am terrified at what Salvatos will be doing with this new power.

interactive tooltips

Better dashboard layout

We hinted over a three years ago in the Discord that we want to improve the dashboard. Today, this becomes a reality. Rather than a huge redesign, we’ve updated all the widgets to follow a more similar layout. For our CSS wizards, we’ve also replaced it with a grid, allowing you a lot more freedom with your crazyness.

For entity previews, say goodbye to the awful scrolling preview. Images are now always in a 16/9 format, removing most of the guesswork from finding the perfect image for the dashboard. Entity names are now below the image, rather than on top, resulting in unreadable names. The dashboard also now supports 4K and ultra-wide screens.

dashboard 2.0

New campaign export

We’ve been unhappy with campaign exports for a few years now. We see several issues with them that are now fixed.

  • Exports now take a lot more time, but are no longer limited to the 128 MB export size limit.
  • The entity and asset exports now contain the campaign gallery.
  • A brand new interface now clearly shows if an export is scheduled, running, or ready to download.
campaign exports new ui

Performance improvements with a new cache

If you’ll indulge me for some engineering nerdiness, the way Kanka caches campaign and user content has been re-written from scratch for better performance. Instead of having multiple small caches, resulting in a lot of reads from the code to Redis, most caches are now together. We also no longer cache whole PHP objects with the expensive __serialize() and __deserialize() calls, caching instead just array key and values. From our own internal tests, this has resulted in some pages loading up to 15% faster.

Other general improvements to Kanka

We still packed this update with a lot of smaller improvements that aren’t as flashy.

Calendars have a new “Format” field. This means that it is now possible to render all dates of a calendar in a user-desired format. You can find out more in our docs.

Reminders that would span over 2 years, and thus stop being visible, now show an alert.

reminder length overflow

When viewing an entity, it’s now possible to quickly change a post’s visibility without going to edit the whole post by clicking on the visibility icon.

post visibility change

It is now possible to order campaign members by the available fields. This also works for the “last login at” even when the user doesn’t share their last login date.

members order by

Deleting a campaign invite or an API token now asks for confirmation.

confirm removal invite

In family trees, the birth and death of a character is now visible.

PayPal subscriptions

It is now possible to upgrade your PayPal yearly subscription, pro-rated to the original end date of your current subscription. Meaning that if you subscribe to the Owlbear tier and decide to upgrade to Wyvern two months later, you will only pay the Wyvern tier for 10 months, minus part of the Owlbear tier.

Changes to premium campaign switching

We have premium campaigns in place to help us work on these big frequent updates, and are incredibly grateful for those who value the effort we put in. Our pricing proposition is simple. The most resources you use, the more you can support us through premium campaigns. This system works well, however a handful of users are using a lot more resources than we’ve planned. This happens when users have multiple campaign but a single premium campaign, and switch around multiple times per week, or worst, per day, which campaign has premium features.

We get that campaigns start and fizzle out all the time, and being able to move which campaign has premium campaigns is a core part of that makes Kanka cheaper to use than our competitors.

With both of these things in mind, we are now putting in place a 7 day cooldown for reallocating a premium campaign. Clicking on the “remove premium features” now does two things. If the cooldown is still active, the amount of days left is shown. If not, it removes the premium features from that campaign, as it did before.

API breaking changes

We have a new domain name for the api, simply called api.kanka.io. You can still call kanka.io/api, which this is now a redirect to the new domain. This redirect will only be up for a month, so please change all your scripts to use the new subdomain. This redirect works when calling Kanka’s API programatically, but CORS doesn’t allow domain redirects in a response. The API docs are still available here.

For those who use eXaminator’s Kanka Foundry plugin, updating to the latest version of the plugin will switch to the new domain name.

The entity_notes endpoints has been replaced by the posts endpoint.

On the locations endpoint, parent_location_id is now location_id to have the same convention as other modules.

New API routes

We’re introducing a new campaigns/123/recover endpoint to interact with deleted entities and recover them from the API. Not only that, but we’re also adding the transform and transfer endpoints to manipulate entities.

Also new is the calendars/123/advance route for advancing a calendar by one day.

Bug fixes

I don’t suspect many of you are still reading at this point, but as usual, a lot of bugs were fixed.

Dialogs in Safari are no longer tiny and unusable.

When editing a reminder, a link to the entity is visible in the dialog’s title.

Conversations no longer allow adding the same user multiple times, leading in some funky UI bugs.

Upgrading your subscription from a lower tier to a higher tier now syncs that info again in Discord.

When bulk editing elements, the parent field is now properly labelled.

Copy-pasting an image in the summernote text editor would sometimes result in badly formed urls.

Thumbnails would sometimes fail to load on the “recent entities” dashboard widget. We actually completely refactored how this information is stored in the backend to ensure that this no longer happens 🤞

Fixed several issues on 4k screens where errors ended up being hidden.

On the API, creating an entity_events with a type_id now works.

Updating an entity through the API no longer removed the image_uuid

On the marketplace, post visibilities are no longer ignored.

Installing a theme from the marketplace now properly resets the campaign cache.

Variables for character sheets would sometimes be overwritten by empty values.


That’s it for the overview of this 2.0 release. There are a ton of things that have also changed behind the scenes, with nearly 3’000 files of Kanka and 100’000 lines of code changed, but a lot of it isn’t fun to write about.

As always, thanks to our amazing subscribers for making this huge updates possible! Come join us on our Discord to get early sneak peaks of future updates.


Posted

in

by

Tags: