Ominvo beta launches July 23, 2026 — only 10 spots remain Join the waitlist →
All posts
Building OminvoDay 38

Day 38: Annual billing wired, AI Replies page, and a copy audit

June 9, 20264 min read

Three things shipped today: annual billing is now fully wired end to end, the second Product dropdown page is live, and a copy audit caught something that should have been caught earlier.

Annual billing checkout — actually wired now

Yesterday's Day 37 post was honest about it: the annual billing toggle was UI only. The toggle existed, the prices showed correctly, but clicking "Get Chad" on annual would have sent you to the same monthly checkout as before. That gap closed today.

The checkout API now accepts a billingInterval parameter — 'monthly' or 'annual' — alongside the existing tier parameter. There's a 2×2 price ID map internally: Chad monthly, Chad annual, GigaChad monthly, GigaChad annual. The pricing page CTA buttons now pass the current toggle state through to the API, so what you see is what you get charged for.

There was also a webhook bug worth documenting. The Stripe webhook handler had a lookup table that mapped price IDs to subscription tiers — but it only had the two monthly price IDs. If someone had paid for GigaChad annual, the webhook would have looked up the annual price ID, found nothing, and defaulted to 'chad'. Two lines added to the lookup table. Bug closed before it could cause a real problem.

The checkout buttons also got a UX improvement as part of this: they're no longer plain links. They're proper button elements with a loading state — click "Get Chad (Annual)" and the button shows "Redirecting…" and disables while the API call goes out. Small thing, but it removes the dead moment where nothing appears to happen.

Both annual price IDs are in test mode for now. At live-mode cutover (~July 23), the four price ID env vars get swapped in Vercel — zero code changes needed. The code is identical for test and live.

See the pricing page if you want to check the toggle yourself.

AI Replies feature page

The second Product dropdown item now has a real destination: /features/ai-replies.

Same structure as the Instant Alerts page — hero, how it works, six feature tiles, tier callout, final CTA. The content angle is the blank page problem. Most business owners know they should reply to reviews. The friction isn't motivation, it's the blank reply box at 11pm after a long shift when someone left a 2-star review about the wait time.

The page makes the case that AI doesn't replace the owner's voice — it removes the standing-start problem. A draft is waiting when you open the review. You edit it, approve it, or ignore it. Nothing posts automatically. That last point gets its own tile because it's the thing people worry about most.

Noob gets 5 AI reply drafts per month — enough to actually experience the feature before deciding whether to upgrade. Chad and GigaChad get unlimited. The tier callout on the page makes that explicit: "5 replies free. Unlimited from $24/mo."

Check it at /features/ai-replies.

Copy audit — removing brand name references

A previous conversation flagged the rule: user-facing copy should say "AI" not reference the underlying model provider. Running a search across the codebase found three violations — all in marketing components on the homepage.

Each one was a variant of the same line: "[Brand] AI reads the review, understands the context, and drafts a reply." Fixed to: "AI reads the review, understands the context, and drafts a reply." Three files, three one-line changes, done.

The legal pages (privacy policy, terms of service) still reference the provider correctly — those are disclosures, not marketing copy, and they should be accurate. The API model string in the code is obviously untouched. Only user-facing marketing copy was in scope.

It's a small thing but the kind of thing that matters at launch. The product is Ominvo. The AI is the feature. The infrastructure behind it is not the story.


Day 38 of building in public. Full changelog at /changelog. Annual billing live on /pricing — toggle to Annual and the math works.

Written by

The founder of Ominvo

Building review management for single-location small businesses. Join the waitlist →