lbreeze
Software

Zephyr

node.js hosting billing automation platform - replaces WHMCS, Hostbill etc

latest v1.316.3

Read the docs

Features

Features

  • plugin-kstack grew its whole capability surface — hosting, VPS, DNS, mail, databases, certificates and backups (
  • A brand-new install handed its owner an account that could sign in and administer nothing — found live on
  • better-auth email/password (Drizzle adapter)
  • Password-reset session invalidation hook
  • IP allow-list enforcement on staff logins
  • Login-attempts tracking
  • Magic-link invite acceptance
  • Magic-link sign-in (per-user opt-in)
  • Email-code 2FA (alternative to TOTP)
  • Staff impersonation of clients
  • RBAC roles + permissions
  • The dashboard was adding pence to cents — PLANV2 A6, the last item in the plan. The currency engine
  • Release artifacts are verified against a PINNED key, and an unsigned one is refused — PLANV2 E1. Thi
  • A rollback could not survive its own migration
  • "Up to date" and "never checked" were the same answer — PLANV2 E6, the silent deploy drift. readSta
  • Health signals a NOC can act on — including the one that would have caught the missing backups — PLANV2
  • Data-retention register and sweep — everything except the audit log was kept forever — PLANV2 D7. Ex
  • Evidence pack — and privilege changes were never audited at all — PLANV2 D8. One operator-runnable r
  • There were no database backups, and now there are — restored on every release — PLANV2 E3. scripts
  • The API's root privilege is now enumerable — and auto-install could never have worked — PLANV2 E2. T
  • SCIM Groups — IdP groups drive real Zephyr roles — finishes PLANV2 C2. A SCIM Group is an RBAC r
  • SCIM 2.0 provisioning and deprovisioning — PLANV2 C2, and the other half of C1: SSO decides who may
  • The audit ledger is now tamper-EVIDENT, not just append-only by convention — PLANV2 D5. The ledger w
  • Password policy and a staff IP allow-list, both with a way back in — PLANV2 C4, the rest of it. The
  • Active sessions, and a revocation that actually revokes — PLANV2 C4. Two halves: the listing that ne
  • "System-file state unknown" was permanent on every admin-button box — the banner said "the next deploy w
  • pnpm installed as root is invisible to the updater — the last link in the Node 26 chain, found live. Afte
  • The corepack shims that break every Node 26 upgrade — the root cause behind's symptoms, confirme
  • The Node upgrade failed silently, then lied about rolling back — three defects found by running'
  • Unit reconciliation took the live box down — the log dirs it bind-mounts were never created by an update
  • Alpine pre-flight: the installer called openssl 30 lines before installing it — found by pre-flighting th
  • A licensed install left the license inert
  • Alpine Linux support (and Ubuntu 26 confirmed) — Zephyr installs on Alpine 3.24+ as well as Ubuntu/Debian
  • Node 26
  • Dependency sweep: everything to latest, one deliberate exception — every outdated package on the System-s
  • The release gate now performs a real sign-in — the missing guard behind every other bug in this run. v1.
  • migrate reported success over a half-built database — every step inside migrate swallows its own erro
  • Password sign-in was impossible for every account on every install — the real cause of "invalid password
  • The API could not boot at all since — the live updater had been failing its health check and rol
  • Auth repair: the step-up gate was an unopenable door —'s step-up guard read the session cookie a
  • Break-glass for a deny-by-default RBAC lockout — RBAC grants nothing to a role-less staff account (C3), a
  • Step-up authentication on high-risk actions — PLANV2.md C5. Refunds, executing a payment run, impersonat
  • StaffGuard routes declare their permission — closing the zero-role escalation path — StaffGuard only pr
  • Audit export + retention — PLANV2.md D4. CSV/JSON export of the ledger honouring the viewer's live filte
  • Enterprise SSO — SAML 2.0 + OIDC with JIT role mapping — PLANV2.md C1, the hard gate on enterprise deals
  • Built-in bot defence — no third party required — adaptive proof-of-work on sign-in, sign-up and password
  • Deny-by-default for role-less staff — a staff account with zero role assignm
  • Staff users admin
  • API keys (issuance, scopes, guard)
  • Audit log (append-only)
  • SSH keys per user

Features

  • Products catalog (admin + public)
  • Pricing-cycle editor on the product edit page
  • Shopping cart
  • Orders pipeline
  • Quote requests (public + admin)
  • Cart abandonment recovery worker

Features

  • Checkout charges what the cart quoted — fromCart re-ran calculatePricing with neither promos nor t
  • The renewal sweep cannot double-bill, and clears a backlog in minutes not a day — two re
  • Release artifacts verified by Ed25519 signature, not just SHA-256 — the expected hash arrives in the same
  • Automatic payment from saved cards — AutoPayService + hourly billing.auto-pay-tick. chargeForInvoice
  • Account top-ups are no longer a dunnable debt — a top-up is a PREPAYMENT, but it was raised as an ordinar
  • Gapless document numbering, one shared counter
  • Pricing calculator (with tests)
  • Invoices controller + service
  • Renewals worker
  • Software-license renewals worker
  • Domain renewal billing
  • Plan-change proration
  • Plan-change quote, before anything is committed — POST /services/:id/change-plan/quote + POST /me/services/:id/ch
  • Upgrade → invoice → provision
  • Optional upgrade fee per path
  • Stuck plan changes are visible and retryable — the invoice-first flow can leave a customer PAID and still
  • The customer is told when their plan actually changes — the only mail a plan change ever produced was the
  • Subscription price updated on plan change
  • Hosting subscription creation
  • Recurring configurable-option money on renewals
  • Addon renewals + cascade cancel via — addons often never provision a services row, so serv
  • Subscription backfill (staff, dry-run first)
  • End-to-end software-products lifecycle: pull-on-webhook for release notes / install docs / features / screenshots — app
  • Slug-collision detection on import (buildSourceRepo-based)
  • Admin merge endpoint for stranded duplicate products
  • Unified (CMS + live upstream)
  • live fallback
  • Tabbed product pages — hero + tab bar over nested routes (pricing / features / docs / changelog / faq); a tab with no co
  • Product docs + changelog consolidated under with 308s from the old and /changelog
  • Operator-authored product pages at (built-in tabs win by route precedence) — apps/marketing/s
  • Product sites
  • Domain-ownership verification before the host flip
  • Product-site host map with stale-while-error caching — a failed refresh keeps the previous map rather than 404-ing every
  • Admin product-sites screen (claim → verify → go live)
  • HTML → CMS blocks importer — brings a hand-built marketing site into the page builder as editable, theme-aware block
  • AI whole-site generation — plans the page structure, then writes each page; reserved tab paths stripped so no page i
  • Per-seat proration (mid-cycle upgrade/downgrade)
  • Dunning worker
  • Late-fee on overdue invoices (configurable offsets + flat/percent) — apps/admin/src/app/(app)
  • Suspension executor
  • Refund requests workflow
  • Reseller billing schema
  • Accounting CSV/XLSX exports
  • Xero accounting plugin

Features

  • One payment records once
  • Credit is granted once, enforced by the database — the top-up listener guarded with a SELECT then INSE
  • New clients get the operator's currency, not hardcoded USD — client creation read defaults?.currency ??
  • Webhook registration works without — the button correctly refused rather than
  • Gateways register their own webhook endpoint — "Register webhook" on the plugin page calls Stripe's webh
  • The saved-methods pages survive a real row — both portals hand-declared gatewayPlugin: string and rende
  • Saving a card no longer depends on a webhook arriving — persistence used to happen ONLY if Stripe deliver
  • Saved payment-method vault
  • Stripe gateway plugin (Dynamic Payment Methods: card / wallets / BNPL / SEPA / iDEAL / Bancontact / etc.) — plugins/plu
  • PayPal gateway plugin
  • Mollie gateway plugin
  • GoCardless gateway plugin
  • Generic webhook receiver
  • Hosted-checkout confirm-on-return

Features

  • Built-in tax engine
  • Pluggable tax engine interface
  • VIES VAT lookup
  • Stripe Tax plugin
  • Tax schema

Features

  • The three lbreeze products are sold as , not catalog add-ons — they had been seeded as
  • A product page fills its own tabs from the repo it ships from — Features, Changelog and Docs come from Re
  • Type-aware product form — cloud product type + Standby provisioning card (backend, server type/plan, region, OS image
  • Product detail = editor for provisioning config (plan ref + Standby meta) — apps/admin/src/app/(app)/products/[id]/page
  • Standby catalog proxy (providers / datacenters / per-provider types+images+locations) — GET /admin/hosting/provisions/s
  • AI full website page generator for catalog products (hero + feature-grid + real-cycle pricing-table + cta + optional AI
  • Marketing block renderer (hero/feature-grid/pricing-table/faq/cta) + clean-URL fallback — apps/marketing/src/components

Features

  • Services CRUD + suspend/unsuspend/terminate
  • Provisioning pipeline (order.paid → plugin.create)
  • Internal provisioning callback
  • Provisioning retry sweep worker
  • Provisioning-failure alerts to staff
  • Admin failed-services filter + manual retry
  • Link a service to a control panel — imported / Standby-provisioned rows arrive unbound and every
  • Customer plan change (shared hosting)
  • Upgrade-path admin CRUD
  • Hosting package as a container
  • Usage history records the full resource matrix
  • Shared decimal byte formatter
  • Orphaned paid-order reconciler — provisioning.reconcile-orphans-tick (every 10 min) re-drives paid orde
  • Customer VPS resize
  • VPS server access — SSH keys passed at create; a generated credential is injected via cloud-init when the customer has n
  • VPS purchase configure step — GET /products/:id/server-options drives size/image/region/hostname from the plugin's rea
  • Quote → tailored package — accepted quote mints a client-private product + real order, so provisioning/subscriptions/ren
  • Per-client product entitlements
  • Customer "My packages" view
  • Guided plan-spec editor on quotes — provider-aware form over the SDK's NewManagedPlan (NOT Enhance's OAS NewPlan, wh
  • Entitlement count on the admin products list — flags an invite-only product with zero live grants, which nobody can bu
  • DSAR register — the staff side of GDPR — PLANV2 D6, the thing a DPO asks for in the first meeting.
  • Every package is typechecked — coverage went from 21 of 56 to 52 of 56 (the other four are empty
  • Provisioning scripts library
  • me service capabilities surface (mailbox/db/ssl/backups/apps)
  • Admin service-capability mirror

Features

  • Enhance
  • cPanel/WHM
  • DirectAdmin
  • Plesk
  • kstack
  • kstack pairing
  • Enhance changePlan addresses the subscription, not the website ref — the one lifecycle method reading ex

Features

  • Hetzner Cloud (VPS)
  • OpenStack (VPS)
  • Proxmox (VPS)
  • Hetzner Robot (dedicated)
  • Redfish (dedicated)
  • IPMI (dedicated)
  • Sell VPS/Cloud/Dedicated via Standby (§C) — order→provision, billing-driven auto-suspend/unsuspend, admin + portal — ap
  • Shared hosting: dual-backend provisioning — paid orders provision either direct to Enhance
  • Hosting reconciler — settles async §16 provisions (2-min cron), surfaces partial half-done accounts, rea
  • Customer VPS management
  • Standby-side follow-up — provisioning API exposes only create/suspend/unsuspend/terminate; reboot/start/stop/reinsta
  • Direct-provider VPS provisioning (Hetzner/OpenStack/Proxmox VPSModule into the order pipeline) — plugins implement full
  • VPS server access + purchase configure — SSH keys passed at create; a generated credential (AES-GCM, reve
  • Dedicated servers as a sellable product
  • Colocation — customer brings own hardware, rents rack U + power + bandwidth; shared DCIM (inventorysite

Features

  • Domain availability + cart + provisioning
  • WHOIS profiles + sub-contacts + custom fields
  • CentralNic / RRPproxy registrar plugin
  • eNom registrar plugin
  • OpenSRS registrar plugin
  • DNSSEC sync worker (Enhance ↔ registrar)
  • Registrant contact collection at checkout + pre-payment guard
  • Domain expiry reminders (60/30/14/7/1 day)
  • Transfer completion polling

Features

  • Local cache schema (dnszones / dnsrecords / dnssyncevents)
  • DnsCacheService (local-first CRUD + push + pull + drift detection)
  • DnsZoneCapable: Enhance
  • DnsZoneCapable: CentralNIC (RRPproxy DNS-zone)
  • DnsZoneCapable: eNom (GetHosts/SetHosts)
  • DnsZoneCapable: OpenSRS (dnszone get/set)
  • Admin + customer DNS endpoints
  • Reconciler cron + worker service
  • Enhance DNS webhook receiver (HMAC)
  • admin/dns hub + per-zone editor + sync-events viewer

Features

  • Let's Encrypt ACME v2 (HTTP-01 + DNS-01)
  • CentralNic SSL module
  • SSL certificate resale, built end to end
  • SSL go-live

Features

  • Enhance ops (backup health, reconciler)
  • Enhance custom-plan builder admin
  • Enhance per-instance admin (servers, branding)
  • Enhance backup-health + reconciler worker
  • Usage says why it is empty — not-linked / instance-unavailable / upstream-error instead of bare zer
  • Customer site overview — disk, traffic, quota, TLS, backups, mailbox + database counts and server facts i
  • Website screenshots actually resolve

Features

  • EmailServiceModule SDK type
  • Enhance implementation
  • email product type + quantity pricing
  • Provisioning on → createMailDomain with the purchased count; suspend/unsuspend/terminate wired for dunnin
  • Purchased-mailbox cap enforced at creation against the provider's live list, failing closed if the count can't be re
  • Customer mailbox management incl. quota, aliases, forwards, webmail SSO — each gated on a probed capability flag
  • Admin purchased-vs-actual drift, stated plainly on overage and separately when the provider read failed
  • Not yet run against a live Enhance cluster — spec-verified is not the same as working. The quota field is a bare
  • suspend/unsuspend/terminate still dispatch only to handle.server — fine while Enhance's email mo
  • Admin forwarder routes still hard-require handle.mailbox
  • OpenSRS Hosted Email + Google Workspace plugins
  • Renderer + SMTP transport + service
  • Built-in templates
  • AWS SES NotificationModule plugin
  • Email queue + worker
  • Email templates admin (list/preview/test-send)
  • Multi-account mailbox + unified inbox API
  • IMAP ticket ingest
  • Mail polling worker
  • Inbox dedupe CLI

Features

  • Tickets + departments + canned replies
  • SLA automation tick
  • AI ticket auto-reply
  • Reply notification email — a staff reply now emails the customer, and a customer reply emails the assigne

Features

  • A seeded placeholder page never outranks a built-in layout
  • Markdown → HTML + slug helpers + blocks
  • Posts / pages / KB / announcements / redirects
  • SEO controller
  • Footer-links / contact-info / auth-config / seo-config / maintenance
  • Visual page builder + live preview
  • Design controls on every block — an Appearance panel on each block in the builder: rotate, scale, space a
  • Free-canvas block — an artboard where text, images, icons and shapes are dragged, corner-resized and rota
  • Drag blocks to reorder — grip handle on each block card; dragging block 1 onto position 5 slides the rest
  • The builder says where a block will actually appear — product pages route blocks to tabs by type, and on
  • AI-generated pages are designed, not stacked — the appearance layer is in the site-builder prompts, so generated and
  • Marketing copy is cleaned of engineering detail — a software product's feature list comes from its repo's
  • Page templates — "New from template": hosting/VPS/cloud/dedicated/SSL/API-access(VIR)/legal; category page
  • AI full website pages
  • AI blog-writer — "Write with AI" in CMS Posts: brief → AI drafts a full blog post (title/slug/excerpt/mark
  • Software-product sync-health — software-products list shows "synced Nh ago" + amber/red badge when auto-sy
  • Shop range pages — one page per product group with every plan side by side, a deterministic spec
  • Product groups admin — list/rename/re-slug/reorder/delete the ranges the shop is organised into, with a w
  • Plan resources editor — per-product specs (storage/bandwidth/websites/mailboxes/CPU/RAM/…) that drive sho
  • AI menu builder — writes header and footer navigation from the site's real routes; invented link
  • Designable help centre + contact page
  • Pages resolve at their own URL — a root catch-all serves every published CMS page at its slug, and /p/<s
  • KB article feedback — "Was this helpful?" writes helpfulYes/helpfulNo, which had existed since the KB
  • Edit a page with AI, whole or one section — works on the blocks in front of you rather than replacing the
  • Built-in marketing pages are CMS-overridable
  • A missing page answers 404
  • Content editor with preview, media and AI editing — posts and KB articles share one Markdown edi
  • Posts and KB articles are recoverable — every save snapshots the previous content first, with a
  • The whole post/article is editable — category, tags, hero image, SEO title/description/noindex
  • News and changelog posts have somewhere to live
  • Checkout funnel — carts survive checkout stamped with what they became, so the dashboard funnel measures
  • AI page generation IN the builder — one unified page builder: "New with AI" (brief → any business page, dr

Features

  • Category management — create, rename and delete the categories a help centre is organised by; rows previo
  • AI KB tree generator for software products — outline → editable tree → per-article or bulk write → apply, drafted fr

Features

  • Availability measured against the published commitment — monthly rollups per service pulled from the infrastructure
  • Maintenance windows + notice-period enforcement — windows cached, judged against legal.maintenanceNoticeHours on a
  • Admin Operations → Service levels — commitment, breaches, uncredited periods, short-notice windows — apps/admin/src
  • Standby side of §O ( , ) — shapes pinned in CROSSPROJECTCON

Features

  • Bundled themes (default / lbreeze / corporate) + active-theme switch + token CSS — apps/api/src/themes/the
  • Quick token overrides editor (colour pickers, hex↔HSL)
  • Visual theme builder — create/duplicate/delete/import/export custom themes; per-mode (light/dark) token ed

Features

  • Built-in avatar set — 30 generated-SVG presets replacing AI avatar generation (which spent a billed image call per a
  • Avatars in support threads — messages carried only authorKind, so every reply looked identical; author name + avat
  • AI replies disclosed — AI-written ticket replies carry their own authorKind: 'ai' (distinct from rule-based syste
  • Tapping a field no longer zooms the phone — iOS Safari zooms whenever a focused control is under 16px and
  • minReviews on the reviews widget was a dead setting — the operator could set "minimum reviews before sh
  • Enabling the reviews widget no longer opts you into every page — the default was pathMode: 'blocklist'
  • Reviews strip stopped appearing twice, and on the 404 — the homepage rendered <ReviewsBlock /> hardcode
  • redirects to instead of 404ing
  • Registration reports leftover gateway endpoints — the Stripe plugin already listed every webhook endpoint
  • Webhook registration proves the URL works before storing it — the guard only ever checked that a base URL
  • Direct Debit works through Stripe, no second processor needed — the portal's Direct Debit page only ever
  • Direct Debit scheme-mapping guard — pins the portal's scheme list, the scheme→Stripe map, the SDK union a
  • Payment routes are probed before they are offered — the portal's Direct Debit page rendered the whole flo
  • Booking reminders say when the meeting actually is — the subject was the literal string Tomorrow: …, wr
  • Outbound email log — every transactional send and every failure is now recorded at the point of dispatch.
  • Customer quotes tab
  • Staff subscriptions page + API — the page never asked
  • Deleted clients are out of every metric, and deletion cancels the billing — the stakeholder pa
  • The revenue definition is code, not convention — decision V1: cash captured (succeeded payment
  • Unreconciled clearing account is a dashboard alert, not a panel someone has to visit — the liv
  • Audit log usable as a compliance artifact — staff actions and system events are separate views
  • Chart legends match their series — ECharts resolves legend swatches and tooltip markers from the series R
  • Dead-page guard — fails the build when a page renders an empty state ASSERTING there is no data while hav
  • Scheduled stakeholder delivery + saved report views
  • Metric + fact-layer contract test
  • Daily fact layer — the keystone the whole reporting area was missing
  • One metric layer, versioned — "revenue" meant three different things depending on the screen (payments.a
  • Cohort retention is real — rebuilt on the fact layer, so each column asks whether the client was paying *
  • Reports rebuilt: MRR, ARR, retention, movement waterfall, drill-through — every tile reads the metric lay
  • Stakeholder pack
  • Reports, Cohorts + dashboard tabs stop stating figures they cannot support
  • Renewal invoice lines name what is being renewed — the line read Renewal — monthly and nothing else, so
  • Web analytics tab on the dashboard — visitors, pageviews, bounce, live now and cookies accepted beside Ov
  • Dashboard KPI tiles link to the list the number came from — a dashboard figure is a question ("1 overdue
  • Ticket + feature-request counts aggregate server-side — both chip strips tallied the list the page had ju
  • Co-pilot moved to the top bar — reachable from wherever you are rather than a destination competing with
  • NOC card reads the envelope Standby sends — the normalisers accepted a bare array, {incidents} and {cu
  • Email subjects are no longer mojibake — every built-in template shipped its subject with a corrupted em d
  • Client invoices tab shows the invoice number — the page declared and rendered invoiceNo while the API s
  • "Shared hosting" renamed to "Web hosting" in every label — including the customer-facing storefront (app
  • Customer resource graphs, from our own recorded history — every usage figure a control panel can give is
  • Every byte formatter agrees with its own label — there were nine independent byte formatters and all
  • Disk and traffic no longer under-report the plan — the site-overview panel divided by 1024 while labellin
  • Plugin load order is deterministic — loadFromDb had no ORDER BY, and every capability lookup takes th
  • Resource chart appears within the hour, not two
  • A disabled plugin instance says so — the registry only loads enabled rows, so Test/sync on a disabled i
  • Admin sidebar reorganised so a group name predicts its contents — 12 groups → 15, all 104 items preserved
  • Customer portal nav grouped into sections — sixteen flat rows became six labelled sections (Buy · Your pr
  • Full-width toggle hidden where it does nothing — the 1760px cap applies to .app-content, so the 240px s
  • Monospace actually renders monospace — all three apps mapped font-mono/font-display onto --font-mono
  • System page reports system-file drift
  • Plugins page reports load state, not just intent — a plugin whose constructor throws at boot is skipped w
  • Admin dashboard empty states + validated palette — panels explain themselves instead of drawing axes for
  • Consistent content width + Wide/Fluid toggle — one .app-content container in both shells (max-width + re
  • Root error boundary — branded Reload page + digest instead of Next's opaque screen — apps/{admin,client}

Features

  • Native reviews API + aggregates
  • Trustpilot provider plugin
  • Google Business reviews plugin
  • G2 reviews plugin (scaffold; needs partner API key)
  • Review invitations worker
  • Unified review pull cron (reviews.pull-tick, hourly)
  • Auto-approve resolution per-instance → global → queue (default queue)
  • Staff respond dispatches to originating plugin for external reviews
  • Marketing reviews widget with placement (above-footer / below-header / off) + path allow/blocklist — apps/marketing/src
  • Admin Settings → Marketing tab (widget config + external auto-approve toggle) — apps/admin/src/app/(app)/settings/marke
  • Admin reviews source filter + coloured per-source badges
  • Operator-tunable display knobs (reviewLimit / reviewSort / theme / productFilter) + path-filter tester on settings page
  • Moderation speaks the API vocabulary — the admin used published/{ decision } against the API's approved/{ sta
  • Customer self-submit — POST /reviews was a stub that always threw; customers now leave reviews from the portal at
  • Invitation landing page
  • Purchase-verified authorship — a review requires an owned service or a held software licence; terminated/expired sti

Features

  • SocialAccountModule SDK type (multi-tenant, post/schedule/delete/listAccounts/pullMentions/getPostMetrics)
  • Schemas: (encrypted tokens, clientId for tenant scoping, daily-post cap), (state mach
  • API SocialModule
  • Worker crons social.dispatch-tick (every minute) + social.mentions-tick (every 15 min) via callInternalTick — app
  • plugin-social-stub — no-network reference impl for dev / CI / pre-OAuth testing
  • plugin-social-linkedin — UGC Posts API v2; needs Marketing Developer Platform app review for multi-tenant
  • plugin-social-facebook (+ Instagram add-on) — Graph API; needs Meta Business app review for multi-tenant
  • Admin + customer-portal UIs for compose / queue / accounts / automations / inbox (Phase 3 of social plan)
  • Event-source fan-out automations: post.published (CMS) / / partner.created / review.appr
  • AI social drafter via existing plugin-ai- registry (Phase 6)

Features

  • Consent categories have a screen
  • The consent ledger can be read
  • Cookies-accepted KPI on web analytics — a banner decision is a person who saw a dialog and clicked, which

Features

  • Embeddable chat widget (KB search + create ticket)
  • Live chat backend (Socket.IO)
  • AI chat bot integration

Features

  • KB search (keyword + optional AI)
  • KB embeddings indexer (OpenAI)

Features

  • Failure drills + runbook, and the crash they found
  • End-to-end journey gate — a customer can buy AND receive — scripts/check-journey-smoke.
  • zephyr doctor — pnpm -F @zephyr/api doctor (--json for machines): one paste for a
  • Orphan staff-endpoint guard — the API→UI direction of the seam class, which had only eve
  • release.sh builds the release on RepoMade itself — the tag-push hook fired for none of the last twe
  • Zephyr as one process on one port — for platforms that host a single Node
  • Ops scripts init-aware on Alpine
  • Compiled runtime + TypeScript 7
  • A release owns the files it installs outside the release tree
  • Database faults name their cause — drizzle ≥0.44 wraps driver errors so .message is the statement; th
  • Pre-tag deploy gate — 9 gates: version-bump freshness + schema↔column-patches consistency
  • System-page dependency + vulnerability scan actually runs — was shelling npm at a pnpm workspace:
  • Boot-probe gate on the release path
  • Test gate on the release path — pnpm -r --no-bail test is a hard gate in both
  • AI chat call contract
  • Plugin capability read contract
  • Document-numbering contract test — fails the build on any file that formats its own PREFIX-…padStart se
  • Emit/subscribe contract test
  • Money-format contract test
  • Byte-format guard extended into and — the original sweep only looked in apps/{adm
  • Signup-spam defence — honeypot field + email canonicalization (Gmail dot/+ trick)
  • Demo mode now refuses, instead of only announcing
  • One-button demo activation, refused on a real install
  • Demo seeder covers the whole catalogue, with real billing history — was one product type (shared-hosting) with 30
  • Brand-neutrality lint (preflight check 6/6) — greps for lbreeze.{com,cloud,net,dev} hostnames in shipped
  • SSRF guard on outgoing webhooks — subscription URLs rejected at create/update if non-http(s), credential-e
  • Per-IP rate limits on public endpoints — in-memory sliding-window limiter (apps/api/src/common/rate-limit
  • Strict backup mode
  • verify-email resend rate limit
  • Signup-guard fail-open health surface — the guard bumps an in-memory counter on every fail-open; GET /hea
  • Secret-rotation runbook
  • Money + gatekeeping test coverage — 45 new pure-logic tests: signup-guard (email canonicalization / dispos
  • Business verticals + module flags — Settings → Business & modules sets the business type + toggles featu
  • Multi-currency FX rates
  • Direct-provider VPS provisioning — bind a VPS/Cloud product to a Hetzner Cloud / OpenStack / Proxmox plugi
  • Edge auto-fallback on 5xx

Features

  • workers schema — staff identity layer over users (department / manager / employment lifecycle / Standby SCIM externa
  • schema — non-commerce grant state machine (open-vocab kind: mailbox / product-access / ssh-key
  • append-only audit log — same file
  • RBAC seed for 7 new lbreeze workforce roles (sales / engineer / sysadmin / secops / developer / manager / dpo) on top of
  • WorkforceService — worker CRUD + idempotent user create + role attachment + offboard-with-revoke; grant state machine pe
  • HMAC-signed inbound — receives worker.certified / worker.offboarded from Standby; walks
  • Standby SCIM client — minimal HTTP wrapper, POST /scim/v2/Users on create / DELETE on offboard; default-on when workfor
  • Role → entitlement map in — driven by Standby's worker.certified webhook
  • workforce.retry-tick cron — re-fires failed grants past their backoff
  • Admin UI for workforce
  • Enhance MailboxCapable wired to platform-owned org for staff mailboxes — executeMailboxGrant in apps/api/src/workfo
  • People dashboard
  • AI-drafted invitations + offer letters — AiDraftService.draftInvitation + .draftOfferLetter
  • One role resolver, and access waits for training — three sites each did an exact case-sensitive RBAC look
  • Offers carry real money, a real signature, and a lifecycle — structured compensation (integer minor units
  • Operational notify address is a setting with a sane default — resolution at send time: notifications.adm
  • Collapsible sidebar accordion — only one group expanded at a time, auto-switches to the group
  • Opt-in auto-install on tag — system.autoUpdate.{enabled,maxVersionJump,checkIntervalMinutes,notifyEmai

Features

  • Ready to be a kstack app — the Zephyr half of the one-click install from th
  • Zephyr checks its own licence through the update edge
  • Zephyr licenses itself online — apps/api/src/p
  • Ed25519-signed license keys library
  • licenses controller
  • me/software-licenses surface
  • RepoMade integration : additive fields on (status / allowedchannels / seatkind / seatli
  • GET /api/license/list paginated for RepoMade display cache (Bearer admin API key, licenses:read scope, opaque licens
  • POST /api/license/trial with double rate-limit + operator-tunable defaults + daily expiry cron — apps/api/src/license
  • Revocation push fan-out to RepoMade dev + edge mirrors ( env, default-on) — apps/api/src
  • Seat-metering heartbeat (POST /api/seats/heartbeat) + admin "Seats" column with over-cap badge — apps/api/src/seat-he
  • Per-license channel allowlist (allowedChannels jsonb) + trial state vocabulary
  • RepoMade pairing handshake — paste-once UI replaces shared-env-var HMAC. Accepts both bundled z

Features

  • Independent product entity
  • Six pricing models — onetime, lifetime, subscription, perseat, freemium, term
  • Per-license plan tracking
  • CRUD API — products + plans + import
  • Import-from-RepoMade wizard — 4 parallel calls to the build-source plugin (getRepo + getLatest + getInstallDoc
  • AI polish step — POST /admin/software-products/import/polish pipes description + features through the active AI pl
  • Admin UI — list + detail (Overview/Plans/Versions tabs) + import wizard with conditional model-aware plan editor
  • Marketing-page auto-gen on import + webhook
  • Automated documentation section
  • Webhook auto-sync softwareversions — RepoMade release-notify writes both vendorreleases AND softwareversions when
  • Screenshot management UI
  • Request-Demo flow
  • Customer cart integration
  • License issuance on order.paid — software-license items walked from orderitems, softwarelicenses rows inserted wit
  • Customer-facing /products/[slug] marketing page — server-rendered hero + install + pricing table with real Buy butto
  • Full backfill on import — import wizard inserts every historical version from the build-source's changelog
  • AI "Fill all sections" button — one button on the product detail header generates description + pitch + se
  • Real Overview tab — hero strip with image + name + pitch + description; configuration-gaps card with one-c
  • Auto-sync from build-source every 30 min — worker cron software.sync-tick calls POST /admin/software-pr
  • "Sync now" button — replaces "Refresh from RepoMade" on the product detail header; same code path as the c
  • AI hero-image generation — POST /admin/software-products/:slug/hero-image via MediaService (plugin-ai-op
  • Source & sync control tab — editable build-source repo, build-source plugin status with fix-it link, last
  • AI rich-features generator — POST :slug/ai-features writes themed sections with per-feature title + one
  • Visual features editor — sections + per-feature title/description, add/remove/reorder, AI-generate, raw-JS
  • Manual version / changelog authoring — "Add version" dialog (version + channel + released-at + markdown no

Features

  • cloud product type + Standby provisioning card — backend / server-type / region / OS image / provider / datacenter
  • Editable provisioning config on product detail + Standby catalog proxy GET /admin/hosting/provisions/standby-catalo
  • AI full website page generator for catalog products — hero + feature-grid + real-cycle pricing-table + cta + optiona
  • Marketing block renderer (hero/feature-grid/pricing-table/faq/cta) + clean-URL fallback — apps/marketing/src/compon

Features

  • Server-seeded brand (no flash)
  • Emails use operator brand

Features

  • Read-only assistant + memory — businesssummary / financepnl / recentleads / recentorders / listse
  • Gated write actions + Auto-mode — write tools (media / leads / campaigns / promo codes) proposed fo
  • Hardened agent loop — tool results folded into plain messages (OpenAI-compatible), provider errors caught
  • One tool registry across every AI surface — Co-pilot and the MCP endpoint had zero tools in comm
  • 26 tools covering what operators actually ask — overdue invoices, renewals due, expiring domains, ticket
  • Native tool-calling with a working return path — providers could send tools but not receive r
  • Past conversations are reachable + answers cite their sources — the history endpoints had shipped with no
  • Support bots can use the same tools, and cannot write with them — explicit per-bot allowlist (empty by de

Features

  • Affiliate payouts have a screen — list, pay one affiliate's approved commissions, pay everyone at once, mark paid; f
  • Bank lines can be reconciled by hand — match / ignore / unmatch, with a manual match requiring a free-text reference
  • Legal documents can be sent for review — pinned to a specific version, so a stamp cannot outlive the words it approv
  • social — nine endpoints, no page, no sidebar entry. Decide whether it ships or is removed; see AUDITAPIUISWEEP
  • Remaining sweep candidates: balance snapshots, Stripe payout, invoice reposting, wages run, payroll rates, and ~50 unver

Features

  • Partners schema + admin CRUD — slug + name + tagline + logo + commissionPct + term + first-invoice-only + revenue-sh
  • Partner discount codes — % or fixed, applies-to (first / all / recurring), expiry, max-redemptions, redemption count
  • Single-attribution per client with source enum (code / landing / manual / webhook) + accrued-total + first-invoice a
  • Commission accrual on invoice.paid — subscribes via EVENTBUS, evaluates term + floor + per-client + per-month caps
  • Public validate-code + branded /partners/[slug] landing page — auto-applies primary code, signup CTA passes code thr
  • Admin partner detail page — dashboard cards (clients / accrued / redemptions / pending) + codes tab + attributions t
  • Signup-time partner-code capture — POST /me/partner-code/apply called from client portal signup when ?code= is on
  • Cart-side partner discount + order-create attribution — carts.partnerCode column + apply/clear endpoints + pricing

Features

  • me/software-licenses page

Features

  • Affiliates + commissions
  • Affiliate payouts (bulk + per)
  • Reseller surface

Features

  • WHMCS + HostBill importers
  • Read-only schema probe (POST /migration/probe) — reports matched tables, unresolved required fields, and unrecognised
  • Entity coverage — clients + contacts + addresses + credit, services + subscriptions, domains, invoices + lines, payments
  • Ingest transports
  • Migration console
  • Existing-client policy — merge (default, attach to the client already in Zephyr), separate (+tag address) or skip
  • Undo an import — POST /migration/runs/:id/revert deletes only rows that run created; a merged-into client is never tou
  • HostBill spec verified against a live 8.4 install
  • Admin-API transport (HostBill , WHMCS ) — needs live response samples first
  • Runbook

Features

  • Fraud-check evaluator + review queue
  • MaxMind minFraud plugin

Features

  • GeoIP package
  • MaxMind GeoLite2 plugin
  • Weekly Wed-04:00 update cron

Features

  • Locale resolution + ICU-lite formatter + catalog loader
  • DB-backed translation tables
  • next-intl on all UI apps
  • Admin locales endpoint
  • Themes admin (discover / activate / tokens)
  • Theme SDK
  • Three shipped themes: theme-default, theme-corporate, theme-lbreeze
  • Multi-brand configuration
  • Branding uploads (logo + favicon)
  • Uploaded files are served with security headers and validated by content — every upload-serving route shi
  • Avatar persistence is server-side, and stored URLs must be publicly routable — uploads stored wh
  • Stranded uploads are rescued at deploy

Features

  • Per-package telemetry grant — log-derived metrics (requests, unique visitors, referrers, WAF blocks) are
  • Consent ledger + cookie categories
  • Consent banner runtime
  • GDPR data export + account deletion
  • GDPR data export worker
  • A data export claimed by a dead worker is reclaimed, and a stalled one says so — tick flipped rows to
  • Customer export UI matches the async contract — request history with live state, 15s polling while preparing, and a real
  • Entitlement-gated portal nav
  • Single "My software" page — purchased software + hostname-locked licences (with FQDN rotation) on one screen; /my-softw

Features

  • Per-feature model routing — seven AI workloads each name their own provider instance and model
  • Whole-page AI generation for ranges — one call against the full 22-block vocabulary instead of three disc
  • AI legal documents with lawyer review — drafted from real business facts (company details, sub-p
  • One JSON parser for every model reply — handles markdown fences, surrounding prose and brace-containing s
  • The model never supplies a media URL — invented image paths are stripped, so a hero image can only come f
  • Help-centre gap finder — ranks what to write from failed KB searches, recurring resolved tickets and arti
  • OpenAI provider plugin (chat + streaming + embeddings)
  • Anthropic Claude provider plugin on the official SDK
  • Ollama (self-hosted) provider plugin
  • AI safety / PII redaction
  • AI features module (site builder + reply suggest)
  • AI bots (chat + ticket auto-reply)
  • AI budgets + caps + admin
  • AI budget recompute worker

Features

  • S3-compatible SigV4 signed URL service
  • Storage admin

Features

  • PDF package + invoice generator

Features

  • Plugin/theme/prompt-pack install API
  • Marketplace admin page

Features

  • api/v1 surface: clients, invoices, services, domains
  • HMAC-signed outgoing webhook subscriptions

Features

  • Plugin trust tiers — every catalogue entry carries trust: verified | beta | experimenta
  • Base Plugin class + lifecycle hooks
  • Module types: ServerModule, RegistrarModule, SSLModule, GatewayModule, VPSModule, DedicatedModule, AIModule, ReviewProvi
  • 21 capability interfaces
  • Plugin registry
  • Plugin instance admin + helpers (Google Reviews accounts/locations)
  • Plugin API trace service

Features

  • JSON-RPC 2.0 McpServer class
  • tools/list + tools/call + initialize
  • Tools: findclientbyemail, listinvoicesforclient, listservicesforclient, kbsearch, replytoticket — apps/api
  • Staff-guarded HTTP transport

Features

  • In-app notifications + per-user prefs
  • Notifications that actually get produced — StaffNotifierService + CustomerNotifierService subscribe t
  • Customer notification centre
  • Notification-preference contract test — fails the build if a key is declared inApp: true with no produc
  • Slack notification plugin
  • Workflows engine (admin-defined rules)
  • Workflows builder UI

Features

  • Prometheus exporter — GET /api/v1/metrics in the text exposition format, bearer METRI
  • BullMQ cron registry (19 jobs)
  • Cron admin / DLQ inspector
  • Sentry error sink
  • Churn scoring worker
  • System info endpoint
  • Health check

Features

  • apps/api — NestJS, ~70 feature modules
  • apps/admin — Next.js 16 + React 19 admin UI, ~35 page groups
  • apps/client — Next.js 16 customer portal
  • apps/marketing — Next.js 16 public site (blog, KB, changelog, CMS, RSS, sitemap)
  • apps/worker — BullMQ workers + cron jobs
  • apps/proxy — Single-process host-based reverse proxy
  • apps/installer — One-page web wizard (writes .env, migrates, seeds admin, builds, starts pm2)
  • apps/importer

Features

  • Auth: login / forgot-password / reset / set-password
  • Dashboard
  • Clients (list / [id] / new), Products, Orders, Invoices, Subscriptions, Refund-requests
  • Services, Domains, Support, Reviews, CSAT
  • CMS hub (posts/pages/kb/announcements/redirects/footer/contact)
  • Languages, Themes, Brands, Email templates, Mailboxes + inbox
  • Chat (live), AI usage + budgets, AI bots
  • Automation (cron + DLQ), Workflows, Provisioning scripts, Fraud review
  • Affiliates, API keys + webhooks, Audit log, Marketplace, Plugins
  • Custom fields, Quotes, SEO, Security-headers, Permissions, Reports
  • Users (staff), System status
  • Settings: brand / dns / email / localisation / maintenance / security

Features

  • Auth: login / signup / forgot / reset / verify-email
  • Dashboard, Billing, Cart, Checkout, Shop
  • Services, Domains, Support, Announcements
  • Profile, Data-privacy (GDPR)
  • The careers page belongs to the operator, not the platform — four things on one page: it read NEXTPUBLI
  • Signing a contract emails the signed copy it always promised — the sign page stated "A copy was emailed t
  • Public links can no longer point at localhost
  • AI contract drafting — brief + type (MSA/reseller/SLA/NDA/DPA/SoW) + counterparty + governing law → a dra
  • Terminating a service now actually terminates it at Enhance — the cascade deleted the subscription at /o
  • The orchd spec is vendored and enforced
  • A refused plan change says why — the panel’s rejection arrived as a bare Error, so Nest rendered "Inter
  • seo-config is normalised, not asserted — the root layout read config.verification.google off an unval
  • The provisioning script stopped printing its exit code — die { echo "$" } printed every argument inc
  • There is a way to reach the cart — there wasn’t. The logged-out shop shell had a Cart button; the marketi
  • Domain intent survives the hop to the portal
  • Resource usage reads as usage, not a wall of numbers — UsageBar drew no bar at all, so eight resources
  • Usage history covers the whole resource matrix — the sweep stored websites, processes, page views and the
  • The header dropdown closes when you use it — it was pure CSS (group-hover + group-focus-within), and
  • Menu children can carry a description — optional one-liner under the label, editable per item under Websi
  • The homepage is findable in the page builder
  • The link to a published job vacancy renders
  • Custom profile fields actually render
  • The portal’s CSP nonce is stamped — its middleware minted a per-request nonce and the layout never read i
  • The website-preview card is gone — it could never have worked. Enhance (orchd 12.25.5) exposes three scre
  • Site thumbnails, if wanted, need a different source — capture from the public URL with a headless browser, which wor
  • Customers can set an avatar
  • One place talks to the image API — MediaService.renderImage extracted so the avatar path shares the r
  • Affiliate, Reseller, My-software

Features

  • Secrets masked in staff API responses — plugin-instance list/get return •••••••• for e
  • Committed, versioned migrations
  • Secrets at rest
  • Drizzle PostgreSQL config
  • postgres-js driver + drizzle PG client
  • 30 schema files (all pgTable, integer, jsonb, timestamp({ precision: 3 }))
  • Idempotent migrator with column patches (native PG IF NOT EXISTS)
  • Seed script
  • UUIDv7 varchar(36) id helper
  • Committed SQL migrations
  • Post-baseline migrations are idempotent — every CREATE TABLE / CREATE INDEX / ADD COLUMN after the baseline ca

Features

  • Turborepo + pnpm workspaces
  • Per-app start scripts
  • Fresh-VPS installer (Ubuntu 24.04+ / Debian 12+) — — adds upstream apt repos (Node 24 LTS, Postg
  • Nginx site template (4 server blocks, WS upgrade, security headers)
  • Security-headers hardening → A+ (HSTS + deduped basics, no X-Powered-By at the nginx layer; per-request nonce CSP
  • One-shot Node 22→24 LTS upgrade (snapshot + native-ABI rebuild + 5-unit restart + health check + auto-rollback) — d
  • systemd units for api/worker/admin/client/marketing
  • Postgres bootstrap SQL
  • Subdomain routing ( , , , marketing on apex) with cross-subdomain Better-Auth cookies — COOKIEDO
  • Versioned-zip build script (always stages a wrapper)
  • Top-level legacy (Enhance path-based proxy)
  • PM2 ecosystem config
  • Backup script
  • Reset-password CLI
  • VPS install + Enhance install guides
  • Release-symlink layout ( + atomic symlink) with automatic migrati
  • Admin-gated self-update — pulls signed releases from RepoMade (vendor-update.sh --check on a 10-min timer, --appl
  • plugin-repomade — BuildSourceModule (new SDK module type) implementing the upstream release-artifact source. Drives

Features

  • Double-entry ledger spine — CoA + journal entries/lines (debit=credit invariant) + period lock
  • AR + Stripe-in + payout reconciliation → ledger (event-driven, idempotent) — apps/api/src/finance/finance-posting.modul
  • Tide bank feed + reconciliation engine (read-only, pluggable adapter)
  • Accounts payable + supplier sync (§B) + payroll ingest (§A)
  • Cost + metered-usage events → COGS/margin (§E)
  • Reporting cockpit (P&L, balance sheet, AR/AP aging, cash) + admin Finance page — apps/api/src/finance/finance-reports.m
  • UK VAT-return 9-box derivation
  • Human-gated payment runs (wages/VAT/AP) via Tide
  • Integration scaffolding (ZEPHYRSTANDBYHMAC signed-RPC + inbound guard)
  • Single-item ledger repairs
  • Historical ledger backfill — POST /admin/finance/backfill + "Backfill ledger" button sweeps pre- in
  • Gateway settlement sync — listSettlements SDK capability + Stripe impl paging balance-transactions for
  • Bank-line coding — autoReconcile only MATCHES lines to journal entries that already exist, so a freshly
  • PDF statement import — for issuers that only give you a PDF (Capital on Tap). Reconstructs table rows from
  • Bank statement CSV import — header-sniffing parser (signed-amount or paid-in/out, UK day-first dates, semi
  • Supplier costs admin — suppliers + purchase bills with per-line nominal + VAT rate, approve→post, record p
  • Recurring supplier bills — templates materialise draft bills on a schedule (daily ap.recurring-bills-tick
  • Ledger explorer — journals with source/period filters + line drill-down + reversal, trial balance grouped
  • Payment runs admin — propose from approved bills or VAT, approve, then type-to-confirm execute — apps/adm
  • Credit-card / liability accounts — 2400 Credit card control nominal + natural-balance signing so card de

Features

  • Append-only page versioning
  • Publish / unpublish / rollback — rollback COPIES an old version forward into a new one rather than moving
  • Data blocks + module registry — reviews and product-grid bind to live platform data instead of typed-i
  • Chart blocks — four presets (dual-axis-trend, lines-with-band, multi-line, stacked-bars) covering every ch
  • Shared block package
  • Fixed — DELETE /cms/admin/pages/:id existed in the admin UI but not the API

Features

  • Referral rewards reach a referee who signs up on their own, and a code no longer stops paying after its first referee
  • Leads CRM + rule-based segments (over leads + clients) + public capture
  • Campaigns → segment, A/B subject, open/click tracking, suppression
  • Automations / drip journeys (worker-ticked engine + event triggers)
  • Capture forms + hosted landing pages
  • Attribution + ROI (paid-invoice → first-touch source, ROAS)
  • Promo codes (apply at checkout) + referral program with auto reward fulfilment — apps/api/src/marketing/promos.module.t
  • Visual builders for segment rules + journey steps
  • Ad-click attribution (PLANMARKETINGADS.md A0) — a visitor who arrives from an ad (ChatGPT oppref, Google gclid
  • Attribution page: revenue by ad platform, recent tagged visits, and a capture-status banner that says outright when the
  • Form submissions keep / (both were dropped) and cap every UTM at the column width; an over-long
  • Guards: pins both seams (the component is mounted, sends credentials and the consent ke
  • Ads hub, read-only (PLANMARKETINGADS A1) — Marketing → Ads:
  • AdPlatformModule SDK kind ads (read half required, write half typed for A3) — packages/plugin-sdk/src/module-types
  • Hourly ads.sync-tick worker cron into , and . Money is stored as bigint
  • "Paid to date per client" defined once, in the metric layer
  • Guards: micros columns must be bigint . The journey gate connects the sample account as ChatGPT, s
  • Conversions sent back to the ad platforms (PLANMARKETINGADS A2) — a customer whose last ad click before signing up
  • plugin-ads-chatgpt Conversions API: pixel ID plus a separate Conversions API key, with a test mode; bu
  • Accounts tab "Conversions sent back" card (sent / waiting / failed / expired per platform, recent events, Send now), and
  • Journey gate: sending conversions twice delivers exactly one signup and one first purchase for the ChatGPT-ad customer
  • Ad campaigns run from Zephyr (PLANMARKETINGADS A3) — Marketing → Ad campaigns — apps/api/src/marketing/ad-plans.m
  • Money rails on every action that commits spend. Pause and End are never blocked, so stopping spend always works.
  • AdPlatformModule management half: publishCampaign (paused), setStatus, setLifetimeBudget. ChatGPT resolves count
  • The ad studio: one brief, every image size the platform wants - Marketing -> Ad campaigns -> a campaign -> Creatives
  • Guards:

Features

  • The builder drafts the whole product, priced (2026-09-20)
  • kstack is a Catalog Builder source, with families, locations and pages written from measured facts; Enhance is retired
  • Scout provider/registrar catalogs → AI drafts sellable products → operator approves → real products + AI marketing pages
  • Source adapters (normalized CatalogItem): cloud-hetzner (specs+cost), openstack/proxmox/standby (specs), enhance (shar
  • AI recommend → (markup-default retail + AI market-anchored suggestion, hallucinated-ref drop, slug dedu
  • Apply draft → product group + products (hidden) + cycles, binds provisionPluginInstanceId/provisionPlanRef; Enhance path

Features

  • Competitor price intelligence — operator-curated source URLs, daily fetch + AI extraction into append-only snapshots, "U
  • Product price history audit trail + canonical PriceBookService.setCyclePrice (the only sanctioned price mutation)
  • Strategy core — time-windowed playbooks (draft/scheduled/active/paused/completed) with full revert via before/after acti
  • Seasonal strategies — promo auto-create/restore (cart-wired codes), scheduled theme-token overrides, marketing-site canv
  • AI strategist — draft-from-brief grounded in catalog + competitor snapshots (always lands draft/suggest), mid-flight AI

Features

  • AI theme designer — full business theme (all color/typography/radius tokens, light + dark, WCAG-contrast prompted) from
  • Theme from any website — paste HTML or give a URL; AI extracts palette/typography/feel + designs a matching dark mode
  • Version history on custom themes — auto-snapshot on every save (cap 20), restore is itself undoable — themes.versions.<
  • Exports: re-importable JSON, ZIP bundle (theme.json + composed tokens.css + sparse overrides.css + design file + README

Features

  • UK PAYE / NI / pension calculation — deductions are computed rather than zeroed. PAYE is cumulative a
  • Import-from-Standby failures explained, not 500'd — a 404 from the unbuilt §A producer used to surface as
  • A wrong statutory figure, found the day the screen shipped
  • Statutory rates can be confirmed
  • Manual period entry — POST /runs/import-manual is the documented alternative when a period isn't in Sta
  • A posted run can be paid
  • RTI FPS/EPS submission to HMRC; Scottish/Welsh bands; K codes; student loans; salary sacrifice; statutory pay; directors
  • Not exercised against a real payroll run — typecheck, tests and build only; no period has been imported, no rates sa

Features

  • Tide (and any paid-in/paid-out) bank statements — dated balance-anchor pair (Balance (£) on <date>) mat
  • Long-form dates parse as UTC — "29 Jun 2026" fell through to new Date (local time), reporting the 28th, and "
  • Wrapped counterparties — payee lines above a dated row are adopted only on statements that actually wrap them; a noi
  • Card-vs-bank detection drives the invert toggle — it defaulted ON, right for a card statement and silently wrong for
  • Balance anchors are visible and can be added — GET/POST accounts/:id/snapshots had no screen. The deriv
  • The reconcile card checks the cause it names — it asserted "unmatched lines before that date are the usua
  • Multi-card statements can be imported — an account with more than one card prints every transaction twice
  • Cross-source duplicate guard — dedupe was keyed on externalRef, which is scheme-specific, so the same r
  • Preview always matches what will be imported — the dry-run is probed uninverted, re-run only when the det
  • Emitted fields bounded to their column widths — the rail wording is normalised into the short banktrans

Features

  • Calendar invites on every booking email
  • Meetings can be recorded as attended or a no-show — a sweep moves ended bookings to awaiting-outcome an
  • Reminder ladder — 24h plus 1h, each rung floored at the next so a short-notice booking is not reminded tw
  • External staff calendars are read — the page can no longer sell a slot the host committed elsewhere; busy
  • Per-type questions — a demo and a support call can ask for different qualifying information; answers vali
  • Team scheduling — host pool with fixed / round-robin / least-busy assignment, availability unioned across
  • The public booking page is a booking page — two-column layout with a sticky summary of what is being book
  • The booking form was not a <form> — a <div> with a type="button", so required and type="email"
  • Forward paging is bounded — booking types carry a maxAdvance the slots endpoint already applies, so pas
  • Unverified against anything live: the ICS attachments have not been opened in a mail client, and no real CalDAV serv
  • Declined 2026-08-16 (see ): Google + Microsoft calendar providers (OAuth app registration + ref

Features

  • Client product demos + partner calls on the Standby-owned meet server — MeetingsService mints a room via POST {standb
  • Admin — create (subject/kind/client-or-partner/schedule/moderator), copy link, open, join embedded (ifra
  • Standby-side (mirror session): POST /api/admin/meet/rooms (+ ) accepting std + X-Zephyr-Sig — see CROSSP
  • Scheduled-meeting shadow copy — booking a meeting with a scheduled time upserts it on the
  • Business-roster mirror — GET /api/standby/directory serves active staff only (custom
  • Standby-side (mirror session): accept PUT /api/admin/meet/scheduled/:id, serve GET /api/admin/directory, consume

Features

  • Consume Standby's approved → place vendor order → report ordered/received back (Standby bumps spa
  • Inbound webhook POST /api/finance/purchase-requests/webhook (IntegrationHmacGuard); admin queue (
  • Standby-side (mirror session): POST approved PR to Zephyr on approve; accept Zephyr's signed callback on

Features

  • One-paste mutual pairing with the monitoring backend ( handshake → push credential + pull token)
  • Zero-key auto-pairing — POST /api/license/pair-request, edge-HMAC over raw bytes (X-Edg
  • RepoMade-side (mirror session): the edge relay POST /api/v1/pair-request/{product}. Zephyr's endpoint is live but
  • NOC connector extensions

Features

  • Self-hosted analytics — tracking script + collect + sessions/sources/pages/realtime — apps/api/src/marketing/analytics.
  • Apps self-track via runtime hostname resolution (no env/rebuild)
  • Admin dashboard with 15s live auto-refresh + remove-site

Features

  • AI image generation (OpenAI-compatible) for promo/booth/product-page graphics + logos (transparent) — apps/api/src/medi
  • Upload from your computer — drag-drop or browse, multi-file, on the Media page itself; the endpoint and i
  • Edit an image with AI — a prompt against an existing asset (remove the background, extend for headline sp

Features

  • Admin refund calls the gateway — invoicesService.refund calls the gateway plugin's refund with a determinist
  • IMAP accounts from with as a dev fallback; missing config is handled, not
  • Workspace typecheck at zero errors
  • Brand logo in invoice PDF — brandLogoDataUrl on the invoice renderer, resolved from brand.logoUrl — packages/pd
  • plugin-geoip-maxmind — GeoIP as a plugin with its own config; see — plugins/plugin-geo
  • Worker drains the webhook-processing queue
  • domains.expire-pending-transfers cron registered and dispatched
  • API publishes on SMTP settings save; the worker subscribes — apps/api/src/settings/s
  • Admin health banner surfaces health:smtp-config-failed and the other health signals — apps/admin/src/components/h
  • Audit consumer for service.suspension-skipped
  • table
  • 2FA (TOTP + OTP email) via better-auth twoFactor, magic links, passkeys, SSO

Features

  • plugin-virtualizor — VPSModule for Virtualizor hypervisor
  • plugin-solusvm — VPSModule for SolusVM hypervisor
  • Reseller support on cPanel / DirectAdmin / Plesk — extend existing plugins (Enhance already supports it) — P3
  • Per-slot & metered-overage reseller billing — beyond flat-quota (P3); sub-client billing (P4)
  • plugin-reviews-capterra — Capterra + G2 ReviewProvider — P4
  • plugin-reviews-facebook — Facebook ReviewProvider — P4
  • plugin-quickbooks-online — AccountingModule, US market — P3
  • plugin-sage — AccountingModule, EU enterprise — P3
  • E-invoicing — PEPPOL / UBL 2.1 / FatturaPA XML alongside PDFs — P3
  • plugin-tax-avalara — real-time US sales tax provider — P3
  • plugin-tax-taxjar — alternative US sales tax provider — P3
  • plugin-email-postmark — pluggable ESP transport (SES is built; Postmark/SendGrid remain) — P3
  • plugin-email-sendgrid — same — P3
  • Crypto payment gateway — BTCPay / Coinbase Commerce — P3
  • Apple Pay / Google Pay on checkout — toggleable Stripe PaymentElement method types
  • Quote-to-cash for enterprise deals — P3
  • Multi-currency FX policy controls — admin-tunable refresh / overrides — P3
  • Cohort analytics / cohort churn curves — beyond current MRR/ARR reporting
  • Export to BigQuery / Google Sheets — for revenue dashboards — P3
  • Encrypted columns for sensitive PII — per-column app-layer AES-GCM — P2 still outstanding
  • Translation-memory propagation across similar strings — i18n admin UX
  • DeepL / Google MT inline translation assist — in the language admin UI
  • Per-locale invoice/PDF localized labels — date/number/currency for EU compliance
  • AI-assisted changelog/blog drafting — generate from git commits / briefs — P4
  • Marketing → campaigns module — admin UI section — P4
  • Marketplace admin UI polish — P4
  • Vendor license-server (Standby integration)
  • Packaging-tier claims + — verify now emits tier/limits/features a
  • Stripe restricted keys + a real connection test
  • Software-product auto-publish
  • AI marketing-page generator — admin button on /admin/vendor-licensing → Product tab calls AI Site Builder with a p
  • Per-product docs surface

Features

  • Feature-request board
  • Affiliate payout gateway — beyond account-credit payouts — P4
  • Affiliate tax-form capture (W-9 / W-8BEN) — P4
  • Community prompt-pack marketplace — for the AI assistant — P4
  • SoftwareLicenseModule plugin category — bridge to external license systems (FastSpring, Paddle-style)
  • Case studies post type — future kind value in unified posts table
  • Stripe auto-renew via saved cards (off-session) — extractCustomerFromPm returns undefined; wire Customer-id for
  • Asset Manager
  • Email Workspace (OpenSRS + Google Workspace) — new EmailServiceModule + seat-based sibling SDK; plugin-opensrs-email
  • OpenSRS Email (standalone variant) — superseded by Email Workspace plan; same OAuth2 mailbox CRUD, ResellerCapable w
  • Payment Methods L — Stripe ACH Direct Debit; plugin-authorize-net (CIM); mandate-lifecycle listener (closes GoCardle
  • Plugin / Theme Upload
  • GeoIP auto-update cron
  • GeoIP-driven marketing defaults
  • GeoIP risk signals into fraud scorer — country-mismatch / high-risk-country flags at checkout. Still open: fraud.mo
  • Currency-precision map
  • column-patches.ts:297
  • column-patches.ts:295
  • column-patches.ts:284
  • Dedicated disputes table — still open; gateway-webhook.controller.ts:318 still records disputes on the fraudre
  • Live WCAG-AA contrast checker in the token editor — the colour pickers exist, the contrast warning does not
  • Self-hosted font upload (WOFF2) — font slots are text fields, with no curated list and no upload
  • Density control — compact / normal / comfortable; radius is editable, density is not
  • Logo / favicon / OG image / email-header upload slots — light + dark variants
  • Sanitized custom-CSS escape hatch — scoped to theme root
  • Per-page token overrides — seasonal campaigns and product-specific branding
  • runtime — stub; providers live as plugins, no shared lib
  • shared component library — stub; admin/client each ship their own Radix components
  • shared lib
  • shared lib
  • standalone app
  • Generated SQL migration files
  • MCP stdio transport — only HTTP POST /mcp is wired; no stdio entry script
  • Marketplace catalog data — module wired but no shipped catalog file
  • Workflow action library