Bug Fixes
Three critical reliability fixes in project creation, estimates, and photo sharing.
Project creation now shows fixable errors. When a client's saved business address was missing structured parts (street, city, state), the form would reject it with a generic error and no way to fix it. Now the error message appears on the address field, and duplicate project numbers get a friendly "already in use" message instead of a silent failure.
Estimate/inventory tab no longer freezes on slow Trigger.dev. The phase loader's realtime-token mint had no timeout—if Trigger.dev was slow or unreachable, the entire tab hung on a loading skeleton with no recovery. Now the mint times out after 2.5 seconds and degrades gracefully; the UI falls back to polling, keeping the tab responsive.
Large photo selections can now be shared and previewed. Sharing or previewing more than ~64 photos would silently fail due to URL length limits. Both now persist the photo selection server-side (PhotoShareDraft table) and reference it by token instead, supporting selections up to 500 photos.