Portfolio Project

A writing tool built for fiction authors who think in worlds

The Author's Nook is a mobile-first writing and lore management platform. Its core innovation is temporal entity tracking — modeling how characters, relationships, and locations evolve across a story's timeline rather than treating them as static snapshots.

Mobile-first Full-stack Custom design system Solo project In development ★ Portfolio highlight
Stack Next.js + PHP + PostgreSQL
Hosting Render + Supabase
Domain theauthorsnook.com
Type SaaS / Writing tool

Two good tools. Zero overlap.

Writers of complex, multi-book series have always had to choose between tools that handle lore or tools that handle writing — never both, and rarely on mobile.

The gap
Lore tools like Novelcrafter excel at world-building but have weak mobile editing experiences
Writing tools like Google Docs lack world-building and entity tracking entirely
Neither treats entities as evolving over time — characters are frozen snapshots
Series authors must maintain separate documents to track state changes across books
The solution
Mobile-first editor with a full-featured lore system in the same product
Temporal entity tracking — every character, location, and relationship can change state across the timeline
Entities auto-link to manuscript text via configurable trigger words
Structured Codex with custom field types, grouping, and relationship graphs
Temporal Entity Tracking
Characters, locations, and relationships hold state that changes across your story's timeline — not just static notes.
Mobile-First Editor
A full manuscript editor built for mobile from the ground up, with the Codex accessible in a single tap from any scene.
Trigger Word Linking
Each entity gets a configurable set of trigger words. Mentions in your manuscript auto-link to the Codex entry.
Custom Field System
Entity types carry fully customisable field schemas stored as JSONB — authors define the structure that fits their world.
Hierarchical Structure
Universes → Series → Projects → Chapters → Scenes. Entities scope to the right level — world-wide or project-specific.
Relationship Graphs
Family trees, faction allegiances, location journeys — relationships between entities are first-class data, not freeform text.

Designed screen by screen, mobile-first

Every screen has a mobile and desktop variant. The design system uses a custom token set — sage as the sole interactive colour, warm grey for chrome, and Lora exclusively for the writing surface.

Codex + Add
Characters4+ add
Annalise CarsonCharacter
Lord CaerisCharacter
Brother AldusCharacter
Sister MarenCharacter
Locations6+ add
Magic Systems
No entries yet+ Add Magic System
Factions3+ add
Items2+ add
Select an entity to view its details
or use + Add to create one
Codex · Home — Desktop
Three-column layout: icon rail, accordion entity list, detail panel. Accordion sections are sticky-scrolling with inline add buttons and contextual empty states. The detail panel loads when an entity is selected.
Codex+ Add
Characters4+ add
Annalise Carson
Lord CaerisCharacter
Brother AldusCharacter
Sister MarenCharacter
Locations6
Annalise CarsonEdit
Annalise Carson
CharacterAdded 3 Jan 2026
Trigger words
AnnaliseAnnaA.C.Annalise Carson ✕
Tags:protagonistmagic-userorder-member
Fields
Refs
Linked
Family
Core
SummaryHalf-elf scholar of the Order of Veils. Seeks the lost chronicle.
SpeciesHalf-elf
Age34
Affiliation
AffiliationOrder of Veils
RoleScholar, Archivist
LoyaltyNot set
Character
MotivationRecover the chronicle before the Pale Court can use it
FlawNot set
Codex · Entity Detail — Desktop
Active entity highlighted in sage in the accordion list, synced to the detail panel. The core header (name, type badge, trigger words, tags) stays fixed above the tab bar across all tabs.
Dashboard
Projects
Editor
Codex
The Shattered Crown
Chapter One
The monastery bells420w
Into the valley148w
Brother Aldus appears310w
Chapter Two
The Shattered Crown  ›  Ch. 1  ›  Into the valley Autosaved 148 words
B
I
U
H1
H2
Chapter One
The mist had not yet lifted from the valley when Annalise heard the monastery bells. She set down her quill and turned to the grey window, heart quickening. Something was wrong — the pattern was wrong. Three tolls, then silence. Then three again.

She gathered her satchel and stepped into the corridor, nearly colliding with Brother Aldus, who was already moving fast, his robes trailing fog from the courtyard.
● Saved 148 words
Manuscript Editor — Desktop
Sidebar holds the project tree (chapters + scenes with word counts). The warm surround frames the paper surface. Entity trigger words underline in sage — tapping opens the Codex entry without leaving the editor.
9:41
‹ CodexCharacterEdit
Annalise Carson
CharacterAdded 3 Jan 2026
Trigger words
AnnaliseAnnaA.C.Annalise Carson ✕
Tags:protagonistmagic-user
Fields
Refs
Linked
Family
Core
SummaryHalf-elf scholar of the Order of Veils. Seeks the lost chronicle.
SpeciesHalf-elf
Age34
Affiliation
AffiliationOrder of Veils
RoleScholar, Archivist
LoyaltyNot set
Codex · Entity Detail — Mobile
Identical information architecture to the desktop version — same core header, same tab structure — adapted to full-width mobile layout. The trigger words, tags, and field groups are all touch-friendly.

Full-stack, from scratch

A deliberate stack for a learning project — chosen to explore PostgreSQL's JSONB capabilities, build a custom PHP REST API without a framework, and practice Next.js App Router patterns at depth.

Frontend
Next.js 14+
App Router, TypeScript, server and client components
TypeScript
Strict typing throughout, shared entity type definitions
Tailwind CSS
Utility-first styling with a custom design token layer
TanStack Query
API state management, caching, optimistic updates
Axios
HTTP client with typed API request wrappers
Backend
PHP 8.2+
Custom REST API — no framework, hand-rolled routing
JWT Authentication
Stateless auth with access + refresh token pattern
RESTful endpoints
Resources for auth, projects, chapters, scenes, entities, relationships
CORS-aware
Environment-specific allowed origins for local and production
Database
PostgreSQL 15+
Managed via Supabase, accessed directly from PHP backend
JSONB Fields
Custom entity field schemas stored as flexible JSONB — no schema migrations for new field types
Relational core
Universes, series, projects, chapters, scenes — normalised with FK constraints
Migrations
Schema versioned in /database/migrations
Infrastructure
Frontend
Render
Next.js static/SSR on theauthorsnook.com
Backend API
Render
PHP Web Service on api.theauthorsnook.com
Database
Supabase
Managed PostgreSQL 15, connection pooler
Request Flow
Next.js
theauthorsnook.com
Frontend
HTTPS / JSON
PHP REST API
api.theauthorsnook.com
Backend
pg connection
PostgreSQL
Supabase
Database

Why these choices

The interesting calls — the ones that reveal how the product was thought about.

01
JSONB for entity field schemas
Entity types in a lore tool can't have a fixed schema — a Magic System has completely different fields to a Character. Rather than a generic EAV table, entity fields are stored as JSONB columns in PostgreSQL, which keeps queries readable and allows GIN indexing for search. The schema definition is itself stored per entity type, so the frontend can dynamically render the right form.
02
Custom PHP API over a framework
This project is intentionally a learning exercise with technology outside my usual stack. Building the REST API by hand — routing, middleware, JWT, error handling — meant learning PHP 8.2 idioms deeply rather than delegating them to Laravel or Slim. Every endpoint is explicit and traceable, which matters for a solo project you need to maintain months later.
03
Mobile-first, not mobile-adapted
The target user is a fiction author writing away from a desk — on a couch, a commute, a café. The mobile UI was designed first, with the desktop layout derived from it. The same information architecture and tab structure appears on both breakpoints; only the panel layout changes. This is reflected in how the component library was built: mobile variants are the canonical versions.
04
Sage as the only interactive colour
The design system uses a single interactive hue — sage — for all clickable elements, focus rings, active states, and primary actions. Gold is reserved for the logo mark and milestone badges only. This restraint keeps the UI calm during long writing sessions and makes interactive affordances immediately obvious. It also means the warm, ink-and-paper editor surface feels like a distinct context from the chrome.
05
Trigger words, not manual linking
Rather than requiring authors to manually insert entity links as they write, each Codex entity carries a set of configurable trigger words. The manuscript parser scans prose for matches and links them automatically. The entity name is included by default; aliases and abbreviations are added manually. This keeps the writing experience frictionless — you don't stop to tag, you just write.
06
Split hosting over monolith
The Next.js frontend and PHP API are deployed as separate Render services rather than co-located. This keeps the frontend and backend independently deployable and scalable, mirrors a professional production setup, and means the API can be reused by a future mobile app. The cost trade-off is two services to manage, which is acceptable for a project at this scale.