Skip to content

feat(desktop): redesign StartView onboarding UI#1081

Merged
AviPeltz merged 4 commits into
mainfrom
avipeltz/garage
Jan 31, 2026
Merged

feat(desktop): redesign StartView onboarding UI#1081
AviPeltz merged 4 commits into
mainfrom
avipeltz/garage

Conversation

@AviPeltz
Copy link
Copy Markdown
Collaborator

@AviPeltz AviPeltz commented Jan 31, 2026

Summary

  • Simplify Open Project screen with a cleaner, more minimal layout
  • Add Clone Repository button for cloning git repos
  • Remove StartTopBar in favor of minimal design
  • Improve dropzone behavior and styling
  • Add helpful text explaining folder requirements (.git directory)

Test plan

  • Open the desktop app without any project open
  • Verify the new StartView UI renders correctly
  • Test drag and drop of a git folder
  • Test clicking "Open Project" and selecting a folder
  • Test clicking "Clone Repository" and entering a URL

Summary by CodeRabbit

  • New Features

    • Added a Clone Repository dialog and clone flow.
  • Improvements

    • Redesigned start screen to a more compact Open/Clone layout.
    • Enhanced drag-and-drop behavior with a clear “Drop git project” state and prevention of accidental navigation while dragging.
    • Centralized and improved error handling for clone/open actions.
  • Removals

    • Removed the previous top-bar control on the start screen.

✏️ Tip: You can customize this high-level summary in your review settings.

- Simplify Open Project screen with cleaner layout
- Add Clone Repository button
- Remove StartTopBar in favor of minimal design
- Update dropzone behavior and styling
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jan 31, 2026

📝 Walkthrough

Walkthrough

Removes StartTopBar and refactors StartView: adds a CloneRepoDialog, centralizes clone error handling, tightens drag-and-drop guards to prevent opening projects while dragging, and updates UI/layout for compact open/clone interactions.

Changes

Cohort / File(s) Summary
Removed component
apps/desktop/src/renderer/screens/main/components/StartView/StartTopBar.tsx
Deleted StartTopBar component that queried platform via TRPC and conditionally rendered WindowControls.
StartView & clone/drag flow
apps/desktop/src/renderer/screens/main/components/StartView/index.tsx
Introduces CloneRepoDialog with isCloneDialogOpen state and handleCloneError; prevents project open actions while isDragOver; removes StartTopBar usage; updates layout/icons and centralizes error display behavior.

Sequence Diagram

sequenceDiagram
    actor User
    participant StartView as StartView
    participant CloneDialog as CloneRepoDialog
    participant CloneOps as CloneOperation

    User->>StartView: Click "Clone Repository"
    StartView->>CloneDialog: open(isCloneDialogOpen = true)
    activate CloneDialog
    User->>CloneDialog: Submit clone details
    CloneDialog->>CloneOps: start clone
    activate CloneOps
    alt success
        CloneOps-->>StartView: success
        StartView->>CloneDialog: close()
    else failure
        CloneOps-->>StartView: error
        StartView->>StartView: handleCloneError -> show error
    end
    deactivate CloneOps
    deactivate CloneDialog

    User->>StartView: Drag project folder over
    StartView->>StartView: set isDragOver = true (block open actions)
    User->>StartView: Release drag
    StartView->>StartView: set isDragOver = false (re-enable opens)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰
I hopped through code and found a door,
StartTopBar gone, a cleaner floor,
Clone dialog hums, guards keep things tight,
Drag and drop now sleeps at night,
I nibble bugs and bounce for more! 🥕✨

🚥 Pre-merge checks | ✅ 1 | ❌ 2
❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ❓ Inconclusive The PR description covers the main changes, test plan, and additional details but doesn't follow the required template structure with explicit sections like Related Issues, Type of Change, Testing, and Screenshots. Restructure the description to follow the template with clear section headings (Description, Related Issues, Type of Change, Testing, Screenshots, Additional Notes) for consistency.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately summarizes the main change: redesigning the StartView onboarding UI with a cleaner layout, removing StartTopBar, and adding Clone Repository functionality.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch avipeltz/garage

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Use --single-branch and --filter=blob:none for faster cloning.
Blobs are fetched on-demand instead of upfront.
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@apps/desktop/src/renderer/screens/main/components/StartView/index.tsx`:
- Around line 169-171: handleCloneError currently only calls setError and
swallows context; update the StartView.handleCloneError implementation to first
log the error with a prefixed console error (use the pattern "[clone/repo] ...")
including the errorMessage (and the raw error object if you change the
signature), then call setError(errorMessage); reference the function name
handleCloneError and state setter setError when making the change.
- Around line 177-232: The drag-over button style uses an invalid Tailwind
spacing token "py-30" which will be stripped; in the JSX inside StartView (the
button rendered when isDragOver is true, around the onClick={handleOpenProject}
button) replace "py-30" with a valid spacing token such as "py-8" or "py-6"
(choose the desired vertical padding) so the isDragOver branch (className that
currently contains "border-foreground/40 bg-accent/50 py-30") applies the
intended padding at runtime.
🧹 Nitpick comments (1)
apps/desktop/src/renderer/screens/main/components/StartView/index.tsx (1)

10-11: Move StartView to StartView/StartView.tsx with a barrel export.
This folder is under components, so it should follow the one-component-per-file structure.

As per coding guidelines, **/components/**/*.tsx: Use folder structure with one component per file: ComponentName/ComponentName.tsx with barrel export in index.ts.

Comment on lines +169 to +171
const handleCloneError = (errorMessage: string) => {
setError(errorMessage);
};
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Log clone errors with context before surfacing to UI.
Please add a prefixed log so we don’t lose debugging context.

✅ Suggested change
 const handleCloneError = (errorMessage: string) => {
+	console.error(`[start-view/clone] ${errorMessage}`);
 	setError(errorMessage);
 };

As per coding guidelines, never swallow errors silently; at minimum log them with context, and use prefixed console logging with pattern [domain/operation] message for all logging.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const handleCloneError = (errorMessage: string) => {
setError(errorMessage);
};
const handleCloneError = (errorMessage: string) => {
console.error(`[start-view/clone] ${errorMessage}`);
setError(errorMessage);
};
🤖 Prompt for AI Agents
In `@apps/desktop/src/renderer/screens/main/components/StartView/index.tsx` around
lines 169 - 171, handleCloneError currently only calls setError and swallows
context; update the StartView.handleCloneError implementation to first log the
error with a prefixed console error (use the pattern "[clone/repo] ...")
including the errorMessage (and the raw error object if you change the
signature), then call setError(errorMessage); reference the function name
handleCloneError and state setter setError when making the change.

@AviPeltz AviPeltz merged commit 36593ca into main Jan 31, 2026
4 of 5 checks passed
@github-actions
Copy link
Copy Markdown
Contributor

🧹 Preview Cleanup Complete

The following preview resources have been cleaned up:

  • ⚠️ Neon database branch
  • ⚠️ Electric Fly.io app

Thank you for your contribution! 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant