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 12o 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 Pages
MIT © 2026 Felipe Lippelt.