Status: site under construction. Hosting (Cloudflare Pages / GitHub Pages) is not yet enabled. Canonical URLs currently point at the GitHub repo. The OG image and sitemap will be re-stamped once a hosted origin is bound. The dataset (
deadlines.json) is already usable as raw JSON.
A static site that renders a live countdown to every binding EU regulatory deadline (CRA, EHDS, AI Act, NIS2, DORA, MDR, GDPR), plus email-alert capture.
- Stack: plain HTML + CSS + vanilla JS. No build. No framework.
- Hosting: Cloudflare Pages (
publish = "."). - Total bundle: under 50 KB before
deadlines.json. - Licence: MIT (entire repository, code + dataset). See
LICENSE.
- Edit
deadlines.json. - Each entry must conform to
deadlines.schema.json. Validate locally:python -c "import json, jsonschema; jsonschema.validate(json.load(open('deadlines.json')), json.load(open('deadlines.schema.json')))" - The
source_urlMUST point to an official EU source (eur-lex preferred). PRs without a verifiable source will be closed. - Include
excerpt— the verbatim text from the source that establishes the deadline. This shows on hover and lets reviewers verify in seconds. - Open a PR. CI will re-validate the schema.
python -m http.server 8000
# open http://localhost:8000No npm. No node_modules. No build.
# Cloudflare Pages, manual one-shot
wrangler pages deploy .Or wire the repo to Cloudflare Pages with build_command = "" and publish = ".".
The canonical URL is hard-wired to https://eu-compliance-deadlines.pages.dev/ (Cloudflare Pages default subdomain). If a custom domain is configured later, run tools/stamp.py or sed across index.html, sitemap.xml, robots.txt, privacy.html to swap origins.
The form action still carries <FORMSPREE_ENDPOINT>; the JS handler displays "Form endpoint not configured yet" until a real Formspree URL is stamped in via tools/stamp.py.
python tools/stamp.py --canonical https://your.domain/ --formspree https://formspree.io/f/xxxxxxxxOpen tests/test_app.html in a browser. It loads app.js with fixture data and reports pass/fail in the DOM.
- Cloudflare Pages serves a folder; no build → no toolchain rot.
- Vanilla JS is 0 KB of runtime. Lighthouse-perfect by default.
- If the project grows to need routing or templating, migrating to Astro / 11ty is one afternoon.