Product log · live
Updates
Everything new in videngineer — newest first.
610
updates shipped
610 updates
Filter
A public Updates page — every release, dated and searchable, straight from the changelog
Find every guide, teardown and program from one Resources menu
Refunds and cancellations in plain English — the policy page is live, linked from the footer
Smarter analytics under the hood: patterns are now measured by how hard viewers engage, not just raw view counts
Teardown data tidied: every analysis now carries its type, and missing performance numbers were recovered where the source had them
The Updates page tells the truth now — every release dated, numbered consistently, and checked daily so nothing ships unrecorded
Library, evolved: one Assets tree with smart views that fill themselves (Inspiration, My Creations, by brand, kind or teammate), collections and moodboards, and share links for any asset or board — public or team-only, with instant revoke
Solutions page now shows each role its own workflow with real product views
The custom cursor now follows you across the whole site
One consistent closing call-to-action across every page
Added a clear Refund & Cancellation Policy, and made credit validity (12 months) consistent across the site.
Pricing page closing banner now spans full width
Fix: serve the proof-wall brand logos (assets route allowlist)
Landing hero: foreplay-scale type + scroll-cover, brand proof wall (9 real logos, mined totals), footer Journal links
Security hardening: closed a batch of infrastructure gaps — blocked server-side request abuse, stopped a status-page info leak, scoped internal listings to their owner, masked customer data in staff views, and tightened upload/proxy limits. No user-facing change.
Sharper clean plates: the people-removal now erases the mic and cables too and rebuilds the empty set at full resolution — no more ghost objects or blur. Same 2 credits.
Homepage relaunch: live interactive teardown demo (real Railway ad), reworked hero, engine section, honest proof band, custom cursor
Direct downloads on every asset: download icons next to the save-star on cuts, frames, looks and extractions (paid plans), plus the save-popup can now be dismissed and tidies itself up
Chrome extension v1.5.12: on-brand redesign, live queue progress, star-to-Library from the popup, keyboard shortcuts
Star whole analyses into your Library — new Analyses section, organize with your existing folders
Team plan badge now shows for everyone in a team workspace
Team filter works again — pick a teammate, see only their analyses
Pricing page redesign: minimal cards — dominant price, one-line promise, 5 bullets, honest exports
Queue views self-scoped: admin accounts see their own queue by default (global = explicit ops opt-in)
Pro/Power downloads restored: blueprint, exports, ZIPs, cut masters + frame stills — tier+ownership gated (paid users own/public jobs; anon/free blocked)
Chrome extension v1.5.11: picker confirm-card fix — single card, working Analyze, Not-this re-arms, Escape exits
Blueprint bp-v2 prompt quality (I2V motion prompts, personalize, tool dialect) + free-tier abuse identity (+address/dot farming blocked)
Clean plate — the World tab now removes the cast from a set instead of cutting them out. Pick an environment, extract, and study the room the shot was built in: 2 credits, saved to your Library. Defaults to the emptiest angle of the set.
Team plan now shows up as Team plan — the sidebar and account pill read "Team plan" in the team accent colour instead of aliasing to Pro.
Your first cut blueprint is on us: every free account gets one full blueprint to try before upgrading
Teardown media is now view-only: watch and listen to everything inline, and star anything to your Library
CUT-03 duration fix — cut clips show real length (not model guess); source-video timestamps labeled.
Chrome consistency — logged-in users on /a/ share links get the full app view; anon public sharing intact.
Billing leak fix — plus-address emails no longer read an empty ledger (was: unlimited free credits). Canonical+encoded email across credit path.
Cut-out extractions now reliably save to your Library — including ones you re-open and extractions you made earlier.
A refreshed site-wide footer — feature highlights, trust badges, a live count of cuts studied, and a cleaner mobile layout.
Your cut-out extractions now save straight to your Library, with a live tray that tracks each one as it is made.
A rebuilt footer with real navigation and a clear closing call-to-action across the site
Stem extraction only charges you once it succeeds — and re-opening stems you already have is free
Isolate any cast member straight from the teardown page — transparent cut-outs, one credit, free to re-open
Format and brand pages you can actually visit — one click to a real page, chips show your active filters
Pricing that answers the hard questions — FAQ, a straight guarantee, and one clear path to start
Download everything you extracted — one ZIP for all entities, plus per-item bundles that actually download
Cut Blueprint is live — a shot-by-shot production plan from any analysis, 2 credits, charged only when it delivers
A new front door for the teardown library — featured breakdown, live stats, real numbers
Plan boundaries are real now — free cleanup runs, API keys match your plan, downloads live where the content lives
Pricing copy tells the truth — webhooks parked until they exist
Library counts that add up, un-star that just un-stars, docs in our own colors, and real performance numbers on every analysis
Docs housekeeping
A simpler pricing page — two plans, and what credits cover
New teardown library hero — See why it won. Keep the playbook.
Library gets a list view — and your chosen teardown now rides along into the analyzer
Admin allowlist tightened — removed an unrecognized address
Admin hardening — retired the legacy admin write proxy, tester access is now tester-shaped, every admin action leaves a receipt
Filter the teardown library — and “Run this on your video” now lands where it promised
Teardown library — sidebar everywhere, bigger hero, closed the prompt leak
One footer, everywhere
Teardown library sidebar + a smarter app rail
Cleaner source-quality notice
Teardown view redesign — full-width cuts, one-line tabs, quieter source notice
Viral badges move onto the card thumbnails
Analyses: durable owner attribution so no analysis is ever hidden from your library
Analyses list: badge shows your true library total, not the loaded page
Fix: cancelled analyses no longer restart after a deploy
Analyses list: see ALL your analyses (paginated, Load more) and loads instantly at any scale
New one-step way to report a teardown — a clear, prefilled takedown flow for rights holders.
Browse teardowns by format — new category pages (product ads, brand films, launch videos and more) that link the whole library together.
Teardown pages get a consistent header and footer, breadcrumbs, and richer results markup so they surface better in search.
Teardown library gets real filters — narrow by format, industry or brand and sort by views, freshness, engagement, 4K or length, with a live counter of every view analysed.
Teardowns are now free to read — the full analysis (every signature cut, the sound map, the blueprint and cast) opens for anyone. Sign in only to download or run your own.
Teardown pages read cleaner: the preview note tucks into a popup instead of a strip, and every teardown ends with a 'run your own — free' prompt.
Queue view: numbered rows + a source-resolution badge (4K/2K/1080p) on every analysis
Batch analysis now pulls true 4K on eligible plans; higher throughput
Batch analysis + queue: line up many videos at once, watch them drain, cancel from a queue view
Teardown library gets navigation labels — 🔥 Viral, Hot, New and ✦ 4K badges you can filter by — plus each card now shows the video's runtime and the social channel it came from.
The teardown library, cleaner: one card design, one grid, sorted by vitality — filter by format or ✦ 4K, sort by views or newest, and see the channel behind every teardown.
Quality signal in the library: teardowns built from a true 4K source now carry a ✦ 4K badge and a matching filter, so the sharpest breakdowns are easy to spot and sort to.
Internal: storage config made environment-portable
Faster teardown library + tighter reading layout: the teardowns index now opens instantly, each teardown reads at a comfortable width instead of full-bleed, and the “keep studying” row now surfaces teardowns from every category, not just one.
Internal: staging environment bootstrap kit
Internal: engineering practice docs updated for all agents
Public teardowns, rebuilt: 8 featured breakdowns with real source numbers (views, likes, comments), free full read with an account, preview for visitors. New rights page (/dmca), refreshed teardown library and homepage picks.
Cost ledger complete — every call carries its job, wait time, and retries; failed attempts are counted; daily spend total no longer double-counts
Complete cost visibility — every analysis call is now in the cost ledger with per-job attribution; team invite accounts get their intended unlimited access
Global model worker pool — provider calls are now capped, queued, and back off together under load; pool pressure visible in ops health
Analysis results now save continuously during a run — a type mismatch was silently blocking every mid-run save
Better internals: database errors now logged with full detail so issues surface immediately
Global footer partial (_foot.html) injected across all marketing pages; removed the glowing $19.99 banner from pricing
Fixed a silent save bug — analysis progress and resume checkpoints now persist mid-run (they were quietly failing)
Groundwork for resumable analyses — fixed how job progress is written to the database
Deploys no longer restart analyses — jobs resume from the last completed stage (plus a 24h stale-job cleaner)
Pricing: Power $49 off the market → Team early access with email capture (vid_waitlist + signup notifications)
Scale P2 merged: streaming zips (8 endpoints) + streaming uploads + per-IP rate limiter (agent branch, reviewed byte-identical)
Bobby rule: purged AI-tool names from live landing copy (copy-sprint audit finding)
CLAUDE.md: canonical positioning + copy rules for all agents
Landing hero → team positioning (Mark-approved Option A)
Scale hardening P1: graceful deploy drain, cache bounds, heavy-download guard; stale queued jobs closed
Extension v1.5.9: picker confirm card (host + duration + cross-site embed warning) — ends the wrong-video mis-targets
Cancel an analysis: endpoint + pipeline abort + UI button; cancelled runs refund quota
Power $49 buyable: /go/power → payment link; pricing/landing/solutions flipped from Soon to live
Cast & World reference sheets downloadable — entity.zip (all angles) + header button
Extension v1.5.6: Grab and upload from this tab — pulls unfetchable videos through the user browser
Ingest: generic yt-dlp + impersonation + residential proxy rotation + LI_COOKIES support
experimental notice: triple inline banner (loop bug) → one dismissible popup per session
Sound & Script marked experimental (banner + feedback mailto); sung-video voice-layer subtitle
voice_mode ratio rule; Higgsfield bed remixed with vocals (music_full.mp3, versioned cut keys)
Song-driven audio fix: sung vocals remixed into the music bed (voice_mode classifier), music-driven banner + agent flag
Sound tab r2: rail removed, FULL MIX vs MUSIC ONLY labels, playable isolated score, SFX scene thumbnails
Teardown UX: back pill top-right, Export as direct tab (More gone), Sound per-scene grid removed; nav comment leak fixed
pricing: canonical header + honest feature bullets (Sound Kit, Library, credits) — consistent with landing/solutions
ONE marketing header (_nav.html via VE_NAV marker) on faq/solutions/gallery/teardowns + FAQ rewritten Bobby-safe
Solutions v2 (B2B feature-by-feature) + 3 launch-video teardowns published to the gallery
solutions routed via canonical marketing dispatcher — live at /solutions
Launch-night: per-plan concurrency caps (free=1), /solutions page, honest pricing bullets, tour parked
Library folded into the app shell (#library) — one container rule; /library redirects in
Nav: Asset Extractor + Ad Intelligence parked (off-brand — roadmap; direct links still work)
HQ SEO health view: live crawlability, sitemap freshness, per-page Google index status
SEO: sitemap lastmod = deploy date (re-crawl signal); audit filed — 9 action items in the tracker
SFX name synergy: isolated clips take the sound-design event names (timestamp match, free) — pills and clips now speak the same language
Star toggle + chirp + library toast · SFX auto-labeling (Gemini) · kit backfilled on re-runs
cuts.zip fix: UA header on internal R2 fetches (was producing an empty zip)
All media downloadable + favoritable: cuts.zip, universal R2 download fix, universal ★ on every media overlay
reextract: re-runs land in the owner Analyses tab (admin-triggered heals attributed to the original owner)
Music-cut labels flipped, play conflict fix, cast/look stars in Library, engine-version banner with one-click re-analyze
watering_holes wired into cron (Monday AM) + Sonnet-5 per-hole engagement drafting
Library: favorite stars (top-right, not flag) + Dreamina-style detail view (download, sandbox coming soon)
radar: two new query angles (launch/demo video, Product Hunt) + ISO date fix
swipes: stable identity for the admin cookie
Swipe Library v1: ⚑ on cuts/music/sfx → /library (filter, play, download, remove) + /api/dl force-download proxy + Sound tab polish (whole-track demoted, SFX flat list)
Sound kit: music CUTS from the isolated stem + SFX clips sliced from the isolated layer (one isolation pass = full kit)
GSC: single handler, 28-day window, env fallbacks
HQ: Search Console live (queries/pages/CTR 7d) + changelog audit mode (search, day groups, area tags)
Sound sprint: voice-grounded script (Demucs), sung-lyric ♪ detection, audio engines on the switchboard (Power auto-grounding)
credits: month window in Python (Directus rejects _gte on string created_at)
Sprint 2 core: credits ledger + Power $49 + 4K ingest + invoices in HQ
Sound dock: Spotify-style transport (live mood readout, hover mood chips, mood-glow playhead)
changelog: numeric version sort (backfilled ids are not insertion-ordered)
HQ v5: uptime/incident tracking, changelog w/ versions, editable user hub, teardowns by type
HQ v4: graphs-first everywhere, user hub, sandbox, code creation, ops email report
HQ v3 — Mark's audit pass: perf cache, everything wired, Teardowns+Codes views, visual A/B
HQ v2 — sidebar views, D/W/M charts, Stripe revenue, Dory's pipeline blueprint
HQ: Search Console tile (top queries · clicks · impressions · position, 7d)
HQ: Clarity UX-signals tile + API/integrations inventory
HQ access: owner/admin TIER = full admin (normal Google logins never carry is_admin) + transparent sign-in-needed page
HQ: Cloudflare traffic tile — 7d uniques/pageviews + top countries
HQ user-activity: exclude internal/team accounts from all metrics
chore: apply HQ_VIEWERS env (Dory + Mark gmail viewer access)
Visual Admin HQ (baseline) — /admin/hq for Mark + HQ_VIEWERS (Dory)
Dockerfile: COPY model_router.py + cron entrypoints — the deployed container never had them
Transcription: mandate per-sentence timestamp granularity for the FULL duration
Claude 5 family response parsing: join text blocks (thinking block first KeyError'd 'text')
Model router → Directus API (the shared data studio, not videngineer's Supabase) + Sonnet-5 sampling fix
Sprint 1: model routing via Directus + per-call cost log + ops A/B endpoint
ROOT CAUSE of the cuts wipe: 'R2 takes precedence' merge dropped Supabase cuts on every boot — deep-graft guard. + bottom-docked player + premium scroll
Cuts wipe-guard + open blend build to signed-in users + cache-proof job fetches
Sticky Sound player + Watch-source → original post + re-enable Demucs isolation
Fix boot crash: export extract_waveform_peaks from the analysis package
Fix teardown crash on no-music videos (renderVals: reading 'mood' of undefined)
Cuts built WITH the analysis (before 'complete') + kill the JSFILMZ audio race + auto-load cuts in the app
Add backfill_cuts.py — one-off Railway backfill of signature cuts for complete jobs missing them
Real audio waveform — extract amplitude peaks from the audio, render them in Sound
Wire Sound summary to real sfx_analysis.recreation_recipe (was hardcoded prose)
Wire Blueprint hero to real comprehension (was hardcoded JSFILMZ montage copy)
Cuts UX: auto-build on open + live loading state (no manual click) + surface pipeline silent-fails
Disable Demucs isolation (voice + music + per-scene) for now via SEP_ON flag
First-Comment Radar: Apify → fresh solo-founder launch videos → Airtable queue (twice-daily cron)
Teardown: kill all mock-bleed (J ? real : empty everywhere) + real cut intermediary frames
Cut titles: Opus = Dylan early-access ONLY, everyone else Sonnet (no PRO tier)
Auto-cuts: remove fragile video_url/frame_urls gate (the flaky-auto-cuts bug)
Remove confusing 'Free read' pill from cut-detail header
Build-cuts / deep-cluster endpoint defaults to Sonnet technique titles
Technique titles for EVERY analysis on Sonnet (Opus reserved as PRO-plan hook)
Dylan-only LLM technique titling on blend cuts (Opus), keep the $0 clips
Narrow embedded teardown to r9 width (1360, was 96vw/1680 = too wide) + diagnose silent auto-cuts failure
Add 'Build the cuts' button to the empty Cuts state (on-demand $0 blend)
Ungate auto-cuts: build the $0 blend grid for EVERY analysis, not just paid
Voice player: actually PLAY the isolated vocals.mp3 (was a fake setInterval that played nothing)
Voice/stem layer: read existing job.stems on load + correct logical path
Widen embedded teardown to near-full-width (match r9)
Voice toggle: hide on real jobs (production), show only in design preview
Script voice-state: auto from real audio (voice_analysis/voice_style); hide Preview-state toggle for non-admins
Cuts empty-state: real count + clean 'no cuts built yet' message (every existing job has empty Cuts)
Integrate r9 teardown into the live app (/app#job) + empty-state safety
teardown /a: wire top-nav + breadcrumb to real /app routes; remove dead Share/X/.md trio
Ship r9 teardown design: /a read-only route + real data/isolate wiring; purge ROI+Thumbnail; cuts-in-analysis
Log: 86bf839 PUSH 2 backend (blend real shot-clips)
PUSH 2: real shot-based cuts via the blend (free ffmpeg)
Log: 565bdeb Cuts cost-safety deploy (on-demand gated briefs + real cost)
Cuts cost-safety: on-demand gated briefs + real cluster cost
Admin model-picker: pick clustering model per run (haiku/sonnet/opus) + deploy log
Gate The Cuts to admin (coming soon for rest) + model-aware cost
Fix: drop temperature for Opus 4.7+/Fable (they 400 on sampling params)
Add admin Opus clustering + fix force-recompute
Fix admin cost-provider labels: frames/entities/deep_clusters run on Claude, not Gemini
Fix deep-vision: auto-detect image media type (webp was sent as jpeg)
Purge: cut off-ICP features + stop computing roi/kids
Export: complete teardown.zip + disable public share
docs: human-first rework — purple brand + wordmark logo, remove API/curl
docs: migrate mint.json → docs.json (Mintlify build was failing on deprecated config)
docs: ICP-shaped rework + Bobby scrub
Remove broken mintlify GitHub Action (mintlify/action repo does not exist)
Wire Mintlify project ID + GitHub Actions deployment workflow
Add Mintlify docs site — ICP-shaped docs for Scriptwriters + Agent Builders
polish(cta): let the mountains read in the closing CTA (growthOG-hero style)
polish(landing): footer band → growthOG's contained size + same mountain treatment on the pre-footer CTA
polish(footer): bigger wordmark + taller band so the full peak+wheat image shows
redesign(footer): swipe growthOG's brand band — cream wordmark over the centered-peak horizon
fix(landing): split footer — normal black footer + separate mountain wordmark band below (growthOG structure)
feat(landing): growthOG-style footer — big videngineer wordmark over dusk-mountains
feat(landing): cinematic dusk-mountains backdrop on the closing CTA
feat(profile): capture + display Google profile pictures (Stage 1)
copy: reposition from 'copy machine' → reference/study tool
polish(app): soften em-dashes to en-dashes in rendered text (AI-tell)
feat(billing): DataFast revenue attribution — /go/pro creates a Checkout Session with visitor metadata
feat: install DataFast analytics on every page (server-side inject)
docs: spec for videngineer MCP — analyze→recipe→Vidgentic generation loop
feat(cost): exact per-analysis cost from real provider token usage
feat(signup): invite card — nicer on-page invite + invite-framed OG unfurl for chat shares
fix(analysis): voice profile, title extraction, clean format tag — from quality audit
fix(cuts): serve deep_clusters from reliable R2 backup before recomputing
account: show 'Manage billing & invoices' to owner/admin so internal accounts can preview the Stripe portal flow
copy(account): relabel 'trial' tier → 'Free' (it's the free tier, not time-limited)
content(blog): add 'We don't recreate your art' post + Bobby-scrub welcome + fix build template
content(blog): Bobby-friendly rewrite of why-90-seconds — drop margins, AI internals & weakness section
copy(account): clarify the Stripe portal covers invoices ('Manage billing & invoices')
feat(help): consolidate tour + bug into one Help hub (with an Ask-the-assistant slot)
fix(tour): URL step accepts a pasted link OR an uploaded file — don't trap upload users
fix(nav): group Sign in next to Start free (right cluster) instead of floating mid-nav
chore: 301 Railway domain → apex · rebrand hi@ → mark@ (founder-led) · @dherealmark in footer
fix(copy): don't list Instagram as a paste-able link (it's auth-gated)
feat(onboarding): make corner helpers noticeable — pulse + first-visit callouts
feat(onboarding): make ?welcome=pro repeatable so the full sequence is sandbox-testable on any logged-in account
feat: 3 free teardowns + granular tour (upload/auth-gated + Ad Intelligence steps, gated, robust) + visible Take-a-tour pill
fix(cuts): detect collapsed-frame analyses, show re-run banner instead of fake identical cuts
feat: extension live on Chrome Web Store — link to store, drop the .zip flow + launch banner
feat: one free analysis for new users + scannable Cuts grid
feat(support): bug widget reframed as 'Message Mark' — founder face + X direct line
feat(onboarding): 'Take a tour' in Resources + welcome modal X direct-line & farm-photo slot
feat(onboarding): auto-start the walkthrough for brand-new (zero-analysis) accounts
feat(onboarding): guided spotlight walkthrough for new users
feat(resilience): detect LLM outages, flag degraded analyses, alert + ops health
fix(ux): move bug-report button to bottom-right + label it 'Report a bug'
feat(billing): self-serve cancel via per-customer Stripe Customer Portal
fix(billing): webhook now grants Pro for $19.99 — was stamping paid users 'trial'
Paywall UX: real upgrade moment + each extraction gets its own UID
Hard paywall: analysing is Pro ($19.99/mo), browsing teardowns stays free
fix(auth): a DB blip no longer masquerades as an invite wall
Stop Cloudflare caching frames.zip downloads
Fix empty (22-byte) frames.zip downloads
Ship extension v1.5.4: crisp brand icon + deterministic /extension.zip with live SHA-256
Add /support contact page (bug reports · collabs · anything)
Privacy: add the browser-extension section (required for Web Store privacy-policy URL)
Extension page: real browser logos + make the .zip / load-unpacked explicit
Extension page: eager-load the hero demo GIF so the frame isn't empty on first paint
/extension redesign (MetaMask layout) + teardowns caching + app nav
Signup: restore the team access-code field (was deleted; JS referenced a ghost)
Time-boxed access codes: 30-day team trials that actually block on lapse
Picker 1.5.3: full-stack hit scan + ambient-signature filter; pill to bottom
Picker 1.5.2: resolve custom-player stream sources (the Runway 0-frames fail)
Extension funnel: /extension page + announcement bar + free-for-all gating + picker fixes
Landing: add Chrome extension download to nav + footer
Landing: blueprint-grid texture on every section + CRO polish
Fix queue load + true job cancellation
Dockerfile: COPY extension/ so /extension.zip serves the real files
Extension v1.4: queue robustness, sign-out, site download at /extension.zip
Add videngineer browser extension (v1.3.1)
Fix download UX + concurrency + montage note
Montage auto-detect: cut-density probe -> dense sampling + result badge
Deeper analysis for short fast-cut videos: 1s sampling under 35s + speed clamp
Share: public /share/<job_id> page + branded OG card + Share/Post buttons
Agent docs: document the read-by-link flow for completed analyses
ALEX_CONTEXT.md — CTO cold-start context for Alex
Beta framing: BETA pill in the app nav + beta copy in the bug-report modal
Bug reporting: in-app reporter -> vid_bugs -> admin ops feed
HOTFIX: NameError 'yt_proxy' crashed the YouTube download error path
Ad Intelligence: /get-video-ideas is now a manifesto/funnel page (one tool = the app)
Marketing: fix logo link (href="#" -> "/") so it doesn't land on /#
Ad Intelligence: recent searches (replay from 24h cache = free)
Ad Intelligence: resolve brand -> real Page + expand for full recall (+ scrape retry)
Ad Intelligence: keyword-search brands (drop slug-guessing) + filter junk + forgiving match
Ad Intelligence: keyword-search fallback so brand search actually finds ads
Ad Intelligence: bake search help + tooltips into the UI
Ad Intelligence: remove the Leaderboard tab — clean search tool
Ad Intelligence: server-backed Saved (vid_saved) + simplify to a prototype
Ad Intelligence in-app: stop auto-scraping on load, fix Watch, drop static presets
Ad Intelligence: open the in-app view from the app nav + rename everywhere
Winning Wall P0: recent + saved searches, suggested chips, filters
Promote Winning Wall to top-level nav + fix landing pricing duplication + clean search box
fix(winning-wall): remove dead "Remake mine", play the ad video, real metrics, proper sign-in gate
feat(discover): The Winning Wall — in-product competitor ad wall replaces the get-video-ideas link-out guide
Unlock Pro: code-redeem modal + brute-force guard on redemption
GA4 conversion events + Scriptwriter->Pro rename (target video-marketing operators)
Add Microsoft Clarity (heatmaps + session replay) site-wide
Pricing: $11.99 -> $19.99 (single Pro plan, B2B positioning)
Remove 'free teardowns to start' hint + add self-serve cancellation
Asset Extractor: persistent 5-crawl free cap (was in-memory, reset each deploy) + wire Pro Stripe link
Copy: 3 -> 5 free teardowns everywhere (match the new trial limit)
Dockerfile: COPY oauth_google.py so Google login works (was ModuleNotFound)
Codes move to in-app redemption: frictionless signup + redeem in /account
Tier-code access system (vid_codes) + leads get 5 free + client tier
Nav reflects logged-in state (Sign in -> Open app when authed)
Fix login loop: stop burning magic-link token on first GET (email scanners)
Teardowns: DB-driven sitemap + edge-cacheable anon pages (load time)
Teardowns: per-teardown thumbnail override (poster_url) + claymation → frame 2
Remove temp teardown render-debug endpoint (instant-publish confirmed live)
Dockerfile: COPY scripts/ so the server can import build_teardown (instant-publish)
Instant-publish: harden load() cache for read-only FS + temp render debug
Fix instant-publish: load build_teardown from scripts/ (not on default path)
Instant-publish: render teardowns live from vid_teardowns (no rebuild)
Fix redirect lookup: import admin locally (NameError swallowed the load)
Teardowns: Directus-managed redirects (#1) + DB-driven metadata (#2)
Teardowns: activate server-side premium gating + A/B CTA + claymation teardown
Stripe: revert wrong Get-Pro link + wire Pro-beta price→unlimited
App polish: lean top bar, tight plan label, hero→new-analysis, Get Pro→Stripe
Asset Extractor: open in-app (inside the app shell), not a separate page
Social card v2: mirror the hero live-console (real product demo)
Bump OG image cache key to v=3 (CDN cached stale v=2)
Improve social share card (OG image)
Asset Extractor: promote to a primary nav tab
Asset Extractor: decode HTML entities in crawl titles
Asset Extractor: blend crawls into the app dashboard
Dashboard: lift count + plan + search into the top bar; drop the in-view header
Dashboard header: force flex-direction:row (class had column → was stacking/centering)
Dashboard: collapse the wedged plan/stat/search stack into one clean header row
Asset Extractor: HTML-decode asset URLs (&→&) + fix orphaned & after resize-strip
App header: hamburger menu on mobile (nav + Asset Extractor NEW collapse into it)
Fix: COPY asset_extractor.py in Dockerfile (was missing → /api/tools/* 502)
Asset Extractor → production: tool, routes, legal, limits, robots
Merge deploy-banner: reconnect UX during deploys
Merge cost-reporting: backfill + CSV export + spend-over-time chart
Cost dashboard: CSV export + real SVG spend-over-time chart
Deploy reconnect banner: calm 'Reconnecting…' UX during restarts
Backfill: re-estimate cost_usd for historical jobs (March/April were $0)
Merge admin-api-costs: API cost dashboard at /admin/costs
Admin: API costs dashboard (/admin/costs)
Merge fix-overview-cache: stop overview re-generating every load + delete btn + toast X
Fix overview regenerating on every load + add delete button + toast close X
Merge deploy-safe-uploads: uploaded files persist to R2 → survive deploys
Deploy-safe uploads: persist uploaded files to R2 so deploys never lose them
Copy: trim the new-analysis header bloat
Merge accounts-ux: cleaner avatar dropdown + merged usage counter + Pro→unlimited
Merge google-login: Sign in with Google (OAuth) alongside magic link
docs: GOOGLE_LOGIN_SETUP.md — Google Cloud + Railway env steps + provider options
Add 'Sign in with Google' (OAuth) alongside magic link — fully wired
Merge fix-upload-cors: server-upload fallback when R2 direct PUT is CORS-blocked
docs: UPLOAD_FIX.md — R2 CORS root cause + 60-sec dashboard fix + fallback explainer
Pro-beta purchase grants unlimited (env-overridable) + handoff doc
Fix: file upload fails with 'network error during upload' (R2 CORS block)
Accounts UX: cleaner avatar dropdown + merge usage counter into menu
docs: feature context — Brand Kit Extractor (free login-gated lead tool)
Teardown #20: AI-video tool direct-response ad (real R2 job 08a7a63ab1ba)
Analytics: swap Plausible → GA4 (G-3YQNEZNFV2) site-wide
Signup-first funnel: all analyze CTAs → /signup, in-app gate redirects to signup
App: header analyses counter + "Unlock Pro"; Plausible analytics site-wide
Signup: one-click "sign in or create" (no second button)
Label the trial tier "Free trial" (not "Free") — it's a trial, not a plan
Signup: cleaner access-code field + cap analysis length (anti-abuse)
App: surface the 4-concurrent limit (analyze form + account plan card)
Cap concurrent analyses at 4 per user (anti-misuse)
docs: backlog idea — color-grade/LUT analysis → matchable recipe
docs: backlog idea — reference-format analysis for creators' own videos
Remove the 6 legacy lead-magnet PDFs
SEO: videngineer format collection pages (/teardowns/<facet>) + SEO_CONTEXT
signup: team access code (self-serve team accounts) + owner /pages index
app dashboard: plan + credits on top (drop progress bar + sort dropdown); teardown library logo matches site wordmark
SEO: 301 www.* → apex so the stale parked www page consolidates (was 404)
SEO: homepage Organization + WebSite schema, canonical, apple-touch-icon
Gallery: old card layout (2-col stat grid) + clickable tags + tag filters
Teardowns go live: 5s timed sign-in gate + v2 gallery + close PDF/crawl bypass
SEO: list all 19 teardowns in sitemap.xml (was just flying-money)
App nav cleanup + mobile: New analysis as a top-nav CTA, account only on the right
docs: ops guardrails operator guide (flags, dashboards, test order)
ops: scale/launch guardrails (spend kill-switch, rate-limit, SSRF, KPI, Sentry)
Teardowns v2: 19 SEO teardowns on app-mirroring template + work-email/website lead gate
feat(nav): app top bar — fold 'Get video ideas' into a Resources dropdown
feat(nav): unify marketing nav + Resources dropdown
fix(landing): restore the scroll-jack — overflow-x:hidden was killing position:sticky
fix(landing): swap broken scroll-jack for stacked · homepage pricing → Pro+Power · nav fixes
fix(pricing): Power card no longer all-caps; fair-use moved to footer link
copy(landing): nav 'Product' → 'How it works'
feat(landing): add 'Find ideas' to main nav + footer → /get-video-ideas
feat: ship Get-Video-Ideas resource page · swap Discover tab for a button
fix(landing): tighten the pipeline scroll-jack (kills the 'big space')
feat(pricing): two plans — Pro $11.99 (everything included) + Power (soon)
feat(style): /style — internal design-system swipe doc
feat(signup): rebuild in the aubergine system (was off-brand)
feat(dashboard): drop dead 'Saved ads' tile -> live 'scenes analyzed' stat
feat(find-video): 2GB upload cap · lighten in-app guide · publish resource page
ui(dashboard): drop 'minutes analyzed' stat, compact the stat strip
fix(auth): logged-in users hitting /signup redirect to /app
fix(auth): session persists even when SITE_TOKEN is unset
feat(new-analysis): 'Find a video' discovery-guide slide-over
fix(logo): kill the 'vid engineer' gap (flex-gap was splitting the wordmark)
style(texture): film grain on teardown pages + gallery
style(texture): house-style film grain across marketing + product
feat(discover): page-based only — disable broad keyword/category scraping
fix(discover): kill keyword-search junk — exact-phrase + brand-relevance filter
feat(dashboard): per-analysis delete button
feat(analysis): rename to 'The Cuts', Summary-first tabs, per-cut + ZIP downloads
style(logo): accent 'engineer' instead of 'en' in the wordmark
feat(discover): new-tab Analyse, named saved lists, blank-thumb placeholder, more presets
feat(billing): free tier = 3 teardowns/month + 45-min ceiling (was 30 min, count-blind)
chore(routing): 301 /app2 -> /app (collapse legacy preview alias)
chore(cron): cron_daily.py — single command for Railway (warm + watch-check)
chore(db): vid_watches migration (Discover watch+notify storage)
feat(discover): watch a brand → email alert on new ads
feat(discover): faster loads — instant leaderboard open + nightly pre-warm
feat(discover): industry presets, filters, and a leaderboard
feat(discover): playable ads + saved swipe-file + clearer search prompt
feat(discovery): robust query parsing + keyword-search fallback
fix(discovery): extract creative from carousel/DPA cards + extraVideos
fix(discover): fan out one request per competitor, render progressively
docs: DISCOVERY.md — discovery engine context + code map
feat(discover): Supabase persistence + cache + source-linking (production hardening)
Marketing mobile-responsive: landing/pricing/fair-use phone-friendly
fix(discover): COPY discovery.py into the Docker image (was missing)
app2: mobile-responsive (now production /app)
fix(discover): surface config errors as 422 (Cloudflare masks 5xx bodies)
Swap revamped app into production: /app now serves app2 (old → /app-legacy)
feat(discover): competitor ad discovery → analyze, wired into app2
analysis: de-slop — ground overview in transcript, reconcile hook + scene counts
app2: Cast→Cast & World, reorder tabs, script download, summary show-more
app2 Script-tab glow-up + real Music stem (merge drums+bass)
app2: cinematic content deck — blueprint donut + camera meters + frame wall
analysis: sharpen technique recreate-description prompt (less generic/sloppy)
app2: add tooltip explaining Magic Brush (draw a box → adds missed cast)
Landing: pair gold+purple as a duo + add grain/halftone texture
app2: rename Teardown→Analysis, sharper non-purple look, clean drag-drop, fix deep clusters + undefined .btn-pri
app2: level up inner content cards to the Cockpit aesthetic
app2: fix nav escaping to /app (Account/logo now stay in /app2)
Revamped app (Cockpit + telemetry + Bobby) at /app2 (preview)
Direct-to-R2 upload — handle any file size past Cloudflare's 100MB cap
App: guard >95MB uploads with a clear message (Cloudflare 100MB cap)
App: use universal homepage logo + hide DB/R2/AI badges
Pricing: drop "half price" framing; Get Pro → /go/pro checkout route
Rename /examples → /teardowns (canonical), 301 old URLs
Add favicon to remaining pages (app, signup, faq, about, account)
Unify site nav + add favicon + OG meta across all pages
Flip new design live (migration Phase 3)
Fair-use enforcement + policy page; prepare $11.99 Stripe wiring
Allowlist /v2 + /pricing-v2 past the site-auth gate (Phase 1 fix)
Ship new landing + pricing dark at /v2 (migration Phase 1)
app: greet by name + fix health badge colors
schema v3: comprehension layer — the MEANING pass (vision over the storyboard)
corpus: flat feature table — every analysis becomes queryable + trainable
fix(scorecard): None-slice crash on jobs where script_analysis.hook.text is null
schema v3: make classify-v3 backfill ASYNC (3 LLM calls timed out the gateway)
schema v3: add POST /api/job/{id}/classify-v3 backfill endpoint
schema v3: pass _job_id into result (vidgentic _source.job_id) + mark backend shipped
schema v3 (backend): format classification + format-aware scorecard + Vidgentic projection
examples: drop account 'Templates' library — examples are marketing, not a free shelf
examples: add the 3 missing lead-magnet PDFs + shrink kids
examples: simplify unlock to email-first lead magnet + JSON/PDF downloads
examples: reframe as 'any video, your playbook' + InteriorAI-style spec cards
fix: wordmark invisible on frosted dark nav (was color:ink → black-on-black)
fix(auth): land the no_account logic in the REAL handle_signup (admin.py)
fix(auth): the REAL login bug — duplicate _get_user_by_email shadowed lookups
auth: clear 'no account yet' on sign-in + login-gate full example access
account: add Templates tab loader (was dropped twice by failed edits)
fix: template gate was half-shipped (NameError 502 + missing route/tab)
design: apply 'Refined Depth' B2B-SaaS skin to the app shell
chore: nudge Railway redeploy (templates hardening 22d7ee5 didn't promote)
templates: public slug-allowlisted export so the gated download actually works
templates: gated 'get this analysis' download on example pages
header: declutter top-right → avatar dropdown + owner-only health badges
account: optional profile (name / persona / goal)
dashboard: avatar + usage meter + stats strip + search + sort
fix: AI status badge read wrong health field (d.gemini → d.gemini_audio)
docs: flag SITE_TOKEN as critical env var in smoke test
docs: videngineer value prop + audit findings (2026-05-30)
examples: ship 6 curated analyses across video types
launch: 'Copy for your LLM' button + smoke test + webhook verified
docs: read-access & distribution plan (export now / share-link / connector later)
launch: shelve API as 'Coming soon' + simplify pricing to 2 tiers
security: gate DELETE /api/job/{id} — was unauthenticated
Security: scope agent API per-user + kill frontend owner-token leak
Correct routing in copy doc: / = landing.html (marketing), /app = index.html (app), /pricing = pricing.html. None are legacy.
Fix copy-doc file targets: live site is index.html; landing/pricing.html are legacy
Dockerfile: ship AGENT_PUBLIC.md + mcp/ (public /agent was 500ing)
docs: save CREATE/Studio vision (deferred feature plan)
Account page + self-serve API key management
Add UX stack + copy working doc (marketing + product)
Add handoff doc: Account page (front-end) + API-key self-service (back-end)
Maintenance toggle via Directus + per-user API keys + API works through maintenance
ops: /health reports container resources (cgroup RAM/CPU/disk) for capacity planning
agent: MCP connector + obfuscate /agent + fix Bearer auth + ungate
Fix stems: Cloudflare 403/1010 blocked Python-urllib UA on Replicate
Surface stem-extraction errors on the job (was silent)
ux: stale/expired magic link → /signup (fresh-link prompt), not the dead 'access required' page
Fix re-extract: it did nothing (two /reanalyze handlers collided)
Better empty state for new free users + audit confirmations
Remove SOON tabs + density-weighted (frame-interval) billing
perf+security: ThreadingHTTPServer + async download + concurrency cap + drop credential defaults
URL handoff: prefill but don't auto-fire (let user review/change)
fix: /api/signup never downgrades an existing user's tier
gitignore SHIP_IT_CARD.md (contains admin password)
docs: PRICING_PLANS_CONTEXT as-built — vid_plans wiring is live + minute-based
pricing: make the LIVE gate DB-driven via vid_plans (editable in Directus)
Free tier = core breakdown only; deep analyses are paid
admin: migrate to single admin — redirect /admin → admin.videngineer.com (Directus)
Admin cost view + minute-based pricing copy
Minute-based pricing + real per-job cost estimation
Accounts-only access — kill demo bypass, scope projects per-user
nav: unify the menu across every page
App login: lead with email magic-link, demo demoted to fallback
Clean URLs: 301 .html → extensionless + clean all internal links
Admin stage-health tracker — per-job, per-stage status grid
Graceful degradation: transcription failures no longer show raw error
Add download/export buttons to all remaining tabs
docs: fresh Gemini build context — current positioning + copy source of truth
Fix: Script tab hook gauge no longer shows false 0/10
auth: unauthenticated /app (+ gated UI) redirects to /signup, not a dead locked page
landing+about: broaden ICP, fix CTA verb, ship sample-analysis lead magnet
admin: fix /admin (no trailing slash) 404 + gate /app projects per-account
SEO polish: full sitemap (10 URLs) + landing JSON-LD + (DMARC added via CF API)
vid_analyses: flip status complete/error on pipeline finish
Transcription: surface Google's real error body, not bare '403 Forbidden'
Credit-pack quota enforcement — per-user sessions + hard block
Launch-ready pages · /faq /about /pricing /examples + atomic example page
Dockerfile · COPY admin.py + admin/ + blog/ + gating.py into container
User accounts · self-serve signup + per-user magic links + Mark's admin seed
Launch sprint · admin + Stripe webhook + accounts + blog + landing surgery
Hero form: accept URL or email — auto-detect
Maintenance bypass for magic-link holders
Pre-launch: gate /agent + scrub API surface from public landing
Launch-day Shape A — public landing + waitlist + pricing + OG + SEO
docs: PRODUCTION_HANDOFF for coding agent · accounts + admin + auth
docs: marketing context + napkin for videngineer launch handoff
checkpoint: apply jamlist 14-step playbook to videngineer launch
Videngineer manifesto + positioning vs Algrow / Vidgentic / NoteGPT
Transcribe — Gemini Files API for audio > 20 MB (unblocks long podcasts)
Script tab — real timestamps, VO moved here, GPT design brief added
Voice Clone Kit + ROI tab redesign — solid layout, less spam
Script tab → Protocol Clerk · 7-element skeleton + structure DB + Bend-it
Fix scenes.zip — set User-Agent so R2 edge stops 403'ing the bundler
Unassemble: R2 persistent + inline preview + source-video sheet + zip-on-demand
Unassemble → zip download, shorts ≤90s only
Snippet contract fix + Unassemble Video → raw scene MP4s
Dashboard fixes — auto-analyze, snippet button, honest scene labels
Magic-link auth + ship /launch_plan to videngineer prod
Site-wide Basic Auth — gate marketing/UI surface from competitor snooping
Sitemap plan for Next.js rewrite + cut list for the current landing
Landing rebuild — JH Flying Money showcase + 46-technique recreation matrix
Aubergine pass 2 — white body, textures, ornaments, beefier buttons
Merge B · Aubergine dark theme — deep plum bg, mint+lilac accents
Soon pills on Table/Channels + reanalyze frame interval + dark theme wireframes
Add Vidgentic-parity refactor plan + Sprint 1 schema migration
Refine brand: book-style projects + bolder titles + branded /agent docs
Refactor UI to Distributoor brand DNA — paper bg + thick black borders + halftone + pop shadows + Space Grotesk
Add public landing page + visual refresh (deep aubergine + grain + serif)
Add IG_COOKIES_B64 env var support for Railway-friendly single-line paste
Add /api/job/{id}/clip — save sub-clips of source video to R2
Surface cookie env presence on /health + bump yt-dlp
Add IG_COOKIES support for Instagram ingest
Fix IG/TikTok ingest + cryptic max_workers=0 crash
Align /agent docs with per-tool convention
Add public /docs route serving agent manual
fix(retranscribe): send User-Agent on R2 audio download
fix(transcribe): bump token budget + robust error handling + retranscribe endpoint
feat(frontend): fireworks + browser notification when analysis job completes
sfx: right-size budget — 25 scenes × 60K output tokens
llm: swallow _fix_json raise in audio path + log finishReason/preview
llm: hard timeout via ThreadPoolExecutor around Gemini audio call
sfx: bump max_tokens 8K→32K to fit all per_scene rows
chore: force redeploy to clear stuck SFX thread
Sprint E1.1: async SFX/stems/clips endpoints + Replicate token wiring
Sprint D.1: dedicated slice endpoints for agent consumption
Sprint E1: onset-detected SFX clip gallery (free, FFmpeg-only)
Sprint D: agent download endpoints + rework SFX analysis to assembly order
Sprint C: Audio tab UI — SFX catalog + stem separation panels
Sprint B: Demucs stem separation via Replicate (analysis/stems.py)
Sprint A: SFX + music event catalog (analysis/sfx.py)
yt-dlp: accept Webshare raw format in YT_PROXY (ip:port:user:pass)
yt-dlp: rotate across YT_PROXY list on bot-flag
Add YT_PROXY (Webshare residential) + YT_COOKIES support to yt-dlp
Refactor: unified LLM fallback chain + declarative pipeline stages
Remove app.py monolith (dead code, fully replaced by modular files)
Add comprehensive handoff document for videngineer tool
Add entity analysis to pipeline, character mini gallery, fix Cast loading
Add thumbnail analysis, ROI/niche analysis, character zip, fix auth & clustering
Fix kids analysis JSON parsing — use _fix_json instead of raw json.loads
Add YouTube bot-detection workarounds to yt-dlp
Add --remote-components flag to yt-dlp for YouTube JS challenge solving
Fix deno installation in Dockerfile — use direct binary download
Refactor monolith into modules, fix critical bugs, add kids niche analysis
Initial commit: video-reverse-engineer standalone repo (extracted from maragakis-video-pipeline)
RecentlyRelease date pending
Cleaner teardown web addresses — category in every link
Isolate any subject — transparent PNGs from Cast & World
Power plan open to everyone + credit packs + batch drag-and-drop + speed presets
Honest prompts panel, clearer paths
The teardown library loads in a blink and puts the good stuff first
Cards you can read at a glance
Real performance numbers on your analyses, and 58 fresh teardowns in the library
Filter your library by format and source
Speed: the app now loads its data in a fraction of the time
The sidebar era: new navigation, a real asset library with folders, richer search and filters, your full teardown catalog, and account & billing controls
Low-quality source now shows a pill + tooltip
Low-quality source? We now guide you to a better link
Ingest quality floor + potato teardowns pulled from gallery
Crisp previews + 4K in the lightbox
Fix: 4K masters can no longer be wiped by background jobs
Reference frames go premium — 4K on every angle
Crisp ingest restored + quality labels everywhere
Agent API can trigger re-analyses
HQ now watches the bills — fixed infra cost card
Downloads now say 4K on the button
Honest source labels — see exactly what quality you have
★ Library: flip through your saves + every card gets a thumbnail
🎞️ 4K Masters — every download can now be maximum quality
No updates match those filters.