Wednesday, April 22, 2026
Quilia Directory Goes Live
The public Quilia Directory is live at directory.quilia.com — a free, claimable listing for every service provider who shows up in a personal-injury case. Claimed providers get a Google-Business-style editor for their locations, hours, and services, a verified view of the patients referencing them across firms, and first-class ranking in search. This release also extends the compose-message variable picker to phase message templates and brings Salesforce and Smokeball onto the same shared upload runner that Clio and Filevine use.
The Public Quilia Directory portal
Every medical, legal, expert, and vendor provider referenced on a Quilia case now has a public profile at directory.quilia.com/p/[id]. Profiles are browsable at /directory and paginated by state at /directory/state/[state], with JSON-LD, sitemaps, and canonical URLs so the long-tail "[specialty] in [city]" and "[provider name]" queries find the right page.

- 24,903 providers across all 50 states at launch: populated from the canonical provider data your firms have already added to cases, deduped to one listing per real practice
- Browsable by state: every state gets its own page (
/directory/state/CA,/directory/state/TX, etc.) with 30 results per page and a full footer of sibling states for crawlability - Claimed providers rank first: search and browse surfaces put verified listings above unclaimed ones

Claim Your Profile portal
Every unclaimed profile is a conversion surface. Providers arrive via a tokenized claim link (or by searching for themselves and hitting "Is this your practice?"), and the claim flow is free, two minutes, no credit card.

- Tokenized claim links: signed links land the provider on a pre-filled claim page showing what Quilia already has on file (name, specialty, address, phone)
- "Missing from this listing": the unclaimed profile calls out exactly which fields (street address, phone, website, hours) are empty, so the provider knows what they'll add when they claim
- Free forever: no ads, no lead fees, no pay-to-rank
Listing Editor portal
Once claimed, the provider gets a dashboard with a Google-Business-style editor for the fields that show up on their public profile.
- Locations, one row per row: each location has its own street address, phone, website, and weekly hours grid. Virtual-only practices check a single toggle
- Practice contact: public email and an "accepting new patients" flag that surfaces on the profile
- Completeness nudge: the editor calls out missing specialty, hours, and phone at the top so providers know what to finish
Verified Patient View portal
The big reason providers claim: a cross-firm view of every Quilia patient who has listed them on a case. Patient identity is redacted behind initials + the last-4 of the phone number until the provider types the patient's full phone to verify — so the view works as a provider's own reference list, not a firm-neutral patient database.
- Initials + last-4 before reveal: unverified rows show the patient's initials in a chip, a DOB masked as
••/••/••••, and the phone as••• ••• 1234 - Per-row Verify unlock: clicking Verify opens an inline full-phone input; a match flips the row to the green Verified state with the name, DOB, and firm visible
- Pending queue for new adds: patients the provider adds manually (waiting for their firm to confirm) show in an amber "Pending firm" state until the firm accepts them
Demand-Side Blind by Design
Whether a provider is claimed or not, public and claimed-provider pages never expose patient counts per case or which firms are sending referrals. A provider can see their patients and know their firms; they cannot infer another practice's book of business from public pages. That holds across the browse grid, state pages, public profile pages, and the Claim CTA.
Variables in Phase Messages portal
The same variable picker you already use in the compose editor now works in phase message templates. The seven tokens — {{client_first_name}}, {{client_last_name}}, {{client_full_name}}, {{sender_first_name}}, {{sender_last_name}}, {{sender_full_name}}, and {{firm_name}} — render as pink pills while you edit and resolve per-recipient on send.
- Variables button in the phase editor footer: same picker, same tokens, same render — just next to Attach Files
- Send-side behavior already matched: the resolver already handled phase messages (including the org-name fallback when there is no sender), so this is a UI-only rollout with no migration of existing templates
Salesforce and Smokeball Joined the Shared Upload Runner portal
Last week's release brought MyCase, CasePeer, Neos, and Litify onto one-task-per-file document uploads so a single slow or problematic file never replays a whole batch. This release completes the rollout by porting the remaining two CMS targets — Salesforce and Smokeball — to the same shared runner. Every CMS that Quilia uploads to now isolates failures to the individual file, and your run summaries report per-asset status instead of collapsing everything into a single "succeeded/failed" verdict.
More Reliable Chat Translations portal
Chat-translation output is now validated against a strict schema on every response, so silent drift from upstream AI-provider format changes can no longer slip through as an empty translation or a null value. Either a translation comes back correctly or a real error surfaces — no more untranslated messages sitting in chat with nothing to explain why. The pipeline also moved from a Supabase edge function to a portal-hosted helper, so failures now land in the same error tracking the rest of the portal uses.
Bugs and Improvements portal
- Directory stats resolve reliably: a database grant issue that could prevent the public directory stat counts (providers / cities / states) from loading is fixed
- Integration type backfill: every integration record now carries a non-null
integration_type, closing a small gap where some rows had no type and could fall out of queries - Build-efficiency pass: Vercel builds now skip work unaffected by a commit via a shared ignored-build-step script, with a
[force-build]commit-message escape hatch when you need to override
