Changelog
Every release, feature, and fix — generated from conventional commits.
Changelog
1.1.0 (2026-04-01)
Features
- add /changelog page with sitemap entry and footer link (85dbe87)
- add skeleton loading state for admin page (46214a7)
- expose app version in /health, OpenAPI docs, and Next.js env (#6) (64bef8b)
- show app version in footer (8efbe69)
Bug Fixes
- apply user timezone when displaying astronomy times and in AI chat (24dc705)
1.0.0 (2026-03-31)
Features
- accessibility, error boundaries, security headers, skeleton loader (fea169c)
- add "Open API Reference" link button on developers page (685fd48)
- add 10 missing features for full timeanddate.com parity (c90dc0c)
- add 3 new widgets + live sun position panel (15f9f70)
- add AI chat assistant powered by Claude via Vercel AI SDK (4fdd1ab)
- add AI-generated news section at /news (a70d5a8)
- add alpenglow to golden hour calculator + fix nav/routing gaps (32973ec)
- add astronomy API endpoints to FastAPI backend (Phase 2) (f6cdf9c)
- add authentication with NextAuth.js (GitHub + Google) (f700f56)
- add calendar consumer plans + upgrade modal in PDF creator (db8fee6)
- add calendar plans section to billing page (90f1bec)
- add ChronoKit brand mark to all generated calendar PDFs (c66e2e5)
- add ChronoKit React Native app (Expo) with RevenueCat IAP webhook (a3a6929)
- add ChronoKit SVG logo with light/dark theme support (cd2b6c2)
- add client-side email validation to newsletter subscribe form (2f72481)
- add comprehensive SEO — titles, meta, structured data, sitemap (78799e3)
- add devenv/direnv for reproducible dev environment + Stripe mock (82d2cf4)
- add double opt-in email verification for newsletter (39e6176)
- add example values to all API endpoint parameters (345870c)
- add FastAPI backend — Phase 1 (time, date, calendar, fun, geo) (bb54505)
- add Gherkin BDD feature files with playwright-bdd (419cc31)
- add ICS calendar event creator + redesign billing page (f751253)
- add internal ChronoKit links to AI-generated news posts (6fb3fbc)
- add Mollie payments, rate limiting, and API key system (3d50ff5)
- add Pexels hero images to news posts + improved listing layout (f4c5086)
- add proxy routes for new time/ip and geo/ip endpoints (16928e2)
- add PWA app icons (192px, 512px, maskable 512px) (7e4dd8a), closes #0e1117 #d97706
- add saved setups and DST transition warnings to meeting planner (3f9f999)
- add section landing pages with tool cards for all 5 route groups (4e9d986)
- add support & FAQ page (c99d83e)
- add terminal-style JSON example block to developers page (0bdcc59)
- add usage stats dashboard with Vercel KV (Redis) (c02344c)
- add Vercel Analytics + update privacy policy (8649e33), closes #3
- add versioned REST API with OpenAPI 3.1 spec (71feadd)
- add visual breadcrumb navigation to all content pages (c7c714c)
- add working hours calculator with monthly and annual summaries (fab74ab)
- admin dashboard at /admin (restricted to ramsy@codesavvy.nl) (d63f0e3)
- astronomy: add meteor-showers API endpoint + wire into AI chat (0714e65)
- authenticated E2E tests — login, purchase, API keys, usage (90efe2a)
- auto-detect user's country for holidays and custom calendar (9e0207d)
- auto-generate API key for signed-in users, pre-fill in Scalar (38e5bbc)
- automated traffic pipeline — social posting, RSS feed, auto-newsletter (3a2ee75)
- build full timeanddate.com clone with 25 features across 3 milestones (c6b408c)
- calendar PDF themes, paper sizes, moon phases, logo + AI on-this-day tool (06929d8)
- chat: add golden-hour, tides, distance, and dialing codes to AI tools (c67f551)
- complete FastAPI backend — Phases 3 & 4 (753bc9d)
- contextual extras and localization improvements (dafa5a0)
- cookie banner, privacy policy, terms of service + chat & nav polish (0775d6a), closes #fdfaf4
- cross-device sync for preferences and world clock cities (d6d09b2)
- custom calendar creator with holidays, week numbers, and Sunday start (090992c)
- developer API keys + Scalar API docs on website (3c0b274)
- devenv up starts everything — PostgreSQL, Redis, FastAPI, Next.js (d48ccd1)
- direct Mollie checkout from /developers + API key management UI (8182846)
- Docker-based visual baselines — identical on macOS, Linux, CI (3607508)
- Docker-based visual tests for cross-platform consistency (874507b)
- expand BDD features to cover all 51 pages + navigation + widgets (f9f6ab8)
- favorite city preference with auto-fill across all city pages (2b13439)
- fix chat types, graceful shutdown, connection pooling (820738e)
- freeze time in visual tests — deterministic screenshots (1a62593)
- full epoch converter parity on unix timestamp page (519b93e)
- golden hour calculator + astronomy action StrEnum (5002518)
- identify users by stable OAuth provider_id to handle email changes (bae1290)
- implement all billing TODOs — persist plans in PostgreSQL (d63d834)
- improve news SEO — dynamic sitemap, NewsArticle JSON-LD, canonical + Twitter card (56bb6a1)
- improve support page + fix e2e assertions + visual baselines (0ca2e8e)
- improve timezone map day/night rendering (6135224)
- initial commit (d83d2ed)
- interactive sky map at /astronomy/sky-map (431789d)
- live API responses on developers page (5b2d2b7)
- make ChronoKit brand mark larger and match site header logo (50fc96a)
- meeting planner — email invites and reminders (d94fcdb)
- meeting planner — lunch break awareness (0922382)
- meeting planner — share link preserves working hours, half-hour precision, copy times (8dc16b6)
- meeting planner — working hours, holidays, drag slider, fairness (60056ab)
- meeting planner as homepage hero + auto-detect + suggestions first (f2b9f87)
- meeting planner iteration — duration scoring, required/optional attendees, fairness analytics, async fallback (c50b1ae)
- merge day/night map into timezone map (57bfc6f)
- migrate all client data fetching to @tanstack/react-query (f8854cb)
- migrate day/night map from Canvas to Leaflet (0ca935c)
- migrate to PostgreSQL + Redis — no more in-memory stores (1165afa)
- missing tests, skeleton loaders, breadcrumbs, shareable countdowns (01a9c54)
- mobile: AI chat bottom sheet + dvh keyboard fix (825d246)
- mock AI chat in dev/CI + real chat E2E tests (9a985f0)
- multi-event ICS creator with batch endpoint + nav links (baf98f7)
- news category filter nav + sort + top nav link (60fc593)
- newsletter signup with Mailgun delivery (23efedf)
- OG image generation + Sentry error tracking setup (9a20b00)
- overage billing — paid plans never blocked, charged per extra request (afd0642)
- overhaul API key management — PostgreSQL, expiry, revocation (958653a)
- overhaul meeting planner with interactive timeline, smart suggestions, and calendar export (5449978)
- Phase 3 — PWA support and API expansion (9f1f092), closes #d97706
- rebuild timezone map with city markers, day/night overlay, and search (00314ae)
- redesign homepage with live widgets and content sections (dbdfe95)
- redesign PDF layouts to match timeanddate + add list format (f538d6e)
- redesign Plans & Pricing with modern card layout (be248c1)
- render AI chat responses with markdown formatting (3c281e9)
- replace HTML preview mockups with real PDF preview via iframe (2e0c5b1)
- replace Scalar with Stoplight Elements for API reference (a01303e)
- replace SVG timezone map with interactive Leaflet map (4a78980)
- replace Swagger UI with Scalar API docs (kepler theme) (16e8f74)
- run visual regression tests in CI (139be85)
- saved locations + saved events (27208e8)
- search-first city UX — current time and relative offset in picker (8b811bc)
- secure FastAPI backend — internal key, CORS restriction, Redis rate limits (2456be1)
- simplify calendar plan gating — only logo and multi-month are paid (d74f11e)
- sky-map: add orientation guides for readability (c6c0670)
- split calendar into browser + PDF creator; fix landscape previews (859183a)
- Stripe payments, competitive pricing, timeapi.world parity (56f1b53)
- switch timezone map to ESRI satellite imagery tiles (9a34a78)
- sync all stateful inputs to URL for shareable links (4a3a767)
- terrain horizon profile at /astronomy/horizon (e5389a9)
- tides & marine conditions page at /astronomy/tides (bbe4b86)
- timezone dropdown in settings + prorated plan upgrades/downgrades (2adf525)
- unified account dashboard with sidebar navigation (c5c5e80)
- usage alert emails at 80% quota threshold (de86aeb)
- use NASA Blue Marble satellite image for day/night map (40caea9)
- use new SVG logo in footer (1a7a654)
- use new SVG logo in header (f695701)
- verify account email before sending usage alerts (89d94ae)
- visual screenshots for all 42 pages + fix 3 flaky tests (bae2edb)
- worldwide holidays page at /holidays/worldwide (5823833)
Bug Fixes
- add .first() to Doomsday weekday locator — multiple elements match (dfa1a52)
- add @tailwindcss/typography plugin for prose markdown styling (b8e1a74)
- add daily history to usage stats for 30-day chart (987471b)
- add internal key auth + API key regression tests (89817f9)
- add missing api_keys columns (expires_at, is_revoked) on startup (fb79f2d)
- add mock ANTHROPIC_API_KEY + disable dotenv hint in devenv (50fb3db)
- add payment success/canceled banners, switch to annual billing (aa39200)
- add PostgreSQL + Redis services to E2E job (5a6e3cd)
- add pydantic[email] dependency for EmailStr validation (39eadbd)
- add railway.toml to ensure Dockerfile is used for backend (156da9e)
- add test credentials form to signin page for E2E auth (273d7ad)
- add X-User-Email header to internal webhook proxy (3b4ae29)
- AI chat compatibility with Vercel AI SDK v6, CI auth secret (8adb9f0)
- align usage stats cards — consistent label height (5598164)
- apply time format preference to HeroLiveClock and MiniWorldClock (6cac369)
- auto-compact 3-4 column calendar, fix table overflow scrolling (15b11b1)
- auto-geocode city coordinates for astronomy pages (de76dde)
- avoid duplicate topics in AI news generation + temp delete endpoint (4344ce5)
- await convertToModelMessages (async in AI SDK v6) (01dd663)
- backend tests disable auth/db/redis for unit test isolation (42367cc)
- broadcast preference changes within the same tab via custom event (c14f1e1)
- capitalize plan name in success banner (845ac48)
- chat AI tools bypass Next.js proxy to call FastAPI directly (abce69f)
- constrain map panning to prevent overlay/marker desync (eb82c59)
- convert UIMessages to ModelMessages in chat API route (a6db924)
- correct API title assertion and preferences persistence bug (b35d610)
- correct onthisday test field name and skip flaky external API test (12493d1)
- Den Bosch geocoding, weather coords, lint, and E2E stability (f259dcd)
- developer page UI + update CLAUDE.md for new architecture (b3cf2dd)
- dialing-codes E2E test waits for API data to load (725d694)
- disable rate limiting in dev/CI to prevent 429 during tests (d86ce83)
- e2e: increase golden hour test timeout (031f172)
- e2e: increase sky map test timeout and target sidebar Planets heading (ccf3834)
- eliminate font flash on refresh (d746f12)
- enable multi-step tool calling with stopWhen(stepCountIs(5)) (ff82b62)
- encode date param in sun position API calls (88b33d4)
- ensure Inter and JetBrains Mono fonts apply over daisyUI defaults (ab6d4d2)
- exclude mobile/ from root ESLint (React Native uses different rules) (6645193)
- expand CORS origins and add credentials for Scalar API docs (f6848ec)
- FastAPI example→examples deprecation + Redis RDB persistence in devenv (938f697)
- fetch and display current plan on /developers Plans tab (f88a7f0)
- fix current timestamp overflow layout on unix-timestamp page (c94bbbb)
- forward HTTP method and body in proxyToFastApi — fixes 405 on all POST routes (d668195)
- gracefully handle Redis errors in rate limiter (06a5b3a)
- guard against empty AUTH_SECRET in middleware to prevent e2e crash (81bf7ab)
- handle all 4 Stripe checkout webhook events (caffa45)
- handle wrapped holidays response from FastAPI backend (a9ea8b5)
- harden security — proxy rate limiting, CI auth, chat always limited (1040a51)
- hide chat widget on all /widgets/* embed pages (ef0d932)
- improve usage chart — show placeholder when empty, min bar height (edbd4dc)
- increase E2E test timeouts for slow CI runners (de67f65)
- increase E2E timeouts to 30s for CI single-worker runner (8175004)
- increase timeouts for flaky E2E tests in CI (6438fb3)
- increase world clock visual diff tolerance to 15% (c0649de)
- inject Scalar theme CSS directly in iframe head with !important (39f77b5)
- isolate blog_posts migration + seed into separate transactions (ca6aa3b)
- lower ISR revalidate + on-demand cache bust after news generation (f5a7d1a)
- make Mailgun base URL configurable for EU region support (322cb35)
- MonthGrid cell layout — fix holiday name overflow and column bleed (6ed9c0c)
- move ChronoKit brand to top-left; fix mini next-month overlap (27ce1b0)
- move PWA icons to correct public/ location, scope setuptools discovery (ce2abb7)
- optimize Dockerfile for faster Railway deploys (ffce2ea)
- persist plan activation via FastAPI + poll for status after checkout (6c9e4d0)
- preserve JSON indentation with white-space: pre (92710fd)
- prevent page scroll jump during AI chat streaming (fba5f9b)
- promote year-round cities to isPrimary to avoid DST-caused grouping gaps (b7145a5)
- proxy On This Day Wikipedia API through server route (a7a378e)
- Railway deploy — asyncpg URL scheme + startup timeout (451f167)
- Railway Dockerfile CMD uses shell form for $PORT expansion (a70c5d9)
- raise cookie banner above FAB and tighten flaky E2E tests (2de0557)
- rebuild footer layout with proper 4-column grid (e6dc878)
- reduce city marker size at low zoom for better accuracy (454df57)
- regenerate visual baselines via Docker + fix support e2e assertion (5971d88)
- remove :tags::jsonb cast that broke asyncpg parameterization (248e8c2)
- remove /developers/reference route test + fix elements-api height (38f117d)
- remove flaky sky map planets heading check — astropy cold start exceeds timeout on CI (1f08130)
- remove invalid Stripe expand param + show Admin link for admin user (07422bd)
- remove startCommand from railway.toml (Dockerfile CMD handles it) (a61a624)
- remove unused ComponentProps import in stoplight-elements type declaration (5f7ea24)
- render middle dot correctly in timezone map tooltips (0140a29)
- repair E2E test failures — aria labels, aspect-ratio, pages feature (4d42c87)
- repair e2e tests — auth setup, widget + sun position assertions (5ac689f)
- replace ambiguous Unicode chars in seed posts (ruff RUF001) (0a901b4)
- replace flaky Nix/devenv CI with reliable setup-node/setup-python (9421873)
- resolve all CI annotation warnings (518051e)
- resolve all E2E test failures and CI snapshot permissions (02af0a9)
- resolve FastAPI on_event deprecation + test mock warnings (df67587)
- resolve lint errors for CI — type chat message parts, ignore test artifacts (692ee1f)
- resolve Month range strict-mode violation + flaky Doomsday test (41ec647)
- resolve ruff lint errors in new test files (e68c20c)
- resolve ruff linting errors in holidays service and tests (18b62d0)
- resolve user UUID from email before API key operations (73508b3)
- restore header/footer on /widgets marketing page (c2c9002)
- revert Dockerfile non-root user (may break Railway build) (8dd723d)
- revert to port 5432 (system postgres uninstalled) (d2e0933)
- ruff lint errors in new test files (unused import, sort order) (e5165a2)
- Scalar try-it-out uses chronokit.io proxy (no CORS issues) (383487f)
- security hardening, CI gaps, SEO, and performance improvements (bcf26c2)
- security: omit internal key when forwarding developer API key requests (709182c)
- self-host NASA Blue Marble image (CORS blocked from NASA) (aa61f29)
- set newsletter from address to hello@mg.chronokit.io (cf5daff)
- show country name in weather results to clarify location (f7f930e)
- show loading state while fetching plan to prevent button flash (d41aa5d)
- simplify dialing-codes test — check page structure not API data (4cbb9a7)
- skip external API tests in CI, mark slow tests (0416c48)
- skip flaky E2E tests in CI, fix unused vars, Node.js 24 compat (d2b029d)
- skip rate limiting and usage tracking for website traffic (fbf6d5e)
- skip weather UI tests in CI (external API dependency) (4e51d2b)
- sky-map: always render SVG dome so E2E locator resolves immediately (63464f5)
- sky-map: keep sidebar visible on refresh + clarity improvements (f153862)
- sky-map: render SVG dome as soon as city is set, not waiting for coords (94be782)
- sky-map: stable queryKey in live mode — stop firing requests every second (641888f)
- stabilize CI — fix developers page tests, skip external API tests (1b39c1d)
- start FastAPI backend in CI for E2E tests (23c9e4f)
- start Next.js server before E2E + visual tests in CI (7f8f7ac)
- strict mode .first() for E2E Test Event + fix update-snapshots workflow (2addb76)
- switch to Stoplight Elements web component to avoid QueryClient conflict (c1c9ef7)
- switch usage stats from @vercel/kv to ioredis for Vercel Redis (6964ea6)
- test: make billing status test self-contained (b3c1a81)
- test: update invalid action assertion to expect 422 (2badd47)
- track AI chat usage via FastAPI Redis (ebe1f44)
- update E2E assertions after homepage and meeting planner changes (43f8722)
- update E2E tests for FastAPI proxy architecture (cb082b2)
- update homepage h1 assertion after meeting-planner-first redesign (0cf569e)
- update news E2E test to match new empty state text (c82d026)
- update remaining E2E tests for FastAPI responses (3c00628)
- update stats test mock for async _get_redis and daily pipeline (5eff9f8)
- update timezone map heading assertion after rename (a1f6dad)
- upgrade tsconfig target to ES2020 and add CI fail-fast (c9dfefe)
- usage tracking — add middleware + proxy stats to FastAPI (d55f781)
- use attribute access for Stripe SDK v5 objects in admin stats (4600122)
- use CAST(:tags AS JSONB) for asyncpg JSONB compatibility (27680e0)
- use correct devenv CI setup (nix profile add, not devenv-action) (4d8a4f8)
- use DEVENV_ROOT in all scripts to ensure correct working directory (24d4399)
- use getByText regex for Doomsday weekday locator (04d8602)
- use heading role locator for Embed Code to avoid strict mode violation (4e4baea)
- use inputSchema instead of parameters for AI SDK v6 tools (6b47bd3)
- use port 5433 for devenv PostgreSQL (5432 may be in use) (0af57dd)
- use specific selectors in authenticated E2E tests (cda8cf2)
- use subshells in devenv scripts to preserve working directory (7456882)
- verify plan status from database before showing success banner (efdb42a)
- weather geocoding uses Open-Meteo API for coordinates (f650b60)
- word clock highlighting + Scalar iframe blocked by X-Frame-Options (38bcf99)
- wrap tool parameters with zodSchema() for Anthropic API (29b31ac)
- zero-pad month/day in Wikipedia On This Day API call (8988f23)
Performance Improvements
- add --workers 4 to Dockerfile CMD (Procfile is overridden by Docker) (1e1b2b5)
- parallelize CI — 3 jobs run concurrently, 4 Playwright workers (328ee27)
- pure ASGI middleware + Edge Runtime proxy routes (c908d76)
- run uvicorn with 4 workers on Railway (179d228)
- vectorize astropy sampling + Redis-cache astronomy results (f868edd)
Reverts
- restore Scalar API reference, remove Stoplight Elements (73969af)