Search for characters or series

OpenFiction has been in beta for a while now, and if you've visited recently you may have noticed things feeling a little sharper, a little more considered. Over the past few weeks we've added a significant batch of improvements across the platform - some visible, some invisible, all of them making OpenFiction more useful for readers and more reliable under the hood. This post covers what's changed and why.
The spoiler system is the heart of what makes OpenFiction different from a wiki, and we've been steadily making it more granular.
The most recent addition is segment-level spoiler filtering for life events. Previously, life events on character and entity pages filtered at book level - if you hadn't read a book, you wouldn't see events tied to it. That was a reasonable starting point, but it meant that a reader partway through a book could still see life events tied to chapters they hadn't reached yet. A character's coronation in chapter 20 would be visible to someone on chapter 5.
That's fixed. Life events can now be tied to a specific chapter, and the spoiler filter hides them until you've reached that point in the story. This matches the behaviour of appearances, states, and other character data - the platform now filters at chapter level across the board for readers who are currently making their way through a book.
We also added a life stage physical attribute - a segment-aware attribute type with values from Infant through to Elderly. This lets us track characters across long series where they age significantly: Lyra Belacqua is a child in His Dark Materials and a young adult in The Book of Dust; Malcolm Polstead makes a similar journey across the two trilogies. The attribute uses the same segment-aware infrastructure as other physical attributes, so it changes at the right point in the story for each reader.
Characters in fiction don't stay static. They change names, adopt cover identities, shift from minor figures to protagonists. Until recently, OpenFiction couldn't represent any of this cleanly.
Character aliases have been rebuilt from the ground up. Previously stored as a flat list on the character record, aliases are now a dedicated table with optional start and end segments. This means we can model Lord Boreal operating as Sir Charles Latrom during The Subtle Knife and The Amber Spyglass - the alias appears and disappears at the right point in the story. 518 existing alias records were migrated across 343 characters as part of the change, and all existing data is intact.
Character role periods work on the same principle. The default role field - protagonist, antagonist, major, supporting, minor - still exists as a fallback, but curators can now add role periods tied to specific segments. Sazedin the Mistborn trilogy is the canonical example: he's a supporting character for most of the sequence, but becomes a protagonist in The Hero of Ages. The platform now knows this, and can surface the right role depending on where a reader is in the series.
As OpenFiction has grown to cover more universes, the nationality picker in curator forms was becoming unwieldy - a flat alphabetical list mixing real-world nationalities with in-world ones from a dozen different universes, with parenthetical disambiguation like "Dor-lómin (Middle-earth)" cluttering the display names.
Nationality lookup values now have an optional universe association. In the character create and edit forms, the picker groups options by universe: Real World nationalities first, then each fiction universe alphabetically, then an Other group for anything unassociated. The parenthetical disambiguations have been stripped from display names - the grouping provides the context they were doing manually.
113 nationality values have been associated with their correct universes as part of this change. Three new universe entries were created to support the grouping: All-World (The Dark Tower), The Wheel of Time, and The Therin Continent (Gentleman Bastard) - series that had fictional nationalities but no universe parent to group them under.
When two characters share the same name - which happens more often than you'd expect across a platform covering dozens of universes - URL slugs used to resolve the collision by appending a number: patience-2. This was functional but meaningless, and produced URLs that gave no indication of which Patience you were looking at.
The fix works in two parts. When creating a character whose name already exists, the form now detects the collision and prompts for a disambiguating suffix - type "farseer" and the slug becomes patience-farseer instead of patience-2. And on all entity edit forms, the URL slug is now directly editable, with old slugs automatically preserved as redirects so existing links don't break.
This one is largely invisible to readers but matters considerably for how well OpenFiction ranks in search results.
Entity pages - books, characters, groups - were accessible at multiple URL paths simultaneously. A book like The Well of Ascension could be reached at its canonical flat URL (/books/{id}/the-well-of-ascension) but also at several hierarchical paths that included the series and universe in the URL. All paths rendered identical content. The canonical tag and sitemap both pointed to the flat URL, which is correct practice, but Google treats canonical tags as hints rather than directives and was splitting its attention across multiple versions of the same page.
18 nested route pages now issue 308 permanent redirects to their canonical flat URLs. Internal links throughout the platform have been updated to generate flat URLs directly. The duplicate content is gone, and Google's crawl budget is no longer being spent on redundant pages.
A small quality of life improvement that makes the curator workflow noticeably more pleasant. Action feedback across the platform - creating a character, editing an appearance, restoring a deleted entity - now appears as a toast notification in the bottom right corner of the screen, visible regardless of scroll position. Previously, feedback was rendered inline at the top of the page, which meant it was often out of view for anyone who had scrolled down on a longer page. The toasts auto-dismiss after five seconds and pause on hover.
Behind the scenes, we've been building out the data that gives book and author pages more depth. Over 300 award entries have been added across more than 80 books and 16 authors, covering Hugo, Nebula, Locus, World Fantasy, Dragon, Bram Stoker, and more than 30 other awards. Critical reception notes now cover 98 books across the platform, giving readers a sense of how each work was received on publication and how its reputation has developed since.
The platform is in a strong state. The spoiler filtering architecture is mature, the data model handles the complexity of long-running series with multiple characters and shifting roles, and the technical foundations - URL structure, canonical tags, structured data - are solid.
The next phase is content: more universes, deeper data, and more of the reading experience features that make OpenFiction genuinely useful alongside a book rather than just after it. The Realm of the Elderlings is newly seeded and worth exploring if you're a Robin Hobb reader. His Dark Materials is in. The Sherlock Holmes universe has full mystery solution spoiler filtering, which we wrote about separately.
If you're in the beta and have feedback, we'd love to hear from you. And if there's a universe you want to see on the platform, the request system is open.