๐ Release Notes โ v1.5.0
Codename: Precision Ledger
Release Date: 2026-08-28
[www.nineminds.com/alga-psa](http://www.nineminds.com/alga-psa)
๐ New
-
๐ผ Billing Profiles. One client, several billing entities. A client can now hold multiple billing profiles โ franchise sites, legal entities, departments โ and contracts, contract lines, locations, tickets, and projects point at the one that pays for them. Each separately-billing profile gets its own invoices, billing cycle and frequency, bill-to identity, tax exemption and certificates, payment cards, AR aging, and statements, and exports to QuickBooks as a sub-customer under the parent client. A Spend by Billing Profile report shows totals per entity per period with drill-down into the exact charges, and the client portal shows one login the whole organization with costs broken out by segment โ with per-user control over who sees which segment. Deliberately invisible until you need it: a single-profile client sees nothing change, and invoice output for existing tenants is protected by a byte-for-byte compatibility gate.
-
โณ Prepaid Hour Blocks. Sell a block of hours whenever a client wants one โ no recurring contract required. Blocks stack, burn down first-in-first-out across months with no per-period reset, can carry an expiration date, and are repurchased when they run out. Selling a block raises a draft invoice and activates the hours when it's finalized; you can also grant or adjust hours directly with a full audit trail. Covered time shows on invoices as zero-dollar informational lines, an expiring-blocks notification warns before hours lapse, and clients see their remaining hours in the portal. Behind a feature flag.
-
โ๏ธ Weighted Bucket-Hour Pools. Buckets of hours grow up: a contract line's bucket is now a shared pool that several services can draw from, each with its own burn multiplier โ after-hours work can burn at 1.5x on your real business-hours schedule, and a catch-all scope can sweep in everything else on the line. Overage is apportioned across the services that actually burned it, each keeping its own rate and tax treatment. Every existing bucket migrates to an identical-behaving one-service pool, so nothing changes until you configure it. Pool editing UI behind a feature flag.
-
๐ Prepaid Balance Alerts & Auto-Replenishment. Set a threshold on a client's prepaid credit or bucket hours and Alga watches the ledger daily: account managers get an internal alert, the client's billing contact can opt into an email, and โ where you enable it โ a replenishment invoice is raised automatically to top the balance back up, with settlement gated on actual payment. Contract-level overrides supported. Behind a feature flag.
-
๐๏ธ Credit Draw-Down Controls. Decide how client credit gets spent: per tenant or per client, control whether credit auto-applies at finalization, in what order, and against which service types โ with a per-contract opt-out for agreements that should never draw down credit. Behind a feature flag.
-
๐ Deferred Revenue Report. A month-by-month rollforward of what you've been paid for but haven't delivered: opening balance, issued, applied, expired, adjustments, and closing โ per client and currency โ covering both credit balances and unburned prepaid hours, valued from the ledgers your invoices already run on. Drill into any month for the credits and buckets behind the number. Behind a feature flag.
-
๐ณ Payment Links in Invoice Emails. Invoice emails now carry a "Pay now" checkout link alongside the portal link whenever a payment provider is enabled, resolved through the same billing-recipient chain that decides where the invoice goes. Paid and cancelled invoices retire their checkout sessions automatically so a customer can no longer pay a stale amount, and a failed link degrades gracefully to the portal instead of blocking the send.
-
๐ Password Vault. Store client credentials in Alga: envelope-encrypted at rest, permission-gated down to a per-credential access list, with reveal actions audit-logged and one-time codes (TOTP) built in. Credentials attach to whatever they belong to โ assets, tickets, clients, contacts, documents, project tasks, contracts โ and show up right on the ticket you're working. Already on Hudu? Connect it as a second source and manage both from the same screens. Pro, behind a feature flag.
-
๐ฆ Imports & Exports, Rebuilt. The new Alga Migration Package (AMP) moves organizations, locations, contacts, tickets, ticket comments, and assets through one inspectable pipeline: upload an AMP, CSV, or XLSX file; resolve mappings; run a blocking preflight; then apply it in the background with per-entity progress, record-level outcomes, cancellation checkpoints, and duplicate-safe retry. Alga can export the same six entity types back to a portable AMP, and the open-source spec, SDK, CLI, CSV/XLSX adapter, and ConnectWise PSA converter let migration teams build and validate packages before they ever touch a tenant. Available in Community Edition under Settings โ Imports & Exports.
-
โ๏ธ Microsoft Teams Phone, Inside Alga. Calls from Teams Phone now land as first-class interactions with direction, duration, caller matching, and a queue for unmatched or ambiguous numbers. Technicians can create a ticket from a call or link it to an existing one, dispatchers can resolve attribution from the operational Calls view, and optional auto-ticketing stays off until an admin enables it. Where Microsoft exposes them, recordings and transcripts are captured after the call; with AI Assistant, a linked transcript can become an internal ticket summary. Included with the Microsoft Teams add-on.
-
๐ ๏ธ Asset Maintenance Command Center. A real Maintenance workspace replaces the placeholder with overdue, due-today, upcoming, open-ticket, and compliance KPIs; a client-grouped work queue; and a month calendar over the same filtered occurrences. Coordinators can create or reopen exactly one accountable ticket per maintenance occurrence, reassign its technician, complete or skip the work, pause the plan, and follow the full history while the next due date advances from the actual completion.
-
๐ Projects Against Plan โ and Updates for the Customer. A new Pro report compares each active project's budget and task estimates with live time-entry actuals, with per-phase drill-down, estimate-used bars, and the largest overruns. From the project itself, teams can send a localized status email to the project contact; the preview shows the recipient, sender, task/hour summary, and optional note, and the message includes only the phase, task, and budget details already permitted by that project's client-portal settings.
-
๐ Documents in Your Customer's Language. Invoices, quotes, sales orders, packing slips, and pick lists now render in the recipient's language โ labels, dates, numbers, and currency โ across all eight supported locales, with terminology reviewed by native speakers. Every template designer gains a preview-language selector, and the on-screen preview finally matches the PDF the customer receives. Customized templates render exactly as you authored them.
-
๐จ Theme Pairs & White-Label. A new Appearance settings tab lets the tenant pick a matched light-and-dark theme pair โ Alga, Slate, Ocean, Forest, Sunset, Sky, Cappuccino, Vice, or High contrast โ previewed before it's applied to anyone, with each user's own light/dark toggle choosing the half they see. The client portal can follow the organization theme, and portals get a dark-logo variant plus a tinted side panel. Enterprise adds a custom theme editor with live contrast checking, a white-label switch, and your logo in the MSP side rail. Enterprise appearance controls are behind a feature flag.
-
๐๏ธ Boards Become Places. The ticket list gains a tab strip โ All tickets plus a tab per pinned board, each with an open-count pill โ and every board can look like itself: its own columns, density, and default filters, authored by arranging the real list and saving it as the board default. A board header shows ownership and health at a glance (overdue, unassigned, SLA-breached), and your last board is remembered across sessions.
-
โฐ Scheduled Ticket Comments. Write a client-visible comment now, publish it later. Scheduled comments can be rescheduled or cancelled, and stay completely invisible to portal users until they go live.
-
๐ฅ๏ธ Scheduled RMM Device Sync. Device inventory now refreshes on a schedule instead of only when someone presses "Full sync" โ configurable per provider (NinjaOne, Level.io, Tactical RMM, and Tanium on Enterprise) with interval control, honest last-run timestamps so you can see the schedule is actually working, and management over the v1 API. Suspended tenants stop generating provider API traffic.
-
๐ Remote Appliance Support. Self-hosted appliances can now receive remote support sessions from Nine Minds โ fail-closed by design, with authenticated sessions, integrity-verified recordings, and durable acknowledgements, so help doesn't require opening your network.
-
๐ฆ Notification Priorities. Every in-app notification gets a high/normal/low priority, resolved from your personal preference over the tenant setting over the built-in default. The bell badge counts what's actually urgent, the panel groups by tier, and mobile push carries the priority through. Behind a feature flag.
โจ Improved
-
๐ฅ QuickBooks Automated Sales Tax. A per-company AST mode lets QuickBooks compute tax on exported invoices with correct per-line tax codes, closing a gap where delegated invoices exported with no tax at all. Tax-code mappings now show readable names and rates instead of bare QuickBooks IDs, and the catalog pages past QBO's 100-row default.
-
๐งน Deactivating a User Disposes of Their Work. Deactivation now walks the user's open tickets and tasks and lets you reassign or archive them in one pass, instead of leaving orphaned work behind.
-
โ Client Validation That Trusts You. Structural checks (a parseable email, a possible phone number) still block; plausibility guesses (disposable domains, placeholder-looking names) are now dismissible warnings instead of save blockers. Hotels.com is a real business again. Phone numbers normalize to international format with extensions in their own field, and nothing you didn't edit gets re-validated.
-
๐ Knowledge-Base Import & Images. Importing articles now runs as a background job with live progress โ a 2.4 MB markdown file that used to take three minutes to parse now takes under two seconds. Markdown and HTML imports preserve images, document and knowledge-base editors can insert, paste, and drop them without losing surrounding content, uploads are filed under Knowledge Base/Attachments, and failures surface instead of disappearing. Imported links and image sources are sanitized against script-injection schemes.
-
โก Faster Billing Screens. Automatic-invoice discovery prices only the page you're looking at instead of every candidate line, skips thousands of empty billing windows, and shows a proper loading skeleton on every reload. Contract tabs cut their query fan-out, and the recurring due-work screen no longer writes to the database just to show a list.
-
๐ Recurring Periods Replenish Themselves. Recurring service periods are topped up automatically as billing cycles advance, so covered work bills in the run that discovers it instead of slipping a cycle.
-
๐ Honest Job Alerts. The header attention dot now counts failures from the last 24 hours instead of all time, so it clears itself, and routinely replaced schedules no longer inflate failure metrics forever.
-
๐ผ๏ธ Document Previews That Match Reality. Quote, invoice, sales-order, packing-slip, and pick-list designers now put your real company name, address, and logo onto sample previews. Quote and sales-order layouts can also preview an existing document through the same render model used for customer output, so layout authors can test real names, line items, and edge cases before publishing.
-
๐ค More Ways into the Teams Bot. With explicit tenant opt-in, verified client contacts can submit tickets from a personal bot chat without first linking a PSA user, and
@mentioncommands can run in team channels. A client's verified Entra tenant can support organization-wide bot installation, while unmatched or ambiguous identities still fail closed. Linked meeting transcripts can also become internal ticket summaries when AI Assistant is configured.
๐ Fixes
-
Fixed the client portal's root URL returning a 404 after a successful sign-in on custom portal domains.
-
Fixed project boards rendering "0 tasks" when tasks pointed at a status outside their phase's scope โ orphaned tasks now surface in a "Needs status assignment" group instead of vanishing.
-
Fixed new-tenant onboarding rolling back entirely on a template status seed error, which could leave a partial tenant behind.
-
Fixed clock-pinned recurring workflows (like renewal suggestions) failing on every scheduled run due to an empty stored payload.
-
Fixed Microsoft Graph webhook registration silently degrading to polling when the configured base URL redirects (e.g. www to apex), and notification emails arriving corrupted from Exchange due to line-ending mis-encoding โ which could also expose internal reply markers.
-
Fixed Stripe checkout links being wrongly retired as expired after a successful webhook-settled payment, and payment links surviving on invoices that had been paid, credited, or cancelled.
-
Fixed applying credit repeatedly being able to exceed an invoice's eligible subtotal, concurrent credit applications over-spending the same balance, and a deadlock between applying credit and voiding an invoice. Unfinalizing a fully credited invoice now returns the credit.
-
Fixed "Use Default Settings" on client billing deleting unrelated billing overrides, and credit settings rendering interactive defaults before loading โ an early click could overwrite a saved policy.
-
Fixed a recurring hourly line with several time entries in one period aborting the whole invoice, and bucket charges failing on a date-type mismatch in the billing engine.
-
Fixed deleting an opportunity-converted contract failing with a database error, and deleting a draft purchase invoice leaving its prepaid hour block pending forever.
-
Fixed hour-block expiration dates shifting by a day across timezones โ calendar dates are now interpreted in the tenant's timezone end to end.
-
Fixed the invoice generation gate blocking clients whose billing recipient is configured at the client level, and invoice preview hiding the real cause behind a generic error.
-
Fixed the PO overage dialog showing $NaN and overstating amounts a hundredfold by formatting cents as dollars.
-
Fixed API-key-authenticated
POST /api/v1/invoicesand/api/v1/contractsreturning 500s, and thirteen Enterprise opportunity endpoints appearing as empty placeholders in the public API docs. -
Fixed image-only ticket comments disappearing from both ticket views, and text selection dying inside existing comments.
-
Fixed the date picker's month panel only listing future months, so recent past months were unreachable.
-
Fixed moving a schedule entry's start silently producing an end before the start โ the end now moves with it, preserving duration.
-
Fixed partial task updates being rejected unless they re-sent the assignee, task move dialogs showing the wrong phase, and bulk-move keeping already-moved tasks selected for the next drag.
-
Fixed daily time periods generating a day short, and a fixed end-day configuration looping period generation until the worker died.
-
Fixed template designer fields exporting bindings that rendered blank on quotes and sales orders โ the field catalog is now generated from the real render paths, and sales-order fields reach the picker for the first time.
-
Fixed sent-quote resend and reminder actions, and quote/invoice/sales-order downloads failing for portal users on documents their client owns.
-
Fixed Gmail inbound providers reporting "connected" while delivering nothing โ setup now verifies every step it claims, and a new diagnostics dialog pinpoints exactly which link in the chain is broken.
-
Fixed Teams replies silently downgrading from Adaptive Cards to plain cards whenever a token expired mid-conversation.
-
Fixed Quick Add Teams meetings existing in Microsoft but not on the Alga calendar, omitting the organizer from the invitation, and showing an incomplete recipient summary.
-
Fixed CSV import/export edge cases across clients, contacts, tickets, projects, and accounting: quoted whitespace, zero and
falsevalues, date-only timezone shifts, impossible calendar dates, labeled secondary emails, and common boolean spellings now round-trip correctly, with formula-injection protection on shared exports. -
Fixed My Work project activity disappearing because of one unreadable timestamp and remaining stale after an action completed in the drawer.
-
Fixed the sessions list showing "Zuletzt aktiv 5 minutes ago" โ relative dates now follow the active locale, as do ticket timestamps, phase dates, and clock formats across the app.
-
Appliance / self-host: fixed PDF rendering failing entirely on Community Edition images (Chromium now ships in the CE container), tenant secrets written at runtime not surviving a pod restart, a Helm configuration that could deadlock rollouts, large
kubectlJSON responses being truncated by the control plane, and the appliance AI section showing English fallbacks for six subscription states.
๐จ UX & Polish
-
๐ฌ A Calmer Comment Composer. The ticket composer collapses behind an "Add Comment" button and opens in a sticky dock that follows you down long threads, so a half-typed draft never gets lost. Every comment gains a Copy button โ including other people's โ preserving rich formatting on the clipboard.
-
๐ Dark Mode, Actually Audited. Dark mode was repainted in Alga's palette and then measured: every foreground/background pairing across all nine theme pairs now passes WCAG AA contrast, down from 44 failing sites. Skeletons are visible, dropdowns don't punch holes in cards, and keyboard-shortcut keycaps are readable.
-
๐ชช Client Cards Worth Reading. The client grid shows email and an open-ticket count pill, hides empty fields instead of printing "N/A" โ and the open-ticket counts themselves were corrected (a stale flag had them nearly doubled on some clients).
-
๐งฑ Ticket Grid by Default. The bento Grid layout is now the default ticket detail view for users who never chose one; a saved preference still wins.
-
๐ Workflow Edits That Read Like Edits. Update actions in the workflow designer render their changes as a summary card โ "Set status to Closed" โ instead of a flat pile of fields.
-
๐ Dialog Hygiene. Eleven dialogs stopped rendering their titles twice, footer buttons across 149 dialog footers got their spacing back, and closing gaps between icon-button rows were fixed throughout.
-
๐งฐ Bulk Actions Where the Work Is. Clients, Documents, Knowledge Base, invoicing, project-billing review, time-sheet approvals, and workflow runs now use the same contextual action bar when rows are selected. Available operations appear immediately, checkboxes stay in sync, and Knowledge Base bulk archive/delete reports partial outcomes instead of abandoning the rest of a selection.
๐ Stability & Security
-
Scheduled ticket comments can no longer leak their content or author to portal users before publication.
-
Imported knowledge-base articles are sanitized against
javascript:link schemes, including HTML-entity-disguised ones, and import batch sizes are capped server-side. -
Hour-block, credit, and prepaid-alert writes were hardened against concurrent-access races across the board: no more double-spent credit, cross-client burn reversals, or stomped finalizations.
-
Inbound email now fails closed against forged or misrouted messages: Microsoft webhook secrets and monitored-folder scope are verified, sender attribution requires aligned SPF or DKIM evidence, untrusted reply headers cannot hijack a ticket thread or inject watchers, and deduplication is bound to the provider payload rather than a forgeable Message-ID.
-
Ticket and project CSV import reference-data loaders now enforce their read permissions before exposing internal users, email addresses, boards, clients, contacts, priorities, services, phases, or statuses.
๐ Dev & Infra
-
API v1 additions. RMM integration endpoints (read config, tune device-sync, trigger a sync), ticket checklist endpoints, opportunity step endpoints, and notification-suppression flags on ticket mutations โ with regenerated OpenAPI specs across editions.
-
i18n enforcement in CI. Translation audits now run in CI and can actually fail, with a ratcheting baseline for unwired components.
๐ฑ Mobile App โ v1.5.0 (build 31)
-
โ Ticket Checklists. Work required and optional checklist items from your phone โ add, check off, and see progress right on the ticket.
-
๐คซ Silent Updates. Review changes before applying them, with controls to suppress customer or internal notifications when an update shouldn't wake anyone.
-
๐ฒ A Cleaner Ticket Screen. The detail screen leads with a tappable meta bar (status, priority, assignee, due date), three action chips instead of ten, collapsible sections, and the running timer as a compact chip in the header instead of a banner.
-
๐ฏ Opportunities on the Go. Create a new opportunity from the field and complete planned steps from the current opportunity plan, with calls logging their elapsed minutes.
Full Changelog: v1.4.0...v1.5.0