Release · May 26, 2026
Phase 110 to prod. 153 commits, 17 migrations.
First production push of the Phase 110.x arc. Brings prod from ebff961 (May 16) up through 1415888. Live on app.jobsides.com.
NewWhat landed
- Bills + AP module. Record sub bills, link to sub-contracts or POs, track payments out with bank-clear tracking, run an Uncleared Payments report (AP + AR).
- Purchase orders. Full PO module — create, send, track against bills.
- Customer punch list on the share view. Customers can submit their own punch items from their project page once the job hits closing status.
- GC-side punch workflow.Assign each item to a sub, vendor, or internal team member, hit "Generate List" to email each assignee their own batch with a public check-off link they can use without logging in.
- Vendor / sub portal. Persistent per-contact bookmarkable link (
/vendor/[token]) where subs see all their sub-contracts, bills, payments, and punch list across every job with you. Share via email or copy/paste from the People page. - Per-contact work history.On every sub/vendor's People page, see every sub-contract they've ever had with you, grouped by job.
- Cross-module auto-numbering. Every bill, invoice, estimate, sub-contract, PO, change order, and contract gets an auto-assigned number (
BILL-2026-0001,CO-001, etc.). Configurable per doc type in Settings → Numbering (prefix, padding, year stamp, per-company vs per-project counter). - In-app feedback inbox. Floating Feedback button on every page. Pick Bug / Idea / Urgent, type a description; submission auto-captures the page + user + tenant and emails the admin instantly. Inbox lives at Admin queue → Feedback with status tracking and private notes.
- Admin queue. Unified staff console at
/adminwith tabs: Signups (approval queue) and Feedback. Scales as more admin tools land.
ImprovedWhat got better
- All transactional emails get the branded wrapper. Payment receipts, contract-signed confirmations, message replies — all render with your logo, signature, and accent color. No more raw plain-text in Gmail.
- Compact density across the app. Dashboard, Jobs index, and project detail pages all use tighter spacing — roughly 30-40% less vertical air, more on screen per scroll. Was prototyped as a Calm/Compact toggle; toggle deferred to a future release, Compact ships as the default.
- Bills section on every project page. Sub bills and POs roll up under each job alongside the existing Estimate, SOV, and Invoices sections.
- Project page sections are collapsible accordion — CF-style, per-project preference saved.
- Invoice edit page UX. Line descriptions collapse, amounts align with headers, edit fields actually work. AIA and notary toggles surface for invoices that need them.
- "Needs your attention" dashboard surface now also pulls customer-submitted punch items, not just tasks.
- Sub-contract status auto-advanceswhen bills get recorded against it — no more "Signed" rows that should be "In Progress."
FixedBugs squashed
- Email pipeline silently swallowing failures → now logs the reason and still doesn't break the user action that triggered it.
- Customer share view showing a phantom "Still to invoice" balance equal to the applied discount.
- Print pages showing different payment data than the web view — now uses a shared component.
- Voided invoices were included in per-job totals — now excluded.
- Dark-mode feedback modal had invisible text (broken design-token fallback).
- Bills, sub-contracts, POs, etc. were saving with no number when left blank — now auto-numbered.
- Prod DB was missing 5 markup-default columns from migration 0073 — backfilled during the push.
NextOn the list
- Bill PDF attachments (upload sub's invoice, pass through to customer invoice + share view)
- PO drag-to-reorder
- Lien release generation (closing-stage paperwork)
- User-facing Calm/Compact density picker
- Photo upload on punch check-off
