AGENTS.md — somos10e7 (Somos 10⁷)
AGENTS.md — somos10e7 (Somos 10⁷)
Static podcast landing page at https://asosab.github.io/somos10e7/. Plain HTML +
CSS + vanilla JS. No build, no framework, no npm, no Jekyll processing.
Key facts
- Everything is in
index.html— CSS in<style>, JS inline at end of<body>, episodes and interviews hand-written in HTML. No separate files. - No tests, no linter, no CI. Do not invent commands for these.
- No build step. To preview: open
index.htmlin a browser or serve with any static server (python -m http.server).start index.htmlon Windows.
Workflow: PLAN.md first
Before editing any feature or content, read PLAN.md to understand current
state and planned work. After making changes, update PLAN.md to reflect
what was done, what changed, and any new gaps or next steps discovered.
Also add a line to CHANGELOG.md with date, category, and description.
i18n quirks (will cause bugs if ignored)
- Locale files
es_VE.txtandes_BO.txtare JSON with a.txtextension so GitHub Pages serves them astext/plain. Do NOT rename to.json. - The i18n fetcher hardcodes
https://asosab.github.io/somos10e7/as base URL for the fetch. Moving this directory or changing the host will break i18n. Update bothconst base =in the i18n script and allog:url/canonicalmeta tags. - A
data-i18nkey must exist in both locale files or the text falls back to the raw HTML default. Keep keys in sync. - Locale is persisted in
localStorageunder keylocale. Available:es_VE(default),es_BO.
Editing content
- Episodes: hand-written
.episode-cardblocks inside#temporadas. Adding one requires: copy a card block, replace YouTube video ID in 3 places (href, img src, episode link), add i18n keys to both.txtfiles. - Interviews: hand-written
.entrevista-cardblocks inside#entrevistas. - Team: hand-written
.equipo-cardblocks. Photos inimagen/<name>.png; fallback to initials viaonerror. - New season: add a
.season-tabbutton and a.season-paneldiv with its grid of episode cards.
Secrets in git history (compromised, do not reuse)
- YouTube API key in
js/youtube_videos.mjs - Context7 API key in
opencode.jsonc - Firebase config (apiKey, projectId, etc.) in
index.html(Firebase module script) - If you re-run
youtube_videos.mjs, rotate the YouTube key first.
js/youtube_videos.mjs
One-shot Node script that fetches YouTube Data API v3 and writes
js/videosData.json. Not consumed by the landing page — episodes are
hand-written. Requires Node 18+, npm install node-fetch. Run from js/ as
node youtube_videos.mjs.
Firebase live visitor counter
A Firestore-based counter in the last <script type="module"> of index.html.
It registers a doc per IP every 30 min and queries active visitors. The orbital
ring animation (renderizarAnillos) drives off window.usuariosActivos.
Other gotchas
back/directory contains rough drafts and working notes — ignore for production.#microssection exists in the nav and footer but is empty (placeholder).- Text color scheme is dark (
--oscuro: #0D1B2A) with crema text — all new sections should follow the same palette defined in:root. - Google Analytics (
UA-84695-6) is loaded in the second-to-last<script>. - OpenCode config in
opencode.jsoncpointsinstructionsto this file; installed skills:find-skills,frontend-design.