Um wiki de campanhas de RPG: história, mapas, acontecimentos, NPCs e personagens — multi-campanha, com temas por gênero (sci-fi, fantasia, cyberpunk, fallout, warhammer), bom suporte a emoji, menu responsivo e manutenção simples (é só escrever Markdown).
Stack: Astro + content collections. 100% estático, sem backend.
Requer Node 22+.
npm install
npm run dev # http://localhost:4321
npm run build # site completo → dist/Tudo é Markdown. Duas coisas: campanhas e entradas.
Um arquivo por campanha em src/content/campaigns/<id>.md:
---
name: As Crônicas de Valdoran
theme: fantasy # sci-fi | fantasy | cyberpunk | fallout | warhammer
emoji: ⚔️
summary: Um reino dividido pela Grande Fenda.
order: 2
demo: true # aparece na demo pública (Pages)? padrão: false
---
Texto de abertura da campanha (Markdown).Cada página de conteúdo é um arquivo em:
src/content/entries/<campanha>/<tipo>/<slug>.md
A campanha e o tipo vêm da pasta — é só soltar o arquivo no lugar certo. Tipos disponíveis (nome da pasta):
| Pasta | Tipo |
|---|---|
lore |
📜 Lore & História |
npcs |
🧠 NPCs |
characters |
🎭 Personagens |
events |
⚡ Acontecimentos |
maps |
🗺️ Mapas & Locais |
Exemplo src/content/entries/valdoran/npcs/mestre-corvo.md:
---
title: Mestre Corvo
emoji: 🐦⬛
summary: Conselheiro arcano da corte de Pedravale.
status: vivo
role: Conselheiro Arcano
faction: Casa Pedravale
location: Pedravale
date: Inverno do 12º ano # eventos; aceita texto ou data
image: /maps/valdoran.svg # opcional (em public/ ou URL)
tags: [mago, misterioso]
draft: false # rascunho some do build de produção
order: 1
---
Conteúdo em Markdown. Emojis funcionam normalmente. 🪶Os campos opcionais (status, role, faction, location, date, image,
tags) viram a "ficha" lateral e os chips dos cards. Nenhum é obrigatório além
de title.
Cada campanha escolhe um theme; as paletas/fontes ficam em
src/styles/themes.css, por data-theme. Para criar um
tema novo, adicione um bloco [data-theme="meu-tema"] lá e inclua o id em
THEME_IDS (src/content.config.ts).
- Site completo → Netlify (raiz do domínio), via
netlify.toml. - Demo pública → GitHub Pages, via
.github/workflows/deploy.yml. A demo rodanpm run build:demoe publica apenas as campanhas comdemo: true; suas campanhas privadas ficam de fora.
npm run build:demo # base padrão "/"
BASE=/campaign-codex/ npm run build:demo # como no PagesMIT © 2026 Felipe Lippelt.