What's new

We ship constantly. Here's what's recent — in reverse chronological order.

  1. July 8, 2026

    Security

    Security: your email, phone, and calendar link are now private to you

    Any signed-in user could previously read another attorney’s email, phone, and iCal token straight off their profile. The iCal token doubled as the key to that attorney’s public calendar feed, so this amounted to a case-data harvest. Both now live in owner/admin-only tables and are no longer readable by other users.

  2. Security

    Posting a coverage request now requires a verified bar card

    Previously only claiming a request required an admin-verified bar credential; posting one needed just an account. Both sides now hold to the same standard.

  3. Improvement

    Express SMS consent checkbox added to signup

    Signup now has the same SMS opt-in checkbox and consent language previously available only in Settings, so carrier and TCPA opt-in is verifiable before you ever log in.

  4. Improvement

    Admins are notified when a credential needs review

    Uploading a bar card, insurance certificate, or background check now alerts every admin right away instead of waiting for someone to check the queue.

  5. Security

    Security: admin self-promotion bug closed (both instances), firm-owner and review RLS gaps fixed

    A dead permission check let a user set their own account to admin; found live, fixed in the two places it existed. Also fixes a gap that let an uninvolved user post a review on someone else’s hearing, and one that blocked a firm owner from reading their own firm.

  6. June 16, 2026

    Fix

    Fix: /api/stripe/connect surfaces the real Stripe error instead of an opaque 500

    Connect onboarding failures now return the actual Stripe error message and log to Sentry, instead of a generic 500. Found during live-mode Connect activation testing.

  7. June 14, 2026

    New

    Blog at /blog, powered by headless WordPress

    Adds a render layer at /blog and /blog/[slug] that pulls posts from a WordPress REST API. Shows a "coming soon" state until an operator connects a WordPress instance — no WordPress site is live yet.

  8. Fix

    Fix: ethics overclaims on attorney city/state pages

    Corrects overstated verification and outcome language on /attorneys-in/[slug] flagged in an ethics review. Copy now matches what the platform actually attests to.

  9. New

    Programmatic Arizona city coverage pages

    Adds /court-coverage/arizona plus 101 individual city pages, each built from real court data with jurisdiction-specific stats and non-testimonial copy. Extends the SEO surface beyond the existing attorneys-in metro pages.

  10. Improvement

    CI: dedicated RLS integration job enforces policy suite on every PR

    A new rls-integration GitHub Actions job runs the RLS policy suite against the test Supabase project on every pull request. Conditional on three repo secrets being present (test DB URL + service-role key). Keeps RLS regressions from reaching main.

  11. Security

    RLS integration harness: all 4 policy assertions pass against live test DB

    The RLS test harness at src/lib/rls.integration.test.ts now executes against a provisioned test Supabase project instead of skipping. Four policy assertions confirmed passing: app_config deny-all for authenticated users, cross-user dispute block, cross-user request_documents block, and cross-user coverage request read block.

  12. Fix

    Fix: court pages no longer render "null" for missing city/county; storage + audit hardening

    Court directory pages now guard null city/county values before rendering and carry a corrected SEO title. Migration 091 adds a 25 MB size limit and MIME allowlist to the request-documents storage bucket. The admin refund route now calls writeAuditLog(). 69 Playwright stress specs added under e2e/stress/ covering the court directory.

  13. June 13, 2026

    Improvement

    Coverage detail: lifecycle predicates replace ad-hoc state checks

    Action gates on the coverage detail page (claim, confirm, cancel, complete) now route through the tested predicates in coverage-lifecycle.ts instead of duplicated inline conditions. Behavior is unchanged; correctness is now enforced by the existing predicate test suite.

  14. Security

    Security: verify-email rate limit, admin CSV credential denylist, DarkModeScript XSS guard

    Adds a per-IP rate limit on /api/auth/verify-email. Admin user-export CSV now strips credential columns (hashed_password, totp_secret, backup_codes) from the download. DarkModeScript inlines theme preference via JSON.stringify rather than direct string interpolation, closing a stored-XSS vector.

  15. Improvement

    Dev tooling: test migration target + one-command schema clone

    apply-migration.mjs now accepts a test target alongside prod and staging. apply-all-migrations.mjs runs the full migration sequence against a target in one command — intended for spinning up a fresh test database.

  16. Security

    Security: admin moderation DELETE policies, referral_events guards, push + export rate limits

    Migration 090 adds RLS DELETE policies on reviews and messages for admin moderation routes and tightens referral_events INSERT to the authenticated user only. Adds rate limits on /api/push/subscribe and /api/user/export-data. Admin health page now masks the Twilio account number in the status display. RLS integration test harness added (skips until a dedicated test Supabase project is provisioned).

  17. Security

    Security: Stripe route rate limits, admin export audit log, iCal service client, +81 tests

    Rate limits added to /api/stripe/payment, /api/stripe/transfer, /api/stripe/refund, and /api/admin/export. Admin export now calls writeAuditLog() on every download. iCal feed migrated to the canonical createServiceClient() helper. 81 critical-path tests added, bringing the suite to 292 tests across 24-25 files.

  18. Fix

    Signup safety net + app_config RLS lockdown

    Migration 089 hardens the handle_new_user trigger so a failed profile insert is logged to a new signup_errors table rather than surfacing a 500 to the user. Also canonicalizes app_config RLS so only service-role can read/write it — closing a gap where authenticated users could read internal config keys.

  19. Security

    Security: authorization fix on disputes + request_documents

    Migration 088 drops two prod-only permissive RLS policies on disputes and request_documents that allowed any authenticated user to file a dispute or attach documents to any coverage request, not just their own. All access is now correctly scoped to the parties on the coverage request.

  20. Improvement

    Posting gate: client-consent attestation on /coverage/new + ethics copy corrections

    Attorneys must now attest to limited-scope-representation client consent before a coverage request is accepted — satisfying the TCPA/ABA Model Rules disclosure requirement at the point of posting. Landing and privacy pages corrected per the ethics review: removed a false AI-anonymization claim and overstated bar-verification language.

  21. Improvement

    Landing page: legal-broadsheet editorial redesign

    Replaces the prior landing page with a legal-broadsheet editorial aesthetic — Fraunces serif display type paired with Hanken Grotesk, a new neutral palette, and a restructured above-the-fold layout.

  22. June 12, 2026

    Security

    Security: OAuth 2FA gate, orphaned route removal, service-role consolidation

    Closes the OAuth 2FA bypass from the 2026-06-09 audit: /auth/callback now withholds session cookies for TOTP-enrolled accounts and routes through a new /api/auth/oauth-totp challenge before issuing a session. Deletes the orphaned /api/referrals/attach and /api/stripe/subscription routes (dead code from PRs #197 and #199 with no rate limiting). Consolidates five inline service-role client constructions onto the canonical createServiceClient() helper so future hardening applies everywhere.

  23. New

    Claim flow: bar verification + jurisdiction attestation

    You can now only claim a coverage request once an admin has verified your bar credential, and the conflict-check step asks you to attest that you are licensed in the court’s state. Closes a UPL / Rule 5.5 gap and makes the "bar-verified attorneys" promise literally true.

  24. New

    Billing: in-escrow funds + Completed Hearings tab

    Your billing page now shows money held in escrow (charged but not yet released), not just settled payouts — so both sides can see pending funds. A new Completed Hearings tab collects every finished appearance in one place.

  25. New

    Pay a confirmed request directly

    A standalone Pay button now lets you complete payment on a confirmed request from its detail page or the list — useful if a payment didn’t go through the first time.

  26. Fix

    Payout transfer fix

    Fixed a bug where releasing payment to the covering attorney could fail, leaving a completed hearing unpaid. Payouts now transfer reliably on completion.

  27. Improvement

    SMS notifications are now express opt-in

    SMS notifications are off by default and require you to turn them on in Settings, where the consent terms (message frequency, rates, STOP/HELP) are shown. Brings SMS in line with TCPA and carrier (A2P 10DLC) requirements.

  28. Improvement

    Clearer messages header

    A conversation now shows the attorney you’re talking to on top, with the case name and number on a smaller line below — case details stay hidden until identity is revealed.

  29. Fix

    Honest copy + on-brand alerts

    Corrected several marketing and product copy strings flagged by an ABA Model Rules review (including overstated verification language), and error/success toasts now use the CoverageCobra brand colors.

  30. May 9, 2026

    Security

    Security audit round 3, UI polish, infra hardening (PRs #144–#149)

    Enforces conflict checks on claim_coverage_request (previously bypassable). Adds a master ai_features_enabled kill-switch across all /api/ai/* routes. Service worker now blocks caching of authenticated pages and guards notification-click to same-origin URLs only; deploy-hash cache busting replaces the manual version-string bump. Adds messages.sender_id index and a max_offered_rate_cents cap. GitHub CI workflow added (required status check, branch protection enforced). Closed 11 deferred UI stress findings: 3 modal Esc handlers, 5 dark-mode component fixes, global :focus-visible rule, time grid responsive fix, sidebar auto-close on route change. GitHub repo moved to CoverageCobraAZ org. Migrations 064, 065, 067 applied to staging and production. Migration 066 (SMS trigger CRON_SECRET via custom GUC) remains deferred pending Supabase Vault availability.

  31. Security

    Sentry production wiring + post-audit hardening

    Closes 8 of 9 findings from the 2026-05-09 security sweep: admin payout compare-and-swap, credentials bucket server-side constraints, two RLS policy gaps (migration 065), SMS fanout migrated to CRON_SECRET, subscription double-billing guard, Sentry beforeSend log noise removed, JSON-LD escape helper applied to public attorney and court pages. Sentry is now verified working in production for both captureMessage and unhandled-throw paths. Migration 066 (SMS DB trigger migrated to CRON_SECRET via custom GUC) is deferred — Supabase hosted blocks ALTER DATABASE for custom GUC parameters; revisit with Supabase Vault post-launch.

  32. May 8, 2026

    Security

    Security hardening pass

    Closes the Critical / High findings from the 2026-05-08 launch-readiness audit: tightened email + SMS send routes against phishing abuse, moved the service-role key out of the database, added Stripe idempotency keys to checkout/Connect/subscription flows, capped firm bulk-import row counts, MIME-validated audio uploads to AI transcribe, added audit-log entries on admin credential views, locked down the avatars storage bucket, and patched the high-severity axios CVE.

  33. May 4, 2026

    Fix

    Inquiries: realtime updates and proper notifications

    Inquiry threads now refresh in real time as messages come in — no more page reloads. The requester is notified when an attorney inquires, and the inquirer is notified when the requester replies.

  34. May 3, 2026

    Improvement

    Faster dashboard, no more 503s on first load

    Dashboard stats and onboarding checks now use Postgres estimated counts instead of full COUNT(*) scans, eliminating the 503s some users hit on first page load.

  35. May 2, 2026

    Fix

    Fix: infinite request loop on coverage browse

    A regression caused the coverage browse page to fire 100+ Supabase queries per page load. Fixed the dependency stability bug in useCoverageRequests so the page now does exactly one fetch per filter change.

  36. May 1, 2026

    Fix

    Fix: phantom logouts on internal navigation

    Some attorneys were being unexpectedly signed out when navigating between pages. The middleware now preserves Supabase session cookies on redirect responses, and AuthContext + the in-app links no longer force full reloads that re-armed the auto-signout flag.

  37. April 30, 2026

    Fix

    Bug-fix sweep from tester walkthrough

    Closed the Critical and High issues found during the first internal tester walkthrough — including hardened cookie handling, fixed signup edge cases, and addressed several null-safety crashes on coverage detail pages.

  38. April 17, 2026

    New

    Push notifications on phone and desktop

    Subscribe from Settings → Notifications or the in-app prompt. Get instant alerts for new coverage requests, claims, and messages — even when CoverageCobra is closed. Works on Chrome, Edge, Firefox, and iOS 16.4+ Safari.

  39. New

    Password reset + 3-step onboarding wizard

    New /forgot-password and /reset-password pages so users can recover their accounts. New users are walked through a 3-step profile wizard (basic info → practice areas → rate & bio) the first time they sign in.

  40. April 16, 2026

    New

    Runtime platform settings (no redeploys)

    New Settings tab in /admin lets admins tune platform fee, auto-match radius, min hourly rate, referral credit, and toggle welcome drips, SMS, AI features, signups, and maintenance mode — all without a redeploy. A site-wide amber banner appears when maintenance mode is on.

  41. New

    Admin ops suite: SMS preview, manual payouts, user detail, reports

    Four new admin capabilities: SMS template preview + send-test (Twilio), manual Stripe payout button for stuck transfers, a rich per-user detail page at /admin/users/[id], and a reports moderation queue for users flagging each other.

  42. New

    Report an attorney

    Any attorney profile now has a "Report" button. File a report with a category (spam, harassment, fraud, no-show, etc.) — admins see it in their moderation queue and can resolve or dismiss with notes.

  43. New

    Admin email preview + test send

    Admins can now preview every notification email template (welcome drips, request updates, payments, firm invitations) with a live iframe preview and send a test to their own inbox before anything goes to real users.

  44. New

    Verified trust badges on attorney profiles

    Once an admin verifies your bar number, malpractice insurance, or background check, a green "Verified" badge shows on your public profile, internal profile page, and search results. Expired credentials show an amber warning so you know to re-upload.

  45. New

    Admin credential review queue

    Admins can now review uploaded bar cards, insurance certificates, and background checks with one-click verify or remove. Verified insurance + background-check uploads automatically flip the attorney’s trust flags.

  46. New

    Admin: System Health tab, growth chart, user actions

    Admins can now verify all integration env vars (Stripe, Resend, Twilio, Anthropic) at a glance, see a 30-day growth chart for signups / requests / completed / revenue, and promote/demote admins or suspend users inline.

  47. New

    Boost open requests to urgent

    If your request has been sitting without a claim, one click escalates it to urgent priority. Covering attorneys in your area get notified immediately.

  48. New

    Export hearings to CSV

    Download a 19-column CSV of your year’s completed hearings from /hearings or the tax report — receipt URLs included. Ready for Excel, your CPA, or reimbursement workflows.

  49. New

    Urgent requests right on your dashboard

    A new dashboard card surfaces up to 5 open urgent/high-priority requests that match your practice areas. Never miss an opportunity.

  50. Improvement

    Filter your notifications by category

    The notifications dropdown now has filter tabs — All / Unread / Messages / Requests / Payments — with per-tab counts. Triage faster.

  51. New

    Jump to anywhere with ⌘K

    Hit Cmd+K (or Ctrl+K on Windows) from any page to fuzzy-search across every section and quick action. Navigation at your fingertips.

  52. New

    Always-visible availability toggle

    A smart status pill in the top bar shows whether you are checked in, broadcasting availability, or offline — one click to toggle.

  53. Improvement

    Search-engine-ready

    Shipped a full sitemap.xml + robots.txt so Google can now discover public attorney profiles, city landing pages, and the court directory.

  54. New

    Duplicate a past coverage request

    For repeat cases, click "Duplicate Request" on any completed hearing. The form prefills everything except the date — just pick a new time and post.

  55. Fix

    Templates now actually work

    Clicking "Use" on a case template now prefills the new coverage request form with your saved defaults. Previously a silent no-op.

  56. New

    Dashboard: Today’s Schedule

    Any hearings happening today surface at the top of the dashboard with a live countdown, directions to court, and one-click check-in.

  57. New

    12-month earnings chart + top courts

    New dashboard cards show your 12-month earnings trend and the five courts where you earn the most. Instant feedback on how the platform’s working for you.

  58. New

    Printable receipts for completed hearings

    Every completed coverage request now has a receipt at /receipts/[id] — logo, parties, hearing details, itemized charges, Stripe reference. Ctrl+P to save as PDF.

  59. New

    AI weekly digest on the dashboard

    Generate an AI-written recap of your last 7 days — coverages completed, earnings, upcoming hearings, and one concrete next step.

  60. Improvement

    Real brand logo, dark + light modes

    Shipped the final shield logo across the app, refined the dark mode theme, and added a one-click toggle in the sidebar.

  61. Fix

    Referral links that actually attribute

    Sign up with a `?ref=` link and we now automatically credit the referrer when you complete your first hearing — plus a clear how-it-works panel on the referrals page.

  62. Security

    Security + stability audit

    Shipped 17 fixes: timing-safe auth comparisons, XSS-safe email templates, query hardening against RLS edge cases, and stuck-loading guards across ~15 data hooks.

Have feedback or a feature request? support@coveragecobra.com