feat(studio): prompt-first home page, Deepiri branding, and delete/timeline fixes - #92
feat(studio): prompt-first home page, Deepiri branding, and delete/timeline fixes#92PeytonLi wants to merge 1 commit into
Conversation
…meline fixes Home page becomes the entry point for generating video: a prompt box with one-click starter prompts creates the project, submits the AI job, and drops the user into the editor with the clip auto-accepted on arrival. Picking a template still goes straight to the editor with that template's presets. Fixes the Delete button on the home page. Root cause was server-side: studio.delete_project called db_repos.delete_project, which never existed, so every delete raised AttributeError and returned 500. The client compounded it by calling res.json() with no res.ok check, so the non-JSON error body threw a parse error that renderHomeProjects swallowed into console.error and the card stayed on screen. Deleting the last project also resurrected it, since list_projects falls back to Postgres when the memory store is empty. Template presets never reached the editor either: openProject left the hardcoded starter timeline from createInitialState() in place and never loaded the sequence's tracks, so a 7-track Documentary opened on three demo tracks full of placeholder clips. loadSequenceTracks now replaces it on every entry path. Timeline quick wins from the feature gap review: ripple delete (Shift+Del), duplicate (Ctrl+D), and snapping to clip edges/playhead while dragging and trimming. Dragging also no longer accelerates - it applied a delta measured from the drag origin against the clip's live position on every pointer event. Escapes project/asset names interpolated into innerHTML. AI project names are now the user's prompt verbatim, and this is a desktop webview, so injected markup would run with the app's privileges. Removes the Dev Mode toggle; devMode still reads from localStorage so the devtools drawer stays reachable for developers.
|
/sorge |
Sorge AI Code ReviewStatus: Temporarily unavailable — providers exhausted Deferral class: What happenedReview deferred — mixed provider issues (soft Gemini quota and/or HTTP 429 and/or truncated responses). No automated review was generated — this is not a code-quality score. Approximate retry window: ~2 minute(s). What to do
Retry in ~2 minute(s) Routing details
No quality score was computed — this is not a code review result. Review deferred by deepiri-sorge |
@nhuynh30 wtf happened? Fix and figure out. May have to update model provider models, keys, or switch off to alternate providers |
|
I dug into the Sorge issue and found the main cause. It’s not a key or quota problem. The problem is that several reviews were triggered within a few minutes of each other, so they were competing for the same concurrency lock that we use to prevent multiple runs from hitting the free-tier providers at the same time. For example, if Review A gets the lock, Review B can’t get it while A is running. Right now, B treats losing the lock as if all providers are exhausted and exits immediately. It doesn't actually call Gemini, GPT, or OpenRouter, which is why those failed runs show zero provider dispatches. The 120-second retry budget is also never used. I’m going to fix this so losing the lock causes the scheduler to wait briefly and retry instead of immediately failing. It will keep retrying within the existing retry window until the lock becomes available. I’ll also separate lock contention from providers_exhausted so we don't report the wrong failure reason. On top of that, I found the Cloudflare Worker hasn't been deployed since July 31, two OpenRouter models are broken, and Groq's 7k context limit is too small for our typical 13–19k token PRs. I'll handle the retry logic, model cleanup, and concurrency guard. The Cloudflare Worker still needs to be deployed by whoever has Cloudflare access. |
|
@nhuynh30 make sure it's fixed sir /sorge |
ElgineTham
left a comment
There was a problem hiding this comment.
Currently holding merge here, because it relies on the changes in #91. I've requested changes there, so it should update here as well. The rest of the changes in this PR looks good and ready to be approved!
i alr pushed a fix on sorge pr 100 and it is already merged. should be good now |
Description
UI/UX pass over the desktop app, plus the root-cause fix for the dead Delete button on the home page.
apps/desktop-tauri/ui(studio + home views),services/orchestrator(project delete)The headline change is that the home page is now prompt-first. You describe a video, it creates the project, submits the AI job, and puts you in the editor with the generated clip landing on the timeline. Templates keep their own path: straight into the editor with that template's presets.
Changes
studio.delete_projectcalleddb_repos.delete_project, which did not exist, so every delete raisedAttributeError→ 500. The client compounded it —orchestratorDeleteProjectcalledres.json()with nores.okcheck, so the non-JSON error body threw a parse error thatrenderHomeProjectsswallowed intoconsole.error, leaving the card on screen. Added the missing repo function (children alreadyon delete cascade), added theres.okcheck, and the UI now reports a failed delete instead of going quiet. This also fixes deleting your last project resurrecting it, sincelist_projectsfalls back to Postgres when the memory store is empty.openProjectnever loaded the sequence's tracks, so the hardcoded starter timeline fromcreateInitialState()(Clip A,Clip B,Title,VO) stayed put — picking the 7-track Documentary template opened onto three demo tracks. Newops/loadSequence.tsreplaces the starter timeline with the sequence's real tracks and clips on every entry path.ops/aiLaunch.tstakes a prompt → project → sequence → video track → submitted AI job. Four hardcoded starter prompts render as one-click chips. Enter submits; Shift+Enter newlines. On this path the clip is auto-accepted when the job reachesreview— the AI panel's own Submit keeps the explicit Accept/Reject gate.public/deepiri-logo.png. The supplied artwork had an opaque near-white background that would have rendered as a white box on the dark topbar, so the outer background was flood-filled to transparent from the edges (light areas inside the mark preserved). Swapping the artwork later is a file drop at that path — no code change.RenderandFlownow carry their own colors so each word reads independently.state.devModestill reads fromlocalStorage, so the devtools drawer stays reachable vialocalStorage.setItem("deepiri_dev_mode","true").Shift+Del/ "Ripple"), duplicate (Ctrl+D/ "Duplicate"), and snapping to clip edges, the playhead, and zero while dragging or trimming (~8px, zoom-scaled, so single-frame nudges still work).pointermove, compounding as you dragged. Now positioned absolutely from the origin.innerHTML. AI project names are the user's prompt verbatim, and this is a desktop webview — injected markup would run with the app's privileges. Newrenderer/escape.tsapplied to project names, asset names, and asset URIs.studioApp.tsintorenderer/home.ts+renderer/brand.ts, which is what makes it testable in the existing node test env (no jsdom dependency added).docs/specs/editor-feature-gap-analysis.md— what standard NLEs offer vs. what we have, tiered by payoff, with a suggested order. Sourced, not vibes.Related
peytonli/feat/ai-prompt-loopTesting
Automated, all green:
npm testinapps/desktop-tauri/ui— 144 passing (102 before this PR, +42).npx tsc --noEmitclean,npx vite buildsucceeds and ships the logo.pytest tests/— 118 passing (115 before, +3).New coverage: project delete route (including the last-project-resurrection case),
orchestratorDeleteProjectfailure surfacing,launchAiProject,loadSequenceTracks, ripple delete / duplicate / snapping, HTML escaping, and the home markup contract (no "Welcome to", no Dev Mode button, two-tone brand, logo present, starter prompts rendered).Manual check worth doing on your side, since none of it is automated: run the app with the orchestrator up, click a starter prompt, and confirm you land in the editor and the clip appears when the job finishes. Then delete a project from the home page and confirm the card goes away.
Important Notes
startJobPolling(id, true)→false).src-tauri/icons/is still the default plain blue squares — that's the window, taskbar and installer icon.npx @tauri-apps/cli iconregenerates all sizes from the logo (wants the opaque original, not the transparent one, for the square tile formats). Left out to keep this PR's diff free of ~20 binary files.res.okcheck was added to the delete path only. The same "parse the body without checking status" pattern exists in most ofbackendApi.ts; fixing it wholesale would change behaviour at many call sites and break mocks, so it wants its own PR.127.0.0.1:8080to test.Workflow Checklist
peytonli/feat/ai-prompt-loop@ab69b30)peytonli/feat/ai-prompt-loopper request. Retarget todevonce the parent merges.Review Requests
@Team-Deepiri/support-team