Founder notes from building Ominvo, field research from the small business review trenches, and tactical playbooks for owners who want better reviews without spending their evenings on Google.
Three skeletons shipped today — dashboard, reviews, settings. Why pre-launch is the right time to fix loading states, not later.
A one-time $79 deal that funds the next leg of growth. Here's the math, the caps, and why we think it's fair.
The billing toggle on our pricing page now shows a small globe rolling between Monthly and Annual. Here's the decision, the iterations, and what we shipped.
Shipped the Competitor Tracking feature page even though the GBP API isn't live yet, cleaned up two stale SOON badges, and expanded the FAQ from 27 to 62 questions across all seven categories. Also: the Day 46–52 frontmatter bug that was silently dropping posts from the blog index got fixed at the top of the session.
We don't refund Ominvo subscriptions. Not monthly, not annual, not partial periods. Here's the reasoning, the problem it creates, and the appeals system we built for the case where we get it wrong.
Today's plan was a full QA pass. Instead we fixed a duplicate dead-end in the footer and shipped a 3,000-word playbook on writing review replies that protect revenue, with industry-specific examples for all seven verticals Ominvo serves.
Risk levels, a Block tab in admin, Stripe-cancel-on-block, audit-logged unblocks, and a TOS amendment to make it all legal. Built for problems we don't have yet — because the day we do, we won't have time.
Two Day 51 ships: a real install button for Ominvo on Android and desktop, and a new page explaining why review generation is the GigaChad tier's actual differentiator.
Two Day 50 ships users will actually see: the site now works offline with a proper fallback page, and logged-in customers can submit testimonials for the first time.
Two Day 49 ships: the PWA manifest is now install-ready with a full icon set and home-screen metadata, and the /vs/reviewtrackers comparison page is live with the final CompetitorTabs tab unlocked.
We shipped the public review landing page — the destination behind every Ominvo QR code. Scan, tap, done.
The monthly report card email is live for GigaChad. Four numbers, once a month, delivered where business owners actually read things.
Most SaaS tools give you everything on the free tier and hope you forget to cancel. We didn't. Here's what Noob gets, what Chad unlocks, and why the gate is where it is.
We shipped QR code generation for GigaChad users, built a tabbed competitor section on the homepage, launched /vs/birdeye, and had a hard conversation about which /pricing promises were actually built.
Built the full team invite flow for GigaChad, watched it fail in production five different ways, and tracked the bug down to a Postgres trigger I forgot existed. Day 44.
Closed the last placeholder in the Product dropdown, told AI crawlers we exist, and got Google looking at ominvo.com for the first time. Shipping a feature isn't the same as making it discoverable. Today was about making sure the work of the past 41 days is actually findable.
Built the /how-it-works page from scratch — sticky sidebar, tier-by-tier dashboard mockups, feature comparison table, and honest tier gaps. Also bumped the framework version to close a batch of security advisories. Two very different kinds of work, both overdue.
Three rounds of production debugging to ship one intermediate page. The last bug was a stale localStorage token. Four commits total. ~60 days to launch.
Two silent bugs in the revenue API — hardcoded price IDs and annual subscriptions inflating MRR by 12x. Fixed both. Also shipped the analytics dashboard feature page, the longest one yet.
Shipped the MRR fix, the analytics dashboard feature page, and the /why-us comparison page. Also spent two hours building an MDX chart system that did not work and had to be reverted. Honest write-up of all of it.
Planned a clean annual billing end-to-end test. Found DKIM broken for 29 days and the in-app upgrade flow incomplete. Fixed both. Test passed.
Day 2 of the Help Center sprint. Six articles shipped across billing and reviews-and-replies — the two categories that either close or kill a paying customer. Plus a one-line fix that now sends every protected route back to where you were.
Wired the annual billing toggle on pricing, created Stripe price IDs in test mode, and shipped the first dedicated feature landing page — Instant Alerts.
Wired annual billing checkout end to end, shipped the AI Replies feature page, fixed a webhook bug, and audited all user-facing copy to remove brand name references.
Opened up /api/health to the public internet after thinking it through carefully, shipped a changelog page nobody needs yet, and wrote two blog posts in one day. Notes on pre-launch posture.
Four commits, most productive day so far. Closed the open-redirect hole, built the Help Center foundation, and logged three scope overrides — which is now part of the record.
A plain-English breakdown of every feature Ominvo ships, why each one exists, and which plan it lives on. No marketing fluff — just the product as it is.
Six commits. A real health monitoring system. The blog you're reading right now. And a token leak I caught, rotated, and logged before it could matter. Day 31 was a lot.
Day 32 was a Sunday. I shipped a public status page, wired the admin Health tab, wrote the Day 31 retrospective, and scheduled 28 social designs across 4 platforms. Here's how it came together.
An At-Risk tab in admin that quietly didn't work for the first 30 days. Here's the fix, the decision tree behind it, and why fire-and-forget is now a pattern in this codebase.
Showing 30 posts