Skip to content

Repository files navigation

eu-compliance-deadline-tracker

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.

Add a deadline

  1. Edit deadlines.json.
  2. 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')))"
  3. The source_url MUST point to an official EU source (eur-lex preferred). PRs without a verifiable source will be closed.
  4. Include excerpt — the verbatim text from the source that establishes the deadline. This shows on hover and lets reviewers verify in seconds.
  5. Open a PR. CI will re-validate the schema.

Run locally

python -m http.server 8000
# open http://localhost:8000

No npm. No node_modules. No build.

Deploy

# Cloudflare Pages, manual one-shot
wrangler pages deploy .

Or wire the repo to Cloudflare Pages with build_command = "" and publish = ".".

Placeholders to replace before going live

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/xxxxxxxx

Testing

Open tests/test_app.html in a browser. It loads app.js with fixture data and reports pass/fail in the DOM.

Why no JS framework

  • 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.

About

EU compliance deadline tracker - static site with regulatory countdowns

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages