# F-084 โ€” Architect: Parent categories list does not show emoji in front of the name ## Root cause `apps/admin/src/app/(dashboard)/categories/page.tsx`, in `CategoryRow`, the cell is rendered as: ```tsx {cat.children && cat.children.length > 0 && {cat.emoji ?? '๐Ÿ“'}} ``` The emoji is gated on `cat.children.length > 0`. As soon as a parent has no children yet (e.g. immediately after creation, or when children get re-parented / archived) the emoji disappears. Editing the emoji later does not bring it back because the condition is structural, not value-driven. Child categories never matched this branch, which the bug report cites as the "already-renders-correctly" baseline. ## Design Drop the `cat.children.length > 0` gate. Render the emoji whenever it exists; show a neutral placeholder (greyed "ยท") when not. Apply to every category (parent or child) so behaviour is uniform. ```tsx {cat.emoji ? ( {cat.emoji} ) : ( )} ``` No backend change: emoji was already stored and returned by the categories API. Re-editing the emoji from the form already calls `load()` after `handleSave`, so a refresh of the row is automatic. No stale state remains. ## Risk Low. Render-only change; no schema, no API contract. ## Acceptance mapping - "Every parent category row shows its emoji immediately before the name" โ†’ render is now unconditional. - "Editing the emoji reflects on next refresh" โ†’ existing `load()` after save handles it. - "Child categories keep their current rendering (no regression)" โ†’ children also get emoji + neutral placeholder; consistent. - "Categories without emoji show a neutral placeholder instead of an empty space" โ†’ greyed `ยท` placeholder. - "Emoji is stored and returned correctly by the API (sanitized, valid UTF-8)" โ†’ unchanged from before; no backend touch.