You are a UI design strategist and expert AI product builder using Claude 4 Sonnet. Your task is to generate a full interactive user interface design specification for a Personal Banker Management Dashboard for a Loan Origination System (LOS).
Your output should follow modern design standards and leverage pre-built, highly visual dashboard component libraries like:
Do not generate UI components from scratch. Instead, compose the dashboard layout using best-in-class component patterns from these libraries, integrating them contextually. Suggest which library and component fits each section.
🎯 Objective: Design a complete LOS management panel for a Personal Banker (PB) that facilitates:
📋 Key Modules Required in the Dashboard:
🧭 Sidebar Navigation (Collapsible)
🏠 Dashboard Overview (Home)
📄 New Applicant Intake Page
📂 Document Upload + Auto Parser
✅ Stage 1 Checklist UI
🚨 Discrepancy Panel
🔁 Case Status Tracker
🛎 Notifications and Alerts
📊 Reports (optional)
💡 Design Guidelines:
🎯 Final Deliverable: Produce a full multi-panel dashboard UI plan ready for developer handoff. Your response should describe which UI library components to use in each section, their layout/behavior, and explain the workflow logic clearly. Include visual layout ideas (grids, tabs, cards) in text format.
Assume the frontend devs are working with React, Tailwind, and Next.js.
You are now acting as a senior Claude-powered UI architect and strategist. Build this dashboard intelligently with reusable visual components from modern libraries — with full consideration of UBL field workflow and LOS checklist compliance with best practices for banker's usability including theme and design.
Primary Component Library: ShadCN/UI (Tailwind + Radix) - Perfect for Next.js integration Secondary Libraries: Ant Design for complex data tables, Recharts for analytics Layout Pattern: Sidebar + Main Content with responsive breakpoints
/* Primary Brand Colors (UBL-inspired) */
--primary: 220 70% 50% /* UBL Blue */
--primary-foreground: 0 0% 98%
--secondary: 220 14.3% 95.9% /* Light Gray */
--accent: 220 14.3% 95.9% /* Accent Blue */
--destructive: 0 84.2% 60.2% /* Error Red */
--warning: 38 92% 50% /* Warning Orange */
--success: 142 76% 36% /* Success Green */
Component: ShadCN Sidebar + Navigation Menu Layout: Collapsible with icons + labels
// Using ShadCN Sidebar component
<SidebarProvider>
<Sidebar collapsible="icon">
<SidebarHeader>
<SidebarMenu>
<SidebarMenuItem>
<SidebarMenuButton size="lg">
<Building2 />
<span>UBL LOS</span>
</SidebarMenuButton>
</SidebarMenuItem>
</SidebarMenu>
</SidebarHeader>
<SidebarContent>
<SidebarGroup>
<SidebarGroupLabel>Main</SidebarGroupLabel>
<SidebarMenu>
<SidebarMenuItem>
<SidebarMenuButton asChild>
<Link href="/dashboard">
<LayoutDashboard />
<span>Dashboard</span>
</Link>
</SidebarMenuButton>
</SidebarMenuItem>
// ... other menu items
</SidebarMenu>
</SidebarGroup>
</SidebarContent>
</Sidebar>
</SidebarProvider>
Navigation Items:
Layout: CSS Grid (4 columns on desktop, responsive) Components: ShadCN Cards + Charts (Recharts integration)
// Using ShadCN Card component
<div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4">
<Card>
<CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
<CardTitle className="text-sm font-medium">Pending Cases</CardTitle>
<Clock className="h-4 w-4 text-muted-foreground" />
</CardHeader>
<CardContent>
<div className="text-2xl font-bold">24</div>
<p className="text-xs text-muted-foreground">+2 from yesterday</p>
</CardContent>
</Card>
// ... other stat cards
</div>
Component: ShadCN Data Table with sorting/filtering
<Card className="col-span-4">
<CardHeader>
<CardTitle>Recent Applications</CardTitle>
</CardHeader>
<CardContent>
<DataTable
columns={applicantColumns}
data={recentApplicants}
searchKey="name"
filterOptions={[
{ label: "Status", key: "status", options: ["Draft", "Submitted", "Approved"] }
]}
/>
</CardContent>
</Card>
Component: Recharts with ShadCN Chart wrapper
Layout: Multi-step form using ShadCN Form + Steps Pattern: Card-based sections with progressive disclosure
<Card>
<CardHeader>
<CardTitle>Applicant Identification</CardTitle>
</CardHeader>
<CardContent>
<Form {...form}>
<div className="flex gap-2">
<FormField
control={form.control}
name="cnic"
render={({ field }) => (
<FormItem className="flex-1">
<FormLabel>CNIC Number</FormLabel>
<FormControl>
<Input
placeholder="12345-1234567-1"
{...field}
maxLength={15}
/>
</FormControl>
</FormItem>
)}
/>
<Button
type="button"
onClick={handleCNICFetch}
disabled={isLoading}
>
{isLoading && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
Fetch Details
</Button>
</div>
</Form>
</CardContent>
</Card>
Component: ShadCN Alert + Badge system for data confidence
<Alert className="border-green-200 bg-green-50">
<CheckCircle className="h-4 w-4" />
<AlertTitle>CNIC Data Retrieved</AlertTitle>
<AlertDescription>
<div className="grid grid-cols-2 gap-4 mt-2">
<div>
<Label>Full Name</Label>
<div className="flex items-center gap-2">
<span>Muhammad Ahmed Khan</span>
<Badge variant="secondary">Verified</Badge>
</div>
</div>
// ... other fields
</div>
</AlertDescription>
</Alert>
Layout: Drag-and-drop zone + Preview panels Components: ShadCN File Upload + Tabs for document types
<Tabs defaultValue="salary-slip" className="w-full">
<TabsList className="grid w-full grid-cols-3">
<TabsTrigger value="salary-slip">Salary Slip</TabsTrigger>
<TabsTrigger value="bank-statement">Bank Statement</TabsTrigger>
<TabsTrigger value="financial-statement">Financial Statement</TabsTrigger>
</TabsList>
<TabsContent value="salary-slip">
<Card>
<CardContent className="pt-6">
<div className="border-2 border-dashed border-gray-300 rounded-lg p-6 text-center">
<Upload className="mx-auto h-12 w-12 text-gray-400" />
<p className="mt-2 text-sm text-gray-600">
Drag and drop your salary slip here, or click to browse
</p>
<Input type="file" className="hidden" accept=".pdf,.jpg,.png" />
</div>
</CardContent>
</Card>
</TabsContent>
</Tabs>
Component: ShadCN Sheet (slide-over) with editable fields
<Sheet>
<SheetContent className="w-[600px] sm:w-[800px]">
<SheetHeader>
<SheetTitle>Document Parsing Results</SheetTitle>
<SheetDescription>
Review and edit extracted information
</SheetDescription>
</SheetHeader>
<div className="grid gap-4 py-4">
<Alert>
<AlertCircle className="h-4 w-4" />
<AlertTitle>Parsing Confidence: 94%</AlertTitle>
<AlertDescription>
Please review highlighted fields that need attention
</AlertDescription>
</Alert>
<div className="grid grid-cols-2 gap-4">
<div>
<Label>Basic Salary</Label>
<Input
value="85,000"
className="border-orange-300 bg-orange-50" // Highlight uncertain fields
/>
<p className="text-xs text-orange-600">Confidence: 78%</p>
</div>
// ... other extracted fields
</div>
</div>
</SheetContent>
</Sheet>
Component: ShadCN Accordion + Checkbox with conditional rendering Pattern: Expandable sections with status indicators
<Card>
<CardHeader>
<CardTitle className="flex items-center gap-2">
<CheckSquare className="h-5 w-5" />
Stage 1 Checklist
<Badge variant="outline">6/9 Complete</Badge>
</CardTitle>
</CardHeader>
<CardContent>
<Accordion type="single" collapsible className="w-full">
<AccordionItem value="cnic-copy">
<AccordionTrigger className="flex items-center gap-2">
<CheckCircle className="h-4 w-4 text-green-500" />
CNIC Copy
<Badge variant="secondary">Complete</Badge>
</AccordionTrigger>
<AccordionContent>
<div className="flex items-center justify-between">
<span>Front and back copy uploaded</span>
<Button variant="outline" size="sm">View Document</Button>
</div>
</AccordionContent>
</AccordionItem>
<AccordionItem value="auto-debit" className={!isETB ? "opacity-50" : ""}>
<AccordionTrigger>
<AlertCircle className="h-4 w-4 text-orange-500" />
Auto Debit Form
<Badge variant="outline">ETB Only</Badge>
</AccordionTrigger>
<AccordionContent>
{!isETB && (
<Alert>
<Info className="h-4 w-4" />
<AlertDescription>
This item is only required for Existing to Bank (ETB) customers
</AlertDescription>
</Alert>
)}
</AccordionContent>
</AccordionItem>
</Accordion>
</CardContent>
</Card>
Layout: Split view - List + Detail panel Components: ShadCN Data Table + Dialog for resolution
<Card>
<CardHeader>
<CardTitle className="flex items-center gap-2">
<AlertTriangle className="h-5 w-5 text-orange-500" />
Active Discrepancies
<Badge variant="destructive">3 Unresolved</Badge>
</CardTitle>
</CardHeader>
<CardContent>
<Table>
<TableHeader>
<TableRow>
<TableHead>Type</TableHead>
<TableHead>Description</TableHead>
<TableHead>Severity</TableHead>
<TableHead>Actions</TableHead>
</TableRow>
</TableHeader>
<TableBody>
<TableRow>
<TableCell>
<Badge variant="destructive">Name Mismatch</Badge>
</TableCell>
<TableCell>
CNIC: "Ahmed Khan" vs Upload: "A. Khan"
</TableCell>
<TableCell>
<Badge variant="outline">High</Badge>
</TableCell>
<TableCell>
<Button variant="outline" size="sm">Resolve</Button>
</TableCell>
</TableRow>
</TableBody>
</Table>
</CardContent>
</Card>
<Dialog>
<DialogContent>
<DialogHeader>
<DialogTitle>Resolve Name Mismatch</DialogTitle>
</DialogHeader>
<div className="grid gap-4 py-4">
<RadioGroup defaultValue="use-cnic">
<div className="flex items-center space-x-2">
<RadioGroupItem value="use-cnic" id="use-cnic" />
<Label htmlFor="use-cnic">Use CNIC Name: "Ahmed Khan"</Label>
</div>
<div className="flex items-center space-x-2">
<RadioGroupItem value="use-upload" id="use-upload" />
<Label htmlFor="use-upload">Use Uploaded Name: "A. Khan"</Label>
</div>
<div className="flex items-center space-x-2">
<RadioGroupItem value="escalate" id="escalate" />
<Label htmlFor="escalate">Escalate to Supervisor</Label>
</div>
</RadioGroup>
<Textarea placeholder="Add resolution notes..." />
</div>
<DialogFooter>
<Button variant="outline">Cancel</Button>
<Button>Resolve Discrepancy</Button>
</DialogFooter>
</DialogContent>
</Dialog>
Component: Enhanced ShadCN Data Table with advanced filtering Features: Real-time status updates, bulk actions, export functionality
<Card>
<CardHeader>
<CardTitle>Case Management</CardTitle>
<div className="flex gap-2">
<Select>
<SelectTrigger className="w-[180px]">
<SelectValue placeholder="Filter by Status" />
</SelectTrigger>
<SelectContent>
<SelectItem value="all">All Cases</SelectItem>
<SelectItem value="draft">Draft</SelectItem>
<SelectItem value="submitted">Submitted</SelectItem>
<SelectItem value="approved">Approved</SelectItem>
</SelectContent>
</Select>
<Button variant="outline">
<Download className="mr-2 h-4 w-4" />
Export
</Button>
</div>
</CardHeader>
<CardContent>
<DataTable
columns={[
{
accessorKey: "applicantName",
header: "Applicant",
},
{
accessorKey: "losId",
header: "LOS ID",
},
{
accessorKey: "segment",
header: "Segment",
cell: ({ row }) => (
<Badge variant="outline">
{row.getValue("segment")}
</Badge>
),
},
{
accessorKey: "status",
header: "Status",
cell: ({ row }) => {
const status = row.getValue("status")
return (
<Badge
variant={getStatusVariant(status)}
className="flex items-center gap-1"
>
<StatusIcon status={status} />
{status}
</Badge>
)
},
},
{
accessorKey: "lastUpdate",
header: "Last Update",
cell: ({ row }) => (
<span className="text-sm text-muted-foreground">
{formatDistanceToNow(row.getValue("lastUpdate"))} ago
</span>
),
},
{
id: "actions",
cell: ({ row }) => (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" className="h-8 w-8 p-0">
<MoreHorizontal className="h-4 w-4" />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuItem>View Details</DropdownMenuItem>
<DropdownMenuItem>Edit Application</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem className="text-red-600">
Cancel Application
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
),
},
]}
data={cases}
/>
</CardContent>
</Card>
Components: ShadCN Toast + Badge + Alert Pattern: Global notification provider with persistent alerts panel
// Using ShadCN Toast for temporary notifications
const { toast } = useToast()
// Success notification
toast({
title: "Application Submitted",
description: "LOS ID: UBL-2024-001234 has been submitted successfully",
action: <ToastAction altText="View">View</ToastAction>,
})
// Warning notification
toast({
variant: "destructive",
title: "Deadline Approaching",
description: "3 applications require attention within 24 hours",
})
<Card className="border-orange-200 bg-orange-50">
<CardHeader>
<CardTitle className="flex items-center gap-2 text-orange-800">
<Bell className="h-5 w-5" />
Active Alerts
<Badge variant="secondary">5</Badge>
</CardTitle>
</CardHeader>
<CardContent>
<div className="space-y-3">
<Alert className="border-red-200 bg-red-50">
<AlertCircle className="h-4 w-4" />
<AlertTitle>High Priority</AlertTitle>
<AlertDescription>
CIU query received for LOS-001234 - Response due in 2 hours
<Button variant="link" className="p-0 h-auto ml-2">
Respond Now
</Button>
</AlertDescription>
</Alert>
<Alert className="border-yellow-200 bg-yellow-50">
<Clock className="h-4 w-4" />
<AlertTitle>Deadline Warning</AlertTitle>
<AlertDescription>
3 applications pending document upload (Due: Today 5 PM)
</AlertDescription>
</Alert>
</div>
</CardContent>
</Card>
Components: Recharts + ShadCN Cards + Date Range Picker Layout: Dashboard-style grid with exportable charts
<div className="grid gap-4 md:grid-cols-2 lg:grid-cols-3">
<Card className="col-span-2">
<CardHeader>
<CardTitle>Weekly Submission Trends</CardTitle>
<div className="flex items-center gap-2">
<CalendarDateRangePicker />
<Button variant="outline" size="sm">
<Download className="mr-2 h-4 w-4" />
Export
</Button>
</div>
</CardHeader>
<CardContent>
<ResponsiveContainer width="100%" height={300}>
<LineChart data={weeklyData}>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="week" />
<YAxis />
<Tooltip />
<Line type="monotone" dataKey="submissions" stroke="#2563eb" />
</LineChart>
</ResponsiveContainer>
</CardContent>
</Card>
<Card>
<CardHeader>
<CardTitle>Approval Rates by Segment</CardTitle>
</CardHeader>
<CardContent>
<ResponsiveContainer width="100%" height={300}>
<PieChart>
<Pie
data={segmentData}
cx="50%"
cy="50%"
outerRadius={80}
fill="#8884d8"
dataKey="value"
label
/>
<Tooltip />
</PieChart>
</ResponsiveContainer>
</CardContent>
</Card>
</div>
This comprehensive specification provides a solid foundation for building a modern, user-friendly Personal Banker LOS Dashboard that meets UBL's operational requirements while maintaining excellent user experience and technical standards1.
Sources
I'll build the complete Personal Banker LOS Dashboard for you using ShadCN components and Next.js. This will be a fully functional preview with all the modules you specified.
I'll build the complete Personal Banker LOS Dashboard with all the modules you specified. This will be a fully functional preview using ShadCN components.
I've built a comprehensive Personal Banker LOS Dashboard with all the modules you requested:
The dashboard is fully functional with realistic workflows, proper error handling, and a professional banking interface that meets modern UX standards. All components are built using ShadCN/UI for consistency and maintainability.
Sources
Enhance the 'New Applicant Intake' process within the Personal Banker Management Dashboard to include a streamlined document processing workflow. This workflow should guide the user through the document upload, parsing, and verification steps with a focus on a smooth and intuitive user experience. The process should incorporate the following features:
Document Upload and Parsing Integration:
Interactive Checklist with Auto-Check and Skip Option:
Conditional Visibility and Workflow Logic:
UI/UX Enhancements:
Component Library Integration:
Error Handling and Validation:
Integration with Existing Modules:
Deliverable:
Provide a detailed UI design specification for the enhanced 'New Applicant Intake' process, including:
This enhanced design should significantly improve the efficiency and user-friendliness of the document processing workflow within the Personal Banker Management Dashboard.