Developers

Changelog

We list every update here, with the newest at the top.

0Updates
0Changes
0Added
0Fixed
At a glance

Changes per update

Each bar is one update. Hover a bar to see its changes.

Added

Green is something new.

Changed

Blue is a change to something you already use.

4
4
4
3
4
5
Jul 20Jul 22Jul 23Jul 24Jul 25Jul 26
Fixed

Yellow is a bug fix.

Removed

Red is something removed. Check these before you update.

Timeline

Every update, newest first

  1. Archive and a faster adminLatestYou can now archive records instead of deleting them, and the admin loads faster.1 added2 changed1 fixed1 removedShow changes
    • Trash was removed. Delete is permanent, Archive hides a record and can be undone, and the confirm dialog defaults to the safe option.
    • Archive, Unarchive, and Delete across the server-driven admin modules, with the archived queue reachable by query parameter instead of a shallow-broken filter facet.
    • Roughly ninety uncached per-page admin queries are now cached, the sidebar streams, storefront hydration runs in parallel, and the JSON-LD double fetch is gone.
    • Recharts and TipTap load lazily, the mutation path defers its audit write, and each admin action reads the principal once instead of twice.
    • Magic-link login no longer lands on a stale render — cache invalidation can't throw during render.
  2. Safer admin data typesRenaming a database column now shows up as a build error instead of a broken page.1 added2 changed1 fixedShow changes
    • List and detail row types are derived from validated query args rather than hand-written casts that quietly drifted.
    • Every admin CRUD include is guarded with `satisfies Prisma.<Model>DefaultArgs`.
    • A failed read raises an error instead of returning an empty page that looks like no data.
    • Referral resolution failures are logged rather than swallowed.
  3. Getting ready for releaseWe tidied up the public API, permissions and naming.1 changed2 fixedShow changes
    • Public API corrections and naming consistency across modules.
    • Activity taxonomy completeness and permission alignment — every logged module is filterable.
    • Messages migration finished and attribution URL matching corrected.
  4. Stricter form checksForm fields that don't match a database column are now caught when you build.2 added1 changed1 fixedShow changes
    • Compile-time phantom-field guard across thirty-two schemas, plus a dead-column register and a ratchet so coverage can't slip.
    • Two silent-drop write bugs found by the new guard.
    • Domain events ride one internal async substrate instead of several ad-hoc paths.
    • Customer invitations: accept on signup, a real decline flow, and the orphaned-referral case fixed.
  5. Simpler pages and translationsPages and translations are simpler under the hood, and checkout totals are worked out in one step.2 changed1 fixed1 removedShow changes
    • Element, page templates, and PageLayout folded away — a storefront page is now just its rows.
    • Three per-entity translation tables became one polymorphic Translation model.
    • BaseCRUD adopted across twelve modules, which surfaced and fixed a channel phantom-field write bug.
    • Checkout quotes in a single pass, fixing sale double-subtraction and loyalty dropped at charge time; cart display prices now use the same channel basis checkout charges.
  6. Payments, SEO and email fixesFixes across payments, SEO checks and email reporting.2 added1 changed1 fixedShow changes
    • Webhook verification moved behind the PaymentProvider boundary, and manual capture is guarded.
    • New SEO audit checks, sitemap images, an empty-collection filter, and Product brand in structured data.
    • Marketing email stops on permanent bounces and complaints, not on temporary ones.
    • The links table surfaces attributed revenue, clicks, and conversions; integrations surface OAuth token expiry with reason-first sync errors.

Want every change?

Every commit is on GitHub if you want the full history.