Vydro · What we shipped
Recent.
We ship most weeks. Sometimes twice. This page is the record — in chronological order, in plain language.
Public changelog, docs, and a status page
Three pages we should have had from day one. The changelog you're reading is the canonical record of what shipped; the docs at /docs are now a single-page operational reference; the status page at /status checks every dependency live.
All three lean on the same paper-and-ink palette as the marketing site. No new design language, no new components — just the surfaces that prove Vydro is a real, operationally serious product instead of a side project.
Killed the pulsing live-dot everywhere
Every dashboard surface had a green or cyan dot with an expanding ring around it, the AI-website cliché for live-ness. We replaced them with static cues — dots that aren't animated, or no dot at all where the surrounding type already does the work.
Page feels measurably calmer. Nothing was actually live in real time anyway.
Hero phone now state-shifts from TikTok to YouTube on scroll
Scrolling past the headline drives a pinned scrubber: the phone-frame mockup transitions from a TikTok feed into a YouTube Shorts player as you go. The animation is purely transform-based, runs on every device that doesn't ask for reduced-motion, and stays out of the way of the copy.
It's the visual equivalent of "paste a link, walk away, wake up live." One scroll, one transition.
Section color drift and mask-wipe reveals on the landing
Each section of the marketing page now tints its background as you scroll into it — a gentle drift from paper through pale cyan and back. Headlines and decks mask-wipe in from the leading edge instead of fading.
We previously had a flatter, more uniform page that read as competent but interchangeable. The drift gives each section a moment that's visually its own.
Six dashboard tabs got a humanized redesign
Settings, Billing, History, Calendar, Refer, and Analytics all moved away from the templated card-grid look and toward layouts that fit what each tab actually does. Settings reads as a long-form magazine column; Calendar is a quiet two-axis grid; Refer leads with a single big number.
We stopped reaching for the same primitives on every page. The dashboard is more distinctive section to section, more obviously hand-laid.
Em-dashes purged from every user-facing string
An em-dash in every other sentence is the most reliable AI tell in copy. We ran a sweep across the dashboard, the landing, all transactional emails, and every error message — replacing them with sentence breaks, parentheticals, or commas, whichever read more naturally.
About 400 individual strings touched. The voice across the site sounds more like one person wrote it.
Immersive motion primitives on the landing
Cursor-tracked aurora behind the hero, scroll-pinned scrollytelling on the "how it works" panel, a hero entrance choreography that staggers the headline, deck, and CTAs in three measured beats. All driven by eight new motion components, all degrading cleanly to static on prefers-reduced-motion.
The site still loads light. Motion is layered on as enrichment, not baseline.
Lite landing page for ad-traffic cohorts
vydro.app/lite is a stripped-down, single-screen variant of the marketing page aimed at paid social cohorts who bounce off the full landing's length. Same offer, one CTA, no scroll.
Conversion on the lite path is currently 2.1× the full landing for cold ad traffic. The full page still wins for organic and word-of-mouth.
Custom watermark + auto-comment after upload
Paid accounts can now replace Vydro's watermark with their own — image or text, with four corner positions. Pro accounts get a templated comment posted (and auto-pinned) under each Short the moment it goes live.
The watermark is what makes a Pro upload feel like yours; the pinned comment is what consistently drives the largest subscribe-rate lift on Shorts. Both have been the top two paid-feature requests since launch.
Strict weekly cohort funnel on the admin dashboard
Our internal funnel was undercounting signups by about 12% because the signup_complete event was firing on the wrong session. We bridged the event back to the original landing session so the cohort math actually reflects what happened.
Numbers are uglier and truer. Conversion targets adjusted accordingly.
Free subscription row auto-created on signup
Previously a new account had no subscription row at all until the user touched the billing tab, which broke a handful of feature-gate checks that expected one to exist. We now create a Free-tier row on signup so every account has a known plan from the first request.
Quiet plumbing fix. Removed a class of bug we'd been patching around for months.
Operator-grade /admin/analytics console
A standalone page at /admin/analytics with the live funnel, recent events stream, and weekly cohort breakdown. Gated by membership_type='admin' so the dashboard navigation only surfaces it for the team.
Replaces the patchwork of Supabase queries we'd been running in the browser console. Saves about 20 minutes a week on internal sanity-checks.