Complete Phase 2: Frontend implementation with React + TypeScript

Frontend Features:
- React 18 + Vite + TypeScript + Tailwind CSS + Zustand
- JWT authentication with automatic token refresh
- Tree library with search and category filtering
- Full tree navigation (decision/action/solution nodes)
- Session management with notes and completion
- Session history with export (Markdown/Text/HTML)
- ErrorBoundary for graceful error handling

Backend Fixes:
- CORS: Added port 5174 to allowed origins
- Sessions: Fixed JSONB datetime serialization (mode='json')

Documentation:
- Updated PROGRESS.md with Phase 2 completion
- Updated 03-DEVELOPMENT-ROADMAP.md with checked items
- Added PHASE-2.5-PERSONAL-BRANCHING.md spec

Seed Data:
- Added backend/scripts/seed_data.py with Password Reset tree

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Michael Chihlas
2026-01-27 22:42:22 -05:00
parent 7d96807fb1
commit cd10ecd42c
51 changed files with 9014 additions and 111 deletions

57
frontend/src/router.tsx Normal file
View File

@@ -0,0 +1,57 @@
import { createBrowserRouter, Navigate } from 'react-router-dom'
import { AppLayout, ProtectedRoute } from '@/components/layout'
import { RouteError } from '@/components/common/RouteError'
import {
LoginPage,
RegisterPage,
TreeLibraryPage,
TreeNavigationPage,
SessionHistoryPage,
SessionDetailPage,
} from '@/pages'
export const router = createBrowserRouter([
{
path: '/login',
element: <LoginPage />,
errorElement: <RouteError />,
},
{
path: '/register',
element: <RegisterPage />,
errorElement: <RouteError />,
},
{
path: '/',
element: (
<ProtectedRoute>
<AppLayout />
</ProtectedRoute>
),
errorElement: <RouteError />,
children: [
{
index: true,
element: <Navigate to="/trees" replace />,
},
{
path: 'trees',
element: <TreeLibraryPage />,
},
{
path: 'trees/:id/navigate',
element: <TreeNavigationPage />,
},
{
path: 'sessions',
element: <SessionHistoryPage />,
},
{
path: 'sessions/:id',
element: <SessionDetailPage />,
},
],
},
])
export default router