Stream Facility

Development Log

A running record of what's been built, what's underway, and what's on the horizon. Updated as the platform grows.

Last updated 2026-07-12

74

Features built

0

In progress

2

Planned

World-BuildingBuilt
2026-07

Codex Tag Expansion & Entity Page Skills

All major codex entity types now carry predefined tag fields — roles and traits for characters, faction/location/item/creature/organization tags, and series themes. Entity pages gain a skills snapshot field so skills active during a specific period override the base character profile in AI context.

  • ·Predefined vocabulary: CHARACTER_ROLES, CHARACTER_TRAITS, CHARACTER_SKILLS, LOCATION_TAGS, FACTION_TAGS, CREATURE_TAGS, ITEM_TAGS, ORGANIZATION_TAGS, SERIES_THEMES in src/lib/codexTags.ts
  • ·TagInput component extended with optional suggestions prop — clickable chips for one-click add
  • ·Characters Skills tab: roles and traits TagInputs with predefined archetypes and personality tags
  • ·Entity page skills snapshot: skills active during a specific in-world period; resolveEntityState merges page skills over base entity skills
  • ·AI context: formatEntity() now emits Roles: and Tags: lines alongside existing Skills: and Traits:
World-BuildingBuilt
2026-07

Entity Pages — Temporal Connections

Entity pages now support page-to-page connections across all codex entity types. Each connection links a source page to the specific page of the target entity that overlaps the same in-world time period — so Amelia's Oct 2024–Dec 2025 page links to Iron Guild's page for the same era, not just the entity itself.

  • ·45-label controlled vocabulary grouped by category (Affiliation, Opposition, Alliance, Social, Location-based, Possession, Event-based, Succession, Knowledge, Belief, General)
  • ·Temporal overlap resolution: auto-finds and suggests the target entity's overlapping page; no-end-date pages treated as ongoing
  • ·Bidirectional connections: author-controlled toggle writes a reverse connection to the target page with linked IDs for precise cleanup
  • ·UI: entity type picker → debounced codex search → auto-resolved page → label dropdown → bidirectional toggle, all inline on each PageCard
  • ·AI Write Assist: connections injected into context with 1-level-deep page fetch (role + bio from linked page)
World-BuildingBuilt
2026-07

WorldMapView: Interactive World Map with Era-Driven Time Player

The world detail page now shows an interactive map with entity pins and an era-anchored time player. Scrub through the world's timeline and watch pins appear and disappear as entities enter and leave each region. The time axis uses the same era coordinate system as the visual Gantt timeline.

  • ·Era-anchored slider: min/max = first era startSortKey → last era endSortKey — same axis as the visual Gantt timeline
  • ·Segmented era track with proportional color bands, active era at full opacity, red scrubber line
  • ·Pins visible when their time range covers the current scrubber position (null bound = always visible on that side)
  • ·Ghosted pins: hidden (time-filtered) pins rendered at 25% opacity so the author always sees all placements
  • ·Click any pin to open a selected-pin card with entity name, type badge, label, and date range
  • ·Current position shown as 'Era Name · specific date label'
  • ·Returns null (no-op) when the world has no mapImageUrl — no empty state to manage
World-BuildingBuilt
2026-07

World Map Placements System

Authors can pin any codex entity onto the world map at one or more points in time. A MapTab component on entity detail pages provides a click-to-place map picker with mini-map thumbnail cards. Positions are stored as percentages so they work at any image resolution.

  • ·map_placements collection: mapX/mapY as 0–100% of image dimensions; entityName denormalized for join-free world queries
  • ·beginsSortKey / endsSortKey use worldDateToSortKey() — same formula as entity_pages for range queries
  • ·GET /api/map-placements?worldId= returns all pins for WorldMapView; ?entityId+entityType= for MapTab
  • ·POST auto-fetches entityName from the source collection across all 21 entity types via COLLECTION_MAP + NAME_FIELD tables
  • ·MapTab: click-to-place picker with crosshair overlay, mini-map thumbnail cards, EraDateSection for time range
  • ·MapTab now wired to Characters, Locations, Regions, Factions, Creatures, Items, and Organizations
  • ·linkedEventIds checkbox picker in the placement form: link any placement to world events; count shown on thumbnail cards
  • ·mapImageUrl field added to Location and Region APIs and detail pages (ImageUpload component)
World-BuildingBuilt
2026-07

Personas: First Appears In Fix & Aliases Dirty State

Two character codex improvements: the persona creation form now correctly captures and persists the 'First Appears In' book and chapter (a bug that silently dropped the value), and the Aliases tab Save button is gated on a dirty state so it's only active after a change is made.

  • ·Persona creation form adds dedicated 'First appears in book / Chapter' fields above the reveal section
  • ·introducedIn and introducedInChapter sent to POST /api/character-personas and persisted on the persona doc
  • ·Save Name Variants button disabled until a name variant is actually changed
  • ·'Name variants saved.' confirmation shown for 3 seconds after a successful save
  • ·aliasesDirty state set on any AliasInput onChange; cleared automatically on save
World-BuildingBuilt
2026-07

World State Resolver

A new GET /api/world-state endpoint takes an entity, an era, and an in-world date and returns the entity's state at that exact moment — base profile merged with the active Page snapshot. This is the core operation that AI chat and writing assist will use to answer 'what was X like in Year 847?'

  • ·Accepts entityId, entityType, eraId, and sortKey (integer from worldDateToSortKey)
  • ·Finds the Page snapshot whose period covers the requested date (inWorldBeginsSortKey ≤ sortKey ≤ inWorldEndsSortKey)
  • ·Merges base entity fields with Page snapshot fields — Page fields win when non-empty
  • ·Returns activePage metadata alongside the merged state for transparency
  • ·Supports all six entity types: character, item, faction, location, creature, organization
World-BuildingBuilt
2026-07

Entity Pages: Date Sort Keys

Every Page now stores inWorldBeginsSortKey and inWorldEndsSortKey — integer values derived from the WorldDate object at save time. These enable reliable range queries for the state resolver and future AI chat system without relying on string comparison.

  • ·worldDateToSortKey() added to src/lib/worldDate.ts
  • ·Formula: effectiveYear × 100,000,000 + month × 1,000,000 + week × 10,000 + day × 100 + hour
  • ·Coarser fields (millennium, century, decade) treated as year offsets for monotonic ordering
  • ·String-format dates (free-text fallback) produce null sort key — they cannot be range-queried
  • ·Computed on POST and recalculated on PUT in entity-pages routes
World-BuildingBuilt
2026-07

Codex: Persona Alias System

Aliases that represent a full alternate identity — 'Annabelle Westford' as a secret persona of 'Amelia Williams' — are now first-class character documents linked to their canonical character via a parent-child relationship. The connection stays hidden until the author-set reveal point, preventing spoilers from appearing on the codex page.

  • ·Persona characters stored in the characters collection with isPersona: true + parentCharacterId
  • ·Reveal gating: revealAtBook (ObjectId) + revealAtChapter (number) on the persona document
  • ·Characters list and codex search both filter isPersona: { $ne: true } — personas never appear in listings
  • ·Canonical character page shows a 'Persona Aliases' section in the Aliases tab
  • ·Persona pages show an amber banner and an 'Identity Reveal' section with the gate settings
  • ·DELETE on a canonical character cascades to delete all its persona aliases
  • ·API route: GET/POST /api/character-personas
World-BuildingBuilt
2026-07

Codex: Entity Pages (Period Snapshots)

A new 'Pages' tab on character codex entries lets authors record period snapshots — what a character looked like, their role, and their status during a specific span of in-world time. Each page has two time axes: an in-world date range (for AI chat queries) and a narrative gate (for writing assist spoiler gating).

  • ·Stored in entity_pages collection with entityId, entityType, eraId, inWorldBeginsDate/Label, inWorldEndsDate/Label, narrativeBeginsBook/Chapter
  • ·Snapshot fields: bio, role, lifeStatus, hairColor, eyeColor, build, appearance, distinguishingFeatures, notes
  • ·EntityPagesTab component handles full CRUD with collapsible physical fields
  • ·Two time axes: in-world WorldDate range (AI chat) + narrative book/chapter gate (writing assist)
  • ·API routes: GET/POST /api/entity-pages, GET/PUT/DELETE /api/entity-pages/[id]
World-BuildingBuilt
2026-07

Codex: Type Reassignment

Authors can move any codex entity from one type to another — a Character to a Creature, a Location to a Region, etc. A pre-confirmation panel shows exactly which type-specific fields actually have data and won't carry over, so nothing is lost by surprise.

  • ·Moves the entity between MongoDB collections and redirects to the new page
  • ·Common fields always carried over: name, description, aliases, world, era, images, Extra Notes
  • ·Shows only fields with real data — no phantom warnings for empty fields
  • ·Confirm checkbox required before the move is allowed
  • ·Available on every codex entity detail page via '⇄ Change type…'
World-BuildingBuilt
2026-07

Codex Import: Duplicate Detection & Resolution

The import preview page now detects entries that already exist in the selected world and lets authors choose what to do with each one — insert a second copy, merge into the existing record, or rename before inserting.

  • ·Duplicate check runs automatically when a world is selected (POST /api/import/check-duplicates)
  • ·Flagged entries show an amber ⚠ duplicate badge
  • ·Three per-entry actions: Insert new, Merge into existing (fills empty fields only), Rename & insert
  • ·Rename shows a text input pre-filled with 'Name (imported)'
  • ·Re-check button for when entry types are changed after the initial check
  • ·Result screen shows inserted and merged counts separately
World-BuildingBuilt
2026-07

Codex: NovelCrafter Import

Upload a NovelCrafter .zip export and import any combination of its entities — characters, lore, locations, factions, and more — directly into the codex. A preview step lets authors include or exclude specific items before committing.

  • ·Supports all 19 codex entity types
  • ·Green ✓ / red ✕ toggle pair on every entry row — defaults to included
  • ·Unmapped fields captured in Extra Notes on every imported document
  • ·Imported entities show a review banner until first saved
  • ·importedAt timestamp set on import; cleared on first save
  • ·Thumbnail images extracted from the ZIP and uploaded to Cloudinary — stored as imageUrl on the inserted document; non-fatal if missing
World-BuildingBuilt
2026-07

Codex: 5 New Entity Types

Five genre-agnostic entity types added to the world-building codex — Conditions, Knowledge, Practices, Resources, and Works — bringing the total to 19. Each is fully wired into the tab view, search, import, type reassignment, and codex-search.

  • ·Conditions: status effects, ailments, curses (effects, cause, duration, cure)
  • ·Knowledge: lore entries, legends, discovered truths (reliability, source, body)
  • ·Practices: rituals, professions, martial arts, methods (practitioners, steps)
  • ·Resources: materials, currencies, commodities (uses, rarity, sources)
  • ·Works: in-world books, artworks (creator, status, content/excerpts)
  • ·Knowledge and Works use 'title' as primary name field (same pattern as Lore)
  • ·codex-search architectural fix: dynamic nameField lookup corrects lore/knowledge/works search
World-BuildingBuilt
2026-07

Codex: Extra Notes & Import Metadata

Every codex entity now has an Extra Notes field for imported metadata and freeform author notes. Imported entities display a warning banner prompting review. Saving any entity clears the import flag.

  • ·Extra Notes textarea on all 14 codex entity detail pages
  • ·Visible on imported entities or when the field already has content
  • ·importedAt set to null on every PUT save — banner shows once after import
  • ·Saves with the main form — no separate submission needed
World-BuildingBuilt
2026-07

Codex: Navigation & Delete Consistency

All 14 codex entity detail pages now navigate back to the correct type-filtered codex list after delete. Breadcrumbs consistently show 'Codex' as the parent link rather than world or book context.

  • ·Delete redirects to /dashboard/codex?type=<key> on all entity pages
  • ·Breadcrumb: Codex › Entity Name with link to the type-filtered list
  • ·Consistent across all 14 entity types
World-BuildingBuilt
2026-05

Character Expansion: Physical, Aliases & Connections

Characters gained a four-tab detail page (Profile, Physical, Aliases, Connections), reveal-gated aliases for AI writing assist, and links to any codex entity.

  • ·Physical fields: race/species, eye color, hair, height, weight, build
  • ·Aliases with revealedIn book + chapter — AI context gating
  • ·Connections tab: links to characters, locations, factions, events, items, vehicles
  • ·New entity types: Items/Artifacts and Vehicles
World-BuildingBuilt
2026-05

World-Building Codex: 7 New Entity Types

Seven additional entity types added to the codex: Eras, Languages, Magic & Power Systems, Religions & Deities, Regions, Governments, and Organizations. All share the same author + world scoped pattern.

  • ·Eras with structured WorldDate start/end and visual timeline integration
  • ·Magic & Power Systems: source, cost/toll, limitations, rules
  • ·Religions: type dropdown (Deity, Pantheon, Religion, Cult…)
  • ·Codex nav dropdown in dashboard nav covers all 14 entity types
World-BuildingBuilt
2026-05

World Timeline Events & Visual Gantt

A visual Gantt chart for world timelines with proportional era columns, fractional year event positioning, zoom, pan, and bidirectional entity links.

  • ·Era columns sized proportionally by year span
  • ·Fractional year positioning: 15 March 2023 → 2023.18
  • ·Adaptive tick marks: years, months, or days depending on zoom level
  • ·Mouse wheel zoom and click-drag pan
  • ·World events linked to any codex entity appear on that entity's Timeline tab
World-BuildingBuilt
2026-07

Codex: Aliases, Map Tab & Entity Pages on Additional Entity Types

Factions, Creatures, Items, and Organizations now match the depth of Characters and Locations: reveal-gated name aliases, a Map tab for pinning entities on the world map, and an Entity Pages tab for period snapshots.

  • ·AliasInput with revealedIn/revealChapter gating added to Factions, Creatures, Items, and Organizations
  • ·MapTab added to all four entity types alongside existing Characters, Locations, and Regions
  • ·EntityPagesTab added to Factions, Creatures, Items, Organizations, and Locations
  • ·TimelineTab added to Organizations (was the only entity type missing it)
  • ·API PUT handlers for all four entity types updated with aliases validation block
World-BuildingBuilt
2026-07

Story Pages — Global Browse

A new /dashboard/pages page lets authors see and filter all entity_pages records across their worlds in a single table.

  • ·Server component with URL-driven type and world filters (chip tabs, no client-side state)
  • ·Batch entity name lookup per collection; world name join
  • ·Table columns: Entity, Type, World, Era, Date Range — responsive hidden columns
World-BuildingBuilt
2026-07

Entity Personas — Factions, Items, Locations

Factions and items can now have full persona aliases — separate codex entries representing cover identities, true names, or hidden forms — using the same reveal-gating model as character personas.

  • ·Generic GET/POST /api/entity-personas?entityType=faction|item|location&parentId=X
  • ·Persona documents stored in the same collection with isPersona: true and parentId
  • ·Factions and items list pages exclude personas via isPersona: { $ne: true } query filter
  • ·Personas section on faction and item detail pages: inline creation form with name, role, description, reveal book
  • ·Characters list page now shows a Personas subsection for the global character personas browse

This log tracks platform features, not individual content. For questions or feedback, get in touch.