Features
- add admin onboarding list page
- add admin onboarding loading skeleton
- add admin onboarding table with search and status filters
- add Onboarding nav item to admin sidebar
- add React Query hook for admin onboarding list
- add super-admin onboarding list API endpoint
- add Documents and Invoices tabs to business detail page
- add documents API route for business detail page
- add Documents tab component with search and client/firm badges
- add invoices API route for business detail page
- add Invoices tab component with status badges and view action
- add useBusinessDocuments hook
- add useBusinessInvoices hook
- add invoice cache tags and invalidation methods
- update pruny to version 1.38.0
- update pruny to version 1.38.0
- add expectedCount to create and update validation schemas
- add onboarding invite email template
- add AES-256-GCM encryption utility for portal credentials
- add branded footer with firm contact info
- add branded sticky header for firm tenant pages
- add client onboarding page with token validation and OTP check
- add client onboarding portal view under firm tenant route
- add dynamic service worker for firm subdomain
- add dynamic web app manifest for firm subdomain
- add explicit OG image reference to firm profile metadata
- add FirmProvider context and useFirm hook for tenant branding
- add generateMetadata with firm branding to layout
- add multi-tenant layout with theme, header, and footer
- hide footer on onboarding client portal routes
- enhance styling for label and description elements
- refine styling for input field and form item
- add invoices dashboard loading skeleton
- add invoices dashboard page with stats, filters, and actions
- add single invoice detail page with line items, client info, and actions
- link list page View action to detail page instead of print view
- restore GET handler for single invoice detail API
- restore useInvoice hook for single invoice detail page
- add daily invoice processor cron job
- add generateInvoicePdf function to html2pdf utility
- add invoice CRUD React Query hooks
- add invoice detail and update API route
- add invoice email send API route
- add invoice list API route with stats
- add invoice schedule computation utility
- add invoice settings API route
- add invoice settings React Query hooks
- add invoice-processor cron job to vercel config
- add print-friendly invoice view page for PDF generation
- add step 4 invoicing UI component with billing config and schedule preview
- generate invoice records on onboarding completion
- send WhatsApp notifications alongside email for invoice sent and overdue
- add onboarding cache tags and invalidation methods
- add ONBOARDING module to registry with ClipboardCheck icon
- add SIDEBAR_ONBOARDING tour step ID
- add tenant-aware URL builder for subdomain and path-based routing
- add clientViewCount, clientLastViewedAt, clientOtpVerified to Onboarding
- add expectedCount column to onboarding_document_template table
- add invoice WhatsApp template types to enum
- add INVOICES value to EmployeeModule enum
- add invoicing tables migration
- add location columns to Lead table
- add INVOICES to module registry with Receipt icon
- hide navbar on onboarding client portal routes
- gate portal data behind OTP verification, track client views
- require OTP verification before contact creation
- require OTP verification before document upload
- add useBulkAddDocTemplates hook and expectedCount to interfaces
- add send-otp API for client portal authentication
- add verify-otp API with OTP model integration
- accept allowedExtensions in template create/update API
- add 4-step wizard container with nuqs step navigation
- add client portal loading skeleton
- add client portal view with doc upload and contacts
- add complete onboarding endpoint
- add document templates CRUD API
- add document upload and delete API with S3
- add dynamic favicon and OG image metadata for client portal page
- add file type multi-select to custom document form
- add horizontal 4-step progress indicator
- add Invoicing step to 5-step wizard indicator
- add list and create API endpoints
- add list page loading skeleton
- add onboarding list page with stats, filters, and SVG empty state
- add public client contact creation endpoint
- add public client document upload endpoint
- add public client portal page with token validation
- add public client portal token validation endpoint
- add React Query hooks for document templates and uploads
- add React Query hooks for onboarding CRUD
- add React Query hooks for registration entries
- add React Query hooks for team assignments
- add registration entries CRUD API
- add send-to-client portal link dialog
- add send-to-client token generation endpoint
- add single onboarding GET, PATCH, DELETE endpoints
- add step 1 registration entries form
- add step 2 document templates and file upload
- add step 3 team assignment with RM and executor/reviewer
- add step 4 summary and complete button
- add team assignment CRUD API
- add wizard header with business and proposal info
- add wizard loading skeleton
- decrypt portal credentials in GET response
- disable Complete Onboarding until all required documents are uploaded
- enforce allowed file extensions on client upload slots
- generate subdomain-based portal URLs and validate firm profile
- pass allowedExtensions to client portal
- pass expectedCount to client portal document templates
- redesign documents with predefined store, count picker, and direct delete
- redesign registrations as predefined toggle checklist with portal credentials
- redesign registrations with selection dialog, credential modes, and lazy save button
- redesign step 4 with 3-phase flow, client activity tracking, and send-to-client CTA
- send email and WhatsApp notifications when portal link is sent to client
- send WhatsApp completion notification when onboarding is marked complete
- show Client/Firm badge on uploaded documents in step 2
- update wizard page to 5 steps with invoicing at step 4
- validate file extension against template allowedExtensions on upload
- add allowedExtensions field to OnboardingDocumentTemplate
- migration for allowedExtensions on document templates
- add onboarding relation to ProposalWithRelations type
- add Start Onboarding and View Onboarding actions to proposal dropdown
- include onboarding relation in proposals API response
- add subdomain-based multi-tenant routing for firm pages
- redirect /firm/[slug] paths on main domain to tenant subdomain
- add useBulkAddRegistrations hook for multi-select dialog
- encrypt portal credentials on save and decrypt on read
- add address, lat, lng fields to Lead model for location persistence
- add client onboarding migration
- add client onboarding models, enums, and relations
- add client portal tracking fields and CLIENT_ONBOARDING OTP type
- add expectedCount field to OnboardingDocumentTemplate for multi-copy documents
- add INVOICE_SENT and INVOICE_OVERDUE to WhatsAppTemplateType enum
- add Invoice, InvoiceLineItem, InvoiceSettings models with InvoiceStatus enum
- add INVOICES to EmployeeModule enum
- support bun run lint --fix passthrough via turbo
- add Invoices nav item after Onboarding
- add Onboarding nav item after Proposals
- implement document upload functionality with detail schema and dialog
- add INVOICE_SENT and INVOICE_OVERDUE template types and data interfaces
- add onboarding invite and completed template types
- add sendInvoiceSent and sendInvoiceOverdue methods
- add sendOnboardingInvite and sendOnboardingCompleted methods
Bug Fixes
- fix Tailwind classnames order in onboarding loading skeleton
- use generic title, pass value/onValueChange to tab switcher, remove unused imports
- fix broken team link to use settings tab param
- fix broken services link to use correct route
- link Powered by PracticeStacks to website instead of subdomain root
- remove owner personal contact details from public tenant page
- use stable path-based href to fix hydration mismatch in header
- hide main site footer on firm subdomain pages
- remove unused useInvoice and InvoiceDetail exports
- pass package billingType and billingCycle to schedule builder on completion
- respect package billingType for one-time vs recurring schedule
- accept address, lat, lng in update schema so location persists
- add overflow-hidden to email template dialog to prevent text overflow
- populate assignedTo and location fields when editing existing lead
- stop exposing owner email and phone in public business profile query
- make encrypt and decrypt internal (remove unused exports)
- remove unused AdminBlogTag and BlogMetaGeneration exports
- remove unused AlertDialogOverlay and AlertDialogPortal exports
- remove unused DefaultLeadTemplate export
- remove unused FirmBrand export
- remove unused sidebar components (SidebarTrigger, SidebarRail, SidebarMenuSub and variants)
- remove unused tour barrel re-exports
- remove unused useDeleteOnboarding export
- remove unused Users import from step-team
- replace non-null assertion with null guard in firm preview button
- replace non-null assertion with null guard in portal URL open
- hide main site navbar on firm subdomain pages
- add firmSlug field to OnboardingDetail interface
- add firmSlug to GET response using creator's business instead of client's
- fallback to legacy URL when business profileSlug is missing
- fix Tailwind classnames order in step-team component
- include billingType and billingCycle in package select
- legacy redirect uses firm's slug instead of client's business slug
- match masked phone by last 4 digits for OTP verification
- prevent portal URL overflow in send dialog with min-w-0
- remove duplicate opacity prop on SVG rect element
- replace button wrapping Checkbox with div to fix nested button hydration error
- replace button wrapping Checkbox with div to fix nested button hydration error
- replace form.watch with useWatch for React Compiler compatibility
- restructure portal URL display to prevent overflow in send dialog
- return primary masked phone in send-otp response
- use firm's profileSlug for portal URL instead of client's business slug
- use firmSlug for portal URL in step-complete instead of client business slug
- validate slug against firm's business not client's in tenant portal page
- fix useMemo dependency array for React Compiler compatibility
- simplify signature label check to only require signedAt
- allow manifest.json through proxy for subdomain rewriting
- add min-w-0 to business name container for proper truncation
- make 4-column grid responsive with sm breakpoint
- add justify-start to popover tab items for consistent alignment
- add button URL component for onboarding_invite template
- rename invoice template names to avoid conflict with existing template
- revert invoice_overdue template name (already submitted for review)
