What's new on KeyAway

Last updated: November 7, 2026

Release notes for major features, improvements, and fixes shipped to KeyAway.

Platform release history

Catalog activity feed →

September 2026

  1. ·PR #125

    perf(analytics): lower function cost on each page view

    perfapi

    Page views, visitor checks, and program stats do less work on each request. Browsing still records the same session, and new visits still store an English country name.

    Highlights

    • A page view no longer fires a separate sign-in check or an immediate analytics post.
    • Visitor context is reused for the rest of the browser tab.
    • New visits take country and city from the edge and store the country as an English name.
    • Program view and download totals are counted in the database instead of loading every session event.

    Analytics

    • Page views join the 4 second batch and send when you leave the page.
    • An open session only compares the last two events when skipping a near-duplicate.
    • A visitor already active in the last 30 minutes is not written again on every page.

    Admin

    • The program stats job sums views and downloads per bundle instead of pulling the full event list.
  2. ·PR #122

    feat(admin): sanity headroom and key report bundling

    featapiuiperfenhance

    Keeps KeyAway inside Sanity’s document budget while preserving key-report history: community votes still count on program pages, visitors can renew reports even after archival bundling, and admins get a clearer picture of what is consuming dataset space plus tighter cron retention.

    Highlights

    • Key reports older than seven days archive into keyReportBundle documents via a daily cron, cutting live doc growth without losing vote history.
    • Program pages, homepage stats, and admin views count live plus bundled reports so success rates and totals stay accurate.
    • Visitors can renew a previous key report even when it lives inside a bundle (matched by visitor hash and key identity).
    • Admin dashboard replaces the old overview tiles with a Sanity document census (totals plus 24h and 7d growth, show-more by type).
    • Cron run logs prune after seven days; cron status shows per-job last runs including bundle key reports.

    Community

    • Duplicate-report flow opens the renew modal for archived votes, not only live documents.
    • Negative and positive report counts on program pages include bundled community history.

    Admin

    • Key reports table and session detail edits support bundled rows (bundleId + rowKey).
    • Header key report alerts scan a 30-day window across live and bundled data (label matches config).
    • Analytics event charts omit comments and key suggestions; ranking tables support search and show-more.
    • Cron jobs card lists bundle key reports schedule and retention wording.

    Platform

    • Shared time.ts duration helpers replace scattered millisecond math across crons and admin windows.
    • Visitor bundling retention stays at one day; prune-cron-runs retention reduced to seven days.
    • Webhook revalidation covers keyReportBundle writes for homepage stats cache.
  3. ·PR #121

    fix(analytics): keep one visit when the page reloads

    fixapi

    Reloading the site or opening another tab no longer splits one visit into several sessions, and a repeat of the same click within 90 seconds is stored once.

    Highlights

    • A reload stays on the same visit until the visitor has been idle for 30 minutes, the visit has been open for 2 hours, or it has 100 events.
    • Another tab from the same visitor continues the open session instead of starting a new one.
    • The same event on the same page within 90 seconds is not counted again.

    Analytics

    • Session history stays one timeline per visit, so view and download totals are not inflated by reloads.
  4. ·PR #120

    feat(analytics): finish the sessions admin and list every program

    featfixuiapidocsenhance

    Visits stay grouped in sessions, the old event documents are gone, and the all-programs grid lists every program with room left for the suggest-a-key card. Fixes #118.

    Highlights

    • Every program shows on the all-programs grid (fixes #118). Each page holds 15 programs so the suggest-a-key card keeps the last slot.
    • Admin visits live at /admin/sessions. The events page is gone.
    • Key reports, comments, suggestions, messages, and sessions open in the same detail dialog, with one View Details button.
    • The analytics overview no longer charts key-report votes. Those stay on the visit timeline.
    • Idle visits fill a session bundle up to 800 before a new bundle is created.

    Programs

    • Page 2 starts on the program that follows page 1, so nothing is skipped between pages.
    • Programs with the same popularity stay in a stable order.

    Admin

    • Session history is newest first, with the visitor panel at the top.
    • Suggestions and contact messages keep the visitor panel at the bottom.
    • A key report still shows each visitor on its own row.

    Analytics

    • Program view and download counts are written every 6 hours by the sync-program-stats cron.
    • Bundles built during the event migration are filled the same way as live bundles.
  5. ·PR #119

    feat(analytics): group visits into sessions

    featuiapienhance

    Page views, copies, downloads, and shares from one visit are now stored together as a session. Program share counts and view totals read from those sessions, and the admin events page is now a session timeline that also includes key reports, comments, suggestions, and contact messages.

    Highlights

    • A visit stays open for 30 minutes of activity, then starts a new session
    • Share counts on program pages and /programs come from session clicks
    • The admin Sessions page shows each visit as one timeline, including reports and comments
    • Older analytics were copied into sessions so counts stay after the old event documents are removed

    Visits

    • Reloads and back navigation stay on the same visit instead of looking like a new arrival
    • Key reports, comments, suggestions, and contact messages are attached to the visit that sent them

    Programs

    • View and download numbers on program cards update from session counts on the next stats rollup

    Admin

    • Analytics referrers are counted per session
    • Idle sessions are archived every 30 minutes
    • A migration panel can convert remaining events and delete the old documents once those sessions look right
  6. ·PR #117

    feat(version-fit): admin edit, bundled updates history, changelog publish

    featfixenhanceapiperf

    Tightens “which version did you try?” reporting on program pages, lets admins correct stored tried versions on key reports, fixes [#115](https://github.com/eyyMinda/KeyAway/issues/115) so `/updates` shows real chronological catalog history, and defaults merged-PR changelog entries to published in Sanity.

    Highlights

    • Version-fit prompts accept short labels like 16 or 16.5; 16 and 16.0 roll up together in stats
    • “Other version” must be at least 0.1 newer than the listed key version when users type a custom version
    • Admins can edit the tried version on a key report from the admin modal
    • /updates keeps a full history via bundled Sanity docs; the header bell stays a small recent snapshot

    Community

    • Clearer version-fit flow on giveaway keys (listed vs other version, validation before submit)
    • Updates timeline can show repeated key drops per program by month, not one row per program

    Admin

    • Key report details: edit tried version with the same validation rules as the public form
    • Changelog sync workflow writes published: true by default so releases appear on /changelog after merge
  7. ·PR #114

    feat(program): larger event bundles, version-fit key reports, and program page fixes

    featfixuiperfapienhance

    Key reports for expired or limit-reached keys now ask whether you tried the listed program version, so mismatched-version failures don't skew community scores. Program pages load reliably again, and analytics bundling uses larger batches with a shorter live window to slow Sanity document growth.

    Highlights

    • Version-fit prompt after expired/limit reports — confirm listed version or enter the one you tried
    • Other-version reports excluded from progress bars; warning icon on affected keys with hover detail
    • Program page SSR fix (image dimensions without @sanity/asset-utils)
    • JSON-LD aggregateRating emits integer values within 1–5 for Google rich results
    • Event bundling: 5000-capacity new bundles, 12h live window, 6h cron (legacy 1000 bundles untouched)

    Community

    • Report and renewal modals show clear success or skip feedback after submit
    • Progress bar hover tooltip breaks down working, expired, limit, and other-version counts
    • Non-admin sessions required for visitor reports to persist (admin skip message shown when logged in)

    Admin

    • Key reports table and detail modal show listedVersion, version-fit, and other-version aggregates
    • Cron status card reflects 6-hour bundle-events schedule

For day-to-day listings and key drops, see Updates.