All Docs
FeaturesDepositClearUpdated March 10, 2026

Compliance Help & Regulatory Updates

Compliance Help & Regulatory Updates

The compliance dashboard includes two features designed to keep letting agents informed and guided at the point of action: contextual help articles embedded inside issue cards, and a Regulatory Updates feed that tracks UK letting law changes with per-user read tracking.


Contextual Compliance Help Articles

Where they appear

Help articles appear inline inside expanded issue cards on the Issues tab of the compliance dashboard. When you click an issue card to expand it, the ComplianceHelpInline component is rendered beneath the recommended action text. Each article is matched to the compliance rule that triggered the issue (ruleId).

What each article contains

  • Summary — a concise plain-English explanation of the rule
  • Full guidance body — expandable detailed guidance
  • GOV.UK links — direct links to the authoritative legislation or government guidance page

Articles available at launch

RuleLegislation
Deposit protection 30-day deadlineHousing Act 2004 s.213
Recording the deposit protection schemeHousing Act 2004
Deposit cap complianceTenant Fees Act 2019
How to Rent guide servingDeregulation Act 2015
Renters' Rights Act 2024 — periodic tenancy transitionRenters' Rights Act 2024
Section 21 abolitionRenters' Rights Act 2024

Data model

Articles are stored in the compliance_help_articles table and are lazily seeded on first access — no manual database seed command is needed after deployment.


Regulatory Updates Feed

Accessing the feed

The compliance dashboard now has two tabs at the top of the page:

  • Issues — the existing compliance issues view (stats, portfolio table, open issues)
  • Regulatory Updates — the new updates feed

The Regulatory Updates tab displays an unread badge (blue counter) whenever there are updates the current user has not yet read.

Update cards

Each update card shows:

  • Title and category (severity-coded)
  • Publication date
  • Summary text, expandable to full detail
  • Read/unread state (per user)

Marking updates as read

  • Opening an update card marks it as read for the current user
  • The Mark all read button dismisses all unread updates at once
  • Read state is tracked per user — one user marking an update read does not affect other users in the same organisation

Pre-seeded updates

Five regulatory updates are included at launch:

  1. Renters' Rights Act 2024 Royal Assent
  2. Section 21 abolition — pending commencement order
  3. Deposit cap threshold confirmation
  4. How to Rent guide — January 2024 revision
  5. MEES EPC Rating E enforcement

Data model

TablePurpose
regulatory_updatesStores each regulatory change announcement
regulatory_update_readsRecords which users have read which updates

Updates have a regulatory_update_category enum field for categorisation and severity coding in the UI.


Weekly Notification Cron

A background job (regulatory-updates-notifier) runs automatically every Monday at 08:00 UTC via Inngest.

What it does

  1. Queries regulatory_updates for any rows where notifiedAt IS NULL (i.e. updates that have never been notified)
  2. For each qualifying update, dispatches an in-app notification to every member of every organisation
  3. Stamps notifiedAt on the update record to prevent duplicate notifications on future runs

Idempotency

The notifiedAt timestamp acts as the idempotency guard. An update will only ever trigger notifications once, regardless of how many times the cron runs.


tRPC API Reference

All compliance help and regulatory update operations go through the complianceHelp tRPC router.

Compliance Help Procedures

complianceHelp.helpForRule

Fetch the help article associated with a specific compliance rule.

const article = await trpc.complianceHelp.helpForRule.query({ ruleId: "deposit-protection-30-day" });

complianceHelp.listArticles

List all available compliance help articles.

const articles = await trpc.complianceHelp.listArticles.query();

complianceHelp.getArticle

Fetch a single article by its ID.

const article = await trpc.complianceHelp.getArticle.query({ id: "..." });

Regulatory Update Procedures

complianceHelp.listUpdates

List regulatory updates for an organisation, including per-user read state.

const updates = await trpc.complianceHelp.listUpdates.query({ orgId });

complianceHelp.unreadUpdateCount

Get the count of unread regulatory updates for the current user.

const { count } = await trpc.complianceHelp.unreadUpdateCount.query({ orgId });

complianceHelp.markUpdateRead

Mark a single update as read for the current user.

await trpc.complianceHelp.markUpdateRead.mutate({ updateId: "..." });

complianceHelp.markAllUpdatesRead

Mark all updates as read for the current user in the given org.

await trpc.complianceHelp.markAllUpdatesRead.mutate({ orgId });

complianceHelp.pushUpdateNotification

Internal procedure used by the Inngest cron. Dispatches an in-app notification for a regulatory update to all org members. Not intended for direct client use.


Components

ComponentLocationPurpose
ComplianceHelpInlinesrc/app/dashboard/compliance/compliance-help-inline.tsxRenders the help article panel inside an expanded issue card
RegulatoryUpdatesPanelsrc/app/dashboard/compliance/regulatory-updates-panel.tsxFull regulatory updates feed with expandable cards and mark-read controls
ComplianceDashboardsrc/app/dashboard/compliance/compliance-dashboard.tsxRoot dashboard component — now includes the Issues / Regulatory Updates tab switcher