Fourth Week Site Update
It’s our fourth week with Idunn, and we’re still busy as bees: 111 changes shipped. With the post-cutover firefighting largely behind us, most of this week went into things you asked for rather than things that were broken — though the headliner is actually a fix.
First things first, 10,809 posts that were incorrectly thrown away during the migration are back. Beyond that: you can draw cards in a game, games can finally be searched by their system, the user guides have pictures and animations, the generators are public again, and the “who can send me a message” setting — which turned out to have been doing nothing at all — now works.
10,809 Posts Recovered
zaffo restored some soft-deleted topics from a game’s Recycle Bin, found every one of them empty, and reported it. That report turned into the largest data recovery we’ve done since the cutover.
Here’s what happened. Many GMs used the old site’s “hidden” moderation state as a privacy tool — hiding a DM’s Office topic rather than using Baldr’s Private For / Private From settings. When we imported, those hidden topics came across with their posts marked deleted. Then, on June 29, a cleanup script written to remove a different class of phantom post swept them up as well, and removed the records that would have let us find them again. The result was a topic that restored from the Recycle Bin with nothing in it.
The loss fell hardest on exactly the content GMs most deliberately protected: 1,644 topics across 589 games.
On August 17 we rebuilt the missing content from the old site’s final database dump (which we’ll continue to keep in hand indefinitely, just in case):
10,809 posts restored, along with 1,324 roll sets and 4,927 dice rolls reattached to the posts they belonged to. Zero failures, and no post count mismatches across 745 forums.
Posts that were hidden only because their topic was hidden come back visible. Posts hidden in their own right stay hidden. The topic’s state breaks the tie, so a post a GM deliberately removed is still removed.
The topics themselves are left in the Recycle Bin. You hid them on purpose; restoring one stays your call. Restore it now and the posts will be there.
If you restored a topic since the cutover and found it empty, this is very likely your content, and it’s very likely back. If you check and it still isn’t, please file it; that means yours is a different cause.
Drawing Cards ♠️
Dice have been part of the site since 2006. Cards haven’t. Now they are. You’re welcome, Savage Worlds players.
You'll find the new Cards mode in the Random tab (previously labelled Dice), in any editor where you could roll dice before. Draw from a standard 52-card deck, a 54-card deck with jokers, the 54-card Savage Worlds action deck, a 78-card tarot deck, or a deck built for your game.
A deck is managed per topic. Draws come out of one shoe, so a card that’s been drawn is gone until the shoe is reshuffled; the deck depletes the way a physical one does, and the panel tells you how many cards are left. You can have multiple decks in a single topic, but you can't share a deck across multiple topics.
Reshuffle and close are different things. Reshuffle returns every card and starts a new pass, keeping the history. Close just stops further draws. Neither one changes a draw already made.
Draws can be blind. Just like dice, you can draw where nobody, including you, sees the result until it’s revealed.
A draw is permanent and self-contained. The post records the card, the deck it came from and which shuffle it was. Edit the deck a year later, or delete it entirely, and that post still reads correctly.
Cards and dice share one composer. You can queue a draw and a roll together and commit them to the same post.
“One each” deals to every player in one click. The button carries the count, so a four-player game reads One each (4). Each card is its own row labelled with that player’s name, so it reads as an initiative order rather than an anonymous handful — and with the deck kept open, no two players can draw the same card.
GMs can build decks for their own game under Manage Game ▸ Card Decks — one card per line, so a deck is as fast to paste in as it is to type; the dice guide has the format. Standard decks are available in any topic. A topic outside a game (general forums, community topics) can still draw from a site-wide deck — it just can’t hold a persistent shoe, since there’s no game to own it.
Two fumbles during the deployment of this feature. Inline dice rolls broke for part of August 22: the shared composer changed shape underneath the inline roll dialog, and every inline roll returned “Nothing to roll”, which was promptly reported by multiple users. And a community-forum topic couldn’t draw at all for the first day. Both are fixed and have test cases specifically to validate they don’t break in the future.
As expected for a brand-new capability, your enhancement requests started arriving within hours of it going live. Dealing by character rather than by player, a major-arcana-only tarot option, GM-authored symbol dice: all filed, all doable, none built yet. Soon™.
Games Can Be Found By Their System
If you searched for “Shadowrun” or “Dungeon World” and got nothing useful, you weren’t doing it wrong.
Two searches sat side by side, and only one of them could find a game by its system. The game directory searched the system name. Site search did not; it looked only at a game’s name and description, and assigning a system to a game never updated its search entry.
Measured on the live site before the fix:
36,859 games, of which 35,876 (97.3%) have a system recorded.
33,130 of those (92.3%) did not match a search for their own system name.
D&D 5e: 4,385 games, 100% invisible. Pathfinder 1e: 5,676 of 5,723.
Among currently live games: 2,041 of 2,241 (91%).
That’s now fixed, and it explains a good share of the empty guide searches we reported last week. Users typing dungeon world, shadowrun, traveller into a search box weren’t asking a documentation question at all. They were looking for games, and the search couldn’t answer.
Genres are searchable too, on the same mechanism. Only 311 games carry one today, but it’s a newly added field and adoption is climbing (12.3% of live games), and of 16 games tagged Urban Fantasy, exactly zero were findable by that phrase before.
Ranking is deliberate: a game named for a system outranks the thousands merely using it, and a game that describes itself as fantasy outranks one merely tagged Fantasy.
Game System Pages, Without Signing In
Related, and new: every game system now has a public page — /systems/pathfinder-1e and the like, listing the publicly visible games running on it.
This is the first way an anonymous visitor can browse games at all. Until now the anon surface showed you a system name on every card and teaser and gave you nothing to click; the only search available signed-out was the guide search.
The pages are honest about what they’re not showing you: “Showing the 12 publicly listed games of 247 active Pathfinder 1e games. Sign in to browse them all.” The total counts every active game, the list shows only the ones already publicly visible — private games stay private, and the gap is stated rather than hidden. These pages are crawlable, which is the point: they’re the front door for someone looking for a game in a system they love, and now they can find them from their favorite search engine.
Search Got Faster
Following the August 12 incident, we went looking for why post search was slow, and the answer wasn’t what our own architecture notes said.
The theory was that a common word forces us to read the whole post archive. That’s true for a handful of very common words, but it still didn’t explain the results. A search for orphaned characters matches 7,627 posts, 0.04% of the archive, and still took over 5 seconds.
The real cost was that those 7,627 posts are scattered across the disk, and the database was fetching them one block at a time, waiting for each. One setting later, it fetches many at once:
Roughly 3x faster on a cold search (a matched pair of comparable searches: 4,385ms → 1,409ms).
The benefit is largest exactly when several searches are running at once, which is the shape of the incident that started this.
Also fixed: BBCode tags were being indexed as if they were words. The most common “words” in the 17.5-million-post archive were markup — b appeared in 24.6% of posts, color in 17.7%. So searching for quote, color, spoiler or size matched posts that merely used that formatting, and search snippets could render raw tags at you. Tags are now stripped from the index.
The larger re-index behind this is running in stages. Almost 21% of posts had never had their searchable contents properly extracted, and we’re fixing those first. Then we’ll tidy up the rest of the posts in the background while keeping the database load low enough that you won’t notice.
Who Can Message You
A member reported a suspicious new account: registered, verified an email, sent friend requests to ten people, never posted anything, used a photo stolen from Facebook, and sent one “Hi, how are you doing” message.
Chasing it found that several of our safety controls weren’t connected to anything.
The “who can send me a direct message” setting did nothing. The control was in your preferences, the server code that reads it was written and correct, and yet nothing ever called it. Eleven people had set it to friends only or moderators only and were receiving messages from anyone. It is now enforced, on every path into a conversation.
Friend requests now require a verified email. Accepting, declining and blocking do not; those are responses to contact you’ve already received, and gating them would leave an unverified account unable to decline or block.
Banning a user hid nothing they’d already put on the site. A ban stopped the account from doing things; their avatar, bio and signature kept rendering on every post they’d made. A banned account’s profile content is now suppressed wherever it’s served. Their username and posts stay; blanking those would make every thread they took part in unreadable, and we’re not trying to rewrite history. The suppression is reversible: lift the ban and the content returns, because bans get overturned and suspensions expire.
There’s a cap on outgoing friend requests, and it scales with standing. A flat limit was measured and rejected: our highest-volume senders are our most established members (21 a day, with 5,595 posts; 17 a day, with 11,574), and the abusive account sent ten. Any limit loose enough to spare legitimate members never fires. So an account with no posts and less than 30 days old has a tight daily limit on new contact requests; everyone else gets a higher per-day ceiling, which is a backstop against a compromised account and not something you should ever notice.
Staff also get a queue that surfaces potentially abusive behavior, so we can spot it faster — hopefully before it reaches you.
Signup volume itself remains steady and full of ordinary potential members; the captcha and verification work from earlier in the month is holding.
The Guides Have Pictures
The user guides were all prose with placeholders. They now carry 46 screenshots and 3 short click-to-play animations, covering the editor, dice, maps, calendars, character sheets, moderation tools and more.
The part worth knowing: none of them are hand-taken. Every image is captured automatically from a running copy of the site, against a purpose-built demo game, with a check that reconciles every guide’s images against what actually got captured. When a screen changes, it gets re-shot on the next deployment cycle, ensuring it stays fresh and doesn’t become a misleadingly historical artifact.
Announcements can carry a video now, too. If (when) we post a feature spotlight, the video plays on the announcement, on its shareable page, in Discord and on Bluesky. And a :::video block embeds one directly in a guide page, click-to-play (no auto-play from us).
The Generators Are Public Again
The dungeon, cave, town, name and treasure generators are back at /generators as a standalone page. No sign-in, no app to load, styled to match the rest of the site.
They’d been living inside the main application, which meant a visitor without an account couldn’t reach them at all. Along the way we fixed a redirect loop in the cave generator, which had been sending people in circles.
Editor Work
All three source-editing modes are on a proper code editor now. HTML, Markdown and BBCode all get syntax highlighting, bracket matching, and — for the first time in Markdown and BBCode — undo and redo. Formatting buttons wrap your selection and keep it selected, so Bold-then-Italic nests correctly instead of stranding the cursor.
The dice composer got autocomplete. Typing a roll now offers completions, shows you a function’s arguments as you type them, and checks the expression before you commit it.
The color-picker crash is properly fixed, and properly understood. This one took three attempts across three weeks. The picker was firing its change handler twice, the second time in the middle of the first, which broke the editor outright. We also enhanced our internal logs along the way, since our initial read of the problem was bounded to Android-only when in fact it could affect iOS and desktop Safari as well.
Blocks can be deleted on touch devices. Reported against spoilers on Android: select the block, press backspace, and it “does nothing but deselect.” The on-screen keyboard delivers that press in a way the editor never saw. Fixed for spoilers, and also for four other block types the audit found with the same defect.
Attachment removal waits for you to save. Removing an attachment while editing used to take effect immediately, even if you abandoned the edit. It’s now staged with the rest of your changes.
Imported posts are no longer silently converted. A post carried over from the old site is stored in its original format. Editing or cloning one used to quietly convert it to the current editor’s format, sometimes changing how it rendered. Now you’re offered the conversion, with a list of what will change, and “keep as HTML” is a real answer that sticks.
Fixes
162 forum descriptions were showing literal HTML tags instead of formatted text. Cloning a forum now carries the description correctly too.
Account deletion and merge left half of each profile behind. The bio and signature are each stored twice — the text you wrote and the rendered version — and only one half of each was being cleared. So a deleted account’s signature kept serving on every post it had made. Both halves now go.
Player View showed no forums for a GM previewing an applicant’s view. Two unrelated bugs producing the identical empty screen: the previewed applicant was being discarded and the gates answered as a stranger, and changing a game’s visibility didn’t clear cached permissions for up to five minutes. Both fixed. (If you ever changed a game’s visibility and it seemed not to take effect, that was this. Try again, it will work now.)
Issue comments can be edited and deleted, and a comment can be split out into its own issue: a useful feature for the dev team when a report grows a second, unrelated problem in its replies.
Behind the GM Screen
A moderation audit write on game cascades was being fired and never waited for, so it could be lost. Fixed.
We’ve started rescuing off-site images. We found that about 29% of the images people have hot-linked into posts from elsewhere are already gone, and the decay has a clear age curve: pre-2015 posts are only 51% alive, 2015–2022 are 72%, and even 2023-and-newer is already at 93%, meaning recent content isn’t safe either. New image references are now being copied to our own storage as they’re written, wherever possible. These copies do not count against your storage quota, by design, as we’re doing this to preserve your referenced content as intended. The backfill over the existing archive hasn’t started yet; that’s this coming week, oldest content first.
Client-side code errors are now on a lint monitor, so the standing backlog can’t grow while it gets worked down.
Deploy-time checks were added for guide screenshots, for editor format parity, and for a database-schema invariant that catches an unclassified new column before it can quietly hide images from our reference index.
Every Site Update So Far
Site Updates — Feature Freeze & the Road to Cutover, June 26 to June 30
This announcement — August 16 to August 22
What’s Next
Check your Recycle Bin. If you hid topics on the old site and restored them here to find them empty, restore them again — the posts and the dice rolls should be there now. Tell us if they aren’t.
Go draw some cards. It’s brand new, and the first day already produced several good feature requests from people using it. Keep them coming.
Search for a game by its system. That was broken for 92% of games until this week, so if you gave up on it before, it’s worth another try, whether you’re signed in or not.
Check your privacy settings. If you’d set “who can message me” to something other than the default, that setting wasn’t being applied. It is now, but it’s worth confirming it says what you meant it to say.
Feature requests. As promised, this was the first week weighted toward what you’ve asked for rather than what was on fire. That continues. The issue tracker is where it starts.
Keep on weaving those myths!