12 KiB
12 KiB
UI Audit Report - Mana Loop Game UI
Date: 2025-01-26
Auditor: Senior Next.js Developer / UI/UX Reviewer
Scope: All game UI components in src/components/game/ and tabs in src/components/game/tabs/
1. Visual Inconsistencies
1.1 Color Usage Inconsistencies
| Issue | Location | Details |
|---|---|---|
| Inconsistent background opacity | Multiple files | bg-gray-900/80 used in most cards, but some use bg-gray-800/50 or bg-gray-800/30 inconsistently |
| Border color variations | Multiple components | border-gray-700 (most common), but also border-gray-600, border-gray-800 in different contexts |
| Progress bar background inconsistency | CraftingProgress.tsx:58,89,142, ManaDisplay.tsx:57, SpireTab.tsx:96 |
Most use bg-gray-800, but ActionButtons.tsx:33 uses bg-gray-700 |
| Text color inconsistency for descriptions | SpellsTab.tsx:126, EquipmentTab.tsx:104 |
text-gray-400 vs text-gray-500 used inconsistently for similar content |
Specific Examples:
SpellsTab.tsx:72- Card usesbg-gray-900/80 border-gray-700butopacity-75for unlearned spellsSkillsTab.tsx:227- Category cards usebg-gray-900/80 border-gray-700LabTab.tsx:101- Element grid items usebg-gray-800/50while cards usebg-gray-900/80
1.2 Typography Inconsistencies
| Issue | Location | Details |
|---|---|---|
| Card title sizing | Multiple files | text-xs used for CardTitle in most tabs, but some use text-sm or text-lg |
| Font weight inconsistency | ActionButtons.tsx:127 vs others |
Uses font-semibold while some places use font-bold |
| Game panel title class usage | Multiple | game-panel-title class applied inconsistently - some titles have it, others don't |
Specific Examples:
SpireTab.tsx:71- Usestext-xsfor CardTitleLabTab.tsx:18,47,86,124- All usetext-xsfor CardTitleStatsTab.tsx- Usestext-xsconsistently for section titlesManaDisplay.tsx:47- Usestext-smfor "Max Mana" label (inconsistent)
1.3 Spacing/Padding Inconsistencies
| Issue | Location | Details |
|---|---|---|
| Card padding variations | EquipmentTab.tsx:228 vs SpireTab.tsx:73 |
p-3 used in most, but some use pt-4, pt-3, py-3 inconsistently |
| Gap spacing | Various grid layouts | gap-3 (12px) vs gap-2 (8px) vs gap-4 (16px) used without clear pattern |
| Separator margins | Multiple | my-3, my-2, mt-2 pt-2 used inconsistently |
1.4 Component Sizing Inconsistencies
| Issue | Location | Details |
|---|---|---|
| Button sizing | Multiple | size="sm" used consistently, but some custom buttons use h-6, h-7, h-8 |
| Progress bar heights | Multiple | h-1.5, h-2, h-3 used without clear hierarchy |
| Badge sizing | Multiple | Some use text-xs, others default size |
Specific Examples:
CraftingProgress.tsx:58,89,142- Usesh-2for progress barsSpireTab.tsx:96- Usesh-3for floor HP bar (visually prominent)SkillsTab.tsx:199- Usesh-2for study progress
2. UX Friction Points
2.1 Missing Tooltips on Interactive Elements
| Issue | Location | Impact |
|---|---|---|
| No tooltip on enchantment badges | EquipmentTab.tsx:217-230 |
Users don't know what enchantments do without clicking |
| Limited tooltip usage on action buttons | CraftingTab.tsx |
Buttons like "Start Design" lack explanatory tooltips |
| No tooltip on golem cards | GolemancyTab.tsx:100-180 |
Golem stats could benefit from tooltips explaining mechanics |
2.2 Inconsistent Button Placement and Actions
| Issue | Location | Details |
|---|---|---|
| Delete button placement varies | EquipmentTab.tsx:362-375 vs LootInventory.tsx:283-290 |
Equipment uses 🗑️ icon, Loot uses Trash2 icon with tooltip |
| Cancel button styling inconsistency | CraftingProgress.tsx:49,80,114,132 |
Some use variant="ghost", others variant="outline" |
| Study cancel button | StudyProgress.tsx:30-36 |
Uses variant="ghost" with h-6 w-6 p-0 |
2.3 Navigation and Flow Issues
| Issue | Location | Details |
|---|---|---|
| Crafting tab stage navigation | CraftingTab.tsx:13-30 |
Tabs remember state but user can be confused about which equipment is selected where |
| No breadcrumb or progress indicator | EnchantmentDesigner.tsx |
Multi-step process (Select Type → Select Effects → Name → Create) lacks visual progress |
| Equipment selection confusion | EnchantmentPreparer.tsx:26-65 |
Border-left indicators (red for enchanted, green for ready) not immediately obvious |
2.4 Interactive Element Feedback
| Issue | Location | Details |
|---|---|---|
| Hover states missing on some clickable cards | LootInventory.tsx:265,314,384 |
Some cards have group class but hover effects not consistently applied |
| Selected state not always clear | LabTab.tsx:30 |
Uses border-blue-500 bg-blue-900/20 but could be more prominent |
| No visual feedback on click | Multiple | Buttons and interactive elements don't have active/pressed states defined |
3. Missing Feedback / Empty States
3.1 Empty States Present (Good)
| Component | Location | Status |
|---|---|---|
| LootInventory materials | LootInventory.tsx:157 |
✅ "No items collected yet..." |
| LootInventory blueprints | LootInventory.tsx:303 (implicit) |
✅ Filter shows no results |
| Equipment inventory | EquipmentTab.tsx:270-272 |
✅ "No unequipped items..." |
| Spell list | SpellsTab.tsx:88-91 |
✅ "No spells known yet..." |
| Achievements | AchievementsTab.tsx (via AchievementsDisplay) |
✅ Handled in display component |
| Skill categories | SkillsTab.tsx:224 |
✅ if (skillsInCat.length === 0) return null |
| Design list | EnchantmentDesigner.tsx:241-243 |
✅ "No saved designs yet" |
| Golemancy unlocked | GolemancyTab.tsx:99-102 |
✅ Locked golem cards shown |
3.2 Empty States Missing or Inadequate
| Component | Location | Issue |
|---|---|---|
| Pact Spells section | SpellsTab.tsx:95-100 |
Section renders but no content if signedPacts.length > 0 but no pact spells exist |
| Active Golems | GolemancyTab.tsx:67-79 |
No empty state if hasGolemancy && summonedGolems.length === 0 |
| Equipment Stats Summary | EquipmentTab.tsx:337-358 |
Shows "No active effects" but could be more helpful |
| Attunement Capabilities | AttunementsTab.tsx:180-200 |
Capabilities just show as badges, no explanation for new players |
3.3 Missing Loading States
| Component | Issue |
|---|---|
| All tabs | No loading skeleton or spinner when tab content is loading |
| Study/Design/Preparation progress | Progress bars exist, but no initial loading state |
| Equipment instance loading | No feedback when equipment operations are in progress |
3.4 Missing Success/Error Feedback
| Issue | Location |
|---|---|
| No toast notifications | Throughout - actions like equip, unequip, delete, craft have no success/error toasts |
| No validation messages | EnchantmentDesigner.tsx - "Over Capacity!" is shown but not as a toast |
| Silent failures | store.equipItem() etc. - no user feedback if operation fails |
4. Suggested Improvements
HIGH Priority
| ID | Improvement | Components Affected | Rationale |
|---|---|---|---|
| H1 | Add toast notification system | All tabs | Critical for user feedback on actions (equip, craft, study, etc.). Users need confirmation of success/failure |
| H2 | Standardize card styling | All tab components | Define a standard game card class with consistent bg-gray-900/80 border-gray-700 p-4 styling |
| H3 | Add loading states/skeletons | All tabs | Prevents UI jumps and provides feedback during async operations |
| H4 | Standardize empty states | SpellsTab, GolemancyTab, StatsTab | Consistent messaging and helpful guidance on what to do next |
| H5 | Add confirmation dialogs for destructive actions | EquipmentTab (delete), LootInventory (delete), Crafting (cancel) | Prevent accidental deletion of items, cancelation of progress |
MEDIUM Priority
| ID | Improvement | Components Affected | Rationale |
|---|---|---|---|
| M1 | Standardize progress bar styling | CraftingProgress, SpireTab, SkillsTab, StudyProgress | Define standard h-2 bg-gray-800 for all progress bars with semantic colors for different types |
| M2 | Improve tooltip coverage | EquipmentTab, GolemancyTab, LabTab, SpellsTab | Add tooltips to enchantment badges, golem stats, element info for better discoverability |
| M3 | Add visual progress indicator for multi-step processes | EnchantmentDesigner, CraftingTab | Show which step the user is on (1. Select Type → 2. Select Effects → 3. Name → 4. Create) |
| M4 | Standardize button variants and sizing | All tabs | Define when to use ghost, outline, default variants and standard sizes |
| M5 | Improve selected/hover states | LabTab, EquipmentTab, LootInventory | More prominent visual feedback using ring, shadow, or border color changes |
| M6 | Add capacity warnings | EquipmentTab, EnchantmentDesigner | Warn when approaching capacity limit (yellow at 80%, red at 100%) |
LOW Priority
| ID | Improvement | Components Affected | Rationale |
|---|---|---|---|
| L1 | Typography standardization | All components | Define standard text sizes: text-xs for metadata, text-sm for body, text-base for titles |
| L2 | Add subtle animations | All interactive elements | Use transition-all and hover:scale-105 for buttons, cards for polish |
| L3 | Color code by mana type consistently | SpellsTab, LabTab, ManaDisplay | Ensure element colors are used consistently for all mana-type UI |
| L4 | Add keyboard navigation support | CraftingTab, EquipmentTab, SkillsTab | Allow tab/arrow key navigation through selectable items |
| L5 | Improve responsive grid layouts | All tabs | Some grids use fixed column counts that may not work well on all screen sizes |
| L6 | Add "New Player" tooltips/hints | AttunementsTab, SkillsTab, SpellsTab | First-time user guidance with dismissible hints |
| L7 | Standardize icon usage | All tabs | Ensure same Lucide icons are used for same concepts (e.g., Trash2 vs 🗑️) |
| L8 | Add sort/filter persistence | LootInventory, EquipmentTab | Remember user's sort/filter preferences across sessions |
Summary Statistics
-
Total Components Reviewed: 28 files
- Tab components: 12 (
SpireTab,SkillsTab,SpellsTab,LabTab,StatsTab,EquipmentTab,AttunementsTab,DebugTab,LootTab,AchievementsTab,GolemancyTab,CraftingTab) - Shared components: 3 (
MemorySlotPicker,StudyProgress,UpgradeDialog) - Crafting sub-components: 4 (
EnchantmentDesigner,EnchantmentPreparer,EnchantmentApplier,EquipmentCrafter) - Stats sub-components: 5 (
CombatStatsSection,ManaStatsSection,ManaTypeBreakdown,StudyStatsSection,UpgradeEffectsSection) - Other components: 4 (
ActionButtons,CraftingProgress,LootInventory,ManaDisplay,AchievementsDisplay,CalendarDisplay,GameContext)
- Tab components: 12 (
-
High Priority Issues: 5
-
Medium Priority Issues: 6
-
Low Priority Issues: 8
-
Total Findings: 19 + visual/spacing inconsistencies
Files Requiring Updates (Priority Order)
- H1: Create toast notification system -
src/components/game/(new component or use existing toast library) - H2: Create standard card styling - Update all tab components to use consistent classes
- H3: Add loading skeletons - All tab components
- H4: Improve empty states -
SpellsTab.tsx,GolemancyTab.tsx - H5: Add confirmation dialogs -
EquipmentTab.tsx,LootInventory.tsx - M1: Standardize progress bars - Update
classNamein multiple files - M2: Improve tooltips -
EquipmentTab.tsx,GolemancyTab.tsx - M3: Add step indicators -
EnchantmentDesigner.tsx - M4: Button standardization - All components with buttons
Notes
- Debug components (
DebugTab.tsxanddebug/folder) were reviewed but given lower priority as they are developer tools GameContext.tsxis a provider/context component, not a UI component, so it was not included in UI audit- The
game-panel-titleCSS class appears to be a custom class - review its definition to ensure it's being applied consistently - Consider creating a
game-uiCSS module or Tailwind component classes for commonly repeated patterns