Initialize complete Wails (Go + React) database management tool
## Project Structure
- Frontend: React 18 + TypeScript + Vite
- Backend: Go 1.23 + Gin + GORM + SQLite + Zap
- Desktop: Wails v2
## Features Implemented
### UI/UX Design
- Complete design system with colors, typography, spacing
- Wireframes for all major screens
- User flows and interaction specifications
- Layout design with 3-panel architecture
### Frontend Components
- ConnectionPanel: Database connection sidebar with status indicators
- AppLayout: Resizable main layout framework
- MenuBar & ToolBar: Navigation and quick actions
- QueryEditor: SQL editor with syntax highlighting support
- DataGrid: Sortable, filterable, editable data table
- TableStructure: Table metadata viewer
- StatusBar: Connection info and query statistics
- StatusIndicator: Animated connection status component
### Backend Services
- Wails bindings: 15+ methods exposed to frontend
- Connection management: CRUD operations with connection pooling
- Query execution: SQL execution with result handling
- Table metadata: Schema introspection
- Encryption service: AES-256-GCM password encryption
- HTTP API: RESTful endpoints for debugging/integration
### Documentation
- Design system specification
- Feature requirements document
- Wireframes and user flows
- API testing guide
- Project README
## Technical Details
- Password encryption using AES-256-GCM
- Thread-safe connection manager with sync.RWMutex
- Unified error handling and logging
- Clean architecture with dependency injection
- SQLite for storing user data (connections, history)
🤖 Generated with Qoder
218 lines
6.3 KiB
Markdown
218 lines
6.3 KiB
Markdown
# uzdb Design System
|
|
|
|
## Overview
|
|
uzdb is a lightweight database management tool inspired by DBeaver and Navicat, built with Wails (Go + React). This document defines the visual design language and component system.
|
|
|
|
---
|
|
|
|
## Color Palette
|
|
|
|
### Primary Colors
|
|
| Token | Value | Usage |
|
|
|-------|-------|-------|
|
|
| `--primary` | `#3b82f6` | Main actions, active states, links |
|
|
| `--primary-hover` | `#2563eb` | Hover states |
|
|
| `--primary-active` | `#1d4ed8` | Active/pressed states |
|
|
|
|
### Semantic Colors
|
|
| Token | Value | Usage |
|
|
|-------|-------|-------|
|
|
| `--success` | `#10b981` | Successful operations, connected status |
|
|
| `--warning` | `#f59e0b` | Warnings, pending states |
|
|
| `--error` | `#ef4444` | Errors, disconnected status, destructive actions |
|
|
| `--info` | `#06b6d4` | Informational messages |
|
|
|
|
### Neutral Colors
|
|
| Token | Value | Usage |
|
|
|-------|-------|-------|
|
|
| `--bg-primary` | `#ffffff` | Main background |
|
|
| `--bg-secondary` | `#f8fafc` | Secondary backgrounds, sidebars |
|
|
| `--bg-tertiary` | `#f1f5f9` | Cards, panels |
|
|
| `--border` | `#e2e8f0` | Borders, dividers |
|
|
| `--text-primary` | `#0f172a` | Primary text |
|
|
| `--text-secondary` | `#64748b` | Secondary text, labels |
|
|
| `--text-muted` | `#94a3b8` | Placeholder text, hints |
|
|
|
|
### Database Type Colors
|
|
| Token | Value | Usage |
|
|
|-------|-------|-------|
|
|
| `--db-mysql` | `#00758f` | MySQL connections |
|
|
| `--db-postgresql` | `#336791` | PostgreSQL connections |
|
|
| `--db-sqlite` |#003b57` | SQLite connections |
|
|
| `--db-mariadb` | `#003541` | MariaDB connections |
|
|
|
|
---
|
|
|
|
## Typography
|
|
|
|
### Font Family
|
|
```css
|
|
--font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
--font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace;
|
|
```
|
|
|
|
### Font Sizes
|
|
| Token | Size | Line Height | Usage |
|
|
|-------|------|-------------|-------|
|
|
| `--text-xs` | 12px | 16px | Captions, hints |
|
|
| `--text-sm` | 14px | 20px | Body text, labels |
|
|
| `--text-base` | 16px | 24px | Default text |
|
|
| `--text-lg` | 18px | 28px | Section titles |
|
|
| `--text-xl` | 20px | 28px | Panel titles |
|
|
| `--text-2xl` | 24px | 32px | Modal titles |
|
|
|
|
---
|
|
|
|
## Spacing
|
|
|
|
### Base Scale (4px grid)
|
|
| Token | Value |
|
|
|-------|-------|
|
|
| `--space-1` | 4px |
|
|
| `--space-2` | 8px |
|
|
| `--space-3` | 12px |
|
|
| `--space-4` | 16px |
|
|
| `--space-5` | 20px |
|
|
| `--space-6` | 24px |
|
|
| `--space-8` | 32px |
|
|
| `--space-10` | 40px |
|
|
| `--space-12` | 48px |
|
|
|
|
---
|
|
|
|
## Layout
|
|
|
|
### Application Shell
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Menu Bar (File, Edit, View, Tools, Help) │
|
|
├─────────────────────────────────────────────────────────────┤
|
|
│ Toolbar (Quick actions, search) │
|
|
├──────────┬──────────────────────────────────────────────────┤
|
|
│ │ │
|
|
│ Sidebar │ Main Content Area │
|
|
│ (200px) │ (Query editor, │
|
|
│ │ data grid, │
|
|
│ - Conn │ schema viewer) │
|
|
│ - DBs │ │
|
|
│ - Tables│ │
|
|
│ │ │
|
|
├──────────┴──────────────────────────────────────────────────┤
|
|
│ Status Bar (Connection info, query time, row count) │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Breakpoints
|
|
- **Sidebar collapsible**: < 768px width
|
|
- **Responsive panels**: Stack vertically on small screens
|
|
|
|
---
|
|
|
|
## Components
|
|
|
|
### Button Styles
|
|
```css
|
|
.btn-primary {
|
|
background: var(--primary);
|
|
color: white;
|
|
padding: var(--space-2) var(--space-4);
|
|
border-radius: 6px;
|
|
font-size: var(--text-sm);
|
|
}
|
|
|
|
.btn-secondary {
|
|
background: transparent;
|
|
border: 1px solid var(--border);
|
|
color: var(--text-primary);
|
|
padding: var(--space-2) var(--space-4);
|
|
border-radius: 6px;
|
|
}
|
|
```
|
|
|
|
### Input Fields
|
|
```css
|
|
.input {
|
|
border: 1px solid var(--border);
|
|
border-radius: 6px;
|
|
padding: var(--space-2) var(--space-3);
|
|
font-size: var(--text-sm);
|
|
}
|
|
|
|
.input:focus {
|
|
outline: 2px solid var(--primary);
|
|
border-color: transparent;
|
|
}
|
|
```
|
|
|
|
### Data Grid
|
|
- Row height: 36px
|
|
- Header height: 40px
|
|
- Cell padding: 8px 12px
|
|
- Border: 1px solid var(--border)
|
|
- Alternating row colors for readability
|
|
|
|
### Tabs
|
|
- Active tab: Primary color underline (2px)
|
|
- Inactive tab: Transparent background
|
|
- Tab height: 36px
|
|
|
|
---
|
|
|
|
## Icons
|
|
|
|
Use [Lucide Icons](https://lucide.dev/) or [Heroicons](https://heroicons.com/)
|
|
|
|
Common icons:
|
|
- `database` - Connection/database
|
|
- `table` - Table view
|
|
- `search` - Search/query
|
|
- `play` - Execute query
|
|
- `download` - Export data
|
|
- `upload` - Import data
|
|
- `settings` - Settings/preferences
|
|
- `plus` - Add new
|
|
- `trash-2` - Delete
|
|
|
|
---
|
|
|
|
## Interactions
|
|
|
|
### Hover States
|
|
- Buttons: Darken background by 10%
|
|
- Links: Underline + primary color
|
|
- Table rows: Background `--bg-tertiary`
|
|
|
|
### Focus States
|
|
- All interactive elements: 2px primary outline
|
|
- Visible focus ring for keyboard navigation
|
|
|
|
### Loading States
|
|
- Spinner for async operations
|
|
- Skeleton screens for data loading
|
|
- Disabled state during execution
|
|
|
|
### Transitions
|
|
- Duration: 150ms
|
|
- Easing: `ease-in-out`
|
|
- Properties: color, background-color, transform
|
|
|
|
---
|
|
|
|
## Accessibility
|
|
|
|
### Requirements
|
|
- Minimum contrast ratio: 4.5:1 (AA standard)
|
|
- Focus indicators on all interactive elements
|
|
- Keyboard navigation support
|
|
- Screen reader friendly labels
|
|
- Resizable text up to 200%
|
|
|
|
### Keyboard Shortcuts
|
|
| Action | Shortcut |
|
|
|--------|----------|
|
|
| Execute query | Ctrl/Cmd + Enter |
|
|
| New connection | Ctrl/Cmd + N |
|
|
| Save | Ctrl/Cmd + S |
|
|
| Find | Ctrl/Cmd + F |
|
|
| Close tab | Ctrl/Cmd + W |
|