Skip to main content

What we delivered

Recent updates and new features in plain English.

May 2026

  • Fix

    Correct RootPlan mode descriptions — walkthrough is not first-person

    Shipped Correct RootPlan mode descriptions — walkthrough is not first-person.

  • New

    ContractTemplateManager + CRUD routes + ContractTemplateBuilderWidget (#4166c)

    Adds the contract (tenancy agreement) template entity to TerraLedger — the final part of the #4166 billing/tenancy-setup cluster. A council customises a template once, then TerraLedger merges plot/tenant/billing data into the active template to generate agreements (for signature via RootSign).

  • New

    Bind ChargeCatalogueManager routes + ChargeCatalogueWidget (#4166b)

    Shipped Bind ChargeCatalogueManager routes + ChargeCatalogueWidget (#4166b).

  • New

    Bind ClientBillingConfig route + BillingCycleSetupWidget (#4166a)

    Shipped Bind ClientBillingConfig route + BillingCycleSetupWidget (#4166a).

  • New

    Add example dataset download CTA (#4167)

    Shipped Add example dataset download CTA (#4167).

  • Fix

    Add snake_case fallbacks in entity managers for Vault-imported data

    Shipped Add snake_case fallbacks in entity managers for Vault-imported data.

  • New

    Provision per-council account on claim approval

    Shipped Provision per-council account on claim approval.

  • New

    Add /tenant-accounts and /recipes/attach route bindings

    Shipped Add /tenant-accounts and /recipes/attach route bindings.

  • Fix

    Replace fake-email fallbacks with hard errors (#4168)

    Shipped Replace fake-email fallbacks with hard errors (#4168).

  • Fix

    Unblock import validation gates

    Unblocks the import validation gates after the Release-20260520 import-profile merge by tightening TypeScript types in the Vault and Collections import paths.

  • Fix

    Restore widget-manifest.json deleted in PR #4155

    Shipped Restore widget-manifest.json deleted in PR #4155.

  • Fix

    Restore pnpm-lock.yaml deleted in PR #4155 — preprod builds broken

    Shipped Restore pnpm-lock.yaml deleted in PR #4155 — preprod builds broken.

  • New

    Resolve imports through account mappings

    Routes TerraLedger/allotment imports through account-scoped `schema.mapping` profiles stored in Collections, so council-specific Excel shapes map into canonical collection entities without hardcoded dogfood profiles.

  • New

    Charge catalogue with 8 calculation methods + Type 2 SCD pricing

    Shipped Charge catalogue with 8 calculation methods + Type 2 SCD pricing.

  • New

    ImportProfileRegistry — shared import engine with TerraLedger + QueueSpark profiles

    Shipped ImportProfileRegistry — shared import engine with TerraLedger + QueueSpark profiles.

  • New

    Add configurable import profile choices

    Shipped Add configurable import profile choices.

  • Fix

    Enforce sandbox import simulation

    Enforces TerraLedger/Vault sandbox import semantics so `simulate` validates real workbook data without persisting preview payloads, Collections rows, audit rows, or email side effects.

  • New

    Seeker → allotment full flow wiring (#4135)

    Shipped Seeker → allotment full flow wiring (#4135).

  • New

    Migrate allotments.info pin credit from Stripe coupon to customer balance

    Fixes a quiet revenue bug in the allotments.info pin → TerraLedger upgrade credit flow. The existing `duration: 'once'` coupon was consumed by the **first invoice only**, silently discarding unused credit. A 50-plot council with a £99 pin credit and £10/month TerraLedger usage lost £89 — 9 months of free service they were sold. Replaces Stripe coupons with Stripe customer balance transactions that auto-deplete across subsequent invoices until the credit is exhausted.

  • New

    Wire Metric 6 snowflake-metric calculation (#4135)

    Replaces the hard-coded `null` for `rootplan_allotment_seeker_waitlist_rate` in `plotspark-intelligence`'s rootlytics route with a real cohort + funnel SQL calculation. IMPOSSIBLE_GOALS Metric 6 — the snowflake metric — is now measurable instead of permanently null.

  • Fix

    ROICalculatorWidget inverted error guard — calculator now renders

    Shipped ROICalculatorWidget inverted error guard — calculator now renders.

  • New

    Wire TerraLedger plot metering — nightly snapshot + meter seed (#4109)

    Wires the missing per-plot metering for the TerraLedger Community plan — nightly snapshot worker plus Stripe meter seed — so councils are billed against the configured `usageRates.plots.bands` ladder instead of stalling at the £10/mo floor.

  • New

    Competitive-displacement claim-evidence gate + 4 wired (#4063)

    Adds Step 3 of #3956 — a sibling validator to the aha-schema gate that audits `competitiveAdvantage` claims and asserts each one can be backed by a test path, a docs citation, or a `TODO:#<issue>` placeholder. Wires 4 example recipes as proof and includes 7 vitest tests covering all rules.

  • Fix

    Bespoke P0 ahas for 7 launch-ready recipes, defer 8 scaffolds (#4055)

    Replaces the auto-promoted placeholder P0 ahas (from #4054) with bespoke trigger+moment content for 7 launch-ready recipes, and marks 8 addon/scaffold/internal-page recipes as `status: planned + deferred: true` so they no longer require a `linkedTestOrSpec`.

  • Fix

    Prepend MRR-on-default-dashboard P0 aha for reachability (#4077)

    Prepends a new P0 aha to rootlytics-recipe.json that ties directly to the gotchaMoment ('MRR ... all on one dashboard') and points at `intelligence/mrr-dashboard` — already on the default dashboard tab — so the reachability roll-up in release gate #3901 hits 4/4 instead of 3/4.

  • Fix

    Reword automatic cross-recipe context as on-demand

    Rewords PlotSupport copy so the cross-recipe customer context claim accurately describes the mechanism (on-demand Collections query when an agent opens a ticket) rather than implying an event-driven push that does not exist.

  • Fix

    Make marketing shell social icons dts-safe

    Shipped Make marketing shell social icons dts-safe.

  • Fix

    Enforce Communications allow-list in failed-job tile gate

    Closes the only allow-list-enforcement gap found in the post-merge audit. Failed-job tile gate now declares COMMUNICATIONS_ALLOW_LIST + assertRecipientInAllowList() and routes the synthetic payload recipient through the guard. Matches the sibling-gate pattern (#3934 claim queue, #3935 cert queue, all TerraLedger gates, etc.). Vitest 24/24.

  • Fix

    Demand-MI gate strict-null guard

    Closes the 1 new TS strict-null error surfaced by the PR #3922 code review. demand-mi-tile-proof-gate.ts:1002 needed an explicit guard before destructuring stats.topDemandAreas[0]. Runtime-safe, vitest still 20/20. Carries on the test-only nature of the gate file — no production code path changed.

  • Fix

    Widget install URL encoding, installed widget shape, booking customer ID schema, booking jobs startup

    Shipped Widget install URL encoding, installed widget shape, booking customer ID schema, booking jobs startup.

  • Fix

    Remove deleted service refs from start/build/test scripts

    Shipped Remove deleted service refs from start/build/test scripts.

  • Fix

    Wire columnMapping, auth header, and Excel format for CSV/Excel import

    Shipped Wire columnMapping, auth header, and Excel format for CSV/Excel import.

  • New

    Load add-on widget catalog from recipe addon JSON files

    Shipped Load add-on widget catalog from recipe addon JSON files.

  • New

    Add widget listing, categories, install and installed endpoints

    Shipped Add widget listing, categories, install and installed endpoints.

  • New

    Wire WidgetMarketplace into DashboardHeader

    Shipped Wire WidgetMarketplace into DashboardHeader.

  • New

    GCSE planner exam board cost reference and practical warnings

    Shipped GCSE planner exam board cost reference and practical warnings.

  • New

    Agent identity, capabilities discovery, and reference agent

    Shipped Agent identity, capabilities discovery, and reference agent.

  • Fix

    Correct RootScout widget endpoint paths in USP parity audit

    Shipped Correct RootScout widget endpoint paths in USP parity audit.

  • Fix

    Correct rootscrum approval route in USP API parity audit

    Shipped Correct rootscrum approval route in USP API parity audit.

  • New

    #3837 extend add-on catalog with content/marketing, analytics/gamification, project-management

    Shipped #3837 extend add-on catalog with content/marketing, analytics/gamification, project-management.

  • New

    #3835 high-MRR launch proof gate

    Shipped #3835 high-MRR launch proof gate.

  • New

    #3833 high-MRR launch proof gate

    Shipped #3833 high-MRR launch proof gate.

  • New

    High-MRR USP release gate — lead to outreach outcome proof contract

    Shipped High-MRR USP release gate — lead to outreach outcome proof contract.

  • New

    Widget Add-On Catalog — AI & Intelligence browse UI (#3827)

    Shipped Widget Add-On Catalog — AI & Intelligence browse UI (#3827).

  • New

    High-MRR USP release gate — entitlement activation proof contract

    Shipped High-MRR USP release gate — entitlement activation proof contract.

  • New

    High-MRR USP release gate — RTK session to field operation proof contract

    Shipped High-MRR USP release gate — RTK session to field operation proof contract.

  • New

    High-MRR USP release gate — waitlist-offer lifecycle proof contract

    Shipped High-MRR USP release gate — waitlist-offer lifecycle proof contract.

  • New

    Generic core/ProcessDiagramWidget with steps[] config (#3810)

    Shipped Generic core/ProcessDiagramWidget with steps[] config (#3810).

  • Fix

    Resolve 37 pre-existing TypeScript strict-mode errors (#3816)

    Shipped Resolve 37 pre-existing TypeScript strict-mode errors (#3816).

  • New

    Promote allotments-info, rootplan, rootlytics to implemented (#3805)

    Shipped Promote allotments-info, rootplan, rootlytics to implemented (#3805).

  • New

    Stripe-to-MRR USP launch proof gate (#3806)

    Shipped Stripe-to-MRR USP launch proof gate (#3806).

  • New

    Paid-season-plan USP launch proof gate (#3807)

    Shipped Paid-season-plan USP launch proof gate (#3807).

  • New

    Allocation process diagram widget for admin waitlist view (#3803)

    Shipped Allocation process diagram widget for admin waitlist view (#3803).

  • New

    Comms bounce/failure events trigger staff tasks (#3799)

    Shipped Comms bounce/failure events trigger staff tasks (#3799).

  • New

    Staff hold/skip/override routes with mandatory audit reasons (#3798)

    Shipped Staff hold/skip/override routes with mandatory audit reasons (#3798).

  • New

    Resource state machine, readiness gate, and offer lock (#3797)

    Shipped Resource state machine, readiness gate, and offer lock (#3797).

  • New

    DB foundation for policy-driven waitlist workflow (#3796)

    Lays the database and Collections schema foundation for the generic policy-driven waitlist offer workflow — the prerequisite that #3797 and #3798 depend on. Fixes #3796 Refs #3795

  • Fix

    Resolve extends inheritance in manifest generator

    Shipped Resolve extends inheritance in manifest generator.

  • New

    Wire AI coaching + smart recommendation widgets into top-tier recipes

    Shipped Wire AI coaching + smart recommendation widgets into top-tier recipes.

  • New

    Wire 6 remaining gamification widgets into rootplan recipe

    Shipped Wire 6 remaining gamification widgets into rootplan recipe.

  • New

    Wire backlog-items + time-tracking widgets into rootscrum recipe

    Shipped Wire backlog-items + time-tracking widgets into rootscrum recipe.

  • New

    Multi-window offer reminders, re-engagement template, live missions widget

    Shipped Multi-window offer reminders, re-engagement template, live missions widget.

  • New

    Anonymous public booking + branding config + customer timezone

    Adds anonymous public booking creation (no login required), per-workspace branding config, and customer timezone support to the public booking page. Fixes #3479

  • New

    Wire calendar sync into appointment lifecycle + availability

    Wires the existing `schedulingService.syncToExternalCalendar()` into appointment create/cancel/reschedule and makes AvailabilityManager respect external calendar blocks. Fixes #3480

  • New

    Deposit/full payment toggle + tiered refund policy + slot release

    Wires deposit-vs-full payment toggle, tiered cancellation refund policy, and slot release on checkout expiry into the booking payment flow. Fixes #3481

  • New

    Implement no-show fee charge + daily sweep cron

    Replaces the \`handleNoShow()\` console.log stub with a real implementation that charges no-show fees and adds a daily sweep cron for stale confirmed appointments. Fixes #3485

  • New

    Wire RoutingManager auto-assignment into AppointmentManager

    Connects the already-implemented \`RoutingManager\` to \`AppointmentManager.create()\` so bookings with no explicit staff member auto-assign via round-robin / least-busy / skill-weighted routing. Fixes #3484

  • New

    Wire rootplan plantings metering cron + snapshot job

    Wires the already-implemented `UsageTrackingService.snapshotRootPlanPlantingsForAllAccounts()` into the billing cron scheduler so RootPlan planting usage is tracked for metered billing. Fixes #3773

  • Fix

    Skip auth tests when E2E credentials not configured

    Shipped Skip auth tests when E2E credentials not configured.

  • Fix

    Revoke agent API keys via direct DB update

    Shipped Revoke agent API keys via direct DB update.

  • New

    Complete RootLytics recipe marketing content

    Shipped Complete recipe marketing content.

  • New

    Rebuild /verticals/restaurant as multi-recipe landing page

    Shipped Rebuild /verticals/restaurant as multi-recipe landing page.

  • New

    Auto-generate 58 proxy route files from service-registry.json

    Shipped Auto-generate 58 proxy route files from service-registry.json.

  • New

    AgentRateLimitWidget — per-agent rate limit dashboard

    Shipped Add AgentRateLimitWidget — per-agent rate limit dashboard.

  • Fix

    Widget UX states — AvailabilityCalendarWidget and AudienceCalloutWidget

    Shipped Add loading/error/empty UX states to AvailabilityCalendarWidget and AudienceCalloutWidget.

  • New

    MostLikedGardensWidget — monthly community garden rankings (#3220)

    Shipped MostLikedGardensWidget — monthly community garden rankings (#3220).

  • New

    Photo journal widgets + recipe wiring (#3742)

    Shipped Photo journal widgets + recipe wiring (#3742).

  • New

    PhotoVisibilityManager + public photo filter (#3740 #3741)

    Shipped PhotoVisibilityManager + public photo filter (#3740 #3741).

  • New

    P2 quick wins — marketing content + remove as-any (#3732 #3733 #3734)

    Shipped P2 quick wins — marketing content + remove as-any (#3732 #3733 #3734).

  • New

    Photo upload pipeline — schema, PhotoUploadManager, upload/delete routes (#3739)

    Shipped Photo upload pipeline — schema, PhotoUploadManager, upload/delete routes (#3739).

  • New

    Real upvote aggregation and monthly garden rankings (#3220)

    Shipped Real upvote aggregation and monthly garden rankings (#3220).

  • New

    Public garden timeline slider for vanity pages (#3218)

    Shipped Public garden timeline slider for vanity pages (#3218).

  • New

    Alias system, booking registry gaps, NotificationCenter + 59 smoke tests (#3691/#3692/#3695/#3697/#3701/#3703/#2372)

    Implements a widget alias system absorbing 22 missing recipe widget refs, fixes 3 booking registry gaps, adds the canonical `NotificationCenterWidget`, and delivers 59 widget smoke tests — resolving issues #3691, #3692, #3695, #3697, #3701, #3703, and #2372.

  • New

    Translate 9 settings pages to 7 languages (#1703)

    Wires all 9 previously un-translated settings pages with `next-intl` `useTranslations`, adding 224 translation keys across 9 namespaces in 7 locale files (en, fr, de, pl, es, it, pt).

  • New

    LA council CNIS register portal (#2861)

    Introduces the `homeschool-la` widget namespace with 3 widgets and a recipe for council officers managing the statutory Children Not in School (CNIS) register under the Children's Wellbeing and Schools Bill 2024–25.

  • New

    Recipe inheritance via `extends` — base templates for SaaS, land, school, booking (#2458)

    Implements recipe inheritance via an `extends` field so child recipes deep-merge from 4 new base templates (SaaS, land management, school, booking), reducing per-recipe size by ~36% and cutting new recipe scaffold time from 3 days to under 2 hours.

  • New

    Embed read-only garden canvas for allotments.info (#3219)

    Adds a read-only embeddable garden canvas at `/embed/rootplan/[gardenId]` for use on allotments.info featured garden pages, and adds an `embedMode` flag to `GardenShowcaseWidget` for chromeless inline embeds.

  • New

    Template versioning with update notifications

    Implements workspace template versioning so users see an update badge when an official template has a newer version and can merge new widgets with a single click.

  • New

    Formalise composite service boundary, closes G-007 (ADR-0045)

    Formalises the RootSchool composite service boundary (ADR-0045), closing audit gap G-007 from PR #3364 by creating a typed ownership manifest and a machine-readable `GET /api/rootschool/ownership` endpoint.

  • Fix

    Verify garden public status before serving public spatial layers (#3210)

    Shipped Verify garden public status before serving public spatial layers (#3210).

  • New

    Whole-garden tracking — permanent plants, fruit trees, containers (#3212)

    Shipped Whole-garden tracking — permanent plants, fruit trees, containers (#3212).

  • New

    Garden observations & journal CRUD (notes, photos, health, pest, harvest) (#3214)

    Shipped Garden observations & journal CRUD (notes, photos, health, pest, harvest) (#3214).

  • New

    Support polygon boundary at garden creation — GeoJSON, derived dimensions (#3208)

    Shipped Support polygon boundary at garden creation — GeoJSON, derived dimensions (#3208).

  • Fix

    Correct source value + require explicit consent for plot-history publishing (#3211)

    Shipped Correct source value + require explicit consent for plot-history publishing (#3211).

  • New

    PlotSpark Sites — site builder CRUD + public renderer (#1608)

    Shipped PlotSpark Sites — site builder CRUD + public renderer (#1608).

  • New

    Agent identity & scoped auth (#2833)

    Shipped Agent identity & scoped auth (#2833).

  • New

    Add subject grant model and audit events for permissions

    Extends the workspace permission grant model to be forward-compatible with group/role subjects, and adds structured audit logging for all permission lifecycle events. Fixes #3661

  • Fix

    RootCheck local gate, GitHub CI advisory, explicit loop flow

    Updates the \`p0-p1-issue-loop\` skill to clarify the exact end-to-end loop and make RootCheck (local, \`localhost:4242\`) the primary code-review gate — GitHub Actions CI is explicitly advisory since credits are unavailable. Refs #3668

  • New

    Add p0-p1-issue-loop autonomous issue resolution skill

    Adds the \`p0-p1-issue-loop\` Claude Code skill — a fully autonomous gated control loop for resolving P0/P1 GitHub issues into the active release branch without human intervention on each PR.

  • New

    Land P0/P1 launch agent batch

    Lands the integrated P0/P1 agent batch across TerraLedger, Allotments.info, RootPlan, RootLytics, AI billing, recipe manifest/build gates, and high-MRR recipe workflow gates.

  • Fix

    Fallback when Railway private DB DNS fails

    Shipped Fallback when Railway private DB DNS fails.

  • New

    Auto-seed platform agent profiles on startup

    Shipped Auto-seed platform agent profiles on startup.

  • New

    Recipe completeness, widget skeleton loaders, and API key tests

    Resolves four self-contained go-live items from the RootLytics epic (#3127): fixes a truncated aha moment media description in the recipe JSON, replaces spinner loading states with proper skeleton loaders in the two API key widgets, and adds an integration test suite + E2E smoke test for the RootLytics dashboard. Fixes #3127

  • Fix

    Wire CommunityForumWidget to real API, remove hardcoded mock posts

    Extends the issue #3527 mock-surface hardening branch beyond the original social widget fix. The branch keeps the live API wiring for `CommunityForumWidget`, updates the recipe mock-surface inventory to match the merged RootFarm gates, and expands the Playwright release gate so stale inventory claims or unlabelled RootFarm mock widgets cannot slip back into release surfaces.

  • Fix

    Verify P0 widget gate — 0 failures, add audit reports

    Closes the widget wiring gap audit for high-MRR recipes. All 39 P0 widgets across 10 recipes pass the gate (0 failures). Adds the missing workflow audit reports and refreshes the widget reference audit.

  • Fix

    Duplicate recipe tabs cleaned up

    Recipe dashboards now collapse repeated generated tabs so RootSchool, RootPlan, and other workspaces show one tab per recipe workspace instead of long duplicate lists.

  • Fix

    Light and dark mode made consistent

    The theme toggle is visible again and dashboard surfaces now use matching light or dark tokens instead of mixing a dark widget canvas with a pale page background.

  • Improvement

    Recipe and widget audit added

    Added a script and report that list every widget referenced by recipe files, flag missing bundles or service routes, and classify event notifications as dashboard events delivered through webhooks.

  • Improvement

    Allotments workflow test plan documented

    Audited Playwright coverage for every recipe and defined the critical allotments.info to QueueSpark to TerraLedger tests needed for waitlists, vanity pages, imports, offers, and webhooks.

  • Fix

    Duplicate recipe subscriptions blocked

    Billing now returns one row per recipe, the My Recipes widget defensively deduplicates dirty data, and Studio recipe attachment now reuses an existing active recipe instead of inserting another duplicate.

  • Fix

    Database cleanup for duplicate subscriptions

    Added migrations to deactivate duplicate Studio recipe attachments, cancel duplicate active billing subscriptions, and add unique indexes so the same active recipe cannot be subscribed twice.

  • Improvement

    Current release notes refreshed

    The changelog now reflects the May 11 development build instead of leading with older February billing work.

February 2026

  • New

    Stripe checkout wired for first revenue

    Checkout now resolves correct prices from Stripe via recipe-specific lookup keys. No more hardcoded fallback amounts — if a price isn't configured, checkout fails safely instead of charging the wrong amount.

  • New

    30-day free trials for B2B recipes

    TerraLedger, RootSchool, and PlotSpark ERP now offer a 30-day free trial. Your card is collected at checkout but not charged until the trial ends. After 30 days, Stripe automatically starts your subscription.

  • New

    Trial-ending email 3 days before you're charged

    You'll now receive an email 3 days before your free trial ends, telling you exactly what you'll be charged and how to cancel or manage your subscription.

  • Improvement

    Stripe price sync tool for recipe pricing

    New script reads all recipe pricing tiers and creates matching Stripe Products and Prices. Idempotent, supports dry-run mode, and uses lookup keys so checkout always charges the right amount.

  • Improvement

    Pricing increased to reflect value delivered

    Prices raised 50–100% across all recipes following our Chapter 9 pricing review. Low prices signalled instability to B2B buyers — the new prices position PlotSpark as a serious, sustainable platform.

  • Improvement

    B2B free tiers replaced with 30-day trials

    10 B2B recipes (TerraLedger variants, RootSchool, PlotSpark ERP) no longer have permanent free tiers. Councils and schools now get 30 days of full access, then convert to the Starter plan. Consumer recipes like RootBooker and RootScrum keep their free tiers.

  • Improvement

    6-month grandfathering policy — no permanent grandfather pricing

    When prices increase, existing customers keep their current rate for up to 6 months. After that, everyone moves to the new pricing. This keeps revenue sustainable and pricing fair.

  • New

    Invoice history and team management in Settings

    New pages at /settings/invoices and /settings/team. View and download past invoices, and manage team members with role-based access.

  • New

    Webhook delivery logs for developers

    The developer webhooks page now shows delivery history, retry counts, and response times. You can also send test events to debug your integration.

  • Fix

    Billing test suite fully green — 174 tests, 0 failures

    Fixed all pre-existing test failures in the billing service. Resolved ESM import issues with nanoid v5, TypeScript errors in SAP accounting integration, and a syntax error in widget definitions.

  • New

    Careers and Data Marketplace onboarding enabled

    The Careers and Data Marketplace recipes now have complete onboarding flows guiding new users through initial setup.

  • Improvement

    49 new tests across billing, RootTrade, and grandfathering

    Added 34 tests for the grandfathering policy, 15 tests for RootTrade backtesting strategies, plus 20 tests for trial checkout and email templates.

  • New

    110 new widgets fill every gap across the platform

    Added 110 missing widget components across 17 services. Every recipe now has all the widgets it references — no more placeholder gaps or blank panels.

  • New

    RootDate: AI-powered dating recipe launched

    New dating recipe with AI-powered compatibility matching, double opt-in consent, profiles, a discovery feed, and full platform integration including notifications, gamification, and analytics.

  • New

    RootShift: shift scheduling recipe launched

    Shift scheduling is now live — manage rotas, swap shifts, and track availability. Includes API endpoints, aha moments, and full recipe integration.

  • New

    ERP recipe with Odoo comparison

    New ERP recipe for small businesses with a marketing page, domain configuration, E2E tests, and a detailed buildability assessment comparing PlotSpark to Odoo.

  • New

    25 new interactive map widgets

    Added 25 layered map widgets across 5 recipes — interactive site maps, zone overlays, and spatial data views powered by the Layers service.

  • Improvement

    Featured recipes now in a carousel with category filters

    The homepage recipe showcase is now a swipeable carousel instead of a wall of cards. Filter by category to find the recipe for your industry, or swipe through all 10. Shows 3 at a time on desktop, 2 on tablet, 1 on mobile.

  • Improvement

    Recipe count shown for social proof

    The 'View All' button on the homepage now shows the total number of recipes available, so you can see the breadth of the platform at a glance.

  • Improvement

    Schedule a Call moved next to 'Ready to get started?'

    The booking form now appears right below the 'How it works' section so you can schedule a call without scrolling to the bottom of the page.

  • Fix

    Less whitespace on marketing pages

    Reduced the large gap at the top of marketing pages. The hero section is now more compact and banners no longer flash a spinner before disappearing.

  • Fix

    5,765 missing translations added across 7 languages

    Filled in 5,765 missing translation keys across English, German, French, Polish, Spanish, Welsh, and Italian. Fixed broken JSON in German, French, and Polish locale files that was causing crashes.

  • Fix

    All tests passing — zero failures

    Resolved all remaining test failures across dashboard, auth, internationalisation, widget, and service tests. The full test suite now passes cleanly.

  • Fix

    Type errors fixed across all services

    Resolved TypeScript errors in terraledger, social-service, billing, plotspark-intelligence, and other services. Clean compilation across the entire platform.

  • Fix

    Booking calendar fixed on iPad

    Fixed the calendar layout that was broken on iPad and improved the booking page layout for tablet-sized screens.

  • Fix

    Widget styles now render correctly everywhere

    Fixed an issue where some widget styles weren't loading. Tailwind now scans widget source files so all styles are included in the build.

  • Fix

    Removed placeholder G2 badge

    The 'Coming soon on G2' rating badge has been removed from the homepage until real reviews are collected.

  • Fix

    Redundant floating call-to-action removed

    Disabled the floating 'Schedule a Call' button that was duplicating the inline booking form further up the page.

  • New

    Automated refunds when you cancel

    Cancel a subscription and any eligible refund is now processed automatically through the rules engine. No manual intervention needed.

  • New

    Garden snapshots kept for 6 months

    RootPlan now saves snapshots of your garden layout every time you change it, and keeps them for 6 months. You'll get a heads-up before old snapshots expire.

  • New

    Full German and EU legal compliance

    Impressum, accessibility statement, DPA, cookie policy, privacy policy, and terms & conditions are now available in German. All legal pages include company registration details and comply with EU regulations including the European Accessibility Act.

  • Improvement

    14-day no-quibble refund guarantee

    Our terms now include a 14-day cooling-off period with a simple withdrawal form, plus the German VSBG dispute resolution declaration.

  • New

    Aha moment screenshots on marketing pages

    Recipe marketing pages now show screenshots and videos next to each aha moment, so you can see exactly what the product looks like before signing up.

  • Fix

    Stability and crash fixes

    Fixed a crash that could happen when environment variables were missing, resolved a layout issue with the skip-to-content link, and upgraded next-intl to v4 for better internationalisation support.

  • Improvement

    Faster, cleaner builds

    Eliminated Turbopack warnings, fixed 2,188 widget type errors, and resolved build issues across shared packages. The platform now builds cleanly with zero TypeScript errors.

  • New

    Plot transfers with configurable pricing

    Councils can now set transfer fees when tenants swap or hand over plots. Pricing is fully configurable per site.

  • Improvement

    Marketing content across all recipes

    Every recipe now has clear descriptions of the problems it solves, the value it delivers, and how it compares to alternatives. Helps you pick the right recipe for your needs.

  • New

    7-language support across all domains

    All 9 domains now support English, German, French, Polish, Spanish, Welsh, and Italian. Your language preference is remembered between visits.

  • Improvement

    Better SEO with hreflang tags

    All pages now include hreflang alternate links and a multilingual sitemap, so search engines show the right language version to the right audience.

  • Improvement

    47 TerraLedger widgets polished to production standard

    Every TerraLedger widget now has skeleton loading, error recovery, empty states with clear next steps, toast notifications, and full keyboard accessibility.

  • New

    Self-service vanity domain setup

    You can now set up your own branded domain (e.g., yourcouncil.allotments.info) from the Settings tab without contacting support.

  • Improvement

    Improved rent calculator

    The allotment rent calculator now includes UK regional comparisons, concession rate support, rod/perch units, and auto-calculates based on your site details.

  • New

    Per-recipe video embeds

    Each recipe can now have its own explainer video on its marketing page.

  • New

    Personalised email sender identity

    Emails now come from your account's name and address, not a generic PlotSpark mailbox.

  • New

    6 gotcha moment widgets for the marketing funnel

    Interactive calculators on marketing pages now link directly to the matching recipe, converting interest into signups.

  • New

    RootSchool, RootFaith, RootBooker, RootVibe, and RootSign complete

    Five more recipes are now production-ready with full dashboards, onboarding flows, E2E tests, and widget test suites.

  • New

    TerraLedger dashboard with 26 widgets across 4 tabs

    Council officers now have a full daily workflow dashboard: plots and tenants, finances, compliance, and communications all in one view.

  • Improvement

    RootPlan and RootLytics dashboards redesigned

    RootPlan now has 2 tabs with 5 tested widgets. RootLytics has SaaS metrics tabs with full widget and E2E tests.

  • Improvement

    15 widgets now have empty states with clear next steps

    When a widget has no data yet, it now tells you exactly what to do first instead of showing a blank screen.

  • New

    Guided onboarding for new users

    First-time users now see a step-by-step onboarding wizard that creates their first site, garden, or queue as they go. No more staring at an empty dashboard.

  • Improvement

    Full user funnel tracking

    We now track the complete journey from landing page through to paid conversion, helping us find and fix drop-off points.

  • Improvement

    Platform recipe config (for recipe builders)

    Recipes can now declare optional platform config (AI Team, retention tools, Smart Inbox) so one implementation serves many recipes with recipe-specific context. No change to end-user UI.

  • New

    Billing wired end-to-end with Stripe

    Subscription management, usage dashboards, and recipe checkout now work end-to-end. You can subscribe, see your usage, and upgrade plans from inside the app.

  • New

    Usage limits and upgrade prompts

    Free-tier users now see their usage against limits (e.g., collections, map layers) with a clear prompt to upgrade when they need more.

  • Improvement

    Health monitoring and status dashboard

    A production status dashboard with automated alerting so we know about issues before you do.

  • New

    2-year billing option and improved waitlist experience

    You can now choose a 2-year billing period with locked pricing. Waitlist signups get clearer confirmation emails, and we've expanded E2E tests for critical user journeys (tenant-to-plot, recipe subscription, checkout).

January 2026

  • Fix

    Security hardening: httpOnly cookies

    Authentication tokens moved from localStorage to httpOnly cookies, eliminating a class of XSS vulnerabilities. Your sessions are now more secure.

  • Improvement

    Structured logging across the platform

    Replaced all console.log/error/warn calls with structured pino logging. Better diagnostics when things go wrong, and no accidental data leaks in browser consoles.

  • Fix

    33 widget TODOs resolved

    Action handlers and API integrations that were stubbed out are now fully wired up across 33 widgets.

  • New

    Salon waitlist auto-fill on cancellation

    When a salon booking is cancelled, the next person on the waitlist is automatically offered the slot.

  • New

    Feedback & Roadmap SaaS recipe

    New recipe for collecting user feedback with voting, a public roadmap, and changelog. Dogfooding it ourselves.

  • New

    Bring Your Own Stripe Key (BYOK)

    You can now connect your own Stripe account for direct payouts instead of using PlotSpark's shared payment processing.

  • New

    Role-based access control

    Admins, officers, and members now see different features based on their role. Permissions are enforced across all recipes.

  • Improvement

    Accessibility improvements

    ARIA labels, keyboard navigation, and focus indicators added across all core widgets. Working towards WCAG AA compliance.

  • Improvement

    CDN widget delivery architecture

    Widgets are now pre-built and served from the CDN instead of being bundled with the main app. Build times dropped from 14+ minutes to under 4 minutes.

  • New

    TerraLedger launch preparation

    Platform-wide RBAC, comprehensive launch checklist, and all TerraLedger domains enabled for production deployment.

  • New

    Onboarding flows for 8 Root* recipes

    RootPlan, RootLytics, RootScout, RootScan, RootMarks, RootSchool, RootFaith, and RootBooker now guide you through setup when you first arrive.

  • New

    What we delivered: release notes are here

    You can now see what we ship on a dedicated changelog page and in email updates.

  • New

    You can set a daily limit on bookings

    Stops your calendar from being overbooked when you have a cap.

  • Improvement

    Build reliability and memory fixes

    Pre-compiled recipe manifest cuts memory usage by 99.1%. Removed ignoreBuildErrors — all TypeScript errors must be resolved before deploy.

  • Improvement

    Free tier adjusted to 10 plots

    The free plan for TerraLedger now includes up to 10 plots (previously 50), better reflecting the value of the platform.

  • New

    Core auth flows wired up

    Password reset, profile updates, and billing management now work end-to-end from the UI.

  • New

    All 40 recipes finalised for MVP

    Every recipe has complete pain points, value propositions, competitive advantages, bundle descriptions, dashboard layouts, and onboarding flows.