shep

Web UI Guide

Guide to using Shep’s browser-based interface.

Overview

The web UI provides a visual interface for:

Technology Stack

Component Technology Purpose
Framework Next.js 16+ App Router, Server Components, Turbopack
React React 19 UI framework
Styling Tailwind CSS 4 Utility-first CSS with design tokens
UI Components shadcn/ui Radix primitives + Tailwind CSS
Design System Storybook Component documentation and testing
E2E Testing Playwright Browser-based automated tests

The Web UI is built with modern React patterns:

Accessing the UI

Start the web UI server:

shep ui

Default URL: http://localhost:4050/

To use a custom port:

shep ui --port 8080

Interface Layout

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  [Logo] Shep AI                                   [Settings] [?]       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                      β”‚                                                   β”‚
β”‚  FEATURES            β”‚                                                   β”‚
β”‚  ────────────────    β”‚        MAIN CONTENT AREA                          β”‚
β”‚  β–‘ Feature 1         β”‚                                                   β”‚
β”‚  β–‘ Feature 2         β”‚                                                   β”‚
β”‚  β–‘ Feature 3         β”‚                                                   β”‚
β”‚                      β”‚                                                   β”‚
β”‚  [+ New Feature]     β”‚                                                   β”‚
β”‚                      β”‚                                                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Status: Ready | Analysis: Up to date | Server: Running                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Feature Workflow

Creating a Feature

  1. Click [+ New Feature] in the sidebar
  2. The AI greets you with contextual options:
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  New Feature                                   β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                β”‚
β”‚  Based on your codebase, here are some        β”‚
β”‚  suggestions:                                 β”‚
β”‚                                                β”‚
β”‚  β—‹ Add user authentication                    β”‚
β”‚  β—‹ Implement API caching                      β”‚
β”‚  β—‹ Add comprehensive testing                  β”‚
β”‚  β—‹ Other: [________________]                  β”‚
β”‚                                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  [Cancel]                          [Continue] β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  1. Select or describe your feature
  2. Continue to requirements gathering

Requirements Gathering

The chat interface guides you through requirements:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Feature: User Authentication | Phase: Requirements      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                         β”‚
β”‚ Shep: What authentication method would you like?       β”‚
β”‚                                                         β”‚
β”‚   Options:                                              β”‚
β”‚   β—‹ Email/password                                      β”‚
β”‚   β—‹ OAuth - Google, GitHub                             β”‚
β”‚   β—‹ Magic links                                         β”‚
β”‚   β—‹ Multiple methods                                    β”‚
β”‚                                                         β”‚
β”‚ You: [Type or select...]                               β”‚
β”‚                                                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Requirements gathered: 3                                β”‚
β”‚ [Save Draft]                              [Done]       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Chat features:

Plan View

After requirements, view the generated plan:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ User Authentication     [Requirements]  Preview                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚ EPIC: 5 stories - 25 subtasks                                   β”‚
β”‚                                                                  β”‚
β”‚ β”Œβ”€ Implement OAuth Authentication ────────────────────────────┐ β”‚
β”‚ β”‚ Introduce OAuth support with Google and GitHub...          β”‚ β”‚
β”‚ β”‚                                                              β”‚ β”‚
β”‚ β”‚ β–Ό STORY: Setup OAuth Provider Config - 3 tasks             β”‚ β”‚
β”‚ β”‚   β–‘ Create provider configuration file                      β”‚ β”‚
β”‚ β”‚   β–‘ Add environment variable handling                       β”‚ β”‚
β”‚ β”‚   β–‘ Implement provider factory                              β”‚ β”‚
β”‚ β”‚                                                              β”‚ β”‚
β”‚ β”‚ β–Ό STORY: Implement Callback Handlers - 4 tasks             β”‚ β”‚
β”‚ β”‚   β–‘ Create OAuth callback route                             β”‚ β”‚
β”‚ β”‚   β–‘ Implement token exchange                                β”‚ β”‚
β”‚ β”‚   β–‘ Handle user creation/linking                            β”‚ β”‚
β”‚ β”‚   β–‘ Add error handling                                       β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ TICKETS 25  |  DOCUMENTATION 3  |  REQUIREMENTS 8                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Tabs

Tab Content
TICKETS Tasks and action items
DOCUMENTATION Generated artifacts (PRD, RFC, etc.)
REQUIREMENTS Gathered requirements list

Actions

Implementation View

During implementation, track progress:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ User Authentication                                        β”‚
β”‚ Phase: Implementation | Progress: 40%                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                            β”‚
β”‚ Progress: [================....................] 10/25     β”‚
β”‚                                                            β”‚
β”‚ Currently Executing:                                       β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ TASK: Implement token exchange                         β”‚ β”‚
β”‚ β”‚ Creating src/services/oauth.ts                         β”‚ β”‚
β”‚ β”‚ Adding exchangeToken function...                        β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                            β”‚
β”‚ Recent Activity:                                           β”‚
β”‚ βœ“ Completed: Created src/routes/auth.ts                   β”‚
β”‚ βœ“ Completed: Added OAuth callback route                   β”‚
β”‚ βœ“ Completed: Configured environment variables             β”‚
β”‚                                                            β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [Pause]             [View Changes]             [Cancel]   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Controls

Button Action
Pause Pause execution after current task
View Changes Open diff viewer
Cancel Stop execution (requires confirmation)

Artifact Viewer

View and edit generated documentation:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Product Requirements Document                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                           β”‚
β”‚ # PRD: User Authentication                              β”‚
β”‚                                                           β”‚
β”‚ Problem Statement                                         β”‚
β”‚ ───────────────────                                       β”‚
β”‚ Users currently cannot securely access their accounts... β”‚
β”‚                                                           β”‚
β”‚ User Stories                                              β”‚
β”‚ ──────────────                                            β”‚
β”‚ As a user, I want to log in with Google so that...       β”‚
β”‚ As a user, I want to link my GitHub account...           β”‚
β”‚                                                           β”‚
β”‚ Acceptance Criteria                                       β”‚
β”‚ ──────────────────────                                    β”‚
β”‚ [ ] Users can sign in with Google OAuth                  β”‚
β”‚ [ ] Users can sign in with GitHub OAuth                  β”‚
β”‚ [ ] Users can link multiple providers                    β”‚
β”‚                                                           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [Edit]                [Export]        [Regenerate]       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Features:

Settings

Access via gear icon:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Settings                                    [x] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                  β”‚
β”‚ Theme                                            β”‚
β”‚ β—‹ Light  β—‹ Dark  ● System                        β”‚
β”‚                                                  β”‚
β”‚ Implementation                                   β”‚
β”‚ [x] Require approval before each task            β”‚
β”‚ [ ] Auto-commit changes                          β”‚
β”‚                                                  β”‚
β”‚ Server                                           β”‚
β”‚ Port: [4050]                                     β”‚
β”‚                                                  β”‚
β”‚ Advanced                                         β”‚
β”‚ [View Logs]  [Clear Cache]  [Reset Config]       β”‚
β”‚                                                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ [Cancel]                              [Save]    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Keyboard Shortcuts

Shortcut Action
Ctrl/Cmd + N New feature
Ctrl/Cmd + S Save current
Ctrl/Cmd + Enter Submit in chat
Escape Close modal/cancel
? Show all shortcuts

Responsive Design

The UI adapts to screen size:

Development

Running Locally

# Start the web UI in development mode
pnpm dev:web

# Build for production
pnpm build:web

# Run E2E tests
pnpm test:e2e

Storybook

View and develop components in isolation:

# Start Storybook dev server
pnpm dev:storybook

# Build Storybook for deployment
pnpm build:storybook

Storybook includes:

Note: Stories are colocated with components (e.g., button.stories.tsx next to button.tsx).

Project Structure

The web UI uses a four-tier component architecture with strict dependency direction.

src/presentation/web/
β”œβ”€β”€ app/                     # Next.js App Router
β”‚   β”œβ”€β”€ layout.tsx          # Root layout (uses AppShell)
β”‚   β”œβ”€β”€ page.tsx            # Home page
β”‚   └── version/
β”‚       └── page.tsx        # Version info page
β”œβ”€β”€ components/
β”‚   β”œβ”€β”€ ui/                 # Tier 0: shadcn/ui primitives
β”‚   β”‚   β”œβ”€β”€ button.tsx
β”‚   β”‚   β”œβ”€β”€ card.tsx
β”‚   β”‚   └── ...
β”‚   β”œβ”€β”€ common/             # Tier 1: Cross-feature composed components
β”‚   β”‚   β”œβ”€β”€ theme-toggle/
β”‚   β”‚   β”œβ”€β”€ page-header/
β”‚   β”‚   β”œβ”€β”€ empty-state/
β”‚   β”‚   └── loading-skeleton/
β”‚   β”œβ”€β”€ layouts/            # Tier 2: Page shells, structural wrappers
β”‚   β”‚   β”œβ”€β”€ sidebar/
β”‚   β”‚   β”œβ”€β”€ header/
β”‚   β”‚   β”œβ”€β”€ dashboard-layout/
β”‚   β”‚   └── app-shell/
β”‚   └── features/           # Tier 3: Domain-specific UI bound to routes
β”‚       β”œβ”€β”€ version/
β”‚       └── settings/
β”œβ”€β”€ docs/                   # Design system MDX documentation
β”œβ”€β”€ hooks/                  # Custom React hooks
β”‚   └── useTheme.ts
β”œβ”€β”€ lib/                    # Utilities
β”‚   └── utils.ts
└── types/                  # TypeScript types
    └── theme.ts

For detailed architecture documentation, see UI Architecture.


Maintaining This Document

Update when:

Related docs: