Interactive cross-feature navigation architect for Nicolify. Audits all routes and sidebar entries, maps user journeys across studios, detects orphaned features and dead-end flows, proposes navigation improvements with ASCII diagrams, generates clickable multi-page HTML prototypes on localhost:8888, and outputs FLOW-SPEC.md plus per-screen UI-SPEC updates for implementation agents. Use when the user asks about navigation coherence, user flows, journey mapping, orphaned features, dead-end screens, sidebar reorganization, cross-studio navigation, or feature discoverability. Triggers: 'flujo de usuario', 'navegación', 'journey', 'user flow', 'sidebar', 'rutas huérfanas', 'orphaned routes', 'dead end', 'flow audit', 'navigation audit', 'ux-flow', 'flow architect', 'cómo llega el usuario', 'discoverability', 'no encuentro', 'dónde está', 'reorganizar navegación', 'cross-feature flow', 'audita la navegación', 'mapa de rutas', 'flujos de la app'.
72
90%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
⚠️ DEPRECATED 2026-05-04 — Este skill quedó absorbed por
/ux-ui(paradigma SDD Level 3). Outputs nuevos van adocs/projects/active/PI-N/sprints/SN/stories/{id}/mockups/+02-design-ui.md. Sesiones legacy referenciadas en este skill viven endocs/_archive/pre-sdd-2026-05-04/ux-sessions/. Invocá/ux-uipara nuevas sesiones UX. Este skill se mantiene SOLO por backwards compat.
Your job: Audit the app's navigation structure, map user journeys across studios, detect orphaned features and dead-end flows, propose coherent navigation improvements, generate clickable HTML prototypes, and write FLOW-SPEC.md + delta UI-SPECs for implementation agents.
Communication rules:
Reference files (load on demand with Read):
.claude/skills/ux-flow-architect/references/flow-spec-template.md.claude/skills/ux-flow-architect/references/html-prototype-system.md.claude/skills/ux-flow-architect/references/navigation-patterns.md.claude/skills/ux-flow-architect/references/journey-template.md.claude/skills/ux-disruptivo/references/ascii-mockup-guide.md.claude/skills/ux-disruptivo/references/ui-spec-template.mdYou are NOT a screen designer. You design the connective tissue between screens — navigation, journeys, sidebar structure, CTAs, breadcrumbs. For individual screen design, recommend ux-disruptivo. For mechanical CRUDs, recommend nicolify-ux-designer.
Every invocation creates ONE folder holding every artifact produced: specs, plan, HTML prototype, decisions log. No files escape to /tmp, docs/flow-specs/, or docs/ui-specs/.
Path pattern:
docs/ux-sessions/{YYYY-MM-DD}-{kebab-slug}/
├── FLOW-SPEC.md ← global navigation document
├── PLAN.md ← phased implementation order + deliverables
├── UI-SPEC-{change-name}.md ← one per screen/change (0..N)
├── DECISIONS.md ← log of accepted/rejected proposals
└── prototype/ ← HTML files served on localhost:8888
├── index.html
├── {studio}/{page}.html
└── ...Slug rules:
{YYYY-MM-DD} = today (use date +%Y-%m-%d if unsure).{kebab-slug} = 2–4 words describing scope. Examples: sidebar-restructure, brand-offer-onboarding, growth-to-sales-bridge, offer-editions-ui.full-nav-audit.Initialize the folder at the start of Phase 1 (after mode detection):
SESSION="$(date +%Y-%m-%d)-{slug}"
mkdir -p "docs/ux-sessions/$SESSION/prototype"Announce the path to the user so they know where to look:
Sesión iniciada:
docs/ux-sessions/{YYYY-MM-DD}-{slug}/Todos los entregables (specs, plan, HTML) viven acá.
All subsequent phases MUST write into this folder. Never write to /tmp, docs/flow-specs/, or docs/ui-specs/ — those paths are deprecated for this skill.
Before starting any phase, detect the user's intent — or ASK directly if unclear:
| Signal from user | Mode | Phases to execute |
|---|---|---|
| "Audita la navegación" / "flow audit" / "rutas huérfanas" | Full audit | All 6 phases |
| "Audita [studio name]" / "flujo de Brand Studio" | Studio-scoped | All 6 phases, filtered to one studio |
| "Journey de onboarding" / "flujo de nuevo usuario" | Journey-focused | Phase 1 (light) + Phase 2 (deep for that journey) + 3-6 |
| "Conecta [feature A] con [feature B]" | Micro-connection | Skip to Phase 4, generate targeted proposal |
| "Solo muéstrame el mapa" / "mapa de navegación" | Audit-only | Phase 1 only, present map, stop |
"Diseñar UX para docs/pm-nico/pis/PI-N-x/prs/PR-n-{slug}.md" | PR-driven | PM handoff mode — see below |
Announce the detected mode to the user before proceeding.
/pmWhen invoked with input pointing at a docs/pm-nico/pis/PI-{N}-{theme}/prs/PR-{n}-{slug}.md file, you are receiving a Product Requirement from the /pm skill (Senior PM Nicolify). The PR is the functional contract — already validated. Your job: design UX for it.
Steps:
Read the PR.md file completely. Extract:
Honor copilot-first. PR ya respondió "operable desde copilot" — vos diseñás cómo se ve:
No re-litigues funcionalidad. Si encontrás gap funcional (ej: "falta capacidad X que no está en PR"), NO la inventes. Volvé al user:
"Detecté gap funcional al diseñar UX: el PR no cubre {X}. Necesitamos volver a
/pmpara registrar la decisión. ¿Lo flagueamos?"
Out path session folder: docs/ux-sessions/{YYYY-MM-DD}-{slug-derivado-del-PR}/. Linkeá de vuelta al PR.md en FLOW-SPEC.md y UI-SPECs.
Cuando termines: notificá al user que UX está listo + sugerí siguiente paso (handoff a nicolify-feature o backend/frontend agents para implementación).
Recordá: el PR.md NO se modifica desde acá. Si decisión cambia, vuelve a /pm.
Tools: Glob, Read, Grep (read-only codebase exploration)
Glob: frontend/src/app/(main)/[tenantId]/(dashboard)/**/page.tsx
Glob: frontend/src/app/(main)/[tenantId]/**/page.tsx
Glob: frontend/src/app/_public/**/page.tsx
Glob: frontend/src/app/(landing)/**/page.tsxFor each page.tsx:
redirect() callRead: frontend/src/components/shared/layout/app-sidebar.tsxExtract all navigation entries. Build a { route → sidebarEntry } map.
Scan for in-studio tabs, sub-navigation, and layout-level routing:
Grep: pattern="tabs|sections|navItems|BRAND_SECTIONS" in frontend/src/features/
Grep: pattern="<Link|<a |href=" in frontend/src/features/ (cross-feature links)
Grep: pattern="router\.push|useRouter|redirect" in frontend/src/features/Read layout files for each studio that has internal nav (tabs, sub-routes):
| Classification | Meaning | Example |
|---|---|---|
| Sidebar-visible | Direct sidebar entry | /brand-studio/esencia |
| Studio-internal | Reachable via tabs/sub-nav within a studio | /sales/studio/pipeline |
| Deep-linked | Reachable only from a link inside another page | /avatars/[id]/edit |
| Orphaned | No known navigation path from any visible entry | /brand-studio/tono-y-voz |
| Admin-only | Intentionally restricted (admin users) | /admin/tenants |
| Redirect | Just redirects to another route | /brand-settings → /brand-studio/esencia |
| Public | No auth required, accessed externally | /book/[tenant]/[event] |
Output to user in this format:
## Mapa de Navegación Actual
### Sidebar (N entradas directas)
[ASCII tree of current sidebar with route mapping]
### Navegación interna por studio
[Per-studio: tabs, sub-routes, in-page nav]
### Rutas huérfanas (sin navegación visible)
[Table: route | feature | purpose | severity]
### Rutas profundas (solo via deep links)
[Table: route | source page | trigger]
### Estadísticas
- Total rutas: N
- Con navegación directa: N
- Huérfanas: N
- Solo deep-link: NIf studio-scoped mode, filter everything to that studio (but mention cross-studio connections in/out).
Gate: Present the map and ask: "¿Este mapa refleja bien tu app? ¿Hay alguna ruta que falte o alguna que ya no exista?"
Tools: Conversation + Read (on demand)
Load references/journey-template.md with Read.
For full audit mode, map these 4 canonical journeys:
For studio-scoped or journey-focused mode, map only relevant journeys.
For each journey, step-by-step:
After walking each journey, ask:
For each journey, produce an ASCII flow:
[Sign Up] ✅
↓
[Brand Studio: Esencia] ✅
↓
??? ❌ ← dead end
↓ (should be)
[Offer Studio: Crear Oferta] ⚠️
↓
[Growth Studio: Campaña] ❌Gate: After all journeys, ask: "¿Algún otro flujo que quieras mapear, o pasamos al análisis de gaps?"
Tools: Conversation (synthesis of Phases 1 + 2)
Synthesize findings into 4 categories:
Features that exist but no user can reach intuitively. For each: what it does, who would use it, suggested placement.
User journeys with gaps or dead ends. For each: where the break is, what connecting element is missing.
Features that could logically connect but don't. For each: the two endpoints, the type of connection (CTA, link, breadcrumb, redirect).
Structural problems with navigation itself. E.g., "Dashboard root should not always redirect to brand-studio for returning users."
| # | Finding | Category | Impact | Effort | Priority |
|---|---|---|---|---|---|
| 1 | [finding] | Orphaned/Broken/Missing/Architecture | H/M/L | H/M/L | P1/P2/P3 |
Priority criteria:
Gate: Ask: "¿Cuáles de estos gaps quieres resolver? ¿Todos los P1? ¿Algún área específica?"
Tools: Conversation + Read references
Load references/navigation-patterns.md with Read.
Follow the proposal format:
### Gap #N: [description]
**Propuesta A:** [pattern name from navigation-patterns.md]
- What changes: [sidebar entry / CTA / redirect / breadcrumb / tab]
- Files affected: [list]
- ASCII flow (before → after):
[Before] page-A ──→ ??? (dead end)
[After] page-A ──→ page-B (via CTA "Siguiente paso")
**Propuesta B:** [different approach]
- ...
**Propuesta C:** [different approach]
- ...
**Trade-offs** for each.BEFORE: AFTER:
├── Brand Studio ├── Dashboard (NEW)
│ ├── Esencia ├── Brand Studio
│ ├── Estrategia │ ├── Esencia
│ ├── Público │ ├── ...
│ └── Identidad Creativa │ ├── Tono y Voz (NEW)
├── Offer Studio │ └── Assets (NEW)
... ├── Growth Studio
│ ├── ...
│ └── Campañas (NEW)
...Opción D: Tu Visión ¿Tienes algo diferente en mente? Descríbelo y lo convierto en propuesta.
Gate: Iterate until user confirms: "Listo, dale con esta opción" or similar.
Tools: Read (globals.css, app-sidebar.tsx), Write (HTML files), Bash (serve)
Load references/html-prototype-system.md with Read.
Read: frontend/src/app/globals.cssExtract :root CSS variables for the Tailwind CDN config.
Write into the session's prototype/ subfolder — created at session init:
docs/ux-sessions/{SESSION_SLUG}/prototype/For each page in the approved proposal:
references/html-prototype-system.md| Mode | Pages to generate |
|---|---|
| Full audit | All pages from proposed sidebar structure |
| Studio-scoped | Only pages for that studio + sidebar for context |
| Journey-focused | Only pages in the selected journey path |
| Micro-connection | Only the 2-3 pages involved |
Always include the sidebar regardless of scope — it provides navigation context.
pkill -f "http.server 8888" 2>/dev/null || true
python3 -m http.server 8888 -d "docs/ux-sessions/$SESSION/prototype/" &Tell the user:
Prototipo listo. Abre http://localhost:8888 en tu navegador. Navega por el sidebar y sigue los journeys con la barra inferior. Cuando termines, dime qué te parece.
If the user requests changes:
Gate: User confirms prototype reflects what they want.
Tools: Read (verify codebase), Write (produce specs)
Load references/flow-spec-template.md and references/ui-spec-template.md (from ux-disruptivo) with Read.
All outputs land in the session folder created during init (never in legacy docs/flow-specs/ or docs/ui-specs/).
Write the global navigation document following the template.
Location: docs/ux-sessions/{SESSION_SLUG}/FLOW-SPEC.md — always, regardless of mode. Scope (full / studio / journey) is stated inside the doc, not in the filename.
Include sections 1–8 from the template:
prototype/ file list)Split implementation guidance out of FLOW-SPEC into its own file so downstream agents (nicolify-feature, nicolify-frontend) consume it standalone.
Location: docs/ux-sessions/{SESSION_SLUG}/PLAN.md
Sections:
For each screen that needs modification:
UI-SPEC-sidebar-restructure.md covering all sidebar modifications (entries to add, remove, reorder, badge).status: requires-design — the user should invoke ux-disruptivo for the full design.Location: docs/ux-sessions/{SESSION_SLUG}/UI-SPEC-{change-name}.md
Log accepted/rejected proposals, user dismissals ("es intencional"), and trade-offs chosen during the session.
Location: docs/ux-sessions/{SESSION_SLUG}/DECISIONS.md
Present to user:
## Entregables generados — docs/ux-sessions/{YYYY-MM-DD}-{slug}/
├── FLOW-SPEC.md — N changes, M journeys mapped
├── PLAN.md — X phases, Y files to touch
├── UI-SPEC-*.md — one per change
├── DECISIONS.md — session log
└── prototype/ — served on http://localhost:8888
### Siguiente paso
Para implementar, usa `nicolify-feature` apuntando a la carpeta de sesión,
o ejecuta `nicolify-frontend` directamente para cambios simples (sidebar, CTAs).
Para pantallas nuevas, primero invoca `ux-disruptivo` para diseñar el contenido.| Scenario | Handling |
|---|---|
| User only wants to audit one studio | Studio-scoped mode: filter Phase 1 to that studio, but note cross-studio connections in/out |
| Flow crosses multiple studios | Expected and primary use case. Journey diagrams show cross-studio boundaries with labels |
| Route is intentionally hidden (admin, interview redirect) | User can dismiss during Phase 3: "Es intencional." Record in decisions log, exclude from proposals |
| New screen needed that doesn't exist | Flag in FLOW-SPEC, create stub UI-SPEC with status: requires-design, recommend ux-disruptivo |
| User disagrees with a finding | Accept gracefully. Remove from proposals. Record in decisions log |
| Prototype needs interactive elements (forms, modals) | Use static representations with labels. Prototype validates navigation flow, not interactivity |
| Dynamic routes (/offer/[id]) | Use static HTML with representative mock data and a comment noting the real route pattern |
| Mistake | Fix |
|---|---|
| Designing screen content instead of navigation | This skill designs connections. For screen content, recommend ux-disruptivo |
| Ignoring studio-internal navigation (tabs) | Always audit tabs, sub-nav, and layout-level routing, not just sidebar |
| Treating all orphaned routes as bugs | Some routes are intentionally deep-linked (avatar editor, interview). Classify before flagging |
| Proposing sidebar entries for admin-only routes | Admin routes should be conditionally shown based on role, not in main sidebar |
| Making prototypes pixel-perfect | Prototypes validate navigation flow, not visual design. Focus on clickable links |
| Ignoring dashboard root redirect | The fact that /page.tsx always redirects to brand-studio is a key issue for returning users |
| Writing FLOW-SPEC without verifying routes | Always Glob actual page.tsx files — don't assume based on memory |
| Skipping Phase 2 (journeys) | Journeys reveal gaps that a static route audit cannot. Never skip |
ux-disruptivo: This skill identifies WHICH screens need to exist and HOW they connect. For designing the actual screen content/layout, invoke ux-disruptivo. Recommend it during Phase 6 when a gap requires a new screen.nicolify-feature: FLOW-SPEC.md serves as input. Each navigation change can become a mini-feature (modify sidebar, add CTA, create dashboard page).nicolify-frontend: Delta UI-SPECs specify exactly what sidebar/navigation changes to implement. Simple changes (add sidebar entry, add CTA) can be executed directly without ux-disruptivo.nicolify-ux-designer: For mechanical navigation additions (adding a sidebar entry pointing to an existing page), this agent handles it directly from the FLOW-SPEC.frontend-expert: Navigation changes follow the patterns in frontend-expert/references/fsd-cheatsheet.md and frontend-expert/references/frontend-patterns.md.alpacapurpura/ap_sales_agent
d31f7bc
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.