UNIVERSE MAP UX ISSUES ACTION PLAN
Ecosistema completo para organización y gestión de contenido con interfaces espaciales
Universe Map - Critical UX Issues & Action Plan
🚨 ISSUES IDENTIFIED
1. ✅ FIXED: Unused Components Warning
Problem: Components imported but not used in template
- ConnectionSystemComponent
- ZoomHierarchyComponent
- ModulePreviewComponent
Status: ✅ RESOLVED
- Removed from imports
- Removed unused connection methods
- Removed duplicate
openDeploy()method - All linter errors fixed
2. ⚠️ TODO: Context Actions Panel Does Nothing
Problem: Right panel shows "Select a module to see actions" but nothing happens when selecting modules
Root Cause:
- Tree view emits
selectModuleevent - Layout view emits
selectModuleevent - But parent component not wiring these to
selectedModuleIdsignal
Solution Needed:
// In universe-management.component.html
<lib-tree-view
[modules]="allModules()"
[selectedModuleId]="selectedModuleId()"
(selectModule)="onTreeSelectModule($event)" // ← Wire this!
/>
// In .ts
onTreeSelectModule(module: UniversalModule) {
this.selectedModuleId.set(module.id);
}
3. ⚠️ TODO: Tab State Not Persisted
Problem: When navigating away and back, loses which tab was active
Solution Needed: Use storage-system to persist:
- Active tab
- View mode (tree/layout/freeform)
- Left/right panel collapsed states
- Selected module ID
// Save on change
private async saveUIState() {
await this.storage.set('universe-map:ui-state', {
activeTab: this.activeTab(),
viewMode: this.viewMode(),
leftPanelCollapsed: this.leftPanelCollapsed(),
rightPanelCollapsed: this.rightPanelCollapsed(),
selectedModuleId: this.selectedModuleId()
});
}
// Load on init
private async loadUIState() {
const state = await this.storage.get('universe-map:ui-state');
if (state) {
this.activeTab.set(state.activeTab);
// ... etc
}
}
4. 🔥 CRITICAL: Layout View UX is Confusing
Problem: The layout view shows empty zones with no visual hierarchy
Current Bad Flow:
- Open Structure tab
- See "Sidebar 0 Drop modules here" (just text, not visual)
- "Main Content 0 Drop modules here" (not intuitive)
- Modules scattered randomly
Ideal Flow Should Be:
START WITH LAYOUT CHOICE
- Show layout templates visually
- User picks: "Sidebar + Content", "3-Column", "Header + Footer + Content", etc.
SHOW VISUAL REPRESENTATION
- Sidebar zone should LOOK like a sidebar (narrow, left side, different color)
- Header should LOOK like a header (full width, top, different shade)
- Content should LOOK like main content area (large, centered)
DROP MODULES INTO VISUAL ZONES
- Drag "Product List" module → drop into Sidebar zone
- See it appear IN the visual sidebar representation
- Modules grouped by zone in tree view
Implementation Plan:
// Step 1: Choose Layout First
interface LayoutTemplate {
id: string;
name: string;
preview: string; // SVG or visual representation
zones: LayoutZone[];
}
const LAYOUT_TEMPLATES: LayoutTemplate[] = [
{
id: 'sidebar-content',
name: 'Sidebar + Content',
zones: [
{ id: 'sidebar', name: 'Sidebar', gridArea: '1 / 1 / 2 / 2', visual: 'narrow-left' },
{ id: 'content', name: 'Main Content', gridArea: '1 / 2 / 2 / 4', visual: 'main' }
]
},
{
id: 'header-sidebar-content',
name: 'Header + Sidebar + Content',
zones: [
{ id: 'header', name: 'Header', gridArea: '1 / 1 / 2 / 4', visual: 'top-bar' },
{ id: 'sidebar', name: 'Sidebar', gridArea: '2 / 1 / 3 / 2', visual: 'narrow-left' },
{ id: 'content', name: 'Main Content', gridArea: '2 / 2 / 3 / 4', visual: 'main' }
]
}
];
// Step 2: Visual Zone Rendering
<div class="layout-preview" [class]="selectedLayout.id">
@for (zone of selectedLayout.zones; track zone.id) {
<div
class="visual-zone"
[class]="zone.visual"
[style.grid-area]="zone.gridArea"
(drop)="onModuleDropInZone($event, zone.id)">
<!-- Zone Label -->
<div class="zone-label">
<i class="fas fa-layer-group"></i>
{{ zone.name }}
</div>
<!-- Modules in this zone -->
@for (module of getModulesInZone(zone.id); track module.id) {
<div class="module-in-zone" [class.selected]="selectedModuleId() === module.id">
<i [class]="'fas ' + getIcon(module.type)"></i>
{{ module.name }}
</div>
}
<!-- Empty state -->
@if (getModulesInZone(zone.id).length === 0) {
<div class="zone-empty-state">
<i class="fas fa-arrow-down"></i>
Drop modules here
</div>
}
</div>
}
</div>
Visual Styles Needed:
.visual-zone {
border: 2px dashed var(--ux-border);
border-radius: 8px;
padding: 1rem;
min-height: 100px;
transition: all 0.3s;
&.narrow-left {
background: linear-gradient(to right, rgba(99, 102, 241, 0.05), transparent);
border-left: 4px solid var(--ux-primary);
max-width: 250px;
}
&.top-bar {
background: linear-gradient(to bottom, rgba(99, 102, 241, 0.08), transparent);
border-top: 4px solid var(--ux-primary);
min-height: 64px;
}
&.main {
background: rgba(255, 255, 255, 0.5);
flex: 1;
}
&:hover {
border-color: var(--ux-primary);
background: rgba(99, 102, 241, 0.1);
}
}
.module-in-zone {
padding: 0.75rem 1rem;
background: white;
border: 1px solid var(--ux-border);
border-radius: 6px;
margin-bottom: 0.5rem;
display: flex;
align-items: center;
gap: 0.75rem;
cursor: pointer;
&:hover {
border-color: var(--ux-primary);
box-shadow: 0 2px 8px rgba(99, 102, 241, 0.2);
}
&.selected {
background: var(--ux-primary-light);
border-color: var(--ux-primary);
}
}
🎯 PRIORITY ORDER
- ✅ DONE: Remove unused components (warnings gone)
- NEXT: Fix context actions panel (make module selection work)
- NEXT: Implement tab state persistence
- CRITICAL: Redesign layout view to be visual and intuitive
- IMPORTANT: Wire tree view to show modules grouped by zones
📝 IMPLEMENTATION CHECKLIST
Phase 1: Quick Fixes (30 min)
- Remove unused component imports
- Wire selectModule events to selectedModuleId signal
- Implement storage-system persistence for UI state
Phase 2: Layout View Redesign (2 hours)
- Create layout template selector component
- Design visual zone representations
- Implement drag-and-drop to visual zones
- Store zone assignment in module config
- Update tree view to group by zones
Phase 3: Polish (1 hour)
- Add smooth transitions
- Improve empty states
- Add helpful tooltips
- Test all interactions
🚀 EXPECTED OUTCOME
After implementing these fixes:
- Clear Visual Hierarchy: Users SEE the layout structure
- Intuitive Workflow: Choose layout → Add modules to zones → Organize
- State Persistence: Tab/view mode remembered across sessions
- Working Panels: Selecting modules shows relevant actions
- Professional UX: Looks and feels like a production-ready tool
💡 KEY INSIGHT
The fundamental issue is: Layout should drive the entire UI, not be an afterthought.
Current: Canvas with random modules → confusing
Better: Layout template → Visual zones → Drag modules into zones → Clear hierarchy
This makes the tool 10x more intuitive!