Changelog

What's new in Notion Analytics

Every release, every improvement, every fix. We ship constantly and you can track it all here.

  1. v1.9.6

    One icon color, clean device colors, one toggle, and the demo window finds its family

    • The sidebar's icons are the ONE brand teal again, by owner verdict: every analytics and account row's icon is muted at rest, teal on hover, teal while selected — the per-section hues (violet, vermilion, gold, azure) are retired from chrome for good, because a different-colored icon per row read as noise rather than identity. Section accents still live exactly where they read as data: each report's charts, map and heatmap ramps, and rank marks keep their own hue; the navigation never does.
    • The Devices report gets clean minimalistic colors: the saturated blue that dominated the Device Type donut (and the OS and Browsers bars) is gone. A quiet ramp now anchors the dominant row in the brand teal and carries the rest on clamped slate steps, feeding the donut slices, the legend dots, and the bars from one array; the device, OS, and browser marks render as bare glyphs beside the dots — no tinted rounded squares anywhere.
    • Every segmented toggle in the product is now the exact same control: the settings tab bar's geometry (the inset-field track, the 32px chips, the stuck ghost-hover selection) renders everywhere from one shared component — the pricing Monthly/Yearly switch with its save badge, the mobile plan switcher, the share report's metric picker, the widget scope and style tabs, the comparison toggle, and the homepage demo's 7/30/90-day chips. No surface drifts its paddings or heights anymore.
    • The homepage demo window finds its family: the first rectangle (the outer band) now paints the ghost-hover color — the exact background-rectangle color every hovered menu item shows, in light and dark — so the mockup reads as a real browser window (quiet gray chrome around the page surface), and the "Live" badge wears the same light inset field as the 7/30/90 chips beside it: one consistent light family where the badge used to read darker than its own toggle.
  2. v1.9.5

    Icons go bare, and the navbar refresh becomes a real Notion sync

    • Every icon decoration the section-accent update added is removed, by owner verdict: the identity tile that sat beside each report's page title is gone (page headers are plain title + description again), and every KPI stat card's accent-tinted icon chip is gone — the cards return to the clean original idiom, the bare 16px glyph in the brand color beside the label, and the five time-series reports' KPI sidebars return to their quiet label-value-date tiles with no icons at all. A new icon law carries the lesson into the system: icons render as bare glyphs — muted at rest, colored at most — never inside tinted chips, tiles, or rounded squares, because the decorated-icon look reads as the generated "AI dashboard" style rather than a considered one.
    • The section accent system itself stays, exactly where it reads as data: each report's sidebar icon still snaps to its own hue on hover and while active, and each tab still wears its color through its charts, map and heatmap ramps, and rank chips — never the canvas, never a card fill, never a selection surface, and now never an icon decoration.
    • The navbar's refresh button is now the product's true Sync control: clicking it runs the full Notion reconciliation first — every connected workspace's page inventory re-fetched from Notion (new, renamed, and re-iconed pages upserted), the workspace identity asked for and refreshed whenever Notion's API serves it, and the two-way widget reconciliation — and only then invalidates every metric on screen, so the whole dashboard refetches from the database the sync just made truthful. The spinner tracks the real work, and a manual sync always answers with a summary toast (pages from Notion, widgets re-added, pages re-tracked, anything that needs attention).
    • The workspace name now refreshes on every sync whenever Notion's API returns it (one users/me call per workspace, best-effort and never fatal to the sync). The workspace logo remains a Notion API hard limit — it is only ever sent at authorization time, so a reconnect is what refreshes it; the sync's contract is documented honestly in the guide.
  3. v1.9.4

    Every report wears its own color: the section accent system, and the theme toggle goes icon-only

    • Every analytics report now carries its own accent color, drawn from the product's verified 8-hue chart palette: Overview keeps the brand teal as the home report, Realtime pulses green, Pages goes violet, the five time-series reports (Page Views blue, Sessions teal, Users vermilion, New Users gold, Avg Time coral) wear the exact color their chart series already drew, Location turns azure — its world map's choropleth ramp included — Devices takes blue, Week Time renders a golden-hours heatmap, Performance wears the score-green, and Reactions goes warm vermilion. The accent reaches exactly four places per tab: the sidebar icon on hover and while active, a new identity tile beside the page title, the KPI metric chips, and the tab's charts, ramps, and rank chips — never the canvas, never a card fill, never a selection surface, so every law of the system holds.
    • Every metric card is upgraded to the modern chip idiom: the bare colored icon is replaced by a rounded accent-tinted tile (a quiet 10% fill, the glyph in the section's full accent, and a hairline accent inset ring) — the same three-part recipe the new page-header tile wears at 44px, scaled to the stat card. The five time-series reports' KPI sidebars join in, each tile led by its chip; the Realtime tab composites as one green heartbeat — its chart, stat chips, rank chips, reading badges, and country bars all wearing the live color.
    • The light/dark theme toggle is back to the bare ghost icon button: the gray inset field and hairline border it briefly wore are removed — the sun/moon glyph is the control, transparent at rest, with the quiet ghost hover filling only on interaction, exactly like every other icon button in the chrome row.
    • The interaction law is refined, not broken: selection still sticks the ghost hover and a brand fill still never marks it — but a report row's icon now snaps to that report's own accent (the brand teal remains the color for account and chrome rows). With 13 reports over the 8 sanctioned hues, four hues repeat across distant, non-adjacent families — the deliberate rotation that keeps every accent inside the contrast-verified palette.
  4. v1.9.3

    The inset-field gray: search bars and toggle tracks become quiet inset fields

    • Search bars now wear the soft inset gray — one quiet step off the pure-white canvas (#f8f8f8 in light mode; its exact slate counterpart #1b2624 in dark mode): borderless, no shadow, just the calm field look with the search glyph and the Ctrl K key. The dashboard's search bar, the Ctrl+K palette's input band, the Pages report's search box, and the support console's search all follow one recipe.
    • Every toggle track joins the same family: segmented controls (the settings tab bar, the pricing Monthly/Yearly switch, the report metric toggles, the homepage demo's 7/30/90-day range chips, the widget scope control), the light/dark theme toggle, and the settings switches' off-state tracks all paint the same inset gray — the theme toggle and switch tracks gain a real hairline border so their rectangles read crisply in both themes. The interaction law is unchanged: hovering still fills the ghost surface, the selected segment is still the hover that sticks, and a checked switch still fills with the brand teal.
    • The input-vs-button distinction is now explicit: fields you type in (search bars, toggle tracks) rest as the quiet gray inset, while action chips (the date range, granularity, and compare triggers) stay the crisp white mini-panels — the classic pattern that makes a control's purpose readable at a glance, in light and dark alike.
    • The page canvas stays pure white everywhere — marketing, dashboard, and shared analytics — with the gray living only on the controls, never on the ground. One new token (--control-inset) drives the whole family from a single place.
  5. v1.9.2

    Every floating panel and every toolbar chip joins one surface family

    • The dashboard and shared-analytics toolbar chips — the date range, granularity, and compare triggers, the mobile options chip, and the search bar — were quiet white-on-white rectangles that barely read on the pure-white canvas. They now wear the mini-panel recipe: the card tone with a real 1px border and a whisper of lift, the exact surface language of the dropdown panels they open, crisp in light mode and floating off the deep page in dark mode. Their leading icons snap to the brand teal on hover, exactly like a menu row's icon.
    • The Compare chip's active state now follows the interaction law like every other selection: the ghost hover surface sticks with a full-ink label, the compare icon wears the brand teal, and a hairline edge crisps the rectangle — the old teal-tinted fill is retired, so an active filter reads as the same quiet gray every other selected state wears.
    • Every dialog — including the Ctrl+K command palette — now paints the exact same panel tone as dropdowns and popovers (pure white in light mode, the card slate in dark mode): no more background rectangle that sat one step deeper than the panels beside it in dark mode.
    • The homepage demo's browser-window frame now layers white-on-white exactly like the rest of the product: the old slightly-darker gray band around the live demo is retired in favor of the card tone with hairline borders in both themes, so the demo window reads as one more crisp card on the page — the same coloring as everything else.
  6. v1.9.1

    The toggle track joins the law: selected now matches the hover exactly, on a white control surface

    • Every segmented toggle — the settings tab bar (Widget / Members / Account / Notifications), the pricing Monthly/Yearly switch, the report metric toggle on shared analytics pages, the homepage demo's 7/30/90-day range chips, and the widget scope control — now sits on a white control-surface track (the same hairline-edged surface the toolbar's date, granularity, and compare chips wear) instead of the old gray well: no more dark gray container behind the tabs, in either theme.
    • The selected segment's background is now EXACTLY the hover color: with the track at the card tone, the stuck ghost-gray fill composites to the identical value a hovered dropdown row or table row renders — hover an option and select it and the surface does not change, it simply stays. A crisp 1px hairline edge defines the selected chip's rectangle so the stuck state reads instantly, with the icon in the brand teal.
    • Dark mode follows the same recipe on its own palette: the track is the dark card slate with the same white hairline the toolbar chips wear, the selected chip keeps the ghost fill with its teal icon, and hovering an inactive chip fills the identical surface the selected one holds — one interaction law, both themes.
  7. v1.9.0

    The interaction law: selected is the hover that stays, and the sidebar goes white

    • Every selectable row in the product — the sidebar's nav items, the workspace and account menus, the date, granularity and compare pickers, the selects, the command palette, and every toggle segment — now follows one law: hovering fills the row with the quiet ghost-gray surface and turns its icon the brand teal; selecting keeps exactly that look permanently (the hover surface sticks, the icon stays teal, the label holds its weight). The solid teal fill that used to mark a selected nav item or menu option is retired from selection — the brand fill now lives only on action buttons and form controls like checkboxes and switches.
    • The dashboard's left sidebar is now pure white, matching the canvas: the light teal whisper is retired, and the rail reads as its own layer through its hairline edge and soft shadow alone. The brand teal reaches the sidebar only through the interaction law — the icon of the item you hover or the section you're in.
    • The segmented toggles everywhere (the settings tab bar, the pricing Monthly/Yearly switch, the report metric toggles, the homepage's demo range chips, the widget scope control) join the same system: the selected segment wears the ghost surface with its icon in brand teal, and inactive segments now show the same hover fill — no more dead, colorless chips.
  8. v1.8.0

    Pure-white canvas: the page ground returns to white, the teal moves to accents

    • The page background is now exactly white in light mode — the soft gray-green tint is retired from every surface: the marketing site, the login and signup pages, the dashboard, and every public shared analytics page all sit on the same clean white ground, with the pure-white cards layering white-on-white through their hairline borders and soft shadows. Dark mode keeps its deep-slate near-black, the dark counterpart of the same canvas.
    • The dashboard's left sidebar now carries the brand's one quiet whisper: a very light teal tone that sets the rail subtly apart from the white content area beside it — a little difference, never a wash. The active nav item keeps its solid teal fill with the white label.
    • The primary teal now speaks through accents everywhere: the KPI stat icons on the dashboard, the shared analytics pages, and the homepage's live-demo tiles all wear the brand color, joining the sidebar's nav icons, the buttons, links, focus rings, and chart series that already carried it — one accent color across the whole product, with status colors reserved for success, warning, and error semantics.
  9. v1.7.1

    One canvas, everywhere: the teal-whisper ground now carries every page

    • The quiet tinted ground you know from the dashboard — the soft gray-green in light mode, the deep teal-tinted near-black in dark mode — is now THE canvas of the whole product: the marketing site, the login and signup pages, the blog and changelog, the dashboard, and every public shared analytics page all sit on the same ground, with the pure-white cards floating on it everywhere. The marketing pages' old pure-white background is retired: one consistent look from the first pixel of the homepage to the last chart of a shared report.
    • Every hover that sits directly on the canvas got a calibration pass at the same time: quiet ghost hovers (nav links, menu rows, table rows) now read as one clear step darker than the ground they hover on, in both themes, instead of nearly vanishing on the tinted canvas.
    • The marketing page's banded sections (How it works, Reviews, the footer) keep their alternating rhythm on the new ground: the bands are calibrated to stay one ghost step deeper than the canvas, exactly as visible as they were on white. The support admin console joins the same canvas too, retiring its own gray tint — there is exactly ONE page ground in the product now.
    • A consistency sweep rode along: every primary-colored control that still brightened on hover (some badges, toasts, the sidebar's Connect button, the share page's Apply-range button) now presses in darker through the same hover ramp the main buttons use; the browser-chrome color on dark mode matches the new canvas; and the browser-window mockup frame on the homepage reads clearly on the tinted ground in both themes.
  10. v1.7.0

    One teal, everywhere: the founder ring, the hero, and the product canvas

    • The founder banner's ring now glows in the brand teal instead of orange: a soft seafoam-to-deep-teal halo wrapping the card, the same hue family as the Claim button, the badge, and the wash inside the card, so the whole banner reads as one branded moment (the deal-sold-out state still goes quiet, ring and all).
    • The homepage headline's accent words ("See them.") now wear the brand color directly — one solid teal, the exact color of the button right below them — instead of a shifting gradient. The live demo's browser frame also gained the same crisp card shadow the buttons wear, and its double-rectangle frame is now clearly visible in dark mode, exactly like light mode.
    • The dashboard and every shared analytics page are back on the quiet tinted work canvas: the left sidebar and every card float pure-white on a soft gray-green ground in light mode (and on a deep teal-tinted near-black in dark mode), while the marketing pages keep their clean white. The pricing section's guarantee ticks (no card required, cancel anytime, free trial, Stripe) are now solid brand-teal chips that read at a glance, in both themes.
  11. v1.6.0

    One 15-day trial that starts the moment you sign up

    • Every new account now starts a 15-day free trial of the full Pro feature set at signup: Google or email, no credit card, nothing to activate. Onboarding goes straight to connecting Notion: there is no plan step to get past before you can see your analytics.
    • Picking a plan during the trial collects your card in Stripe Checkout for $0 due today; the first charge lands exactly on the trial end date the countdown showed you. Pick on day 2 or day 14: every remaining trial day is kept either way, and cancelling before the end date means you are never charged. Plan switches during a trial stay instant and invoice-free, and the old three-switch cap is retired: switch as often as you like.
    • If a trial ends with no plan picked, nothing is ever charged: the dashboard locks, tracking stops, and you hear about it first: a countdown strip above the dashboard navbar throughout the trial, and a reminder email three days before the end. Your data is kept for 30 days after the trial ends, then reclaimed.
    • The pricing page now shows exactly what exists (Starter, Pro, and the lifetime Founder deal while seats last) with no free tier anywhere: every number on it (trial length, retention, guarantee) is derived from the same constants the product enforces, so the page can never drift from reality.
  12. v1.5.5

    Your dashboard now loads in its final state: no more post-reload surprise lock

    • Reloading the dashboard had a tell: for the fraction of a second while the page settled, every analytics tab (Overview, Realtime, Pages, and the rest) looked open and clickable, then suddenly snapped to locked once the app learned you hadn't connected Notion yet. The lock state is now resolved on the server before the page is even sent to your browser, so the sidebar is locked (or unlocked) from the very first frame it's visible. There is no in-between state anymore, on any reload.
    • The dashboard also paints faster and more honestly across the board: your session, plan, and workspaces are read server-side in one pass instead of through a chain of follow-up requests, deep links like a billing upgrade CTA land directly on their tab (no brief flash of Overview first), and the "Complete setup" button's label no longer gets cut short by its 1-minute badge on narrower sidebars.
  13. v1.5.4

    Password-reset emails now actually sign you in, and every dead link explains itself

    • Clicking "Reset Password" in the email used to dead-end: the link opened the reset page, but the sign-in session it created was silently thrown away (the tokens traveled in a part of the URL the server can never read), so typing a new password answered "session expired", and re-clicking the same email said the link had "expired" even minutes after arrival, because that first wasted click had already consumed it. Emails now carry a server-redeemable link: the click establishes your session the moment it lands, the reset form only appears when a real session exists, and every reset email you'd already received still works too.
    • Every auth email failure now says what actually happened instead of a raw code: reset, verification, and email-change links that were already used, replaced by a newer request, or past their expiry show a plain-English card explaining that links work exactly once, with a one-click "Request a new reset link" (or "Resend" for verification emails). The emails themselves now state the single-use rule up front, so "expires in 1 hour" finally matches reality.
    • Email-change confirmations got the same surgery: clicking "Confirm New Email" used to land on the login page with a sign-in error even when the change succeeded. It now confirms the address, signs you straight in, and tells you the update happened. Dead signup-verification links can no longer show a false "Email verified!" success either; the real failure wins, with a resend option right in the message.
  14. v1.5.3

    The Performance report actually shows your pages now

    • The Page Performance report had a silent bug since launch: it fetched your data correctly, then handed it to the table in the wrong shape, so the tab rendered permanently empty (headers, zero rows) no matter how much analytics you had. It now lists every tracked page with views, visitors, average read time, reactions, retention, engagement + quality scores, and its recommended next action. And when the report can't load, you get a visible error with a Retry button; never an empty table pretending to be "no data".
    • Every chart in the app (traffic overview, realtime visitor flow, all five trend reports, and the device-type breakdown) now renders through one shared, theme-aware chart component (the shadcn/ui Chart wrapper over Recharts). Consistent tooltips with formatted values, smooth entry animations on every fresh view, and colors that follow your light/dark theme automatically. The week-time activity heatmap gained a soft staggered fade-in as well.
    • Also fixed along the way: with a comparison period selected, the traffic chart showed its "vs previous" badge but never drew the dashed previous-period lines (a chart-library child-scanning quirk with wrapped groups). The comparison curves (and their entries in the tooltip) now render for real, on the traffic chart and every trend report.
  15. v1.5.2

    The founder deal now follows you through sign-up, and it's on fire

    • Clicking "Claim founder deal" while signed out no longer loses you after account creation: you're sent to sign up (a banner reassures you the deal is saved), and after signing in (Google or email, including the email-verification round trip) you land straight back on the deal with the one-time checkout already resuming. No more hunting for the banner you clicked five minutes ago.
    • The founder banner now wears a warm fire-gradient ring: a static gold/orange/red/rose border wrapping the card with a soft glow, instantly signaling "limited deal, look here" while staying subtle enough for a professional page. When the deal sells out, the ring goes quiet with it.
  16. v1.5.1

    One delete button per workspace, and trials that can't be flip-flopped

    • Deleting a workspace now has exactly one entry point: the "Delete workspace…" item in the sidebar's workspace dropdown. The per-row trash icons on every workspace row (dropdown and Integrations page) are gone: same typed-confirmation safety, one obvious button instead of duplicates.
    • Plan changes during a free trial are now capped at three per trial. Switching Starter ↔ Pro (or monthly ↔ yearly) stays instant, card-free, and (verified against Stripe's current subscription-update behavior) completely invoice-free, since a trial swap only re-points the price the trial-end invoice will bill. The cap simply stops rapid flip-flopping from churning subscription events: past three switches your current plan rides out the trial, and changes reopen the moment it converts (or you cancel via "Manage Billing"). (This cap was retired in 1.6.0; plan switching during a trial is now uncapped.)
    • The billing checkout endpoint is rate-limited (12 requests per 10 minutes per account), so scripted plan-switch spam hits a calm 429 instead of Stripe; complementing both the switch cap and the existing one-trial-per-customer guard. (The rate limit remains; the cap and the per-customer scan it complemented were both retired in 1.6.0's single-trial model.)
  17. v1.5.0

    Delete a workspace for real, and switch plans mid-trial in one click

    • Workspaces can now be permanently deleted: a trash button on every workspace row in the sidebar's workspace dropdown and the Integrations page opens a typed-confirmation dialog that removes the workspace and everything it owns (pages, analytics history, engagement time, reactions, and per-page widget settings) straight from the database. Shared team workspaces stay owner-only (members never see a delete button), your account, plan, and billing are untouched, and deleting a workspace frees its plan slot immediately on every plan (Free, Starter, Pro, Founder; the Free tier itself was removed in 1.6.0).
    • Disconnect vs. delete is now a real choice: Disconnect still keeps all data and just pauses the Notion connection; Delete is clearly labeled as the irreversible path, with the plan-level "what this means for your subscription" spelled out before you confirm.
    • Switching plans during a free trial is instant: a trialing user who picks a different plan (Starter ↔ Pro, or monthly ↔ yearly) gets their subscription's price swapped in place: same trial end date, no card required, and the trial-end invoice simply charges the new plan. No more dead end at the billing portal's "Cancel subscription" button when you just wanted the cheaper plan.
    • The Stripe billing portal now offers "Change plan": plan switches with proration for paid subscriptions, configured automatically by the app (you'll see it in Stripe as the "Notion Analytics (default)" portal configuration). If the configuration can't be created for any reason, the portal falls back to exactly its previous behavior; the enhancement never becomes a dependency.
    • Mid-trial upgrades no longer risk double billing: previously an upgrade during a trial created a second subscription that would also charge at trial end; the in-place price swap keeps exactly one subscription per customer.
  18. v1.4.0

    Team invites actually work now: log in and you're in

    • Team invites are real: clicking "Accept Invitation" in the invite email and logging in IS the acceptance; the invited member's dashboard immediately shows the shared workspace (labeled with their role), its pages, analytics, realtime feed, and reports. Signing in proves ownership of the invited email, so there is no extra step to forget.
    • Members inherit the team: the shared workspace's analytics unlock at the team owner's plan level (a Pro team's Free-plan members see the full history window and geo/device reports for the shared data, never paywalled mid-team), and the workspace picker, Pages view, and Integrations view all label shared workspaces with the member's role.
    • Roles are enforced on the server, not just hidden in the UI: viewers get a clear read-only state everywhere (the track/untrack buttons explain it, and the API answers 403), editors and admins can track, untrack, and sync the owner's pages, and the workspace connection, billing, and the member list always stay owner-only.
    • The owner's Team Members list now tells the truth: "Invited" until the member first signs in, a live relative-time "last active" afterwards, and the member's real profile name once they have an account. Removing a member revokes their access immediately.
    • The footer email signup is verified end-to-end: every subscription is stored in the waitlist table in your Supabase project (source-tagged "footer"), duplicates are handled gracefully, and invalid addresses are rejected.
    • Email notification toggles now provably gate the emails they describe: milestone alerts and the weekly report only ever send to users who left the matching toggle on; verified behaviorally, not just persisted.
  19. v1.3.0

    Exact metrics, custom date ranges, and a workspace sync that never lies

    • Custom date ranges: pick any start and end date from the calendar (Starter+), with outside-month days clickable, backend-validated ranges on every analytics route, and compare support.
    • Pageview and visitor counting now follow the GA4/Plausible model exactly: every real page load counts (reloads, second browser profiles, return visits), unique visitors stay deduped, and a 30-second double-fire guard stops embed re-mounts from inflating counts; refreshes move views, never visitors.
    • Device detection went universal: the full industry parser matrix (iOS Chrome/Firefox, Android Edge, Samsung Internet, Yandex, Opera, in-app social browsers), Android tablets and iPads classified correctly, and iPadOS-13+ Safari's desktop-mode UA corrected client-side so Devices and OS reports stay exact on every device, including the iPads that GA4, Plausible, and Matomo all miscount as Desktop.
    • Realtime now tells the truth in every edge case: multi-tab visits count once with full engagement, long readers stay in the live feed while their heartbeats flow, and every dashboard view refreshes itself every 30 seconds while its tab is focused.
    • Workspace tracking sync was rebuilt around one rule: the dashboard only changes tracking state on positive confirmation. Disconnecting a workspace now provably preserves every page, tracked flag, and widget; reconnecting restores everything exactly; a page Notion can't see (deleted or unshared; the API can't tell them apart) is flagged for your attention instead of being silently untracked; a page whose widget went missing is healed automatically on the next sync; and if tracking can't place the widget on the page, you get an honest warning with the fix; never a silent success.
    • The page list is now a live inventory with no sync button to think about: new pages you share with the integration appear automatically: when you connect, whenever you open the Pages view, and the moment you return to the dashboard tab from Notion (the only place sharing can change). The syncs are silent when nothing changed and say exactly what happened when something did, including workspaces with more than 100 pages, which previously truncated silently.
  20. v1.2.1

    Perfectly proportioned branding on every screen

    • The NotionAnalytics.app wordmark now scales through a single responsive sizing system; it renders noticeably larger on phones (where it previously shrank too small) and keeps perfect proportions on tablets and desktops, in the site header, footer, sidebar, and every auth screen.
    • The dashboard sidebar logo is now sized to fit every sidebar width cleanly (no more touching the edges on desktop) and stays one consistent size across the mobile drawer and desktop sidebar.
    • Accessibility polish across the app: dropdown triggers now announce their open state to screen readers, the pricing Monthly/Yearly toggle and the Settings tabs expose proper toggle/tab semantics, and every logo button has a consistent focus ring and accessible label.
    • SEO fixes: the About, Contact, Blog, and Changelog pages now use a proper top-level heading, and every page's brand name is derived from a single source of truth so a future rebrand can never leave stale names behind.
    • The footer is now one shared component across the homepage and all secondary pages (it previously drifted; the homepage was missing the RSS link), and dependency/config dead weight was trimmed for a leaner deploy.
  21. v1.2.0

    Faster, leaner, and built to scale

    • The Pages view now reads pre-aggregated per-page statistics: one small query per page instead of scanning every recorded view, so the dashboard stays instant no matter how much traffic your pages accumulate.
    • Plan history windows are now enforced automatically: analytics events older than your plan's window (7 days on Free, 30 days on Starter, unlimited on Pro) are cleaned up weekly. Pro accounts are never touched, and public reaction counts are never affected. (In 1.6.0 the free-floor retention was raised to a 30-day minimum, matching the post-trial data promise.)
    • Checkout buttons now show a busy state while a plan change is in flight, so a double-click can never open two Stripe sessions.
    • Security and account emails (password resets, address changes, team invites) are now guaranteed to be delivered even when a server pauses immediately after responding.
    • Engagement heartbeats run at a 15-second cadence (industry-standard, the same approach Google Analytics uses), cutting infrastructure load by a third while keeping engagement time just as accurate.
  22. v1.1.0

    “Last used” sign-in method memory

    • The login and sign-up pages now remember which method you last signed in with on this device and pin a “Last used” label right on that sign-in option, the same pattern used by professional login pages like Vercel and GitHub. Hover the label to see exactly when.
    • The hint is always real: it is recorded only after a sign-in actually succeeds (email login, Google OAuth callback, or password-reset link), never optimistically on button click.
    • Future-proof by design: the method id comes straight from your auth provider's own metadata, so any login method added later (GitHub, Apple, …) gets the same treatment with zero extra code.
    • Returning email users land with the email field pre-focused for one less click.