Add User Preferences to MVP, add Phase 2.5 Personal Branching specs
- Fixed minor typescript errors that would show during compile
This commit is contained in:
25
.claude/settings.local.json
Normal file
25
.claude/settings.local.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"permissions": {
|
||||||
|
"allow": [
|
||||||
|
"Bash(tasklist:*)",
|
||||||
|
"Bash(findstr:*)",
|
||||||
|
"Bash(powershell -Command:*)",
|
||||||
|
"Bash(timeout:*)",
|
||||||
|
"Bash(netstat:*)",
|
||||||
|
"mcp__postgres__query",
|
||||||
|
"Bash(curl:*)",
|
||||||
|
"Bash(TOKEN=\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MjdjMDI1Ni00N2VmLTRiODAtYjZjNS1iODE5MDAyMzdhMjkiLCJleHAiOjE3Njk1NjA4NTgsInR5cGUiOiJhY2Nlc3MifQ.7eBGz7awT6BOPbfNv303zm4ERQBeUOGHLRPgQMgwchM\")",
|
||||||
|
"Bash(git add:*)",
|
||||||
|
"Bash(git commit:*)",
|
||||||
|
"Bash(git push:*)",
|
||||||
|
"Bash(dir /b \"C:\\\\Dev\\\\Projects\\\\Apoklisis\")",
|
||||||
|
"Bash(npm create:*)",
|
||||||
|
"Bash(npm install:*)",
|
||||||
|
"Bash(npx tailwindcss:*)",
|
||||||
|
"Bash(node node_modules/tailwindcss/lib/cli.js:*)",
|
||||||
|
"Bash(npm exec:*)",
|
||||||
|
"Bash(npm uninstall:*)",
|
||||||
|
"Bash(npm run build:*)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -67,6 +67,11 @@
|
|||||||
- [x] Loading states
|
- [x] Loading states
|
||||||
- [x] Error handling and user feedback (ErrorBoundary)
|
- [x] Error handling and user feedback (ErrorBoundary)
|
||||||
- [ ] Keyboard shortcuts - *Not yet implemented*
|
- [ ] Keyboard shortcuts - *Not yet implemented*
|
||||||
|
- [ ] User preferences
|
||||||
|
- [ ] Settings modal/page accessible from user menu
|
||||||
|
- [ ] Theme toggle (dark/light/system)
|
||||||
|
- [ ] Persist preferences in localStorage
|
||||||
|
- [ ] Default export format preference
|
||||||
|
|
||||||
**Testing:**
|
**Testing:**
|
||||||
- [x] Michael tests on 5-10 real tickets
|
- [x] Michael tests on 5-10 real tickets
|
||||||
|
|||||||
@@ -274,6 +274,52 @@ Started Citrix VDA service after resolving NetLogon dependency issue. VDA succes
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### 5.5 User Preferences (MVP)
|
||||||
|
|
||||||
|
**Description:** Basic user settings to personalize the application experience, stored locally for MVP with optional server sync in later phases.
|
||||||
|
|
||||||
|
**MVP Settings:**
|
||||||
|
|
||||||
|
| Setting | Options | Default | Storage |
|
||||||
|
|---------|---------|---------|--------|
|
||||||
|
| Theme | Light / Dark / System | System | localStorage |
|
||||||
|
| Default Export Format | Markdown / Text / HTML | Markdown | localStorage |
|
||||||
|
|
||||||
|
**UI Components:**
|
||||||
|
- **Settings Access:** Gear icon in user menu dropdown
|
||||||
|
- **Settings Modal:** Simple modal with toggle/dropdown for each setting
|
||||||
|
- **Theme Toggle:** Can also be quick-access icon in header
|
||||||
|
|
||||||
|
**Theme Implementation:**
|
||||||
|
```
|
||||||
|
Light Mode:
|
||||||
|
- Background: White/light gray
|
||||||
|
- Text: Dark gray/black
|
||||||
|
- Accents: Brand colors
|
||||||
|
|
||||||
|
Dark Mode:
|
||||||
|
- Background: Dark gray (#1a1a2e or similar)
|
||||||
|
- Text: Light gray/white
|
||||||
|
- Accents: Adjusted brand colors for dark backgrounds
|
||||||
|
|
||||||
|
System:
|
||||||
|
- Follows OS preference via prefers-color-scheme media query
|
||||||
|
- Updates automatically if OS setting changes
|
||||||
|
```
|
||||||
|
|
||||||
|
**Technical Requirements:**
|
||||||
|
- Persist to localStorage immediately on change
|
||||||
|
- Apply theme without page reload (CSS variables)
|
||||||
|
- Respect system preference on first visit
|
||||||
|
- Export format preference used as default in export dialog
|
||||||
|
|
||||||
|
**Future Enhancements (Phase 2+):**
|
||||||
|
- Sync preferences to user account (database)
|
||||||
|
- More settings: auto-save interval, keyboard shortcuts, notification preferences
|
||||||
|
- Per-tree preferences (remember last used export format per tree)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### 5. Attachment Support
|
### 5. Attachment Support
|
||||||
|
|
||||||
**Description:** Upload and attach files (screenshots, logs, command outputs) to specific decision nodes during troubleshooting.
|
**Description:** Upload and attach files (screenshots, logs, command outputs) to specific decision nodes during troubleshooting.
|
||||||
@@ -724,6 +770,7 @@ Public and team steps can be rated by users to surface the most helpful content.
|
|||||||
| Tree Navigation | ✓ | | | | |
|
| Tree Navigation | ✓ | | | | |
|
||||||
| Basic Export | ✓ | | | | |
|
| Basic Export | ✓ | | | | |
|
||||||
| User Auth | ✓ | | | | |
|
| User Auth | ✓ | | | | |
|
||||||
|
| **User Preferences** | **✓** | | | | |
|
||||||
| 5 Starter Trees | ✓ | | | | |
|
| 5 Starter Trees | ✓ | | | | |
|
||||||
| Team Management | | ✓ | | | |
|
| Team Management | | ✓ | | | |
|
||||||
| Tree Editor | | ✓ | | | |
|
| Tree Editor | | ✓ | | | |
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ export function TreeLibraryPage() {
|
|||||||
<select
|
<select
|
||||||
value={selectedCategory}
|
value={selectedCategory}
|
||||||
onChange={(e) => setSelectedCategory(e.target.value)}
|
onChange={(e) => setSelectedCategory(e.target.value)}
|
||||||
|
aria-label="Filter by category"
|
||||||
className={cn(
|
className={cn(
|
||||||
'rounded-md border border-input bg-background px-3 py-2',
|
'rounded-md border border-input bg-background px-3 py-2',
|
||||||
'text-foreground focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary'
|
'text-foreground focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary'
|
||||||
|
|||||||
@@ -18,11 +18,10 @@
|
|||||||
|
|
||||||
/* Linting */
|
/* Linting */
|
||||||
"strict": true,
|
"strict": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
"noUnusedLocals": true,
|
"noUnusedLocals": true,
|
||||||
"noUnusedParameters": true,
|
"noUnusedParameters": true,
|
||||||
"erasableSyntaxOnly": true,
|
|
||||||
"noFallthroughCasesInSwitch": true,
|
"noFallthroughCasesInSwitch": true,
|
||||||
"noUncheckedSideEffectImports": true,
|
|
||||||
|
|
||||||
/* Path aliases */
|
/* Path aliases */
|
||||||
"baseUrl": ".",
|
"baseUrl": ".",
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
{
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"strict": true,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"forceConsistentCasingInFileNames": true
|
||||||
|
},
|
||||||
"files": [],
|
"files": [],
|
||||||
"references": [
|
"references": [
|
||||||
{ "path": "./tsconfig.app.json" },
|
{ "path": "./tsconfig.app.json" },
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
||||||
"target": "ES2023",
|
"target": "ES2022",
|
||||||
"lib": ["ES2023"],
|
"lib": ["ES2022"],
|
||||||
"module": "ESNext",
|
"module": "ESNext",
|
||||||
"types": ["node"],
|
"types": ["node"],
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
@@ -16,11 +16,10 @@
|
|||||||
|
|
||||||
/* Linting */
|
/* Linting */
|
||||||
"strict": true,
|
"strict": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
"noUnusedLocals": true,
|
"noUnusedLocals": true,
|
||||||
"noUnusedParameters": true,
|
"noUnusedParameters": true,
|
||||||
"erasableSyntaxOnly": true,
|
"noFallthroughCasesInSwitch": true
|
||||||
"noFallthroughCasesInSwitch": true,
|
|
||||||
"noUncheckedSideEffectImports": true
|
|
||||||
},
|
},
|
||||||
"include": ["vite.config.ts"]
|
"include": ["vite.config.ts"]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user