Skip to main content

Friday, May 1, 2026

Self-Healing CMS Deliveries, Native iOS Chrome, and the Signatures Hub

By Kenny Eliason
Attorney Portal v2026.5.0iOS v2026.5.0Android v2026.5.0Extension v2026.5.0

Three releases shipping together. The portal stops letting failed CMS uploads sit in the failed bucket. They retry themselves on a schedule, with the real reason recorded so the right next step is obvious. Requests is now a hub: Signatures and Forms each get their own list, drafts, and templates, and Tasks is up next. The mobile app picks up native iOS navigation on Case, Treatment, and Case Select, opens PDFs in the OS viewer instead of rendering them in-app, and recovers expired sessions in the background so coming back after a long break stops kicking you to sign-in. The browser extension's Add Provider form formats phone numbers as you type, and Safari users on Intel Macs can install the extension again.

CMS Deliveries Now Self-Heal portal

When a document failed to upload to a CMS (Filevine, Clio, MyCase, and the rest), the row used to sit in the failed bucket until someone noticed and pushed it again. It now retries itself.

  • Automatic retry every 15 minutes: stuck deliveries are picked up on a schedule, grouped by firm, CMS, and matter, and pushed through again.
  • Real reasons, not "Unknown error": every failure now records why it failed, so a Filevine login that timed out reads as expired auth instead of as a generic error. The right next step is obvious from the row.
  • Genuinely broken files stop retrying: a file that's too large or in a format the CMS doesn't accept is set aside instead of looping forever in the queue.
  • Network hiccups during upload count as failures: if Quilia couldn't even fetch the file to send it, that now lands in the same retry path as any other failed delivery instead of disappearing into background logs.

Signatures and Forms Now Have Their Own Lists portal

Requests used to be a single mixed list with signatures and forms in it together. It's now a hub: a Signatures list, a Forms list, and a Tasks tile (coming soon).

  • Drafts, Templates, and Recently Deleted are scoped to the surface you're on, so a drafted signature lives on the Signatures side. No more digging through a mixed list to find it.
  • The sidebar Requests entry is collapsible, with Signatures and Forms as children. It auto-opens when you're inside the section and stays out of the way when you're not.
  • New on each list opens the right templates: clicking New on the Signatures list shows signature templates; clicking New on the Forms list shows form templates.

Rich Empty States Across Data Tables portal

The bare "No X found" string on empty list views has been replaced with a real empty state that includes an icon, a title, and a sentence explaining what the surface is for and what you can do next.

  • Applies to Signatures, Forms, case referrals, cases, clients, providers, and team settings.
  • Multi-CTA empty states (for example "Create a template" and "Send a one-off") wrap cleanly instead of overflowing on narrow viewports.

Native iOS Chrome on Case, Treatment, and Case Select app

The mobile app's three most-visited screens now use native iOS navigation instead of a custom React Native header.

  • Native iOS headers and toolbars: large titles, native back buttons, and toolbar menus that match the rest of iOS. Colors stay theme-aware across light and dark mode.
  • Profile button in the header: the profile button moved into the header on Case Select for one-tap access from any case.
  • Status and date pills: Case Select now renders status and date as compact pill labels with the firm name as a subtitle, so multi-firm clients can tell their cases apart at a glance.
  • Android unchanged: Android continues to use the existing custom header, so nothing changes there.

PDFs Open in the OS Native Viewer app

Tapping a PDF now hands it off to Quick Look on iOS or the equivalent system viewer on Android instead of rendering inside the app. PDFs open faster, scrolling and sharing feel the way you expect, and double-tapping the share button no longer surfaces an "already in progress" error.

The App Stops Kicking You Back to Sign-In app

The session refresh that landed last release used to only run on app startup. It now runs in the background on every action in the app, so coming back after a long break (where your login token has quietly expired) silently refreshes and retries instead of dropping you on a blank screen or the sign-in page.

  • No more accidental sign-outs: when a case fails to load on a transient hiccup, you now see a "trouble loading account" alert with a retry button instead of losing your session.
  • Cleaner relaunch: a handful of background queries that fired before the session was ready could push you to sign-in on relaunch. They now wait for a valid session.

Rich Text Renders Correctly in Messages app

  • Cleaner nested lists: bullet and numbered lists indented inside other lists now actually look indented. They pick up visual padding per nesting level instead of sitting flush against the parent.
  • Strikethrough and underline render in the receiving thread: previously they were silently dropped on the way through.

Phone Numbers Format As You Type in the Extension browser extension

The browser extension's Add Provider form picks up the same phone-number behavior the mobile app and the portal already had: numbers format progressively as you type, and US numbers display in the familiar (xxx) xxx-xxxx format throughout the extension. International numbers keep their country code.

Safari Extension Installs on Intel Macs Again browser extension

A recent build pinned the Safari extension to a macOS version Intel Macs can't run. Reverted, so anyone on an Intel Mac can install the Safari extension again.

Phone Numbers Save in One Consistent Format portalappbrowser extension

No matter how a phone number was typed in (with parentheses, dashes, spaces, or just digits), it's now saved in a single canonical format on the back end across the portal, the app, and the extension. The user-visible payoff is fewer silent SMS and outbound-call failures on rows that used to slip through in formats Twilio rejects. Tap-to-call links in the app also handle international numbers correctly now, and unparseable values render as plain text instead of as a broken tel: link with placeholder text.

Quilia Directory: All Provider Pages Now Visible to Google portal

The directory sitemap was silently capping out at the first 1,000 providers, so Google could only see a fraction of the listings. Every provider page is now in the sitemap, and the breadcrumb data on provider pages is valid again. Google can now index the full directory.

Reliability and Stability Fixes

  • Sign-up loads again portal: a missing default on the sign-up form was tripping the password-match check before the form even mounted. Sign-up renders cleanly.
  • Dashboard no longer flickers on first paint portal: the chart now reserves its space and the user avatar renders deterministically, so you stop seeing a flash of broken layout when the dashboard loads.
  • Appointments: editing the Treatment tab no longer crashes the dialog portal: a legacy item in the treatment-type dropdown was crashing the new picker. Gone.
  • Invite SMS now reports every recipient portal: inviting a long list of clients used to silently swallow some failures, so you'd never see "couldn't reach X." Every recipient now shows a clear success or failure on screen.
  • Slower iPhones no longer beachball on heavy screens app: a handful of asset and document flows were doing too much work on the main thread. That work now runs in the background.
  • Mobile uploads survive flaky networks app: scanned documents now flow through the same retry-and-resume pipeline as picker uploads, Android uploads recover correctly when a chunk has already landed, and files picked on Android are staged so a cache eviction mid-upload no longer strands the transfer.
  • People records show their providers again app: a recent schema change had broken the join, so people records were rendering with empty provider lists. Fixed.
  • Cloudflare 403s on the extension browser extension: an outbound tracing header was getting bot-scored and eventually 403'd by Cloudflare, which silently broke some Supabase calls. Same defensive fix already shipped on the app and portal.

Privacy and Security portal

  • Sign-in and password reset no longer reveal whether an email has an account: both flows used to behave differently for a real user vs. a stranger, which made it possible to probe whether a given email had a portal account. They now look identical from the outside.