diff --git a/apps/ui/src/components/ui/confirm-dialog.tsx b/apps/ui/src/components/ui/confirm-dialog.tsx
new file mode 100644
index 00000000..28570d1a
--- /dev/null
+++ b/apps/ui/src/components/ui/confirm-dialog.tsx
@@ -0,0 +1,83 @@
+import type { ReactNode } from 'react';
+import { LucideIcon } from 'lucide-react';
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+} from '@/components/ui/dialog';
+import { Button } from '@/components/ui/button';
+import { HotkeyButton } from '@/components/ui/hotkey-button';
+
+interface ConfirmDialogProps {
+ open: boolean;
+ onOpenChange: (open: boolean) => void;
+ onConfirm: () => void;
+ title: string;
+ description: string;
+ /** Optional icon to show in the title */
+ icon?: LucideIcon;
+ /** Icon color class. Defaults to "text-primary" */
+ iconClassName?: string;
+ /** Optional content to show between description and buttons */
+ children?: ReactNode;
+ /** Text for the confirm button. Defaults to "Confirm" */
+ confirmText?: string;
+ /** Text for the cancel button. Defaults to "Cancel" */
+ cancelText?: string;
+ /** Variant for the confirm button. Defaults to "default" */
+ confirmVariant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';
+}
+
+export function ConfirmDialog({
+ open,
+ onOpenChange,
+ onConfirm,
+ title,
+ description,
+ icon: Icon,
+ iconClassName = 'text-primary',
+ children,
+ confirmText = 'Confirm',
+ cancelText = 'Cancel',
+ confirmVariant = 'default',
+}: ConfirmDialogProps) {
+ const handleConfirm = () => {
+ onConfirm();
+ onOpenChange(false);
+ };
+
+ return (
+
+ );
+}
diff --git a/apps/ui/src/components/views/github-issues-view.tsx b/apps/ui/src/components/views/github-issues-view.tsx
index 0ffbc10f..1da8dc3c 100644
--- a/apps/ui/src/components/views/github-issues-view.tsx
+++ b/apps/ui/src/components/views/github-issues-view.tsx
@@ -42,6 +42,7 @@ function getFeaturePriority(complexity: IssueComplexity | undefined): number {
import { useAppStore } from '@/store/app-store';
import { Button } from '@/components/ui/button';
import { Markdown } from '@/components/ui/markdown';
+import { ConfirmDialog } from '@/components/ui/confirm-dialog';
import { cn } from '@/lib/utils';
import { toast } from 'sonner';
import { ValidationDialog } from './github-issues-view/validation-dialog';
@@ -60,6 +61,8 @@ export function GitHubIssuesView() {
const [cachedValidations, setCachedValidations] = useState