A minimalist, design-first, local-only calendar aggregating upcoming mountaineering events and excursions from major Athenian alpine clubs.
Built for sheer speed, typographic legibility, and zero unnecessary operational overhead.
The application dynamically crawls, parses, and aggregates calendar events from:
- ΑΟΣ (Αθηναϊκός Ορειβατικός Σύλλογος)
- Program & Events: https://aos.gr/trechouses-kai-eperchomenes-anavaseis-kai-ekdiloseis/
- Excursion Program: https://aos.gr/programma-exormiseon-ianouarios-2026-septemvrios-2026/
- ΕΟΣ Αθηνών
- Excursion Calendar: https://www.eosathinon.gr/anavaseis/programma/
- ΕΟΣ Αχαρνών
- Live Booking Engine: https://eosacharnon.xmiddleware.com/el (sourced via portal)
- ΕΟΣ Ηλιούπολης
- Mountain Excursions Category: https://eosh.gr/wp/product-category/greek-mountains-climbs/
- ΕΠΟΣ Φυλής
- ΠΟΑ (Πεζοπορικός Όμιλος Αθηνών)
- Detailed Program: https://poa.gr/index.php/programma/
- ΦΟΝΙ (Φυσιολατρικός Όμιλος Νέας Ιωνίας)
- Excursions Category: https://www.foni.org.gr/category/ekdromes/
- ΦΟΠ (Φυσιολατρικός Όμιλος Πειραιώς)
- Excursion Program: https://fop.gr/
The project relies entirely on a lightweight, static pipeline that does not require databases or external servers:
graph LR
A[LINKS.md] --> B[scripts/fetch-raw.js]
B -->|Raw HTML| C[_input/ folder]
C --> D[scripts/extract-text.js]
D -->|Plain Text| E[_input/*.txt]
E --> F[scripts/parse-events.js]
F -->|Regex Heuristics| G[src/data/events.json]
G --> H[Astro static build]
H --> I[dist/index.html]
- Crawler (
scripts/fetch-raw.js): Reads the URLs fromLINKS.mdand fetches the raw HTML pages of each club, caching them in the local_input/folder. - Text Extractor (
scripts/extract-text.js): Strips layout noise, scripts, and styling to create clean, plain-text files. - Parser (
scripts/parse-events.js): Uses custom-tailored regex patterns to scan the plain-text documents, normalizes Greek characters and accents (so searches are accent-insensitive), filters out past events, and aggregates everything intosrc/data/events.json. - Static Generator: Astro builds the front-end directly from the JSON database into static HTML.
- Framework: Astro v4 (Static Site Generation /
output: "static") - Styling: Tailwind CSS
- Typography:
IBM Plex Sans(for readable, high-legibility UI) andIBM Plex Mono(for structured alignment, dates, and badges) via Google Fonts.
- Runtime: Node.js (tested on
v20.20.0) - Scraping Helper: Cheerio (for fast HTML traversal)
Make sure you have Node.js (v20+) and npm installed.
- Clone the repository:
git clone git@github.com:kostis-kounadis/Mount-Athens.git cd Mount-Athens - Install dependencies:
npm install
To start the local development server:
npm run devOpen http://localhost:4321/ in your browser.
To crawl and parse fresh data from the club websites:
# 1. Fetch raw HTML
npm run fetch-raw
# 2. Extract and parse events into src/data/events.json
node scripts/parse-events.jsTo compile the static pages:
npm run buildThe output will be generated in the dist/ directory.
This project is conceived and designed by a mediocre hiker graphic designer, with a decent amount of coffee, negligible coding skills, an unhealthy knack for how things work, and built with AI coding agents.
This project is open-source and licensed under the permissive MIT License.