What You Are Building
In this tutorial, you will build the structure for a full world bible site. The goal is to organize fictional setting information so it is easy to browse, search, expand, and maintain.
The site can support:
- World overview pages.
- Regions and nations.
- Characters.
- Factions and organizations.
- Locations and points of interest.
- Storylines and timelines.
- Technology, magic, powers, and rules.
- Glossary and reference pages.
The Big Picture
World overview
↓
Regions and powers
↓
Characters, factions, locations
↓
Storylines and timelines
↓
Reference pages and glossary
A world bible is not just lore storage. It is a continuity system. It helps you remember what exists, where it belongs, who is involved, and how different pieces connect.
Recommended Folder Structure
src/content/docs/
index.md
start-here.md
world/
index.md
overview.md
timeline.md
technology.md
social-order.md
major-conflicts.md
regions/
index.md
region-template.md
europe.md
austral-confluence.md
atlantic-compact.md
characters/
index.md
character-template.md
example-character.md
factions/
index.md
faction-template.md
example-faction.md
locations/
index.md
location-template.md
example-location.md
storylines/
index.md
storyline-template.md
example-storyline.md
reference/
index.md
glossary.md
naming-conventions.md
calendar.md
tags.md
Homepage Example
Create or edit:
src/content/docs/index.md
---
title: "World Bible"
description: "A searchable reference guide for the setting, characters, factions, locations, and storylines."
template: splash
hero:
title: "World Bible"
tagline: "Explore the setting through regions, characters, factions, locations, timelines, and storylines."
actions:
- text: "Start Here"
link: "/start-here/"
icon: "right-arrow"
- text: "Explore Regions"
link: "/regions/"
icon: "map"
- text: "View Characters"
link: "/characters/"
icon: "user"
variant: "minimal"
---
## Explore the Setting
- [World Overview](/world/overview/)
- [Regions](/regions/)
- [Characters](/characters/)
- [Factions](/factions/)
- [Locations](/locations/)
- [Storylines](/storylines/)
- [Timeline](/world/timeline/)
- [Glossary](/reference/glossary/)
World Overview Template
---
title: "World Overview"
description: "The central summary of the setting."
---
# World Overview
## Premise
## Tone and Themes
## Timeline
## Major Regions
## Recognized Powers
## Technology
## Magic or Supernatural Rules
## Social Order
## Key Tensions
## Story Architecture
Region Template
---
title: "Region Template"
description: "Reusable template for regions, nations, and major territories."
type: "region"
tags:
- template
- region
---
# Region Template
## Overview
## Historical Development
## Political Structure
## Economy and Infrastructure
## Society and Class
## Technology Level
## Magic or Supernatural Presence
## Major Factions
## Key Locations
## Current Flashpoints
## Narrative Use
Character Template
---
title: "Character Template"
description: "Reusable template for major and minor characters."
type: "character"
role: "TBD"
region: "TBD"
status: "active"
tags:
- template
- character
---
# Character Template
## Identity
## Background
## Role in the Setting
## Personality
## Goals
## Flaws
## Relationships
## Secrets
## Arc
## Notes
Faction Template
---
title: "Faction Template"
description: "Reusable template for organizations, houses, governments, companies, orders, and movements."
type: "faction"
alignment: "mixed"
scope: "regional"
tags:
- template
- faction
---
# Faction Template
## Overview
## Public Face
## Private Reality
## Leadership
## Resources
## Territory or Influence
## Allies
## Rivals and Enemies
## Methods
## Story Use
Location Template
---
title: "Location Template"
description: "Reusable template for cities, districts, facilities, landmarks, and points of interest."
type: "location"
region: "TBD"
locationType: "other"
tags:
- template
- location
---
# Location Template
## Overview
## Location Type
## Region
## Historical Context
## Political Importance
## Social Importance
## Technology Level
## Security Profile
## Key Groups Present
## Narrative Uses
## Story Hooks
Storyline Template
---
title: "Storyline Template"
description: "Reusable template for plots, arcs, seasons, and major narrative threads."
type: "storyline"
status: "planning"
tags:
- template
- storyline
---
# Storyline Template
## Premise
## Scope
## Region
## Main Cast
## Supporting Cast
## Central Conflict
## Themes
## Act Structure
## World Connections
## Open Plot Questions
Sidebar Configuration
sidebar: [
{
label: 'Start Here',
items: [
{ label: 'Home', slug: '' },
{ label: 'Start Here', slug: 'start-here' },
{ label: 'World Overview', slug: 'world/overview' },
],
},
{
label: 'World',
autogenerate: { directory: 'world' },
},
{
label: 'Regions',
autogenerate: { directory: 'regions' },
},
{
label: 'Characters',
autogenerate: { directory: 'characters' },
},
{
label: 'Factions',
autogenerate: { directory: 'factions' },
},
{
label: 'Locations',
autogenerate: { directory: 'locations' },
},
{
label: 'Storylines',
autogenerate: { directory: 'storylines' },
},
{
label: 'Reference',
autogenerate: { directory: 'reference' },
},
]
Optional Content Collections
For a simple Starlight world bible, regular pages inside src/content/docs/ are enough. For structured cards, filters, and generated indexes, create separate collections.
src/content/
docs/
characters/
regions/
factions/
locations/
storylines/
This lets you create dynamic character indexes, region filters, faction lists, and related-entry sections.
World Bible Schema Example
import { defineCollection, z } from 'astro:content';
const characters = defineCollection({
schema: z.object({
title: z.string(),
description: z.string().optional(),
role: z.string(),
region: z.string(),
faction: z.string().optional(),
status: z.enum(['active', 'missing', 'dead', 'unknown']).default('active'),
tags: z.array(z.string()).default([]),
}),
});
const regions = defineCollection({
schema: z.object({
title: z.string(),
description: z.string(),
type: z.literal('region'),
technologyLevel: z.string().optional(),
magicLevel: z.string().optional(),
tags: z.array(z.string()).default([]),
}),
});
export const collections = { characters, regions };
Related Links Pattern
At the bottom of major entries, add related pages.
## Related Pages
- [Europe](/regions/europe/)
- [House Valoire](/factions/house-valoire/)
- [Main Timeline](/world/timeline/)
- [Glossary](/reference/glossary/)
World bible pages become much more useful when they cross-link to related people, places, groups, and storylines.
Recommended Tags
entry type:
character
region
faction
location
storyline
reference
story use:
protagonist
antagonist
ally
rival
mystery
flashpoint
world category:
politics
technology
magic
economy
military
culture
religion
transportation
Asset Structure
public/images/
maps/
characters/
factions/
locations/
timelines/
diagrams/
public/downloads/
character-template.pdf
region-template.pdf
faction-template.pdf
Build Checklist
[ ] Homepage explains the setting
[ ] Start Here page exists
[ ] World overview exists
[ ] Major folders exist
[ ] Every major folder has an index.md page
[ ] Templates exist for repeated page types
[ ] Sidebar is organized by world category
[ ] Important entries cross-link to related pages
[ ] Glossary exists
[ ] Timeline exists
[ ] Maps and assets are organized
[ ] npm run build succeeds
Common Mistakes
No templates
Without templates, every page grows in a different direction. Templates keep entries comparable.
No related links
World bible entries should connect to each other. A character should link to their region, faction, storyline, and major relationships.
Too much lore on the homepage
The homepage should guide readers. Put detailed lore in the actual world pages.
Inconsistent names
Use a naming conventions page to track spelling, titles, factions, places, and terminology.
Simple Rule of Thumb
Use Starlight for the encyclopedia shell.
Use templates for repeated page types.
Use tags for grouping.
Use related links for continuity.
Use maps and diagrams for orientation.
Use indexes to make the world browsable.