Skip to main content

Thursday, April 23, 2026

Inline Composer Grows Up, Directory Gets Keyword URLs

By Andre Hammons
Contributors
Attorney Portal v2026.4.10

Portal 2026.4.10 finishes the inline messaging upgrade — the quick-send at the bottom of a case now loads templates, formats rich text, and inserts the same variable tokens the full composer uses. The Quilia Directory moves provider pages to keyword-rich /p/{state}/{city}/{slug} URLs with specialty-specific schema. "Case Journal" is now "Case Notes" across the whole portal. And a silent delivery ceiling on firms with more than 1,000 cases is fixed across every CMS.

Templates, Rich Text, and Variables in the Inline Composer portal

The inline composer — the one that sits at the bottom of a case in the Messages tab — now has the same three things the full composer does: Load Template, rich-text formatting, and variable tokens.

  • Load a template without leaving the case: the same template picker from the full composer is now inline. Pick a template, the subject and body fill in, you hit send. Attachments are always uploaded fresh per send, never carried over from the template.
  • Real rich text: bold, italic, ordered and unordered lists, headings, undo/redo. What you format is what the client reads — no more plain-text fallback from inline sends.
  • Variable tokens: {{client_first_name}}, {{sender_full_name}}, {{firm_name}}, and the rest of the set now work inline. Tokens render as pink pills while you edit and resolve per-recipient on send, matching the scheduled and template paths.
  • Rich rendering on mobile: messages sent from the inline composer now persist structured rich-text blocks, so your client's Quilia app renders the formatting you typed instead of falling back to plain text.
  • No more white-screens: a route-level error boundary catches composer failures and shows a recovery UI instead of blanking the page.

Three small inline-composer polish fixes landed with this: tighter paragraph spacing, template and variable pickers moved into the toolbar so the dialog's close button stops overlapping them, and the Load Template dialog is width-constrained instead of sprawling.

Quilia Directory — Keyword URLs, Sharded Sitemap, Specialty Schema portal

Last week launched the public directory at directory.quilia.com. This release is the SEO pass that makes it actually rankable.

  • Keyword-rich provider URLs: provider pages now live at /p/{state}/{city}/{name-slug} — for example, /p/CA/los-angeles/westside-chiropractic. Old /p/{uuid} links permanent-redirect to the canonical URL, so nothing you've shared breaks.
  • Sharded sitemap, served live: /sitemap.xml is now a sitemap index pointing to shards of 10,000 providers each, regenerated from live data on revalidate. Google and Bing can crawl the entire directory without stale build-time snapshots.
  • State and city breadcrumbs: every provider page now has Directory › State › City › Provider breadcrumbs — both as visible HTML and as structured data so Google can render the hierarchy in search results.
  • Specialty-aware schema.org types: chiropractors now emit Chiropractor, physical therapists emit PhysicalTherapy, hospitals emit Hospital, and physicians emit Physician with medicalSpecialty — not the generic MedicalBusiness fallback. When the provider's NPPES registration is known, registry URLs are included too. This is the difference between "generic medical listing" and "this is a chiropractor in Los Angeles" in the eyes of a search engine.
  • Real Open Graph cards: per-provider share cards were redrawn at 1,200×675 (Google's preferred 16:9) with the real Quilia wordmark and a "Directory" tag, replacing the gradient placeholder.
  • Path-based pagination: /directory and /directory/state/{CODE} now paginate at /directory/page/N so every page is a crawlable URL with a permanent place in the sitemap.

Cleaner Directory Data in the Background portal

Quilia's canonical provider records now keep themselves cleaner without anyone having to press a button.

  • NPPES enrichment: a new scheduled task enriches canonical providers with NPI numbers, specialty, and registry data from the national NPPES registry every six hours. Verified matches apply automatically; lower-confidence matches wait for the provider to resolve them through the claim-your-profile flow.
  • Smarter merges: when duplicate providers are merged, the surviving record now inherits the other row's non-empty fields (phone, email, website, specialty, address). You no longer lose a phone number because the other row had the address, or vice versa.
  • Auto-unlist for contactless rows: providers with no phone and no street address are now automatically hidden from the public directory. CMS imports can't silt the listings back up with unreachable rows.

"Case Journal" is now "Case Notes" portal

The inconsistent "Case Journal" / "journal entries" / "Notes" labels have been consolidated on Case Notes, with entries as the noun for what clients log. Every surface — the tab bar, empty-state copy, push notifications, the AI export header, the activity log, and the default case-type layouts — now uses the same language.

The route moved to /case-notes/. Bookmarks and shared links pointing at /case-journal/ permanent-redirect to the new path, so nothing breaks.

Rich Empty States Across Case Detail portal

Cases with no data in a section used to look broken. Now every case-detail table — Messages, Injuries, Repair Estimates, Damage Photos, Pain Scores, Treatment appointments — shows an illustrated empty state with a clear call to action. When a case is new, the page looks intentional instead of blank.

Legal Appointments: Optional End Time portal

The end time on a legal appointment — hearings, depositions, court dates — is no longer required. For "we have the start, we don't know how long" appointments, you can save without making a time up.

Bugs and Improvements portal

  • CMS feed delivery on large firms: fixed a silent ceiling that was dropping activity on cases ranked past the first 1,000 in any firm with more than 1,000 cases, across every CMS (SmartAdvocate, Clio, Filevine, MyCase, Neos, CasePeer, Salesforce, Smokeball).
  • CMS delivery history stays accurate across targeted runs: targeted and backfill runs no longer overwrite the prior run's delivery receipts.
  • Messages recipient picker disambiguates by case: if the same person appears on two cases, the global composer's recipient picker no longer collides them.
  • Treatment empty state: cases with no appointments now show an "Add Appointment" button instead of an empty panel.
  • Inline empty states have breathing room: empty-state cards no longer sit flush against the section header above.