Skip to content

Conversation

@daneden
Copy link
Owner

@daneden daneden commented Feb 2, 2026

No description provided.

claude and others added 30 commits January 6, 2026 20:10
- Add LiveActivityManager to handle activity lifecycle
- Add per-project Live Activity preferences
- Update ProjectNotificationsView with Live Activity toggle
- Implement Live Activity UI for Lock Screen and Dynamic Island
- Handle Live Activity start/update/end via push notifications
- Enable NSSupportsLiveActivities in Info.plist

Users can now enable Live Activities per project to track build
status on their Lock Screen and Dynamic Island in real-time.
Remove incorrect if let binding for non-optional commitMessage property.
The commitMessage is a String, not an Optional, so it can be used directly.
- Fix state enum references to use fully qualified names
- Add LiveActivityManager.swift to Xcode project build phases
- Add file references and build file entries
- Add DeploymentLiveActivity.swift to main app target so DeploymentAttributes is visible
- Use fully qualified type names (ActivityContent, PushType, ActivityUIDismissalPolicy)
- Fix nil type inference with explicit cast

This ensures both the main app and widgets can access DeploymentAttributes.
- Update ContentState to decode server's simplified payload format
- Add CodingKeys to map server's 'status' to deploymentState
- Store device token in AppDelegate for Live Activity registration
- Add registerActivityToken() to POST tokens to server endpoint

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add global "Enable Live Activities" toggle in SettingsView
- Wrap Live Activities UI with #if canImport(ActivityKit)
- Include Live Activities in notification reset function
- Fix platform variable to return "macos" on macOS

This fixes the issue where Live Activities were never created because
the liveActivitiesEnabled preference defaulted to false with no UI
to enable it.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Document the API contracts between the iOS app and backend server,
including push notification registration, Live Activity token
registration, and APNS payload formats.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Follow the same pattern as push notifications: Live Activities are now
enabled per-project in the project's notification settings. When the
user enables Live Activities for a project, the app checks system
authorization and shows a warning with a link to Settings if not
permitted.

Changes:
- Remove global liveActivitiesEnabled toggle from Settings
- Update LiveActivityManager to only check per-project settings
- Add Live Activities permission check in ProjectNotificationsView
- Show warning and Settings link when LA not authorized
- Deprecate liveActivitiesEnabled preference

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Background push handlers have limited execution time (~30s) and network
requests may not complete. This change uses projectName and commitMessage
directly from the push notification payload instead of fetching from API.

Changes:
- Add pushNotification case to DeploymentCause for payload-based messages
- Update LiveActivityManager.startActivity to accept simple parameters
- Update AppDelegate.handleLiveActivity to use payload data directly
- Update Live Activity UI to display pushNotification messages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update DeploymentAttributes to use simple strings for APNS encoding
- Add push-to-start token observation and registration with server
- Remove local Live Activity start code (server starts via APNS now)
- Server sends "start" event with attributes, iOS handles automatically

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Live Activities added complexity for a feature only visible during
short build times. Push notifications provide sufficient coverage
for deployment status updates.

Removed:
- LiveActivityManager.swift and DeploymentLiveActivity.swift
- Live Activity code from AppDelegate (ActivityKit imports, token handling)
- Live Activity preferences (liveActivitiesEnabled, liveActivityProjectIds)
- Live Activity UI from ProjectNotificationsView and SettingsView
- Live Activity from widget bundle

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Users can now toggle "Production Only" in widget configuration to
filter deployments and only show production builds.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Handle deployment-canceled event type from server with appropriate
emoji prefix and state mapping.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit implements the feature requested in issue #113 to allow
promoting staged deployments directly to production without rebuilding.

Changes:
- Updated UI to display "Staging" label with icon for staging deployments
- Added new "Promote to production" button that appears for staging deployments
- Implemented promoteStagingToProduction() function that uses PATCH request
  to /v13/deployments/{id}/promote endpoint
- Maintained existing promote behavior for preview deployments (rebuild & promote)

The new feature distinguishes between:
- Staging deployments: Promoted directly using PATCH /promote endpoint
- Preview deployments: Rebuilt and promoted using POST /deployments with promote action

Fixes #113
This commit adds the ability to instantly rollback to previous production
deployments, complementing the staging promotion feature.

Changes:
- Added "Instant rollback" button for production deployments in ready state
- Implemented instantRollback() function using PATCH /promote endpoint
- Added confirmation dialog with appropriate messaging
- Uses same API endpoint as staging promotion (PATCH /v13/deployments/{id}/promote)

The instant rollback feature allows users to quickly restore a previous
production deployment without rebuilding, useful for emergency rollbacks
and deployment management.
Updated the promotion and rollback features to use the correct Vercel API
endpoint as documented at:
https://docs.vercel.com/docs/rest-api/reference/endpoints/projects/points-all-production-domains-for-a-project-to-the-given-deploy

Changes:
- Extended VercelAPI.Path.projects to support version parameter (defaults to v9 for backward compatibility)
- Updated promoteStagingToProduction() to use: PATCH /v10/projects/{projectName}/promote/{deploymentId}
- Updated instantRollback() to use: PATCH /v10/projects/{projectName}/promote/{deploymentId}
- Previous incorrect endpoint was: PATCH /v13/deployments/{id}/promote

The correct endpoint is under projects, not deployments, and uses the project
name along with the deployment ID in the path.
Extract deployment action methods into DeploymentActionsService and
create ConfirmableActionButton for reusable confirmation dialogs.
This reduces DeploymentDetails from ~280 lines to ~140 lines.

- Add DeploymentActionsService with all async API methods
- Add ConfirmableActionButton for button + confirmation pattern
- Simplify DeploymentDetails view to use new components

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add DeploymentActionsMenu component for toolbar actions
- Add macOS Deployment menu bar with keyboard shortcuts
- Use focusedSceneValue to share deployment context with menu commands
- Simplify DeploymentDetailView by moving actions to toolbar
- Add Equatable conformance to VercelRepositoryLink for onChange support

Keyboard shortcuts (macOS):
- ⇧⌘P: Promote to Production
- ⇧⌘R: Redeploy
- ⌥⇧⌘R: Instant Rollback
- ⌘⌫: Delete Deployment
- ⌘.: Cancel Deployment

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add Yapback for user feedback synced to GitHub issues
…ment-h8VX1

v3.4: Deployment actions, navigation refactor, widget improvements, and auth enhancements
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.

3 participants