Skip to content

feat: move launch button to swipe-up action sheet (#137)#146

Merged
neonwatty merged 4 commits intomainfrom
fix/launch-button-placement
Apr 19, 2026
Merged

feat: move launch button to swipe-up action sheet (#137)#146
neonwatty merged 4 commits intomainfrom
fix/launch-button-placement

Conversation

@neonwatty
Copy link
Copy Markdown
Collaborator

Summary

  • Move the "Ready to launch" card from inline in issue body into the swipe-up IssueActionSheet as a "Launch with Claude" button
  • Keep the active deployment banner inline via simplified LaunchCard (banner-only, now a Server Component)
  • Add getComments server action for lazy-fetching comments when the launch modal opens (preserves Suspense streaming architecture)
  • Auto-select all comments when they arrive, with toast warning on fetch failure

Details

The launch button was awkwardly placed inline in the issue body. Moving it to the action sheet (accessible via edge-swipe) puts it alongside other issue actions like "Close issue." The button is hidden when a deployment is already active.

Architecture: Launch data (deployments, referencedFiles, repoLocalPath) is threaded from the page through IssueDetail to IssueActionSheet. Comments are lazy-fetched via a new getComments server action when the modal opens, since they live behind a Suspense boundary in IssueDetailContent.

Files changed (7):

  • IssueActionSheet.tsx — launch button + LaunchModal with lazy-fetched comments
  • LaunchCard.tsx — simplified to banner-only (87 → 25 lines)
  • IssueDetail.tsx — threads launch props to action sheet
  • IssueDetailContent.tsx — simplified LaunchCard props, updated JSDoc
  • page.tsx — passes launch data to IssueDetail
  • comments.ts — new getComments server action
  • LaunchModal.tsx — auto-select comments on lazy load

Test plan

  • Typecheck passes (pnpm turbo typecheck)
  • Lint passes (zero errors, only pre-existing warnings)
  • Swipe up on issue detail shows "Launch with Claude" button
  • Launch button hidden when deployment is active
  • Active deployment banner still shows inline in issue body
  • Launch modal opens with comment context toggles populated
  • Toast warning appears if comment fetch fails
  • "Close issue" action still works from action sheet

Closes #137

)

The "Ready to launch" card was awkwardly placed inline in the issue body.
Move the launch action into the IssueActionSheet (swipe-up) as a
"Launch with Claude" button. Keep the active deployment banner inline.
Simplify LaunchCard to banner-only rendering.
The action sheet's LaunchModal was passing comments={[]} because
comments are fetched inside the Suspense boundary. Add a getComments
server action and fetch them when the modal opens, so users can
select which comments to include as Claude Code context.

Also: remove stale "use client" from LaunchCard (now a pure render
function) and fix children prop comment in IssueDetail.
- Add .catch() to getComments promise for transport-level errors
- Show toast warning when comments fail to load
- Auto-select all comments in LaunchModal when they arrive via
  lazy-fetch (fixes regression where none were selected by default)
- Fix IssueDetailContent JSDoc to reference actual function names
Merge both launch button and reassign-to-repo features into the
action sheet. Keep LabelChip import from main alongside Deployment.
@neonwatty neonwatty added this pull request to the merge queue Apr 19, 2026
Merged via the queue into main with commit 1a82843 Apr 19, 2026
5 checks passed
@neonwatty neonwatty deleted the fix/launch-button-placement branch April 19, 2026 12:41
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.

The launch to Claude button in each issue is awkwardly placed and should probably be moved to the swipe up modal in each issue.

1 participant