Skip to content
ChronoKit

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)