Skip to content
webtresclubPublic

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

eko — WebtrES Village

Landing page for the WebtrES Village at Ekoparty, Buenos Aires 2026 — the blockchain hackers community village. A static, bilingual page with the confirmed talk schedule. Built with Astro, styled as a retro terminal.

Stack

  • Astro 7, static output (no framework integrations, no client-side JS bundle)
  • pnpm (Node >= 22.12)
  • Styles are inline in src/layouts/VillageLayout.astro, driven by the design tokens in DESIGN.md

Commands

Command Action
pnpm install Install dependencies
pnpm dev Dev server at localhost:4321
pnpm build Build the static site to ./dist/
pnpm preview Preview the production build locally
pnpm og Regenerate the social card (commit the result)

Structure

src/
├── data/
│   ├── village.ts         # locale-independent facts (event, socials)
│   └── schedule.ts        # confirmed slots: day, room, time, speaker
├── i18n/
│   ├── ui.ts              # every translatable string, keyed per locale
│   └── utils.ts           # useTranslations(lang), formatDay, formatDateSpan
├── lib/ics.ts             # RFC 5545 builder, America/Argentina/Buenos_Aires
├── layouts/
│   └── VillageLayout.astro  # the page itself; takes a `lang` prop
├── og/                      # OG card sources: mascot frame + JetBrains Mono
└── pages/
    ├── index.astro          # es — served at /
    ├── en/index.astro       # en — served at /en/
    └── calendar/[lang]/[slug].ics.ts  # prerendered per-talk and full-agenda calendars
scripts/og-card.mjs          # `pnpm og` — renders public/assets/og-card.png
public/assets/               # pixel-art mascot, favicon, generated OG card

Social card

public/assets/og-card.png (1200×630) is generated by pnpm og and committed — the deploy build does not render it, so no fonts or renderer are needed on the build machine. Re-run pnpm og after editing scripts/og-card.mjs. See AGENTS.md for details.

site in astro.config.mjs must point at the live origin: og:image, og:url, canonical, and hreflang are all derived from it, and social scrapers reject relative URLs.

Internationalization

Spanish is the default locale and is served at /; English lives under /en/. Locales are declared in astro.config.mjs with prefixDefaultLocale: false.

To add a string, add the key to both locale objects in src/i18n/ui.ts — the satisfies constraint and the UIKey type will flag a locale that is missing one. To add a locale, add it to locales in astro.config.mjs, to languages/ui in ui.ts, to the locale branches in utils.ts, and create src/pages/<code>/index.astro.

See AGENTS.md for the working notes used by coding agents.

Schedule

Confirmed talks are split the same way as the rest of the site: the slot (day, room, clock time, speaker) lives in src/data/schedule.ts, and the title plus description live in both locales of src/i18n/ui.ts (talk.<id>.title, talk.<id>.description).

Día 1–3 are 7, 8 and 9 October 2026 at the CEC, Buenos Aires. Times are America/Argentina/Buenos_Aires (UTC−3, no DST). Each talk has an "add to calendar" link to /calendar/<lang>/<id>.ics, emitted by astro build — those files are not committed.

The "add all talks to calendar" button above the agenda downloads /calendar/<lang>/all.ics: one calendar containing every confirmed talk, localized to the page language. It shares event IDs with the individual downloads. Open the file in a calendar app to import the talks; the app may ask for confirmation. No account or client-side JavaScript is required.

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages