vienalatina/static/admin/config.yml
Claude 72894b8907
Scaffold Hugo + Decap trilingual site from WordPress migration plan
Static replacement for the WordPress + Polylang + synchronous DeepL stack:

- Hugo config: es (default) / de / pt-br, siblings paired by filename
  basename, WP slugs preserved via /:slug/ permalinks
- Theme: CSS ported verbatim from the WP theme; header/footer/lang-switcher
  and article templates ported from their PHP counterparts (no Google
  Fonts — zero third-party requests)
- seo-head partial: hreflang + x-default, og:locale(:alternate), JSON-LD
  BlogPosting/Blog with inLanguage (ported from theme/inc/seo.php)
- robots.txt AI-crawler allowlist + build-time llms.txt (ported from
  theme/inc/robots-and-llms.php)
- scripts/translate.py: async DeepL step (tag_handling=html, protected
  community terms, manual_translation freeze, fail-loud, bot commits)
- scripts/wp-to-hugo.py: one-shot WP REST → Hugo content converter
- Decap CMS admin with Gitea backend, locally-bundled JS
- .woodpecker.yml: translate → build → deploy (rsync to Caddy root)
- Sample trilingual welcome post + acerca/contacto pages

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017z2rT1oN7vMS4ggo23n5WG
2026-07-31 11:17:32 +00:00

53 lines
2.0 KiB
YAML

# Decap CMS configuration — Gitea backend (OAuth app registered in Gitea admin).
backend:
name: gitea
repo: pablo/vienalatina # owner/repo inside Gitea
branch: main
base_url: https://git.vienalatina.com
api_root: https://git.vienalatina.com/api/v1
app_id: REPLACE_WITH_GITEA_OAUTH_CLIENT_ID
site_url: https://vienalatina.com
display_url: https://vienalatina.com
media_folder: static/uploads
public_folder: /uploads
# Pablo authors Spanish sources only; CI generates the .de.md / .pt-br.md siblings.
collections:
- name: post
label: "Artículos"
label_singular: "Artículo"
folder: content/post
create: true
extension: md
format: yaml-frontmatter
slug: "{{slug}}.es"
filter: { field: lang, value: es }
fields:
- { name: title, label: "Título", widget: string }
- { name: date, label: "Fecha", widget: datetime }
- { name: lang, label: "Idioma", widget: hidden, default: es }
- { name: manual_translation, label: "Traducción manual (congelar)", widget: boolean, default: false, required: false }
- { name: categories, label: "Categorías", widget: select, multiple: true,
options: ["Turismo", "Cultura", "Gastronomía", "Comunidad", "Comercio"] }
- { name: description, label: "Resumen", widget: text, required: false }
- { name: image, label: "Imagen destacada", widget: image, required: false }
- { name: body, label: "Cuerpo", widget: markdown }
- name: page
label: "Páginas"
label_singular: "Página"
folder: content/page
create: true
extension: md
format: yaml-frontmatter
slug: "{{slug}}.es"
filter: { field: lang, value: es }
fields:
- { name: title, label: "Título", widget: string }
- { name: date, label: "Fecha", widget: datetime, required: false }
- { name: lang, label: "Idioma", widget: hidden, default: es }
- { name: manual_translation, label: "Traducción manual (congelar)", widget: boolean, default: false, required: false }
- { name: body, label: "Cuerpo", widget: markdown }