Ominvo beta launches July 23, 2026 — only 10 spots remain Join the waitlist →

Notes from the build.

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.

Building OminvoDay 59

We built loading skeletons before anyone paid us a dollar

Three skeletons shipped today — dashboard, reviews, settings. Why pre-launch is the right time to fix loading states, not later.

Jun 23, 20264 min read
Building OminvoDay 57

Why we built a lifetime deal — and why it's capped

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.

Jun 22, 20263 min read
Building OminvoDay 58

We replaced a flat toggle with a 3D globe — here's why it took three tries

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.

Jun 22, 20263 min read
Building OminvoDay 53

Day 53: Competitor Tracking page ships without the data. FAQ grows from 27 to 62.

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.

Jun 20, 20265 min read
Building OminvoDay 55

Why we don't refund — and built an appeals system anyway

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.

Jun 20, 20265 min read
Building Ominvo

Day 52: A real support funnel, and a playbook for replies that actually move revenue.

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.

Jun 19, 20263 min read
Building OminvoDay 54

Day 54: Built the block system before we had anyone to block.

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.

Jun 19, 20264 min read
Building Ominvo

Day 51: Install Ominvo on your home screen. And a page about the reviews you're not getting.

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.

Jun 18, 20264 min read
Building Ominvo

Day 50: Offline-ready and finally hearing from people who use it.

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.

Jun 17, 20263 min read
Building Ominvo

PWA manifest groundwork shipped, ReviewTrackers comparison live

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.

Jun 16, 20263 min read
Building Ominvo

Day 46: The Page Your QR Code Was Waiting For

We shipped the public review landing page — the destination behind every Ominvo QR code. Scan, tap, done.

Jun 15, 20263 min read
Building Ominvo

Your monthly review snapshot, now in your inbox

The monthly report card email is live for GigaChad. Four numbers, once a month, delivered where business owners actually read things.

Jun 15, 20264 min read
Building Ominvo

Why we gated email alerts to paid plans (and what Noob users get instead)

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.

Jun 15, 20263 min read
Building OminvoDay 45

Day 45: QR codes, competitor tabs, and the pricing truth we had to face

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.

Jun 14, 20263 min read
Building OminvoDay 44

Team invites shipped — and the database trigger that almost killed them

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.

Jun 13, 20264 min read
Building OminvoDay 42

Day 42: The plumbing day — alert preferences, AI bot rules, and Google's first crawl

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.

Jun 12, 20266 min read
Building OminvoDay 43

Day 43: The page every confused visitor needed — and a framework upgrade that couldn't wait

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.

Jun 12, 20266 min read
Field NotesDay 41

Day 41: Three rounds to ship one check-email page (and a polish bundle that took one)

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.

Jun 11, 20265 min read
Building OminvoDay 39

Day 39: fixing the MRR calculation and shipping the analytics dashboard page

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.

Jun 10, 20264 min read
Building OminvoDay 39

Day 39: MRR math fix, two new pages, and one engineering dead-end

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.

Jun 10, 20265 min read
Field NotesDay 40

Day 40: Annual billing passes end-to-end (after three bugs nearly blocked 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.

Jun 10, 20266 min read
Building OminvoDay 35

Day 35: Six help articles, zero shortcuts

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.

Jun 9, 20265 min read
Building OminvoDay 37

Day 37: Annual billing, Stripe prices, and the first feature page

Wired the annual billing toggle on pricing, created Stripe price IDs in test mode, and shipped the first dedicated feature landing page — Instant Alerts.

Jun 9, 20265 min read
Building OminvoDay 38

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

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.

Jun 9, 20264 min read
Building OminvoDay 33

Day 33: Five commits, one security call, and what the changelog page taught me

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.

Jun 8, 20265 min read
Building OminvoDay 34

Day 34: a security fix, a Help Center, and three scope overrides

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.

Jun 8, 20264 min read
Field Notes

What Ominvo actually does — every feature, explained plainly

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.

Jun 7, 20267 min read
Building OminvoDay 31

The day I shipped monitoring, a blog, and had a security incident — all before lunch

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.

Jun 6, 20265 min read
Building OminvoDay 32

The /status page, the Health tab, and 28 social posts in one Sunday

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.

Jun 6, 20263 min read
Building OminvoDay 30

Stamping last_active_date — a tiny fix that made admin useful

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.

Jun 5, 20265 min read

Showing 30 posts