8000 GitHub - benknab/stopkriptovalidacio: Civic site tracking Hungary's crypto validation law, its effects, and how MPs voted. · GitHub
[go: up one dir, main page]

Skip to content

About

Civic site tracking Hungary's crypto validation law, its effects, and how MPs voted.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

352 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stop Kriptovalidáció

A Hungarian civic initiative website documenting the cryptocurrency "validation" law (Act LXVII of 2025) and its consequences.

About

This website tracks Hungary's crypto asset regulations:

  • Timeline of regulatory changes and their impacts
  • Crypto exchange service availability in Hungary
  • Parliamentary member database with voting records
  • Original provider confirmations and historical source documents

Current status

The validation regime ended on August 7, 2026, when Act XXXVIII of 2026 entered into force. The site preserves the regulatory history and tracks which providers have restored services and where restrictions remain.

Features

  • Timeline: Regulatory events, provider decisions and their sources
  • Exchange tracking: Restrictions, closures, announced returns and confirmed restorations
  • MP database: 199 parliamentary members with voting records
  • Bilingual: Hungarian and English

Development

Requires Node.js 24.21.0 LTS and pnpm 12.10.1 (pinned in package.json). The runtime is pinned in .node-version and .nvmrc. If you use nvm, run nvm install from this directory to install and select the pinned runtime.

pnpm install --frozen-lockfile  # Install dependencies
pnpm dev                       # Cloudflare-backed Vite development server (workerd)
pnpm build                     # Prerender a static Cloudflare Pages export
pnpm preview                   # Preview the static export with Wrangler Pages
pnpm start                     # Alias for pnpm preview
pnpm deploy                    # Build and deploy the static export to Cloudflare Pages
pnpm check                     # Format, lint, type check
pnpm test                      # Production build + unit/component/HTTP regression tests
pnpm test:browser              # Browser regression tests (requires agent-browser)
pnpm audit:search              # Read-only production crawl/agent-discovery report
pnpm setup                     # Install the optional pre-commit hook

Tech Stack

TanStack Start/Router, React, Tailwind CSS v4, Vite+ (build, lint, format, test), pnpm, Cloudflare Pages. Node.js runs build/maintenance tools; production is static and needs no Node server, Worker or Pages Functions.

Production

pnpm build prerenders the public page inventory (both languages), writes a static sitemap and 404 page, and verifies that the export has real HTML and no backend dependencies. Deploy only dist/client. The dist/server bundle is used for build-time rendering and must not be deployed.

Cloudflare Pages Git integration:

  • Framework preset: None
  • Install dependencies: pnpm install --frozen-lockfile
  • Build command: pnpm build
  • Build output directory: dist/client
  • Production branch: master
  • Node.js: 24.21.0; pnpm: 12.10.1
  • Custom domain: stopkriptovalidacio.hu (matches constants/seo.ts)

For manual deployment, log in once with pnpm exec wrangler login, then run pnpm deploy. Set the Pages project name in wrangler.jsonc to match your Cloudflare project. Do not use wrangler deploy: this is a Pages static deployment, not a Workers deployment.

wrangler-dev.jsonc configures the Cloudflare Vite plugin for local development and build-time rendering. wrangler.jsonc configures static Pages preview/deployment. The build removes the Vite plugin's generated Workers deployment pointer so Wrangler Pages reads the static configuration.

Languages and static behavior

Page URLs use trailing slashes to match Cloudflare Pages' directory serving: Hungarian pages use /, /rolunk/, /szavazas/, etc.; English versions use /en/, /en/rolunk/, /en/szavazas/, etc. Old slashless URLs redirect to these pages. Navigation, canonical URLs, hreflang alternates and the sitemap use the same language-specific directory URLs. Language links preserve the page, query filters and fragment; cookie/Accept-Language-based rendering and /set-lang are no longer used.

The default page content is present in the exported HTML without JavaScript. Query filters apply immediately after hydration and continue to support reloads and browser history. Content changes require a rebuild/redeployment.

Editorial dates live in utils/content-dates.ts; source publication/update dates live in data/sources.json. Update them when the corresponding content changes, not when deploying. These dates feed visible page timestamps, JSON-LD and sitemap lastmod. Historical event dates describe the event, not when we published its account.

Provider detail pages are registered in data/provider-pages.ts, with an explicit status-evidence event and editorial dates. Their summaries reuse exchange translations and their histories reuse timeline events. Add a page only when its status has linked evidence. The /hatter/ page exposes background events without requiring the timeline's JavaScript filter.

Agent-readable exports

The finalizer generates a .md alternate for every indexable page, plus /llms.txt and /llms-full.txt. Homepages use /index.md and /en/index.md; other URLs replace their trailing slash with .md. Markdown is extracted from our own prerendered <main> at build time, so translations, source quotations and default filter content stay aligned with the HTML. Navigation, scripts and interactive filter controls are omitted. Background events remain available at /hatter.md, and all default voting records are included at /szavazas.md.

HTML advertises the alternate in its head. Generated Pages headers mark Markdown noindex, follow, set its content type, and link to the canonical HTML. Only HTML URLs appear in the sitemap. No content negotiation or production backend is required; regular HTML URLs always return HTML. The exports are available after pnpm build through pnpm preview. Register new pages in utils/static-pages.ts with their content dates and canonical/indexable head metadata to include them.

See Search visibility checks for the bilingual query set, optional Brave API rank observations, Cloudflare crawler checks, AI citation records and Umami referral monitoring.

The global 404 fallback keeps its prerendered HTML and stylesheet but does not load the app hydration runtime. A small inline script selects its document language and home link from the requested URL, without a backend.

Maintenance scripts

All maintenance scripts run directly with Node's native TypeScript support:

pnpm inspect-current-winners --help
pnpm backfill-mps-kpn-ids --help
pnpm download-mp-images
pnpm post-telegram --dry-run

post-telegram reads an optional .env file and requires TELEGRAM_BOT_TOKEN only when actually posting. Image optimization uses the project-local Sharp dependency, with ImageMagick as a fallback.

Regression coverage

Tests cover both languages, approved page/SEO fingerprints, timeline visibility, representative filtering and selection, email editing/copying, language-specific URLs, 404 responses, sitemap and static assets. The HTTP and browser suites exercise the actual static export using Wrangler Pages (not an SSR server). The browser suite covers desktop/mobile, direct filtered URLs, language switching, and hydration/runtime errors. Baseline fingerprints are intentionally fixed; review them when changing published content or styling. After reviewing an intentional change, pnpm test:browser --print-baseline prints replacement fingerprints without changing the fixture; all other browser assertions still run. Update only the affected entries in tests/fixtures/migration-baseline.json, then run the regression tests normally.

License

MIT

About

Civic site tracking Hungary's crypto validation law, its effects, and how MPs voted.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

0