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

PRODUCT UPDATES

Changelog

Every update, fix, and feature shipped — in order.

Day 59June 23, 2026

Loading skeletons on dashboard, reviews, and settings

  • Dashboard, reviews, and settings now show a skeleton while data loads — matches each page's layout to prevent content shift on hydration.
  • One shared pattern across all three: bg-white/[0.06] placeholder blocks with animate-pulse, no JavaScript, no external library.
  • Settings skeleton is tier-agnostic (generic card placeholders) to avoid flashing the wrong tier's UI before the real page loads.
Day 58June 22, 2026

Globe toggle + lifetime E2E verified

  • Billing toggle on /pricing and Settings replaced with animated 3D globe — rolls between Monthly and Annual with gold dust particles and Save 20% badge on annual
  • GlobeToggle is a shared React component used in all 3 billing toggle locations (pricing page, Settings upgrade section, lifetime → Chad upgrade modal)
  • Full E2E test of lifetime deal flow completed — Stripe $79 checkout, webhook tier flip to lifetime, Settings plan card, and lifetime → Chad upgrade all verified clean in production
  • GBP profile activated ahead of July 9 API eligibility window — photos, opening date, and business post added
Day 57June 22, 2026

Lifetime Deal launched

  • New lifetime tier added — $79 one-time payment, 50 AI replies/month, 1 location, Google only
  • Stripe one-time checkout + webhook handler — tier set to lifetime on payment confirmation
  • /lifetime landing page live — hero, what's included, why capped, what's not included, FAQ
  • Lifetime Deal added to site nav (desktop + mobile)
  • Settings page: lifetime buyers see dedicated plan card with upgrade-to-Chad modal
  • 50 AI replies/month cap enforced server-side in draft-reply route
Day 56June 21, 2026

SMS features marked Coming Soon

  • Review generation via SMS is now clearly marked Coming soon across pricing and feature pages.
  • SMS replies launch with our Twilio rollout after beta — QR-based review generation remains available on GigaChad.
Day 55June 20, 2026

Customer-facing block flow, appeal system, and Refund Policy page

  • Customer-facing block flow: /blocked landing page shows the suspension reason and appeal CTA; /appeal/[token] is a public form for submitting an appeal within a 30-day window
  • Four transactional emails sent from notices@ominvo.com: suspension notice (includes appeal link), appeal received confirmation, appeal approved, appeal denied
  • Admin Appeals tab: pending appeals queue with message view and a decide modal — approve restores access as a goodwill gesture, deny is final
  • Block records are permanent for the account file — when an appeal is approved, the suspension is marked as lifted rather than deleted, preserving the full history
  • Approved appeals reinstate the account's prior subscription tier as goodwill (original payment is not refunded; resubscribe via Settings to keep billing aligned)
  • /legal/refund-policy: new standalone plain-English page covering monthly plans, annual plans, free tier, terminations for cause, and chargebacks — linked from the /legal hub and from Terms Section 5
Day 54June 19, 2026

Customer block system + TOS Section 14 amendment

  • New traffic-light risk_level on every business (green/yellow/red) — manual override via admin Customers tab
  • New Blocked tab in admin — pick a business + 5-500 char reason + 7 canned reason templates (each ~70-90 words referencing relevant TOS section)
  • Block flow cancels Stripe subscription immediately, no proration, no refund — sets risk_level red, subscription_status canceled, logs tos_violation signal
  • Unblock flow available directly from Blocked tab — risk back to green, status to inactive, full audit trail preserved in risk_signals
  • Stripe charge.dispute.created webhook auto-flags chargebacks to red and logs the dispute row + high-severity risk signal
  • Flagged testimonials write to risk_signals as spam_testimonial signals — auto-accruing audit trail for repeat offenders
  • TOS Section 14 rewritten — termination-for-cause covering chargebacks, spam, abuse, billing evasion, and Acceptable Use violations; no refunds; 30-day appeal window
  • New Supabase tables: risk_signals, disputes, blocked_businesses, appeals — all RLS-locked, service-role-only writes, security-definer policy for self-read
  • Block notice email, /blocked page, /appeal/[token] flow ship Day 55 as one connected unit
Day 53June 20, 2026

Competitor Tracking feature page + FAQ doubled

  • New feature page at /features/competitor-tracking — explains rating and review-velocity benchmarking against up to 5 named local competitors, GigaChad only, live once the Google Business Profile API connection goes live (~July 23)
  • Header dropdown, mobile menu, and footer Product column now link to the real /features/competitor-tracking page (previously placeholder #)
  • Removed stale "SOON" badges from Review Generation and Competitor Tracking in the header and footer — Review Generation has been live since Day 51
  • FAQ page expanded from 27 to 62 questions — 5 new Q&As added to each of the 7 categories (pricing, Google Business Profile, AI replies, tiers, launch, security, support)
Day 52June 19, 2026

Support funnel + Review Reply Playbook

  • Footer Support link now leads to a real funnel: FAQ → Help Center → a support form, instead of duplicating the Contact mailto link
  • New support form at /support — name, email, business name, description, optional screenshot/video link — sends directly to support@ominvo.com via Resend
  • New page: /review-reply-playbook — a working guide to writing review replies that protect or grow revenue, with bad/better reply examples for all seven industries Ominvo serves
  • Footer "Review Reply Playbook" link fixed — previously a placeholder #, now points to the real page
Day 51June 18, 2026

PWA install prompt + Review Generation feature page

  • Install Ominvo to your home screen — a custom install card on Android and desktop Chrome/Edge, with platform-aware fallback instructions for iPhone Safari
  • Service worker now checks for updates on tab focus, so deployed fixes reach existing users faster
  • New feature page at /features/review-generation — explains where each tier enters the review loop and why review generation is the GigaChad differentiator
  • Header dropdown and footer Product column now link to the real /features/review-generation page (previously placeholder #)
  • Mobile menu under Product gains a Review Generation entry to match desktop
Day 50June 17, 2026

PWA service worker + customer testimonials + auth redirect fixes

  • Service worker live — pages load offline with a dedicated fallback page, network-first when online
  • Launched /testimonials — a public page for customer feedback, with a moderated submission flow gated to logged-in users
  • Admin: new Testimonials moderation tab for handling flagged testimonial submissions
  • Improved auth redirect handling for new signups arriving from feature pages
  • obscenity package added for content moderation (replaces hardcoded profanity list)
Day 49June 16, 2026

PWA manifest upgrade + ReviewTrackers comparison page

  • PWA manifest upgraded — full icon set (16/32/48/180/192/512), start_url, scope, theme_color metadata
  • /vs/reviewtrackers competitor comparison page live — pricing table, feature sections, sitemap updated; ReviewTrackers tab unlocked on homepage CompetitorTabs (final tab)
Day 48June 16, 2026

Notifications gate + digest infrastructure + Early Signals carousel

  • Notifications gate: Noob tier sees locked blur overlay on Notifications card — email alerts are Chad & above
  • Digest email infrastructure: cron route + email template + preference API built, UI is Coming Soon pending Vercel Pro
  • Early Signals carousel: homepage fake testimonials replaced with auto-scrolling carousel of 10 honest beta feedback cards
Day 47June 15, 2026

Monthly report card emails + Podium comparison

  • GigaChad: monthly report card email, delivered on the 1st of each month at 9am ET
  • Settings: Monthly Report Card toggle card — opt out anytime (GigaChad only)
  • Locked upsell card shown to Noob and Chad tiers
  • businesses.email_monthly_report column (boolean, default true)
  • Cron route /api/cron/monthly-report — Bearer auth, tier filter, toggle filter, Resend send
  • Email template: em-dashes for GBP-blocked fields, real AI replies count from ai_responses
  • /vs/podium competitor comparison page — pricing table, feature sections, sitemap
  • Homepage CompetitorTabs: Podium tab unlocked
  • Competitor page: /vs/grade.us — Grade.us comparison page + Grade.us tab unlocked on homepage
Day 46June 15, 2026

Public review landing page (/r/[businessId])

  • Shipped /r/[businessId] — mobile-first public page, no site chrome, single CTA
  • Three states: 404 (invalid ID), fallback (no Place ID), full CTA (live businesses)
  • Added slug column to businesses table with format constraint + unique index
  • Added get_public_business_info() SECURITY DEFINER RPC — safe anon reads
  • Added src/lib/google-review-url.ts utility
  • robots noindex/nofollow on all /r/ pages — not for search engines
Day 45June 14, 2026

QR codes + competitor tabs + /vs/birdeye + pricing audit

  • GigaChad: QR code generator in Settings — download PNG, links to /r/[businessId]
  • /api/qr route — tier-gated to GigaChad, returns PNG, auth-guarded
  • src/lib/qr.ts — server-side QR generation utility (qrcode npm package)
  • Homepage: CompetitorTabs section — 4 tabs, Birdeye live, others coming-soon locked
  • /vs/birdeye competitor comparison page — pricing table, feature sections, SEO-targeted
  • sitemap.ts updated with /vs/birdeye
  • Homepage ROI card linked to /roi-calculator
  • Replan: all unshipped /pricing features will be built as mock-ready UI pre-GBP, live data swap on July 23
Day 44June 13, 2026

/faq page + full team invite flow + member permission lockdown

  • /faq page live with 27 questions across 7 categories — pricing, Google connection, AI replies, tiers, launch, security, support
  • JSON-LD FAQPage schema on /faq for Google rich snippets
  • /how-it-works and /faq added to sitemap.ts
  • Three broken #faq nav links fixed across header (desktop + mobile) and footer
  • team_invites Postgres table created with RLS — owner-only read/write, service role for accept-by-token
  • Four team API routes shipped — invite, accept, revoke, remove-member — all gated by requireBusinessOwner helper (owner + gigachad)
  • Resend invite email template with 1-day token expiry
  • /accept-invite page with separate unauthenticated and authenticated states
  • SettingsClient Team card rebuilt from stub into real member list with pending invites, revoke buttons, and invite form
  • Members RLS policy added on public.users so teammates can read each other's emails (scoped to same business)
  • redirectTo threaded through signup flow — signup page, SignupForm, emailRedirectTo, check-email — for invitee email verification redirect
  • Dashboard guard now bypasses /onboarding for users with a pending team invite
  • handle_new_user Postgres trigger updated to skip business creation when the new user has a pending team invite
  • Member permission lockdown — /api/create-checkout-session and /api/create-portal-session now require owner role
  • Settings UI hides owner-only controls from members — business info inputs become read-only, billing buttons hidden, team invite/revoke/remove hidden
  • Gold banner at top of /settings for members explaining the permission level
Day 43June 12, 2026

/how-it-works full build + framework security bump

  • Bumped framework version — closes batch of high/moderate security advisories, full E2E verified
  • Built /how-it-works — sticky sidebar, tier mockups (Noob/Chad/GigaChad), SVG trend chart, comparison table
  • Header + footer How it works links wired from #how-it-works to /how-it-works
  • Footer duplicate Help Center link (Resources column) removed
  • nav audit: catalogued all broken # links — FAQ deferred to /faq page, GBP-dependent links stay SOON
Day 42June 12, 2026

Alert Preferences + pre-launch SEO infrastructure

  • Shipped /features/alert-preferences — last # placeholder in Product dropdown closed
  • Added 6 missing routes to sitemap.xml (5 feature pages + /why-us)
  • robots.ts now includes explicit Allow rules for 9 AI crawlers, mirroring existing restrictions
  • Verified ominvo.com in Google Search Console — sitemap submitted, 60 URLs discovered
  • npm audit: closed 2 of 4 advisories (transitive deps)
Day 41June 11, 2026

Check-email page, server-validated verification, three polish fixes

  • /check-email page between signup and verification — email shown, Turnstile-gated resend, back link
  • Server-validated verification detection: getUser + email-match + email_confirmed_at guards
  • Cross-tab "Email verified" card with auto-redirect to /dashboard
  • Homepage Chad annual pricing fix: $288/year save $72, 20% off (was $240/year save $120, 33%)
  • Admin Plan Breakdown row math now uses per-tier MRR sums — annual subs no longer mislabeled
  • Settings Card 5 gated to noob-only — chad users no longer see duplicate upgrade CTA
Day 40June 10, 2026

Annual billing E2E passes; DKIM + settings rebuild + smart filters

  • Fixed Resend DKIM record in Hostinger DNS — email signup unblocked after 29 days of silent failure
  • Rebuilt /settings upgrade flow — Monthly/Annual toggle, tier-aware cards (Noob sees Chad+GigaChad, Chad sees GigaChad), real Stripe Checkout
  • Annual billing end-to-end test passed: $288 Chad annual → webhook → tier flip noob→chad → MRR $84 → cancel-at-period-end
  • Added /features/smart-filters page with static HTML/CSS star-rating filter mock (GigaChad-only positioning)
  • Wired Smart Filters in Product dropdown (desktop + mobile) and footer
Day 39June 13, 2026

MRR math fix, analytics dashboard page, /why-us comparison page

  • Admin revenue API: all 4 Stripe price IDs moved from hardcoded strings to env vars — no code changes needed at live-mode cutover
  • Annual MRR fix: annual subscription amounts now divided by 12 (was counting full $288/$948 as MRR contribution)
  • Revenue amounts read directly from Stripe price object (unit_amount / 100) — self-corrects if pricing changes
  • Annual subs correctly increment chadCount/gigachadCount instead of falling through to unknownCount
  • /features/analytics-dashboard launched — 10 sections: rating trend, response rate, velocity, star distribution, competitor tracking (GigaChad), tier comparison
  • /why-us launched — Ominvo GigaChad vs Birdeye Growth positioning, full HTML/CSS dashboard mock, SVG trend chart, donut chart, feature comparison table, bar chart
  • SiteHeader + SiteFooter: Analytics Dashboard + Why Ominvo nav links wired desktop, mobile, footer
  • Engineering dead-end logged: MDX chart system (BlogCharts.tsx + 5000-word Birdeye blog post) built and reverted — next-mdx-remote/rsc does not reliably evaluate multiline JSX array props during prerender
Day 39June 12, 2026

MRR calculation fixed + analytics dashboard feature page

  • Admin revenue API: all 4 Stripe price IDs moved from hardcoded strings to env vars — no code changes needed at live-mode cutover
  • Annual MRR fix: annual subscription amounts now divided by 12 for correct MRR contribution (was counting full $288/$948 annual amount)
  • Revenue amounts now read from Stripe price object directly — self-corrects if pricing changes
  • Annual subs now correctly increment chadCount/gigachadCount instead of falling through to unknownCount
  • /features/analytics-dashboard launched — rating trend, response rate, velocity, star distribution, competitor tracking (GigaChad), tier comparison
  • SiteHeader + SiteFooter: Analytics Dashboard nav links wired desktop, mobile, and footer
Day 38June 11, 2026

Annual billing wired end to end + AI Replies page

  • Annual billing checkout wired — billingInterval param, 4-way price ID map (chad/gigachad × monthly/annual)
  • Webhook bug fixed — annual price IDs added to TIER_MAP, prevents incorrect tier assignment on annual subscriptions
  • Pricing page CTA buttons converted to onClick handlers — loading state, Stripe redirect, inline error handling
  • /features/ai-replies live — hero, 3-step how it works, 6 feature tiles, tier callout, final CTA
  • SiteHeader + SiteFooter: AI Replies and Instant Alerts links wired to real destinations
  • Copy audit: "AI" replaces brand name references in homepage, FeatureRows, ProductShowcase
Day 37June 10, 2026

Annual billing toggle live + first feature landing page

  • Pricing page: Monthly/Annual toggle added, defaults to Annual
  • Chad annual: $24/mo (billed $288/yr, save $72) — GigaChad annual: $79/mo (billed $948/yr, save $240)
  • Stripe annual price IDs created in test mode: STRIPE_CHAD_ANNUAL_PRICE_ID + STRIPE_GIGACHAD_ANNUAL_PRICE_ID
  • Hero badge updated: "Save 20% with annual billing — now available"
  • Pricing page FAQ updated with annual billing Q&A and concrete prices
  • /features/instant-alerts launched — first Product dropdown item with a real destination
  • SiteHeader: Instant Alerts href wired desktop + mobile
Day 36June 10, 2026

Help Center complete — 6 articles, thumbs feedback wired

  • 6 Help Center articles added: integrations (connecting GBP, Meta roadmap, webhooks & API) + account-and-security (changing password, data deletion, who can see your data)
  • HelpIndexClient.tsx renamed to HelpIndex.tsx (naming fix)
  • help_feedback table added to Supabase
  • New /api/help/feedback endpoint — unauthenticated, rate-limited, persists thumbs y/n votes
  • ArticleFooter thumbs buttons now fire-and-forget POST on click
Day 35June 9, 2026

Help Center content expansion and auth redirect sweep

  • 6 Help Center articles: billing (upgrading, cancelling, invoices) + reviews-and-replies (how AI works, editing replies, negative reviews)
  • Auth redirect sweep: /dashboard, /settings, /reviews now redirect to /login?redirectTo=<path>
  • All 4 protected routes fully wired with safe redirect
Day 34June 8, 2026

Help Center foundation, open-redirect fix, and health log table

  • /api/admin/health-logs endpoint with filters (time range, service, status, limit) + raw log table in admin Health tab
  • safe-redirect.ts validator — closes open-redirect attack vector on login redirectTo param
  • /admin redirectTo wired: signed-out users return to /admin after login
  • Help Center foundation: /help, /help/[category], /help/[category]/[slug] routes live
  • 3 seed articles in getting-started category
  • Help Center footer link added
Day 33June 7, 2026

Monitoring, social links, and bundled fixes

  • UptimeRobot external monitoring live on /api/health
  • Footer social icons updated: X, Facebook, Instagram, Pinterest with correct profile URLs
  • /api/health auth gate removed (public endpoint, no sensitive data)
Day 32June 6, 2026

Status page, admin Health tab, and social batch

  • /status public page live with 4 service cards, uptime bars, auto-refresh
  • /admin Health tab (6th tab) with lazy fetch and per-service status cards
  • 28 Canva social designs scheduled June 8–14
Day 31June 5, 2026

Blog system, health monitoring, and revenue tab

  • Blog live at /blog with MDX, 5 categories, RSS feed, syntax highlighting
  • /api/health worker pings 4 services, logs to service_health_log
  • Revenue tab in /admin shows live MRR from Stripe
Day 30June 4, 2026

Heading gradients and last_active_date fix

  • Sitewide white-to-gold heading gradient applied
  • Hero H1 sizes reduced across all pages
  • last_active_date now stamped on every dashboard load (At-Risk tab fix)
Day 29May 31, 2026

ROI Calculator

  • /roi-calculator live with industry-specific lift percentages
  • Transparent math, no black box
  • Wired into header and footer
Day 28May 30, 2026

All 7 industry pages + email logo

  • All 7 industry pages live: Salons, Restaurants, Gyms, Dental, Med Spas, Auto Services, Home Services
  • Logo PNG added for transactional email templates