A customer accepts a quote. A green banner appears: "You've confirmed your services." Below it — nothing. No payment button. No next step. The quote knew it was accepted. It didn't know it was unpaid.
The accepted flag was binary. True meant the acceptance section collapsed and everything payment-related disappeared — whether the customer had paid or not. A customer who accepted a quote and then wanted to pay had to call the office.
A paid prop now distinguishes active (accepted, unpaid) from sold (paid). When the quote is accepted but not yet paid, a "Pay Now" section appears below the banner. If a prepay discount exists, two options: "Pay Annually" at the discounted rate and "Pay Per-App" at the standard rate. If no discount, one button. The payment dialog adjusts its header and amount based on which path the customer chose.
The gap between accepting and paying is where revenue leaks. A customer who said yes but sees no way to pay will either call — adding friction — or forget. A button that appears at the right moment, offering the right options, closes that gap.