An Italian and English one-page data story about the Italian pension system. It combines official projections, observed demographic data and a clearly labelled purchasing-power example. The countdown points to the projected 2036 spending peak, not to a collapse date.
Six scroll-driven scenes use transparent cut-paper illustrations, accessible HTML and SVG data. Motion follows reading progress, never hijacks scrolling, and falls back to a static presentation when reduced motion is enabled.
The project uses Vite, React and TypeScript.
pnpm install
pnpm devUseful checks:
pnpm test
pnpm lint
pnpm buildThe site loads the untouched Italian data pack from public/data/italy.json at runtime. The international pack remains available in the repository but is not required by the published story. Interactive inputs stay in the browser and are not submitted anywhere.
Railway builds the production image from Dockerfile. The build stage compiles the Vite app, then Caddy serves the generated dist directory on Railway's assigned PORT. The service exposes /health for deployment checks and falls back to index.html for client-side routes.
Live site: italian-death-clock-production.up.railway.app
Deploy the public GitHub repository and select the branch to publish:
Zer0codestuff/Italian-death-clock
No runtime environment variables are required.
src/App.tsxcomposes the six scenes, scroll choreography and interactive example.src/styles.cssowns the responsive black, warm-white and signal-red visual system.src/lib/statementCopy.tscontains the complete Italian and English narrative.src/lib/storyMath.tscontains the replacement-rate interpolation and inflation example.src/lib/i18n.tsxowns the persistent language state and document metadata.src/lib/language.tsexposes the language context and hook.public/assets/contains six transparent editorial illustrations.src/lib/data-integrity.test.tsand related tests check data, sources, localization and story calculations.research/andpublic/data/are source-of-truth inputs and must not be rewritten by the UI.
The header language control switches all public copy, chart labels and number formats between Italian and English. The selection stays in browser storage. Source links, truth labels, years, units and scope notes remain beside the claims they support.