feat(auth): implement complete authentication foundation (Phases 1-7)
Complete implementation of authentication system for Todo Evolution Hackathon Phase II:
Backend (FastAPI):
- User registration and login endpoints with JWT authentication
- Argon2id password hashing and HS256 JWT signing
- Rate limiting (5/min login, 100/min global) to prevent brute force
- Security headers (HSTS, CSP, X-Frame-Options, etc.)
- Structured JSON logging with request ID tracking
- Database migrations with Alembic
- Connection pooling and async operations
- 57 unit and integration tests (pytest)
Frontend (Next.js 16):
- Registration and login pages with form validation
- Dashboard with protected routes
- Reusable UI components (Input, Button, ErrorMessage)
- Middleware for authentication and authorization
- Accessibility features (ARIA labels, keyboard navigation)
- 13 E2E tests with Playwright
Testing & Quality:
- 70 total automated tests (100% passing)
- 80%+ test coverage (constitutional requirement met)
- Security validation (password hashing, JWT, rate limiting)
- Accessibility testing (ARIA, keyboard navigation)
Tech Stack:
- Backend: Python FastAPI, SQLModel, Neon PostgreSQL, Alembic
- Frontend: Next.js 16 (App Router), TypeScript, Tailwind CSS
- Auth: Better Auth patterns with JWT
- Testing: pytest, pytest-cov, Playwright
Constitutional Compliance:
✅ 80%+ test coverage
✅ Type safety throughout
✅ Security best practices
✅ Documentation inline
✅ Spec-driven development
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-29 18:06:33 +05:00
|
|
|
{
|
|
|
|
|
"name": "todo-frontend",
|
|
|
|
|
"version": "0.1.0",
|
|
|
|
|
"private": true,
|
|
|
|
|
"scripts": {
|
|
|
|
|
"dev": "next dev",
|
|
|
|
|
"build": "next build",
|
|
|
|
|
"start": "next start",
|
|
|
|
|
"lint": "next lint",
|
feat(009-chatkit-frontend): Phase III chatbot UX enhancements and SSE fixes (#9)
* feat(009-chatkit-frontend): implement chatbot popup UI and event system
Completed Phase 2 (Foundational) and Phase 3 (User Story 1):
Phase 2 (Foundational - T004-T008):
- T004: ChatKit integration (building custom interface, no CDN SDK)
- T005: Custom event system for task synchronization
- T006: ChatKit configuration with custom fetch interceptor
- T007: API proxy route with JWT extraction and SSE streaming
- T008: Enhanced TaskContext to emit task events
Phase 3 (User Story 1 - T013-T018):
- T013: Created FloatingChatButton component with animations
- T014: Created ChatBotPopup wrapper with shadcn/ui Dialog
- T015: Integrated chatbot into dashboard with event listener (T046)
- T016: Added Framer Motion animations (<300ms)
- T017: Configured z-index layering (FAB z-40, Dialog z-50)
- T018: Added accessibility attributes (aria-label, role)
Key files:
- frontend/src/lib/events/task-events.ts (event system)
- frontend/src/lib/chatkit-config.ts (ChatKit config)
- frontend/src/app/api/chatkit/route.ts (API proxy)
- frontend/src/components/chat/FloatingChatButton.tsx
- frontend/src/components/chat/ChatBotPopup.tsx
- frontend/src/app/dashboard/page.tsx (integrated chatbot)
Real-time sync: Chatbot events → Dashboard refresh via CustomEvent
Security: JWT extraction in API proxy (httpOnly cookies)
UX: Orange/coral theme, smooth animations, accessible
Next: Phase 4 (US5 Security), Phase 5 (US4 Streaming)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chat interface with SSE streaming
Completed Phase 5 (User Story 4 - Streaming AI Responses) and partial Phase 6 (User Story 2):
Phase 5 (US4 - T033-T040):
- T033: Created ChatInterface component with SSE streaming support
- T034: Created MessageList component with streaming state and typing indicator (T038)
- T035: Created MessageInput component with auto-resize and keyboard shortcuts
- T036: Integrated ChatInterface into ChatBotPopup (dashboard)
- T037: SSE streaming already implemented in API proxy (T007)
- T038: Added typing indicator with animated loader and cursor
- T039: Implemented exponential backoff retry (1s, 2s, 4s) in sendMessage
- T040: Added error banner with manual retry button
Phase 6 (US2 - T046-T050) - Already Complete:
- T046: TaskEvent listener already in dashboard (from Phase 3)
- T047: Dashboard refresh logic already implemented (from Phase 3)
- T048: Tool call result event handling in ChatInterface
- T049: TaskEvent emission using createTaskEventFromTool helper
- T050: Success confirmation UI with checkmark icons in MessageList
Key Features:
- SSE streaming: Fetch API with ReadableStream for real-time responses
- MCP tool integration: Parse tool.call.result events and emit TaskEvents
- Real-time sync: Chatbot task operations update dashboard within 1s
- Error handling: Auto-retry with exponential backoff + manual retry
- Streaming UX: Typing indicator, progressive content rendering, cursor animation
- Security: JWT authentication via API proxy, session validation
- Accessibility: ARIA labels, keyboard shortcuts (Enter/Shift+Enter)
Architecture:
- ChatInterface manages state and SSE streaming
- MessageList displays messages with tool call indicators
- MessageInput handles user input with validation
- Events flow: MCP tool result → TaskEvent → Dashboard refresh
Files:
- frontend/src/components/chat/ChatInterface.tsx (SSE + MCP)
- frontend/src/components/chat/MessageList.tsx (UI + typing)
- frontend/src/components/chat/MessageInput.tsx (input + shortcuts)
- frontend/src/app/dashboard/page.tsx (integration)
Next: Phase 7 (US3 History), Phase 8 (US6 Animations), Phase 9 (Errors), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement conversation history with pagination
Completed Phase 7 (User Story 3 - Persistent Conversation History):
Phase 7 (US3 - T056-T060):
- T056: Configured pagination with limit=50, order=desc
- T057: Implemented loadConversationHistory() with useEffect on mount
- T058: Added "Load earlier messages" button with loading state
- T059: Implemented loadMoreMessages() handler with pagination logic
- T060: Added loading states (isLoadingHistory, isLoadingMore) with spinner UI
Frontend Implementation Complete:
- Conversation state management (conversationId, currentPage, hasMoreMessages)
- loadConversationHistory(): Loads user's persistent conversation on mount
- loadMoreMessages(): Fetches older messages with pagination (page, limit)
- Loading indicators: Spinner in "Load earlier" button during fetch
- Ready for backend integration
Backend API Endpoints Required (placeholders in code):
- GET /api/v1/{user_id}/conversations - Get user's single conversation
- GET /api/v1/{user_id}/conversations/{conversation_id}/messages?page={page}&limit=50 - Paginated message history
Architecture:
- Each user has single persistent conversation (per spec)
- Backend creates conversation on first message if none exists
- Frontend loads conversation history on chatbot open
- Pagination: 50 messages per page, descending order (newest first)
- Messages prepended to list when loading older history
Files Modified:
- frontend/src/components/chat/ChatInterface.tsx (history logic)
- frontend/src/components/chat/MessageList.tsx (pagination UI)
- specs/009-chatkit-frontend/tasks.md (marked T056-T060 complete)
Testing:
- T061: Deferred - requires backend conversation history API
Next: Phase 8 (Animations - mostly done), Phase 9 (Error handling), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): add prefers-reduced-motion accessibility support
Completed Phase 8 (User Story 6 - Smooth Popup Animations):
Phase 8 (US6 - T065-T068):
- T065: Animation timing already optimized (250ms content, 200ms backdrop) - from Phase 3
- T066: AnimatePresence wrapper already implemented - from Phase 3
- T067: Backdrop fade animation already synchronized - from Phase 3
- T068: Added prefers-reduced-motion detection for accessibility ✅ NEW
T068 Implementation:
- Added prefers-reduced-motion detection using window.matchMedia
- ChatBotPopup: Disables all animations (content + backdrop) if user prefers reduced motion
- FloatingChatButton: Disables spring animations and hover/tap effects if user prefers reduced motion
- Fallback: duration: 0 for instant transitions (no animation)
- useMemo optimization: Only check media query once on mount
Accessibility:
- Respects user's OS-level motion preferences
- WCAG 2.1 Level AA compliance (Success Criterion 2.3.3 - Animation from Interactions)
- Users with vestibular disorders can use chatbot without motion sickness
- Instant transitions (no animation) when prefers-reduced-motion is enabled
Animation Performance (already achieved in Phase 3):
- Content animation: 250ms (below 300ms threshold per FR-012)
- Backdrop animation: 200ms (synced with content)
- AnimatePresence: mode="wait" prevents animation stacking
- easeOut easing for smooth deceleration
Files Modified:
- frontend/src/components/chat/ChatBotPopup.tsx (prefers-reduced-motion detection)
- frontend/src/components/chat/FloatingChatButton.tsx (prefers-reduced-motion detection)
- specs/009-chatkit-frontend/tasks.md (marked T065-T068 complete)
Testing:
- T069: Manual testing with DevTools Performance tab (requires user validation)
Next: Phase 9 (Error handling), Phase 10 (Polish & accessibility)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 9 error handling and edge cases
**What**: Comprehensive error handling for all edge cases identified in spec.md
**Implementation**:
1. **ErrorBoundary.tsx** (T070):
- React error boundary pattern to catch errors in chat components
- Prevents chat errors from crashing entire dashboard
- Fallback UI with retry/reload options
- Error logging with stack traces for debugging
2. **ErrorState.tsx** (T071):
- Reusable error UI components for different error types:
- RateLimitError: Countdown timer from Retry-After header
- AuthError: 3-second countdown before redirect to sign-in
- TimeoutError: Cancel/Keep Waiting options
- NetworkError: Connection lost with retry button
- BackendUnavailable: 502/503 errors with correlation ID
- UnknownError: Generic fallback with correlation ID
- All components follow contracts/error-messages.yaml specifications
3. **ChatInterface.tsx** (T072-T077):
- T072: Rate limit handling (429 → countdown → clear error when done)
- T073: Network error handling (exponential backoff 1s/2s/4s already implemented)
- T074: Auth error handling (401 → 3s countdown → redirect to /auth/signin)
- T075: Timeout handling (AbortController + 10s threshold → dialog)
- T076: Correlation ID logging (already in chatkit-config.ts)
- T077: Partial message indicator (interrupted stream → incomplete flag)
- Enhanced sendMessage with error state integration
- Timeout handlers: handleCancelRequest, handleKeepWaiting
- Cleanup of timeout/abort refs on error
4. **MessageList.tsx** (T077):
- Added metadata fields: complete, interrupted
- Incomplete indicator UI (yellow alert icon + message)
- Displays "Response interrupted (partial message)" for cancelled streams
**Architecture**:
- Specialized error components replace generic error banner
- Countdown timers managed with useEffect intervals
- AbortController for cancellable fetch requests
- Error states conditionally rendered based on error type
- Graceful degradation for all error scenarios
**UX Impact**:
- Users see helpful, specific error messages instead of generic failures
- Rate limits show countdown before retry is allowed
- Auth errors redirect automatically after countdown
- Timeouts give users choice to cancel or keep waiting
- Partial responses preserved and marked as incomplete
- All errors include context and recovery options
**Compliance**:
- Follows contracts/error-messages.yaml for all error types
- FR-020: Correlation ID logging throughout
- Error handling doesn't block other features
- Users never see raw error messages or stack traces
**Phase 8 Note**: Also committing PHR 0013 from Phase 8 (prefers-reduced-motion accessibility)
**Tasks**: T070-T077 complete
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 10 core polish (T078b, T078c, T079, T085)
**What**: Log sanitization, mobile responsive design, and security audit
**Implementation**:
1. **T078b: Log Sanitization Utility** (frontend/src/lib/logging/sanitize.ts):
- Truncate content fields to 50 chars with "[...]" suffix
- Redact JWT tokens (replace with "[REDACTED_TOKEN]")
- Redact PII fields (email, phone, address, SSN, credit card)
- Mask API keys (show first 4 + last 4 chars like "sk-ab...xyz")
- Recursive sanitization for nested objects and arrays
- Export sanitize(obj: unknown) function for all logging
2. **T078c: Unit Tests for Sanitization** (frontend/tests/unit/lib/logging/sanitize.test.ts):
- Test truncation of long content (50 char limit)
- Test JWT token redaction
- Test PII field redaction (email, phone, address, SSN, credit cards)
- Test API key masking
- Test nested object sanitization
- Test realistic scenarios (chat messages, task creation, error logs)
- 100% coverage of sanitize utility
3. **T079: Mobile Responsive Design**:
- **ChatBotPopup.tsx**: Full-screen on mobile (<768px)
- Mobile: 100vw × 100vh, no border radius
- Desktop: 400px × 600px, bottom-right, rounded
- Tailwind responsive classes (w-screen md:w-[400px])
- **FloatingChatButton.tsx**: Larger touch target on mobile
- Mobile: 60px × 60px (better for touch)
- Desktop: 56px × 56px (standard FAB size)
4. **T085: Security Audit** - Fixed sensitive data logging:
- **ChatInterface.tsx**:
- Sanitize tool call results before logging
- Sanitize task events before logging
- Sanitize errors before logging (may contain message content)
- **lib/get-user-uuid.ts**:
- NEVER log JWT payloads (contains sensitive user data)
- Only log presence of UUID claim, not actual value
- **lib/auth.ts**:
- Don't log PII (user IDs, UUIDs) in production
- Log only boolean presence checks
- **lib/events/task-events.ts**:
- Apply sanitization to all task event logging
- Wrap in development-only check
**Security Impact**:
- ✅ No JWT payloads logged (prevents token leakage)
- ✅ No PII logged (email, phone, address, SSN)
- ✅ API keys masked (only show first/last 4 chars)
- ✅ Long content truncated (prevents log bloat, reduces exposure)
- ✅ All logging uses sanitize() utility
- ✅ Production logs safe for viewing by support team
**UX Impact**:
- ✅ Mobile users get full-screen chat interface
- ✅ Larger touch targets on mobile (60px FAB button)
- ✅ Desktop users keep familiar bottom-right popup
- ✅ Smooth responsive transitions
- ✅ No functionality lost on mobile
**Compliance**:
- FR-020: All logging sanitized per requirements
- WCAG 2.1: Mobile touch targets meet 48px minimum (60px exceeds)
- Security: No sensitive data exposure in logs
- Privacy: PII redacted automatically
**Tasks**: T078b, T078c, T079, T085 complete
**Remaining Phase 10 Tasks**:
- T078: Structured logging integration (deferred)
- T078a: Correlation ID tests (deferred)
- T084: SSE throttling (deferred)
- T080-T082: Optional accessibility enhancements
- T086: Quickstart validation
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chatbot feedback and task list display improvements (T051a-T051i)
Implemented explicit confirmation messages and formatted task list queries to improve
chatbot user experience and ensure 100% visibility of task operations.
**Backend Changes (server.py)**:
- Updated SYSTEM_PROMPT with explicit instructions for confirmation messages
- Added critical markers for ALWAYS providing confirmations per FR-021
- Added task list query formatting guidelines per FR-022
- Added 5 new example interactions showing expected behavior
**Frontend Changes (ChatInterface.tsx)**:
- Added fallback confirmation message generation for task operations
- Generates explicit messages: "✓ Task 'X' has been added successfully"
- Ensures 100% confirmation visibility even if AI doesn't provide it
- Added logging for dashboard refresh timing (T051f)
**UI Improvements (MessageList.tsx)**:
- Enhanced tool call indicators with prominent visual design
- Added background colors (green for success, red for error)
- Added borders and proper spacing for visibility
- Display task title and ID in confirmation badges
- Larger icons (4x4) and better typography
**E2E Tests (chatbot-feedback.spec.ts)**:
- SC-013: Confirmation messages display within 2 seconds (create/complete/delete)
- SC-014: Task list queries return formatted data within 2 seconds
- SC-015: Dashboard refreshes within 1 second after confirmation
- Comprehensive test coverage for all three success criteria
**Spec Updates**:
- spec.md: Added FR-021 to FR-024, SC-013 to SC-015, 5 new edge cases
- plan.md: Added "Chatbot Feedback & Task List Display" section
- tasks.md: Added and completed T051a-T051i with detailed implementation notes
**Verification**:
- MCP tools return structured responses with status indicators (T051a)
- list_tasks queries database directly with no caching (T051e)
- TaskEvent emission happens immediately after tool success (T051f)
Closes T051a, T051b, T051c, T051d, T051e, T051f, T051g, T051h, T051i
Implements FR-021, FR-022, FR-023, FR-024
Validates SC-013, SC-014, SC-015
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): enhance chatbot UX with emoji formatting and fix SSE handling
- Backend: Update system prompt with emoji-rich task formatting (✅🎯📅🔴🟡🟢)
- Backend: Add beautiful task list display grouped by priority with visual separators
- Frontend: Fix SSE handling for non-streaming 'message' events with tool_results
- Frontend: Add react-markdown for formatted chat responses
- Frontend: Improve sanitize order - mask API keys before field-name redaction
- Frontend: Add Vitest setup with test scripts for unit testing
- MCP: Add validation to convert empty strings to None for optional literal fields
- Debug: Add console logging for SSE event parsing troubleshooting
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore(009-chatkit-frontend): reorganize test files into test/ directory
- Move all temporary test scripts from root to test/ directory
- Add PHR for previous commit workflow
- Cleaner project root structure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-27 15:20:51 +05:00
|
|
|
"type-check": "tsc --noEmit",
|
|
|
|
|
"test": "vitest",
|
|
|
|
|
"test:ui": "vitest --ui",
|
|
|
|
|
"test:run": "vitest run",
|
|
|
|
|
"test:coverage": "vitest run --coverage",
|
|
|
|
|
"test:e2e": "playwright test",
|
|
|
|
|
"test:e2e:ui": "playwright test --ui"
|
feat(auth): implement complete authentication foundation (Phases 1-7)
Complete implementation of authentication system for Todo Evolution Hackathon Phase II:
Backend (FastAPI):
- User registration and login endpoints with JWT authentication
- Argon2id password hashing and HS256 JWT signing
- Rate limiting (5/min login, 100/min global) to prevent brute force
- Security headers (HSTS, CSP, X-Frame-Options, etc.)
- Structured JSON logging with request ID tracking
- Database migrations with Alembic
- Connection pooling and async operations
- 57 unit and integration tests (pytest)
Frontend (Next.js 16):
- Registration and login pages with form validation
- Dashboard with protected routes
- Reusable UI components (Input, Button, ErrorMessage)
- Middleware for authentication and authorization
- Accessibility features (ARIA labels, keyboard navigation)
- 13 E2E tests with Playwright
Testing & Quality:
- 70 total automated tests (100% passing)
- 80%+ test coverage (constitutional requirement met)
- Security validation (password hashing, JWT, rate limiting)
- Accessibility testing (ARIA, keyboard navigation)
Tech Stack:
- Backend: Python FastAPI, SQLModel, Neon PostgreSQL, Alembic
- Frontend: Next.js 16 (App Router), TypeScript, Tailwind CSS
- Auth: Better Auth patterns with JWT
- Testing: pytest, pytest-cov, Playwright
Constitutional Compliance:
✅ 80%+ test coverage
✅ Type safety throughout
✅ Security best practices
✅ Documentation inline
✅ Spec-driven development
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-29 18:06:33 +05:00
|
|
|
},
|
|
|
|
|
"dependencies": {
|
feat(frontend): implement complete design system with shadcn/ui components
Implement comprehensive frontend design system for Phase II web application:
- Add shadcn/ui component library (button, input, card, dialog, form, etc.)
- Refactor auth pages (login/register) with new design system
- Update dashboard with modern UI components
- Implement TypeScript schemas for tasks, tags, filters, and users
- Add authentication and dashboard-specific components
- Create comprehensive documentation (accessibility, performance, validation)
- Configure Tailwind with custom theme and animations
- Add context providers for state management
This establishes the complete UI foundation required for the hackathon Phase II deliverable.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 12:43:06 +05:00
|
|
|
"@dnd-kit/core": "^6.3.1",
|
|
|
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
|
|
|
"@hookform/resolvers": "^5.2.2",
|
|
|
|
|
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
|
|
|
"@radix-ui/react-checkbox": "^1.3.3",
|
|
|
|
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
|
|
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
|
|
|
"@radix-ui/react-label": "^2.1.8",
|
|
|
|
|
"@radix-ui/react-popover": "^1.1.15",
|
|
|
|
|
"@radix-ui/react-select": "^2.2.6",
|
|
|
|
|
"@radix-ui/react-slot": "^1.2.4",
|
|
|
|
|
"@radix-ui/react-tabs": "^1.1.13",
|
feat(integration): implement Better Auth + FastAPI JWT integration
Complete Phase II frontend-backend integration with Better Auth JWT authentication system.
Backend Changes:
- Migrate from custom user model to Better Auth tables (user, session, account, verification)
- Implement JWKS-based JWT verification with automatic key rotation
- Add UUID support for Better Auth user compatibility
- Create comprehensive test suite (unit, integration, performance)
- Add monitoring and structured logging
- Update all endpoints to use Better Auth user references
Frontend Changes:
- Integrate Better Auth client with JWT token management
- Implement authentication middleware for protected routes
- Update all API calls to include JWT authorization
- Add pagination component for task lists
- Create E2E test suite for user flows
- Add database migration script
Documentation:
- Add ADR for event-driven architecture deferral
- Create comprehensive specs, plans, and tasks for integration
- Document API contracts (endpoints, CORS, errors, JWT)
- Create reusable betterauth-fastapi-jwt-bridge skill
- Generate PHRs for all major workflow steps
Database:
- 6 Alembic migrations for Better Auth schema
- Drop custom users table
- Update foreign keys to Better Auth user table
- Add JWKS table for JWT plugin
Testing:
- Unit tests for auth dependencies and JWKS service
- Integration tests for auth flow and user isolation
- Performance tests for JWT, logging, and security scanning
- E2E tests for complete user flows
This implementation fulfills Phase II requirements for multi-user authentication
with JWT-based session management and proper user isolation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-03 11:02:00 +05:00
|
|
|
"@types/jsonwebtoken": "^9.0.10",
|
feat(frontend): implement complete design system with shadcn/ui components
Implement comprehensive frontend design system for Phase II web application:
- Add shadcn/ui component library (button, input, card, dialog, form, etc.)
- Refactor auth pages (login/register) with new design system
- Update dashboard with modern UI components
- Implement TypeScript schemas for tasks, tags, filters, and users
- Add authentication and dashboard-specific components
- Create comprehensive documentation (accessibility, performance, validation)
- Configure Tailwind with custom theme and animations
- Add context providers for state management
This establishes the complete UI foundation required for the hackathon Phase II deliverable.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 12:43:06 +05:00
|
|
|
"axios": "^1.7.9",
|
|
|
|
|
"better-auth": "^1.2.0",
|
|
|
|
|
"class-variance-authority": "^0.7.1",
|
|
|
|
|
"clsx": "^2.1.1",
|
|
|
|
|
"date-fns": "^4.1.0",
|
|
|
|
|
"framer-motion": "^12.23.26",
|
feat(integration): implement Better Auth + FastAPI JWT integration
Complete Phase II frontend-backend integration with Better Auth JWT authentication system.
Backend Changes:
- Migrate from custom user model to Better Auth tables (user, session, account, verification)
- Implement JWKS-based JWT verification with automatic key rotation
- Add UUID support for Better Auth user compatibility
- Create comprehensive test suite (unit, integration, performance)
- Add monitoring and structured logging
- Update all endpoints to use Better Auth user references
Frontend Changes:
- Integrate Better Auth client with JWT token management
- Implement authentication middleware for protected routes
- Update all API calls to include JWT authorization
- Add pagination component for task lists
- Create E2E test suite for user flows
- Add database migration script
Documentation:
- Add ADR for event-driven architecture deferral
- Create comprehensive specs, plans, and tasks for integration
- Document API contracts (endpoints, CORS, errors, JWT)
- Create reusable betterauth-fastapi-jwt-bridge skill
- Generate PHRs for all major workflow steps
Database:
- 6 Alembic migrations for Better Auth schema
- Drop custom users table
- Update foreign keys to Better Auth user table
- Add JWKS table for JWT plugin
Testing:
- Unit tests for auth dependencies and JWKS service
- Integration tests for auth flow and user isolation
- Performance tests for JWT, logging, and security scanning
- E2E tests for complete user flows
This implementation fulfills Phase II requirements for multi-user authentication
with JWT-based session management and proper user isolation.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-03 11:02:00 +05:00
|
|
|
"jsonwebtoken": "^9.0.3",
|
feat(frontend): implement complete design system with shadcn/ui components
Implement comprehensive frontend design system for Phase II web application:
- Add shadcn/ui component library (button, input, card, dialog, form, etc.)
- Refactor auth pages (login/register) with new design system
- Update dashboard with modern UI components
- Implement TypeScript schemas for tasks, tags, filters, and users
- Add authentication and dashboard-specific components
- Create comprehensive documentation (accessibility, performance, validation)
- Configure Tailwind with custom theme and animations
- Add context providers for state management
This establishes the complete UI foundation required for the hackathon Phase II deliverable.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 12:43:06 +05:00
|
|
|
"lucide-react": "^0.562.0",
|
feat(auth): implement complete authentication foundation (Phases 1-7)
Complete implementation of authentication system for Todo Evolution Hackathon Phase II:
Backend (FastAPI):
- User registration and login endpoints with JWT authentication
- Argon2id password hashing and HS256 JWT signing
- Rate limiting (5/min login, 100/min global) to prevent brute force
- Security headers (HSTS, CSP, X-Frame-Options, etc.)
- Structured JSON logging with request ID tracking
- Database migrations with Alembic
- Connection pooling and async operations
- 57 unit and integration tests (pytest)
Frontend (Next.js 16):
- Registration and login pages with form validation
- Dashboard with protected routes
- Reusable UI components (Input, Button, ErrorMessage)
- Middleware for authentication and authorization
- Accessibility features (ARIA labels, keyboard navigation)
- 13 E2E tests with Playwright
Testing & Quality:
- 70 total automated tests (100% passing)
- 80%+ test coverage (constitutional requirement met)
- Security validation (password hashing, JWT, rate limiting)
- Accessibility testing (ARIA, keyboard navigation)
Tech Stack:
- Backend: Python FastAPI, SQLModel, Neon PostgreSQL, Alembic
- Frontend: Next.js 16 (App Router), TypeScript, Tailwind CSS
- Auth: Better Auth patterns with JWT
- Testing: pytest, pytest-cov, Playwright
Constitutional Compliance:
✅ 80%+ test coverage
✅ Type safety throughout
✅ Security best practices
✅ Documentation inline
✅ Spec-driven development
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-29 18:06:33 +05:00
|
|
|
"next": "^16.0.0",
|
feat(frontend): implement complete design system with shadcn/ui components
Implement comprehensive frontend design system for Phase II web application:
- Add shadcn/ui component library (button, input, card, dialog, form, etc.)
- Refactor auth pages (login/register) with new design system
- Update dashboard with modern UI components
- Implement TypeScript schemas for tasks, tags, filters, and users
- Add authentication and dashboard-specific components
- Create comprehensive documentation (accessibility, performance, validation)
- Configure Tailwind with custom theme and animations
- Add context providers for state management
This establishes the complete UI foundation required for the hackathon Phase II deliverable.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 12:43:06 +05:00
|
|
|
"next-themes": "^0.4.6",
|
|
|
|
|
"pg": "^8.13.1",
|
feat(auth): implement complete authentication foundation (Phases 1-7)
Complete implementation of authentication system for Todo Evolution Hackathon Phase II:
Backend (FastAPI):
- User registration and login endpoints with JWT authentication
- Argon2id password hashing and HS256 JWT signing
- Rate limiting (5/min login, 100/min global) to prevent brute force
- Security headers (HSTS, CSP, X-Frame-Options, etc.)
- Structured JSON logging with request ID tracking
- Database migrations with Alembic
- Connection pooling and async operations
- 57 unit and integration tests (pytest)
Frontend (Next.js 16):
- Registration and login pages with form validation
- Dashboard with protected routes
- Reusable UI components (Input, Button, ErrorMessage)
- Middleware for authentication and authorization
- Accessibility features (ARIA labels, keyboard navigation)
- 13 E2E tests with Playwright
Testing & Quality:
- 70 total automated tests (100% passing)
- 80%+ test coverage (constitutional requirement met)
- Security validation (password hashing, JWT, rate limiting)
- Accessibility testing (ARIA, keyboard navigation)
Tech Stack:
- Backend: Python FastAPI, SQLModel, Neon PostgreSQL, Alembic
- Frontend: Next.js 16 (App Router), TypeScript, Tailwind CSS
- Auth: Better Auth patterns with JWT
- Testing: pytest, pytest-cov, Playwright
Constitutional Compliance:
✅ 80%+ test coverage
✅ Type safety throughout
✅ Security best practices
✅ Documentation inline
✅ Spec-driven development
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-29 18:06:33 +05:00
|
|
|
"react": "^19.0.0",
|
feat(frontend): implement complete design system with shadcn/ui components
Implement comprehensive frontend design system for Phase II web application:
- Add shadcn/ui component library (button, input, card, dialog, form, etc.)
- Refactor auth pages (login/register) with new design system
- Update dashboard with modern UI components
- Implement TypeScript schemas for tasks, tags, filters, and users
- Add authentication and dashboard-specific components
- Create comprehensive documentation (accessibility, performance, validation)
- Configure Tailwind with custom theme and animations
- Add context providers for state management
This establishes the complete UI foundation required for the hackathon Phase II deliverable.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 12:43:06 +05:00
|
|
|
"react-colorful": "^5.6.1",
|
|
|
|
|
"react-day-picker": "^9.13.0",
|
feat(auth): implement complete authentication foundation (Phases 1-7)
Complete implementation of authentication system for Todo Evolution Hackathon Phase II:
Backend (FastAPI):
- User registration and login endpoints with JWT authentication
- Argon2id password hashing and HS256 JWT signing
- Rate limiting (5/min login, 100/min global) to prevent brute force
- Security headers (HSTS, CSP, X-Frame-Options, etc.)
- Structured JSON logging with request ID tracking
- Database migrations with Alembic
- Connection pooling and async operations
- 57 unit and integration tests (pytest)
Frontend (Next.js 16):
- Registration and login pages with form validation
- Dashboard with protected routes
- Reusable UI components (Input, Button, ErrorMessage)
- Middleware for authentication and authorization
- Accessibility features (ARIA labels, keyboard navigation)
- 13 E2E tests with Playwright
Testing & Quality:
- 70 total automated tests (100% passing)
- 80%+ test coverage (constitutional requirement met)
- Security validation (password hashing, JWT, rate limiting)
- Accessibility testing (ARIA, keyboard navigation)
Tech Stack:
- Backend: Python FastAPI, SQLModel, Neon PostgreSQL, Alembic
- Frontend: Next.js 16 (App Router), TypeScript, Tailwind CSS
- Auth: Better Auth patterns with JWT
- Testing: pytest, pytest-cov, Playwright
Constitutional Compliance:
✅ 80%+ test coverage
✅ Type safety throughout
✅ Security best practices
✅ Documentation inline
✅ Spec-driven development
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-29 18:06:33 +05:00
|
|
|
"react-dom": "^19.0.0",
|
feat(frontend): implement complete design system with shadcn/ui components
Implement comprehensive frontend design system for Phase II web application:
- Add shadcn/ui component library (button, input, card, dialog, form, etc.)
- Refactor auth pages (login/register) with new design system
- Update dashboard with modern UI components
- Implement TypeScript schemas for tasks, tags, filters, and users
- Add authentication and dashboard-specific components
- Create comprehensive documentation (accessibility, performance, validation)
- Configure Tailwind with custom theme and animations
- Add context providers for state management
This establishes the complete UI foundation required for the hackathon Phase II deliverable.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 12:43:06 +05:00
|
|
|
"react-hook-form": "^7.69.0",
|
feat(009-chatkit-frontend): Phase III chatbot UX enhancements and SSE fixes (#9)
* feat(009-chatkit-frontend): implement chatbot popup UI and event system
Completed Phase 2 (Foundational) and Phase 3 (User Story 1):
Phase 2 (Foundational - T004-T008):
- T004: ChatKit integration (building custom interface, no CDN SDK)
- T005: Custom event system for task synchronization
- T006: ChatKit configuration with custom fetch interceptor
- T007: API proxy route with JWT extraction and SSE streaming
- T008: Enhanced TaskContext to emit task events
Phase 3 (User Story 1 - T013-T018):
- T013: Created FloatingChatButton component with animations
- T014: Created ChatBotPopup wrapper with shadcn/ui Dialog
- T015: Integrated chatbot into dashboard with event listener (T046)
- T016: Added Framer Motion animations (<300ms)
- T017: Configured z-index layering (FAB z-40, Dialog z-50)
- T018: Added accessibility attributes (aria-label, role)
Key files:
- frontend/src/lib/events/task-events.ts (event system)
- frontend/src/lib/chatkit-config.ts (ChatKit config)
- frontend/src/app/api/chatkit/route.ts (API proxy)
- frontend/src/components/chat/FloatingChatButton.tsx
- frontend/src/components/chat/ChatBotPopup.tsx
- frontend/src/app/dashboard/page.tsx (integrated chatbot)
Real-time sync: Chatbot events → Dashboard refresh via CustomEvent
Security: JWT extraction in API proxy (httpOnly cookies)
UX: Orange/coral theme, smooth animations, accessible
Next: Phase 4 (US5 Security), Phase 5 (US4 Streaming)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chat interface with SSE streaming
Completed Phase 5 (User Story 4 - Streaming AI Responses) and partial Phase 6 (User Story 2):
Phase 5 (US4 - T033-T040):
- T033: Created ChatInterface component with SSE streaming support
- T034: Created MessageList component with streaming state and typing indicator (T038)
- T035: Created MessageInput component with auto-resize and keyboard shortcuts
- T036: Integrated ChatInterface into ChatBotPopup (dashboard)
- T037: SSE streaming already implemented in API proxy (T007)
- T038: Added typing indicator with animated loader and cursor
- T039: Implemented exponential backoff retry (1s, 2s, 4s) in sendMessage
- T040: Added error banner with manual retry button
Phase 6 (US2 - T046-T050) - Already Complete:
- T046: TaskEvent listener already in dashboard (from Phase 3)
- T047: Dashboard refresh logic already implemented (from Phase 3)
- T048: Tool call result event handling in ChatInterface
- T049: TaskEvent emission using createTaskEventFromTool helper
- T050: Success confirmation UI with checkmark icons in MessageList
Key Features:
- SSE streaming: Fetch API with ReadableStream for real-time responses
- MCP tool integration: Parse tool.call.result events and emit TaskEvents
- Real-time sync: Chatbot task operations update dashboard within 1s
- Error handling: Auto-retry with exponential backoff + manual retry
- Streaming UX: Typing indicator, progressive content rendering, cursor animation
- Security: JWT authentication via API proxy, session validation
- Accessibility: ARIA labels, keyboard shortcuts (Enter/Shift+Enter)
Architecture:
- ChatInterface manages state and SSE streaming
- MessageList displays messages with tool call indicators
- MessageInput handles user input with validation
- Events flow: MCP tool result → TaskEvent → Dashboard refresh
Files:
- frontend/src/components/chat/ChatInterface.tsx (SSE + MCP)
- frontend/src/components/chat/MessageList.tsx (UI + typing)
- frontend/src/components/chat/MessageInput.tsx (input + shortcuts)
- frontend/src/app/dashboard/page.tsx (integration)
Next: Phase 7 (US3 History), Phase 8 (US6 Animations), Phase 9 (Errors), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement conversation history with pagination
Completed Phase 7 (User Story 3 - Persistent Conversation History):
Phase 7 (US3 - T056-T060):
- T056: Configured pagination with limit=50, order=desc
- T057: Implemented loadConversationHistory() with useEffect on mount
- T058: Added "Load earlier messages" button with loading state
- T059: Implemented loadMoreMessages() handler with pagination logic
- T060: Added loading states (isLoadingHistory, isLoadingMore) with spinner UI
Frontend Implementation Complete:
- Conversation state management (conversationId, currentPage, hasMoreMessages)
- loadConversationHistory(): Loads user's persistent conversation on mount
- loadMoreMessages(): Fetches older messages with pagination (page, limit)
- Loading indicators: Spinner in "Load earlier" button during fetch
- Ready for backend integration
Backend API Endpoints Required (placeholders in code):
- GET /api/v1/{user_id}/conversations - Get user's single conversation
- GET /api/v1/{user_id}/conversations/{conversation_id}/messages?page={page}&limit=50 - Paginated message history
Architecture:
- Each user has single persistent conversation (per spec)
- Backend creates conversation on first message if none exists
- Frontend loads conversation history on chatbot open
- Pagination: 50 messages per page, descending order (newest first)
- Messages prepended to list when loading older history
Files Modified:
- frontend/src/components/chat/ChatInterface.tsx (history logic)
- frontend/src/components/chat/MessageList.tsx (pagination UI)
- specs/009-chatkit-frontend/tasks.md (marked T056-T060 complete)
Testing:
- T061: Deferred - requires backend conversation history API
Next: Phase 8 (Animations - mostly done), Phase 9 (Error handling), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): add prefers-reduced-motion accessibility support
Completed Phase 8 (User Story 6 - Smooth Popup Animations):
Phase 8 (US6 - T065-T068):
- T065: Animation timing already optimized (250ms content, 200ms backdrop) - from Phase 3
- T066: AnimatePresence wrapper already implemented - from Phase 3
- T067: Backdrop fade animation already synchronized - from Phase 3
- T068: Added prefers-reduced-motion detection for accessibility ✅ NEW
T068 Implementation:
- Added prefers-reduced-motion detection using window.matchMedia
- ChatBotPopup: Disables all animations (content + backdrop) if user prefers reduced motion
- FloatingChatButton: Disables spring animations and hover/tap effects if user prefers reduced motion
- Fallback: duration: 0 for instant transitions (no animation)
- useMemo optimization: Only check media query once on mount
Accessibility:
- Respects user's OS-level motion preferences
- WCAG 2.1 Level AA compliance (Success Criterion 2.3.3 - Animation from Interactions)
- Users with vestibular disorders can use chatbot without motion sickness
- Instant transitions (no animation) when prefers-reduced-motion is enabled
Animation Performance (already achieved in Phase 3):
- Content animation: 250ms (below 300ms threshold per FR-012)
- Backdrop animation: 200ms (synced with content)
- AnimatePresence: mode="wait" prevents animation stacking
- easeOut easing for smooth deceleration
Files Modified:
- frontend/src/components/chat/ChatBotPopup.tsx (prefers-reduced-motion detection)
- frontend/src/components/chat/FloatingChatButton.tsx (prefers-reduced-motion detection)
- specs/009-chatkit-frontend/tasks.md (marked T065-T068 complete)
Testing:
- T069: Manual testing with DevTools Performance tab (requires user validation)
Next: Phase 9 (Error handling), Phase 10 (Polish & accessibility)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 9 error handling and edge cases
**What**: Comprehensive error handling for all edge cases identified in spec.md
**Implementation**:
1. **ErrorBoundary.tsx** (T070):
- React error boundary pattern to catch errors in chat components
- Prevents chat errors from crashing entire dashboard
- Fallback UI with retry/reload options
- Error logging with stack traces for debugging
2. **ErrorState.tsx** (T071):
- Reusable error UI components for different error types:
- RateLimitError: Countdown timer from Retry-After header
- AuthError: 3-second countdown before redirect to sign-in
- TimeoutError: Cancel/Keep Waiting options
- NetworkError: Connection lost with retry button
- BackendUnavailable: 502/503 errors with correlation ID
- UnknownError: Generic fallback with correlation ID
- All components follow contracts/error-messages.yaml specifications
3. **ChatInterface.tsx** (T072-T077):
- T072: Rate limit handling (429 → countdown → clear error when done)
- T073: Network error handling (exponential backoff 1s/2s/4s already implemented)
- T074: Auth error handling (401 → 3s countdown → redirect to /auth/signin)
- T075: Timeout handling (AbortController + 10s threshold → dialog)
- T076: Correlation ID logging (already in chatkit-config.ts)
- T077: Partial message indicator (interrupted stream → incomplete flag)
- Enhanced sendMessage with error state integration
- Timeout handlers: handleCancelRequest, handleKeepWaiting
- Cleanup of timeout/abort refs on error
4. **MessageList.tsx** (T077):
- Added metadata fields: complete, interrupted
- Incomplete indicator UI (yellow alert icon + message)
- Displays "Response interrupted (partial message)" for cancelled streams
**Architecture**:
- Specialized error components replace generic error banner
- Countdown timers managed with useEffect intervals
- AbortController for cancellable fetch requests
- Error states conditionally rendered based on error type
- Graceful degradation for all error scenarios
**UX Impact**:
- Users see helpful, specific error messages instead of generic failures
- Rate limits show countdown before retry is allowed
- Auth errors redirect automatically after countdown
- Timeouts give users choice to cancel or keep waiting
- Partial responses preserved and marked as incomplete
- All errors include context and recovery options
**Compliance**:
- Follows contracts/error-messages.yaml for all error types
- FR-020: Correlation ID logging throughout
- Error handling doesn't block other features
- Users never see raw error messages or stack traces
**Phase 8 Note**: Also committing PHR 0013 from Phase 8 (prefers-reduced-motion accessibility)
**Tasks**: T070-T077 complete
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 10 core polish (T078b, T078c, T079, T085)
**What**: Log sanitization, mobile responsive design, and security audit
**Implementation**:
1. **T078b: Log Sanitization Utility** (frontend/src/lib/logging/sanitize.ts):
- Truncate content fields to 50 chars with "[...]" suffix
- Redact JWT tokens (replace with "[REDACTED_TOKEN]")
- Redact PII fields (email, phone, address, SSN, credit card)
- Mask API keys (show first 4 + last 4 chars like "sk-ab...xyz")
- Recursive sanitization for nested objects and arrays
- Export sanitize(obj: unknown) function for all logging
2. **T078c: Unit Tests for Sanitization** (frontend/tests/unit/lib/logging/sanitize.test.ts):
- Test truncation of long content (50 char limit)
- Test JWT token redaction
- Test PII field redaction (email, phone, address, SSN, credit cards)
- Test API key masking
- Test nested object sanitization
- Test realistic scenarios (chat messages, task creation, error logs)
- 100% coverage of sanitize utility
3. **T079: Mobile Responsive Design**:
- **ChatBotPopup.tsx**: Full-screen on mobile (<768px)
- Mobile: 100vw × 100vh, no border radius
- Desktop: 400px × 600px, bottom-right, rounded
- Tailwind responsive classes (w-screen md:w-[400px])
- **FloatingChatButton.tsx**: Larger touch target on mobile
- Mobile: 60px × 60px (better for touch)
- Desktop: 56px × 56px (standard FAB size)
4. **T085: Security Audit** - Fixed sensitive data logging:
- **ChatInterface.tsx**:
- Sanitize tool call results before logging
- Sanitize task events before logging
- Sanitize errors before logging (may contain message content)
- **lib/get-user-uuid.ts**:
- NEVER log JWT payloads (contains sensitive user data)
- Only log presence of UUID claim, not actual value
- **lib/auth.ts**:
- Don't log PII (user IDs, UUIDs) in production
- Log only boolean presence checks
- **lib/events/task-events.ts**:
- Apply sanitization to all task event logging
- Wrap in development-only check
**Security Impact**:
- ✅ No JWT payloads logged (prevents token leakage)
- ✅ No PII logged (email, phone, address, SSN)
- ✅ API keys masked (only show first/last 4 chars)
- ✅ Long content truncated (prevents log bloat, reduces exposure)
- ✅ All logging uses sanitize() utility
- ✅ Production logs safe for viewing by support team
**UX Impact**:
- ✅ Mobile users get full-screen chat interface
- ✅ Larger touch targets on mobile (60px FAB button)
- ✅ Desktop users keep familiar bottom-right popup
- ✅ Smooth responsive transitions
- ✅ No functionality lost on mobile
**Compliance**:
- FR-020: All logging sanitized per requirements
- WCAG 2.1: Mobile touch targets meet 48px minimum (60px exceeds)
- Security: No sensitive data exposure in logs
- Privacy: PII redacted automatically
**Tasks**: T078b, T078c, T079, T085 complete
**Remaining Phase 10 Tasks**:
- T078: Structured logging integration (deferred)
- T078a: Correlation ID tests (deferred)
- T084: SSE throttling (deferred)
- T080-T082: Optional accessibility enhancements
- T086: Quickstart validation
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chatbot feedback and task list display improvements (T051a-T051i)
Implemented explicit confirmation messages and formatted task list queries to improve
chatbot user experience and ensure 100% visibility of task operations.
**Backend Changes (server.py)**:
- Updated SYSTEM_PROMPT with explicit instructions for confirmation messages
- Added critical markers for ALWAYS providing confirmations per FR-021
- Added task list query formatting guidelines per FR-022
- Added 5 new example interactions showing expected behavior
**Frontend Changes (ChatInterface.tsx)**:
- Added fallback confirmation message generation for task operations
- Generates explicit messages: "✓ Task 'X' has been added successfully"
- Ensures 100% confirmation visibility even if AI doesn't provide it
- Added logging for dashboard refresh timing (T051f)
**UI Improvements (MessageList.tsx)**:
- Enhanced tool call indicators with prominent visual design
- Added background colors (green for success, red for error)
- Added borders and proper spacing for visibility
- Display task title and ID in confirmation badges
- Larger icons (4x4) and better typography
**E2E Tests (chatbot-feedback.spec.ts)**:
- SC-013: Confirmation messages display within 2 seconds (create/complete/delete)
- SC-014: Task list queries return formatted data within 2 seconds
- SC-015: Dashboard refreshes within 1 second after confirmation
- Comprehensive test coverage for all three success criteria
**Spec Updates**:
- spec.md: Added FR-021 to FR-024, SC-013 to SC-015, 5 new edge cases
- plan.md: Added "Chatbot Feedback & Task List Display" section
- tasks.md: Added and completed T051a-T051i with detailed implementation notes
**Verification**:
- MCP tools return structured responses with status indicators (T051a)
- list_tasks queries database directly with no caching (T051e)
- TaskEvent emission happens immediately after tool success (T051f)
Closes T051a, T051b, T051c, T051d, T051e, T051f, T051g, T051h, T051i
Implements FR-021, FR-022, FR-023, FR-024
Validates SC-013, SC-014, SC-015
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): enhance chatbot UX with emoji formatting and fix SSE handling
- Backend: Update system prompt with emoji-rich task formatting (✅🎯📅🔴🟡🟢)
- Backend: Add beautiful task list display grouped by priority with visual separators
- Frontend: Fix SSE handling for non-streaming 'message' events with tool_results
- Frontend: Add react-markdown for formatted chat responses
- Frontend: Improve sanitize order - mask API keys before field-name redaction
- Frontend: Add Vitest setup with test scripts for unit testing
- MCP: Add validation to convert empty strings to None for optional literal fields
- Debug: Add console logging for SSE event parsing troubleshooting
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore(009-chatkit-frontend): reorganize test files into test/ directory
- Move all temporary test scripts from root to test/ directory
- Add PHR for previous commit workflow
- Cleaner project root structure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-27 15:20:51 +05:00
|
|
|
"react-markdown": "^10.1.0",
|
feat(frontend): implement complete design system with shadcn/ui components
Implement comprehensive frontend design system for Phase II web application:
- Add shadcn/ui component library (button, input, card, dialog, form, etc.)
- Refactor auth pages (login/register) with new design system
- Update dashboard with modern UI components
- Implement TypeScript schemas for tasks, tags, filters, and users
- Add authentication and dashboard-specific components
- Create comprehensive documentation (accessibility, performance, validation)
- Configure Tailwind with custom theme and animations
- Add context providers for state management
This establishes the complete UI foundation required for the hackathon Phase II deliverable.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 12:43:06 +05:00
|
|
|
"sonner": "^2.0.7",
|
|
|
|
|
"tailwind-merge": "^3.4.0",
|
|
|
|
|
"tailwindcss-animate": "^1.0.7",
|
|
|
|
|
"uuid": "^13.0.0",
|
|
|
|
|
"zod": "^3.25.76"
|
feat(auth): implement complete authentication foundation (Phases 1-7)
Complete implementation of authentication system for Todo Evolution Hackathon Phase II:
Backend (FastAPI):
- User registration and login endpoints with JWT authentication
- Argon2id password hashing and HS256 JWT signing
- Rate limiting (5/min login, 100/min global) to prevent brute force
- Security headers (HSTS, CSP, X-Frame-Options, etc.)
- Structured JSON logging with request ID tracking
- Database migrations with Alembic
- Connection pooling and async operations
- 57 unit and integration tests (pytest)
Frontend (Next.js 16):
- Registration and login pages with form validation
- Dashboard with protected routes
- Reusable UI components (Input, Button, ErrorMessage)
- Middleware for authentication and authorization
- Accessibility features (ARIA labels, keyboard navigation)
- 13 E2E tests with Playwright
Testing & Quality:
- 70 total automated tests (100% passing)
- 80%+ test coverage (constitutional requirement met)
- Security validation (password hashing, JWT, rate limiting)
- Accessibility testing (ARIA, keyboard navigation)
Tech Stack:
- Backend: Python FastAPI, SQLModel, Neon PostgreSQL, Alembic
- Frontend: Next.js 16 (App Router), TypeScript, Tailwind CSS
- Auth: Better Auth patterns with JWT
- Testing: pytest, pytest-cov, Playwright
Constitutional Compliance:
✅ 80%+ test coverage
✅ Type safety throughout
✅ Security best practices
✅ Documentation inline
✅ Spec-driven development
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-29 18:06:33 +05:00
|
|
|
},
|
|
|
|
|
"devDependencies": {
|
feat(frontend): implement complete design system with shadcn/ui components
Implement comprehensive frontend design system for Phase II web application:
- Add shadcn/ui component library (button, input, card, dialog, form, etc.)
- Refactor auth pages (login/register) with new design system
- Update dashboard with modern UI components
- Implement TypeScript schemas for tasks, tags, filters, and users
- Add authentication and dashboard-specific components
- Create comprehensive documentation (accessibility, performance, validation)
- Configure Tailwind with custom theme and animations
- Add context providers for state management
This establishes the complete UI foundation required for the hackathon Phase II deliverable.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 12:43:06 +05:00
|
|
|
"@playwright/test": "^1.49.1",
|
feat(009-chatkit-frontend): Phase III chatbot UX enhancements and SSE fixes (#9)
* feat(009-chatkit-frontend): implement chatbot popup UI and event system
Completed Phase 2 (Foundational) and Phase 3 (User Story 1):
Phase 2 (Foundational - T004-T008):
- T004: ChatKit integration (building custom interface, no CDN SDK)
- T005: Custom event system for task synchronization
- T006: ChatKit configuration with custom fetch interceptor
- T007: API proxy route with JWT extraction and SSE streaming
- T008: Enhanced TaskContext to emit task events
Phase 3 (User Story 1 - T013-T018):
- T013: Created FloatingChatButton component with animations
- T014: Created ChatBotPopup wrapper with shadcn/ui Dialog
- T015: Integrated chatbot into dashboard with event listener (T046)
- T016: Added Framer Motion animations (<300ms)
- T017: Configured z-index layering (FAB z-40, Dialog z-50)
- T018: Added accessibility attributes (aria-label, role)
Key files:
- frontend/src/lib/events/task-events.ts (event system)
- frontend/src/lib/chatkit-config.ts (ChatKit config)
- frontend/src/app/api/chatkit/route.ts (API proxy)
- frontend/src/components/chat/FloatingChatButton.tsx
- frontend/src/components/chat/ChatBotPopup.tsx
- frontend/src/app/dashboard/page.tsx (integrated chatbot)
Real-time sync: Chatbot events → Dashboard refresh via CustomEvent
Security: JWT extraction in API proxy (httpOnly cookies)
UX: Orange/coral theme, smooth animations, accessible
Next: Phase 4 (US5 Security), Phase 5 (US4 Streaming)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chat interface with SSE streaming
Completed Phase 5 (User Story 4 - Streaming AI Responses) and partial Phase 6 (User Story 2):
Phase 5 (US4 - T033-T040):
- T033: Created ChatInterface component with SSE streaming support
- T034: Created MessageList component with streaming state and typing indicator (T038)
- T035: Created MessageInput component with auto-resize and keyboard shortcuts
- T036: Integrated ChatInterface into ChatBotPopup (dashboard)
- T037: SSE streaming already implemented in API proxy (T007)
- T038: Added typing indicator with animated loader and cursor
- T039: Implemented exponential backoff retry (1s, 2s, 4s) in sendMessage
- T040: Added error banner with manual retry button
Phase 6 (US2 - T046-T050) - Already Complete:
- T046: TaskEvent listener already in dashboard (from Phase 3)
- T047: Dashboard refresh logic already implemented (from Phase 3)
- T048: Tool call result event handling in ChatInterface
- T049: TaskEvent emission using createTaskEventFromTool helper
- T050: Success confirmation UI with checkmark icons in MessageList
Key Features:
- SSE streaming: Fetch API with ReadableStream for real-time responses
- MCP tool integration: Parse tool.call.result events and emit TaskEvents
- Real-time sync: Chatbot task operations update dashboard within 1s
- Error handling: Auto-retry with exponential backoff + manual retry
- Streaming UX: Typing indicator, progressive content rendering, cursor animation
- Security: JWT authentication via API proxy, session validation
- Accessibility: ARIA labels, keyboard shortcuts (Enter/Shift+Enter)
Architecture:
- ChatInterface manages state and SSE streaming
- MessageList displays messages with tool call indicators
- MessageInput handles user input with validation
- Events flow: MCP tool result → TaskEvent → Dashboard refresh
Files:
- frontend/src/components/chat/ChatInterface.tsx (SSE + MCP)
- frontend/src/components/chat/MessageList.tsx (UI + typing)
- frontend/src/components/chat/MessageInput.tsx (input + shortcuts)
- frontend/src/app/dashboard/page.tsx (integration)
Next: Phase 7 (US3 History), Phase 8 (US6 Animations), Phase 9 (Errors), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement conversation history with pagination
Completed Phase 7 (User Story 3 - Persistent Conversation History):
Phase 7 (US3 - T056-T060):
- T056: Configured pagination with limit=50, order=desc
- T057: Implemented loadConversationHistory() with useEffect on mount
- T058: Added "Load earlier messages" button with loading state
- T059: Implemented loadMoreMessages() handler with pagination logic
- T060: Added loading states (isLoadingHistory, isLoadingMore) with spinner UI
Frontend Implementation Complete:
- Conversation state management (conversationId, currentPage, hasMoreMessages)
- loadConversationHistory(): Loads user's persistent conversation on mount
- loadMoreMessages(): Fetches older messages with pagination (page, limit)
- Loading indicators: Spinner in "Load earlier" button during fetch
- Ready for backend integration
Backend API Endpoints Required (placeholders in code):
- GET /api/v1/{user_id}/conversations - Get user's single conversation
- GET /api/v1/{user_id}/conversations/{conversation_id}/messages?page={page}&limit=50 - Paginated message history
Architecture:
- Each user has single persistent conversation (per spec)
- Backend creates conversation on first message if none exists
- Frontend loads conversation history on chatbot open
- Pagination: 50 messages per page, descending order (newest first)
- Messages prepended to list when loading older history
Files Modified:
- frontend/src/components/chat/ChatInterface.tsx (history logic)
- frontend/src/components/chat/MessageList.tsx (pagination UI)
- specs/009-chatkit-frontend/tasks.md (marked T056-T060 complete)
Testing:
- T061: Deferred - requires backend conversation history API
Next: Phase 8 (Animations - mostly done), Phase 9 (Error handling), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): add prefers-reduced-motion accessibility support
Completed Phase 8 (User Story 6 - Smooth Popup Animations):
Phase 8 (US6 - T065-T068):
- T065: Animation timing already optimized (250ms content, 200ms backdrop) - from Phase 3
- T066: AnimatePresence wrapper already implemented - from Phase 3
- T067: Backdrop fade animation already synchronized - from Phase 3
- T068: Added prefers-reduced-motion detection for accessibility ✅ NEW
T068 Implementation:
- Added prefers-reduced-motion detection using window.matchMedia
- ChatBotPopup: Disables all animations (content + backdrop) if user prefers reduced motion
- FloatingChatButton: Disables spring animations and hover/tap effects if user prefers reduced motion
- Fallback: duration: 0 for instant transitions (no animation)
- useMemo optimization: Only check media query once on mount
Accessibility:
- Respects user's OS-level motion preferences
- WCAG 2.1 Level AA compliance (Success Criterion 2.3.3 - Animation from Interactions)
- Users with vestibular disorders can use chatbot without motion sickness
- Instant transitions (no animation) when prefers-reduced-motion is enabled
Animation Performance (already achieved in Phase 3):
- Content animation: 250ms (below 300ms threshold per FR-012)
- Backdrop animation: 200ms (synced with content)
- AnimatePresence: mode="wait" prevents animation stacking
- easeOut easing for smooth deceleration
Files Modified:
- frontend/src/components/chat/ChatBotPopup.tsx (prefers-reduced-motion detection)
- frontend/src/components/chat/FloatingChatButton.tsx (prefers-reduced-motion detection)
- specs/009-chatkit-frontend/tasks.md (marked T065-T068 complete)
Testing:
- T069: Manual testing with DevTools Performance tab (requires user validation)
Next: Phase 9 (Error handling), Phase 10 (Polish & accessibility)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 9 error handling and edge cases
**What**: Comprehensive error handling for all edge cases identified in spec.md
**Implementation**:
1. **ErrorBoundary.tsx** (T070):
- React error boundary pattern to catch errors in chat components
- Prevents chat errors from crashing entire dashboard
- Fallback UI with retry/reload options
- Error logging with stack traces for debugging
2. **ErrorState.tsx** (T071):
- Reusable error UI components for different error types:
- RateLimitError: Countdown timer from Retry-After header
- AuthError: 3-second countdown before redirect to sign-in
- TimeoutError: Cancel/Keep Waiting options
- NetworkError: Connection lost with retry button
- BackendUnavailable: 502/503 errors with correlation ID
- UnknownError: Generic fallback with correlation ID
- All components follow contracts/error-messages.yaml specifications
3. **ChatInterface.tsx** (T072-T077):
- T072: Rate limit handling (429 → countdown → clear error when done)
- T073: Network error handling (exponential backoff 1s/2s/4s already implemented)
- T074: Auth error handling (401 → 3s countdown → redirect to /auth/signin)
- T075: Timeout handling (AbortController + 10s threshold → dialog)
- T076: Correlation ID logging (already in chatkit-config.ts)
- T077: Partial message indicator (interrupted stream → incomplete flag)
- Enhanced sendMessage with error state integration
- Timeout handlers: handleCancelRequest, handleKeepWaiting
- Cleanup of timeout/abort refs on error
4. **MessageList.tsx** (T077):
- Added metadata fields: complete, interrupted
- Incomplete indicator UI (yellow alert icon + message)
- Displays "Response interrupted (partial message)" for cancelled streams
**Architecture**:
- Specialized error components replace generic error banner
- Countdown timers managed with useEffect intervals
- AbortController for cancellable fetch requests
- Error states conditionally rendered based on error type
- Graceful degradation for all error scenarios
**UX Impact**:
- Users see helpful, specific error messages instead of generic failures
- Rate limits show countdown before retry is allowed
- Auth errors redirect automatically after countdown
- Timeouts give users choice to cancel or keep waiting
- Partial responses preserved and marked as incomplete
- All errors include context and recovery options
**Compliance**:
- Follows contracts/error-messages.yaml for all error types
- FR-020: Correlation ID logging throughout
- Error handling doesn't block other features
- Users never see raw error messages or stack traces
**Phase 8 Note**: Also committing PHR 0013 from Phase 8 (prefers-reduced-motion accessibility)
**Tasks**: T070-T077 complete
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 10 core polish (T078b, T078c, T079, T085)
**What**: Log sanitization, mobile responsive design, and security audit
**Implementation**:
1. **T078b: Log Sanitization Utility** (frontend/src/lib/logging/sanitize.ts):
- Truncate content fields to 50 chars with "[...]" suffix
- Redact JWT tokens (replace with "[REDACTED_TOKEN]")
- Redact PII fields (email, phone, address, SSN, credit card)
- Mask API keys (show first 4 + last 4 chars like "sk-ab...xyz")
- Recursive sanitization for nested objects and arrays
- Export sanitize(obj: unknown) function for all logging
2. **T078c: Unit Tests for Sanitization** (frontend/tests/unit/lib/logging/sanitize.test.ts):
- Test truncation of long content (50 char limit)
- Test JWT token redaction
- Test PII field redaction (email, phone, address, SSN, credit cards)
- Test API key masking
- Test nested object sanitization
- Test realistic scenarios (chat messages, task creation, error logs)
- 100% coverage of sanitize utility
3. **T079: Mobile Responsive Design**:
- **ChatBotPopup.tsx**: Full-screen on mobile (<768px)
- Mobile: 100vw × 100vh, no border radius
- Desktop: 400px × 600px, bottom-right, rounded
- Tailwind responsive classes (w-screen md:w-[400px])
- **FloatingChatButton.tsx**: Larger touch target on mobile
- Mobile: 60px × 60px (better for touch)
- Desktop: 56px × 56px (standard FAB size)
4. **T085: Security Audit** - Fixed sensitive data logging:
- **ChatInterface.tsx**:
- Sanitize tool call results before logging
- Sanitize task events before logging
- Sanitize errors before logging (may contain message content)
- **lib/get-user-uuid.ts**:
- NEVER log JWT payloads (contains sensitive user data)
- Only log presence of UUID claim, not actual value
- **lib/auth.ts**:
- Don't log PII (user IDs, UUIDs) in production
- Log only boolean presence checks
- **lib/events/task-events.ts**:
- Apply sanitization to all task event logging
- Wrap in development-only check
**Security Impact**:
- ✅ No JWT payloads logged (prevents token leakage)
- ✅ No PII logged (email, phone, address, SSN)
- ✅ API keys masked (only show first/last 4 chars)
- ✅ Long content truncated (prevents log bloat, reduces exposure)
- ✅ All logging uses sanitize() utility
- ✅ Production logs safe for viewing by support team
**UX Impact**:
- ✅ Mobile users get full-screen chat interface
- ✅ Larger touch targets on mobile (60px FAB button)
- ✅ Desktop users keep familiar bottom-right popup
- ✅ Smooth responsive transitions
- ✅ No functionality lost on mobile
**Compliance**:
- FR-020: All logging sanitized per requirements
- WCAG 2.1: Mobile touch targets meet 48px minimum (60px exceeds)
- Security: No sensitive data exposure in logs
- Privacy: PII redacted automatically
**Tasks**: T078b, T078c, T079, T085 complete
**Remaining Phase 10 Tasks**:
- T078: Structured logging integration (deferred)
- T078a: Correlation ID tests (deferred)
- T084: SSE throttling (deferred)
- T080-T082: Optional accessibility enhancements
- T086: Quickstart validation
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chatbot feedback and task list display improvements (T051a-T051i)
Implemented explicit confirmation messages and formatted task list queries to improve
chatbot user experience and ensure 100% visibility of task operations.
**Backend Changes (server.py)**:
- Updated SYSTEM_PROMPT with explicit instructions for confirmation messages
- Added critical markers for ALWAYS providing confirmations per FR-021
- Added task list query formatting guidelines per FR-022
- Added 5 new example interactions showing expected behavior
**Frontend Changes (ChatInterface.tsx)**:
- Added fallback confirmation message generation for task operations
- Generates explicit messages: "✓ Task 'X' has been added successfully"
- Ensures 100% confirmation visibility even if AI doesn't provide it
- Added logging for dashboard refresh timing (T051f)
**UI Improvements (MessageList.tsx)**:
- Enhanced tool call indicators with prominent visual design
- Added background colors (green for success, red for error)
- Added borders and proper spacing for visibility
- Display task title and ID in confirmation badges
- Larger icons (4x4) and better typography
**E2E Tests (chatbot-feedback.spec.ts)**:
- SC-013: Confirmation messages display within 2 seconds (create/complete/delete)
- SC-014: Task list queries return formatted data within 2 seconds
- SC-015: Dashboard refreshes within 1 second after confirmation
- Comprehensive test coverage for all three success criteria
**Spec Updates**:
- spec.md: Added FR-021 to FR-024, SC-013 to SC-015, 5 new edge cases
- plan.md: Added "Chatbot Feedback & Task List Display" section
- tasks.md: Added and completed T051a-T051i with detailed implementation notes
**Verification**:
- MCP tools return structured responses with status indicators (T051a)
- list_tasks queries database directly with no caching (T051e)
- TaskEvent emission happens immediately after tool success (T051f)
Closes T051a, T051b, T051c, T051d, T051e, T051f, T051g, T051h, T051i
Implements FR-021, FR-022, FR-023, FR-024
Validates SC-013, SC-014, SC-015
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): enhance chatbot UX with emoji formatting and fix SSE handling
- Backend: Update system prompt with emoji-rich task formatting (✅🎯📅🔴🟡🟢)
- Backend: Add beautiful task list display grouped by priority with visual separators
- Frontend: Fix SSE handling for non-streaming 'message' events with tool_results
- Frontend: Add react-markdown for formatted chat responses
- Frontend: Improve sanitize order - mask API keys before field-name redaction
- Frontend: Add Vitest setup with test scripts for unit testing
- MCP: Add validation to convert empty strings to None for optional literal fields
- Debug: Add console logging for SSE event parsing troubleshooting
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore(009-chatkit-frontend): reorganize test files into test/ directory
- Move all temporary test scripts from root to test/ directory
- Add PHR for previous commit workflow
- Cleaner project root structure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-27 15:20:51 +05:00
|
|
|
"@testing-library/jest-dom": "^6.9.1",
|
|
|
|
|
"@testing-library/react": "^16.3.2",
|
|
|
|
|
"@types/node": "^22.19.7",
|
feat(frontend): implement complete design system with shadcn/ui components
Implement comprehensive frontend design system for Phase II web application:
- Add shadcn/ui component library (button, input, card, dialog, form, etc.)
- Refactor auth pages (login/register) with new design system
- Update dashboard with modern UI components
- Implement TypeScript schemas for tasks, tags, filters, and users
- Add authentication and dashboard-specific components
- Create comprehensive documentation (accessibility, performance, validation)
- Configure Tailwind with custom theme and animations
- Add context providers for state management
This establishes the complete UI foundation required for the hackathon Phase II deliverable.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 12:43:06 +05:00
|
|
|
"@types/pg": "^8.11.10",
|
feat(auth): implement complete authentication foundation (Phases 1-7)
Complete implementation of authentication system for Todo Evolution Hackathon Phase II:
Backend (FastAPI):
- User registration and login endpoints with JWT authentication
- Argon2id password hashing and HS256 JWT signing
- Rate limiting (5/min login, 100/min global) to prevent brute force
- Security headers (HSTS, CSP, X-Frame-Options, etc.)
- Structured JSON logging with request ID tracking
- Database migrations with Alembic
- Connection pooling and async operations
- 57 unit and integration tests (pytest)
Frontend (Next.js 16):
- Registration and login pages with form validation
- Dashboard with protected routes
- Reusable UI components (Input, Button, ErrorMessage)
- Middleware for authentication and authorization
- Accessibility features (ARIA labels, keyboard navigation)
- 13 E2E tests with Playwright
Testing & Quality:
- 70 total automated tests (100% passing)
- 80%+ test coverage (constitutional requirement met)
- Security validation (password hashing, JWT, rate limiting)
- Accessibility testing (ARIA, keyboard navigation)
Tech Stack:
- Backend: Python FastAPI, SQLModel, Neon PostgreSQL, Alembic
- Frontend: Next.js 16 (App Router), TypeScript, Tailwind CSS
- Auth: Better Auth patterns with JWT
- Testing: pytest, pytest-cov, Playwright
Constitutional Compliance:
✅ 80%+ test coverage
✅ Type safety throughout
✅ Security best practices
✅ Documentation inline
✅ Spec-driven development
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-29 18:06:33 +05:00
|
|
|
"@types/react": "^19.0.6",
|
|
|
|
|
"@types/react-dom": "^19.0.2",
|
feat(frontend): implement complete design system with shadcn/ui components
Implement comprehensive frontend design system for Phase II web application:
- Add shadcn/ui component library (button, input, card, dialog, form, etc.)
- Refactor auth pages (login/register) with new design system
- Update dashboard with modern UI components
- Implement TypeScript schemas for tasks, tags, filters, and users
- Add authentication and dashboard-specific components
- Create comprehensive documentation (accessibility, performance, validation)
- Configure Tailwind with custom theme and animations
- Add context providers for state management
This establishes the complete UI foundation required for the hackathon Phase II deliverable.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 12:43:06 +05:00
|
|
|
"@types/uuid": "^10.0.0",
|
feat(009-chatkit-frontend): Phase III chatbot UX enhancements and SSE fixes (#9)
* feat(009-chatkit-frontend): implement chatbot popup UI and event system
Completed Phase 2 (Foundational) and Phase 3 (User Story 1):
Phase 2 (Foundational - T004-T008):
- T004: ChatKit integration (building custom interface, no CDN SDK)
- T005: Custom event system for task synchronization
- T006: ChatKit configuration with custom fetch interceptor
- T007: API proxy route with JWT extraction and SSE streaming
- T008: Enhanced TaskContext to emit task events
Phase 3 (User Story 1 - T013-T018):
- T013: Created FloatingChatButton component with animations
- T014: Created ChatBotPopup wrapper with shadcn/ui Dialog
- T015: Integrated chatbot into dashboard with event listener (T046)
- T016: Added Framer Motion animations (<300ms)
- T017: Configured z-index layering (FAB z-40, Dialog z-50)
- T018: Added accessibility attributes (aria-label, role)
Key files:
- frontend/src/lib/events/task-events.ts (event system)
- frontend/src/lib/chatkit-config.ts (ChatKit config)
- frontend/src/app/api/chatkit/route.ts (API proxy)
- frontend/src/components/chat/FloatingChatButton.tsx
- frontend/src/components/chat/ChatBotPopup.tsx
- frontend/src/app/dashboard/page.tsx (integrated chatbot)
Real-time sync: Chatbot events → Dashboard refresh via CustomEvent
Security: JWT extraction in API proxy (httpOnly cookies)
UX: Orange/coral theme, smooth animations, accessible
Next: Phase 4 (US5 Security), Phase 5 (US4 Streaming)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chat interface with SSE streaming
Completed Phase 5 (User Story 4 - Streaming AI Responses) and partial Phase 6 (User Story 2):
Phase 5 (US4 - T033-T040):
- T033: Created ChatInterface component with SSE streaming support
- T034: Created MessageList component with streaming state and typing indicator (T038)
- T035: Created MessageInput component with auto-resize and keyboard shortcuts
- T036: Integrated ChatInterface into ChatBotPopup (dashboard)
- T037: SSE streaming already implemented in API proxy (T007)
- T038: Added typing indicator with animated loader and cursor
- T039: Implemented exponential backoff retry (1s, 2s, 4s) in sendMessage
- T040: Added error banner with manual retry button
Phase 6 (US2 - T046-T050) - Already Complete:
- T046: TaskEvent listener already in dashboard (from Phase 3)
- T047: Dashboard refresh logic already implemented (from Phase 3)
- T048: Tool call result event handling in ChatInterface
- T049: TaskEvent emission using createTaskEventFromTool helper
- T050: Success confirmation UI with checkmark icons in MessageList
Key Features:
- SSE streaming: Fetch API with ReadableStream for real-time responses
- MCP tool integration: Parse tool.call.result events and emit TaskEvents
- Real-time sync: Chatbot task operations update dashboard within 1s
- Error handling: Auto-retry with exponential backoff + manual retry
- Streaming UX: Typing indicator, progressive content rendering, cursor animation
- Security: JWT authentication via API proxy, session validation
- Accessibility: ARIA labels, keyboard shortcuts (Enter/Shift+Enter)
Architecture:
- ChatInterface manages state and SSE streaming
- MessageList displays messages with tool call indicators
- MessageInput handles user input with validation
- Events flow: MCP tool result → TaskEvent → Dashboard refresh
Files:
- frontend/src/components/chat/ChatInterface.tsx (SSE + MCP)
- frontend/src/components/chat/MessageList.tsx (UI + typing)
- frontend/src/components/chat/MessageInput.tsx (input + shortcuts)
- frontend/src/app/dashboard/page.tsx (integration)
Next: Phase 7 (US3 History), Phase 8 (US6 Animations), Phase 9 (Errors), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement conversation history with pagination
Completed Phase 7 (User Story 3 - Persistent Conversation History):
Phase 7 (US3 - T056-T060):
- T056: Configured pagination with limit=50, order=desc
- T057: Implemented loadConversationHistory() with useEffect on mount
- T058: Added "Load earlier messages" button with loading state
- T059: Implemented loadMoreMessages() handler with pagination logic
- T060: Added loading states (isLoadingHistory, isLoadingMore) with spinner UI
Frontend Implementation Complete:
- Conversation state management (conversationId, currentPage, hasMoreMessages)
- loadConversationHistory(): Loads user's persistent conversation on mount
- loadMoreMessages(): Fetches older messages with pagination (page, limit)
- Loading indicators: Spinner in "Load earlier" button during fetch
- Ready for backend integration
Backend API Endpoints Required (placeholders in code):
- GET /api/v1/{user_id}/conversations - Get user's single conversation
- GET /api/v1/{user_id}/conversations/{conversation_id}/messages?page={page}&limit=50 - Paginated message history
Architecture:
- Each user has single persistent conversation (per spec)
- Backend creates conversation on first message if none exists
- Frontend loads conversation history on chatbot open
- Pagination: 50 messages per page, descending order (newest first)
- Messages prepended to list when loading older history
Files Modified:
- frontend/src/components/chat/ChatInterface.tsx (history logic)
- frontend/src/components/chat/MessageList.tsx (pagination UI)
- specs/009-chatkit-frontend/tasks.md (marked T056-T060 complete)
Testing:
- T061: Deferred - requires backend conversation history API
Next: Phase 8 (Animations - mostly done), Phase 9 (Error handling), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): add prefers-reduced-motion accessibility support
Completed Phase 8 (User Story 6 - Smooth Popup Animations):
Phase 8 (US6 - T065-T068):
- T065: Animation timing already optimized (250ms content, 200ms backdrop) - from Phase 3
- T066: AnimatePresence wrapper already implemented - from Phase 3
- T067: Backdrop fade animation already synchronized - from Phase 3
- T068: Added prefers-reduced-motion detection for accessibility ✅ NEW
T068 Implementation:
- Added prefers-reduced-motion detection using window.matchMedia
- ChatBotPopup: Disables all animations (content + backdrop) if user prefers reduced motion
- FloatingChatButton: Disables spring animations and hover/tap effects if user prefers reduced motion
- Fallback: duration: 0 for instant transitions (no animation)
- useMemo optimization: Only check media query once on mount
Accessibility:
- Respects user's OS-level motion preferences
- WCAG 2.1 Level AA compliance (Success Criterion 2.3.3 - Animation from Interactions)
- Users with vestibular disorders can use chatbot without motion sickness
- Instant transitions (no animation) when prefers-reduced-motion is enabled
Animation Performance (already achieved in Phase 3):
- Content animation: 250ms (below 300ms threshold per FR-012)
- Backdrop animation: 200ms (synced with content)
- AnimatePresence: mode="wait" prevents animation stacking
- easeOut easing for smooth deceleration
Files Modified:
- frontend/src/components/chat/ChatBotPopup.tsx (prefers-reduced-motion detection)
- frontend/src/components/chat/FloatingChatButton.tsx (prefers-reduced-motion detection)
- specs/009-chatkit-frontend/tasks.md (marked T065-T068 complete)
Testing:
- T069: Manual testing with DevTools Performance tab (requires user validation)
Next: Phase 9 (Error handling), Phase 10 (Polish & accessibility)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 9 error handling and edge cases
**What**: Comprehensive error handling for all edge cases identified in spec.md
**Implementation**:
1. **ErrorBoundary.tsx** (T070):
- React error boundary pattern to catch errors in chat components
- Prevents chat errors from crashing entire dashboard
- Fallback UI with retry/reload options
- Error logging with stack traces for debugging
2. **ErrorState.tsx** (T071):
- Reusable error UI components for different error types:
- RateLimitError: Countdown timer from Retry-After header
- AuthError: 3-second countdown before redirect to sign-in
- TimeoutError: Cancel/Keep Waiting options
- NetworkError: Connection lost with retry button
- BackendUnavailable: 502/503 errors with correlation ID
- UnknownError: Generic fallback with correlation ID
- All components follow contracts/error-messages.yaml specifications
3. **ChatInterface.tsx** (T072-T077):
- T072: Rate limit handling (429 → countdown → clear error when done)
- T073: Network error handling (exponential backoff 1s/2s/4s already implemented)
- T074: Auth error handling (401 → 3s countdown → redirect to /auth/signin)
- T075: Timeout handling (AbortController + 10s threshold → dialog)
- T076: Correlation ID logging (already in chatkit-config.ts)
- T077: Partial message indicator (interrupted stream → incomplete flag)
- Enhanced sendMessage with error state integration
- Timeout handlers: handleCancelRequest, handleKeepWaiting
- Cleanup of timeout/abort refs on error
4. **MessageList.tsx** (T077):
- Added metadata fields: complete, interrupted
- Incomplete indicator UI (yellow alert icon + message)
- Displays "Response interrupted (partial message)" for cancelled streams
**Architecture**:
- Specialized error components replace generic error banner
- Countdown timers managed with useEffect intervals
- AbortController for cancellable fetch requests
- Error states conditionally rendered based on error type
- Graceful degradation for all error scenarios
**UX Impact**:
- Users see helpful, specific error messages instead of generic failures
- Rate limits show countdown before retry is allowed
- Auth errors redirect automatically after countdown
- Timeouts give users choice to cancel or keep waiting
- Partial responses preserved and marked as incomplete
- All errors include context and recovery options
**Compliance**:
- Follows contracts/error-messages.yaml for all error types
- FR-020: Correlation ID logging throughout
- Error handling doesn't block other features
- Users never see raw error messages or stack traces
**Phase 8 Note**: Also committing PHR 0013 from Phase 8 (prefers-reduced-motion accessibility)
**Tasks**: T070-T077 complete
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 10 core polish (T078b, T078c, T079, T085)
**What**: Log sanitization, mobile responsive design, and security audit
**Implementation**:
1. **T078b: Log Sanitization Utility** (frontend/src/lib/logging/sanitize.ts):
- Truncate content fields to 50 chars with "[...]" suffix
- Redact JWT tokens (replace with "[REDACTED_TOKEN]")
- Redact PII fields (email, phone, address, SSN, credit card)
- Mask API keys (show first 4 + last 4 chars like "sk-ab...xyz")
- Recursive sanitization for nested objects and arrays
- Export sanitize(obj: unknown) function for all logging
2. **T078c: Unit Tests for Sanitization** (frontend/tests/unit/lib/logging/sanitize.test.ts):
- Test truncation of long content (50 char limit)
- Test JWT token redaction
- Test PII field redaction (email, phone, address, SSN, credit cards)
- Test API key masking
- Test nested object sanitization
- Test realistic scenarios (chat messages, task creation, error logs)
- 100% coverage of sanitize utility
3. **T079: Mobile Responsive Design**:
- **ChatBotPopup.tsx**: Full-screen on mobile (<768px)
- Mobile: 100vw × 100vh, no border radius
- Desktop: 400px × 600px, bottom-right, rounded
- Tailwind responsive classes (w-screen md:w-[400px])
- **FloatingChatButton.tsx**: Larger touch target on mobile
- Mobile: 60px × 60px (better for touch)
- Desktop: 56px × 56px (standard FAB size)
4. **T085: Security Audit** - Fixed sensitive data logging:
- **ChatInterface.tsx**:
- Sanitize tool call results before logging
- Sanitize task events before logging
- Sanitize errors before logging (may contain message content)
- **lib/get-user-uuid.ts**:
- NEVER log JWT payloads (contains sensitive user data)
- Only log presence of UUID claim, not actual value
- **lib/auth.ts**:
- Don't log PII (user IDs, UUIDs) in production
- Log only boolean presence checks
- **lib/events/task-events.ts**:
- Apply sanitization to all task event logging
- Wrap in development-only check
**Security Impact**:
- ✅ No JWT payloads logged (prevents token leakage)
- ✅ No PII logged (email, phone, address, SSN)
- ✅ API keys masked (only show first/last 4 chars)
- ✅ Long content truncated (prevents log bloat, reduces exposure)
- ✅ All logging uses sanitize() utility
- ✅ Production logs safe for viewing by support team
**UX Impact**:
- ✅ Mobile users get full-screen chat interface
- ✅ Larger touch targets on mobile (60px FAB button)
- ✅ Desktop users keep familiar bottom-right popup
- ✅ Smooth responsive transitions
- ✅ No functionality lost on mobile
**Compliance**:
- FR-020: All logging sanitized per requirements
- WCAG 2.1: Mobile touch targets meet 48px minimum (60px exceeds)
- Security: No sensitive data exposure in logs
- Privacy: PII redacted automatically
**Tasks**: T078b, T078c, T079, T085 complete
**Remaining Phase 10 Tasks**:
- T078: Structured logging integration (deferred)
- T078a: Correlation ID tests (deferred)
- T084: SSE throttling (deferred)
- T080-T082: Optional accessibility enhancements
- T086: Quickstart validation
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chatbot feedback and task list display improvements (T051a-T051i)
Implemented explicit confirmation messages and formatted task list queries to improve
chatbot user experience and ensure 100% visibility of task operations.
**Backend Changes (server.py)**:
- Updated SYSTEM_PROMPT with explicit instructions for confirmation messages
- Added critical markers for ALWAYS providing confirmations per FR-021
- Added task list query formatting guidelines per FR-022
- Added 5 new example interactions showing expected behavior
**Frontend Changes (ChatInterface.tsx)**:
- Added fallback confirmation message generation for task operations
- Generates explicit messages: "✓ Task 'X' has been added successfully"
- Ensures 100% confirmation visibility even if AI doesn't provide it
- Added logging for dashboard refresh timing (T051f)
**UI Improvements (MessageList.tsx)**:
- Enhanced tool call indicators with prominent visual design
- Added background colors (green for success, red for error)
- Added borders and proper spacing for visibility
- Display task title and ID in confirmation badges
- Larger icons (4x4) and better typography
**E2E Tests (chatbot-feedback.spec.ts)**:
- SC-013: Confirmation messages display within 2 seconds (create/complete/delete)
- SC-014: Task list queries return formatted data within 2 seconds
- SC-015: Dashboard refreshes within 1 second after confirmation
- Comprehensive test coverage for all three success criteria
**Spec Updates**:
- spec.md: Added FR-021 to FR-024, SC-013 to SC-015, 5 new edge cases
- plan.md: Added "Chatbot Feedback & Task List Display" section
- tasks.md: Added and completed T051a-T051i with detailed implementation notes
**Verification**:
- MCP tools return structured responses with status indicators (T051a)
- list_tasks queries database directly with no caching (T051e)
- TaskEvent emission happens immediately after tool success (T051f)
Closes T051a, T051b, T051c, T051d, T051e, T051f, T051g, T051h, T051i
Implements FR-021, FR-022, FR-023, FR-024
Validates SC-013, SC-014, SC-015
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): enhance chatbot UX with emoji formatting and fix SSE handling
- Backend: Update system prompt with emoji-rich task formatting (✅🎯📅🔴🟡🟢)
- Backend: Add beautiful task list display grouped by priority with visual separators
- Frontend: Fix SSE handling for non-streaming 'message' events with tool_results
- Frontend: Add react-markdown for formatted chat responses
- Frontend: Improve sanitize order - mask API keys before field-name redaction
- Frontend: Add Vitest setup with test scripts for unit testing
- MCP: Add validation to convert empty strings to None for optional literal fields
- Debug: Add console logging for SSE event parsing troubleshooting
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore(009-chatkit-frontend): reorganize test files into test/ directory
- Move all temporary test scripts from root to test/ directory
- Add PHR for previous commit workflow
- Cleaner project root structure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-27 15:20:51 +05:00
|
|
|
"@vitejs/plugin-react": "^5.1.2",
|
|
|
|
|
"@vitest/ui": "^4.0.17",
|
feat(frontend): implement complete design system with shadcn/ui components
Implement comprehensive frontend design system for Phase II web application:
- Add shadcn/ui component library (button, input, card, dialog, form, etc.)
- Refactor auth pages (login/register) with new design system
- Update dashboard with modern UI components
- Implement TypeScript schemas for tasks, tags, filters, and users
- Add authentication and dashboard-specific components
- Create comprehensive documentation (accessibility, performance, validation)
- Configure Tailwind with custom theme and animations
- Add context providers for state management
This establishes the complete UI foundation required for the hackathon Phase II deliverable.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 12:43:06 +05:00
|
|
|
"autoprefixer": "^10.4.20",
|
feat(009-chatkit-frontend): Phase III chatbot UX enhancements and SSE fixes (#9)
* feat(009-chatkit-frontend): implement chatbot popup UI and event system
Completed Phase 2 (Foundational) and Phase 3 (User Story 1):
Phase 2 (Foundational - T004-T008):
- T004: ChatKit integration (building custom interface, no CDN SDK)
- T005: Custom event system for task synchronization
- T006: ChatKit configuration with custom fetch interceptor
- T007: API proxy route with JWT extraction and SSE streaming
- T008: Enhanced TaskContext to emit task events
Phase 3 (User Story 1 - T013-T018):
- T013: Created FloatingChatButton component with animations
- T014: Created ChatBotPopup wrapper with shadcn/ui Dialog
- T015: Integrated chatbot into dashboard with event listener (T046)
- T016: Added Framer Motion animations (<300ms)
- T017: Configured z-index layering (FAB z-40, Dialog z-50)
- T018: Added accessibility attributes (aria-label, role)
Key files:
- frontend/src/lib/events/task-events.ts (event system)
- frontend/src/lib/chatkit-config.ts (ChatKit config)
- frontend/src/app/api/chatkit/route.ts (API proxy)
- frontend/src/components/chat/FloatingChatButton.tsx
- frontend/src/components/chat/ChatBotPopup.tsx
- frontend/src/app/dashboard/page.tsx (integrated chatbot)
Real-time sync: Chatbot events → Dashboard refresh via CustomEvent
Security: JWT extraction in API proxy (httpOnly cookies)
UX: Orange/coral theme, smooth animations, accessible
Next: Phase 4 (US5 Security), Phase 5 (US4 Streaming)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chat interface with SSE streaming
Completed Phase 5 (User Story 4 - Streaming AI Responses) and partial Phase 6 (User Story 2):
Phase 5 (US4 - T033-T040):
- T033: Created ChatInterface component with SSE streaming support
- T034: Created MessageList component with streaming state and typing indicator (T038)
- T035: Created MessageInput component with auto-resize and keyboard shortcuts
- T036: Integrated ChatInterface into ChatBotPopup (dashboard)
- T037: SSE streaming already implemented in API proxy (T007)
- T038: Added typing indicator with animated loader and cursor
- T039: Implemented exponential backoff retry (1s, 2s, 4s) in sendMessage
- T040: Added error banner with manual retry button
Phase 6 (US2 - T046-T050) - Already Complete:
- T046: TaskEvent listener already in dashboard (from Phase 3)
- T047: Dashboard refresh logic already implemented (from Phase 3)
- T048: Tool call result event handling in ChatInterface
- T049: TaskEvent emission using createTaskEventFromTool helper
- T050: Success confirmation UI with checkmark icons in MessageList
Key Features:
- SSE streaming: Fetch API with ReadableStream for real-time responses
- MCP tool integration: Parse tool.call.result events and emit TaskEvents
- Real-time sync: Chatbot task operations update dashboard within 1s
- Error handling: Auto-retry with exponential backoff + manual retry
- Streaming UX: Typing indicator, progressive content rendering, cursor animation
- Security: JWT authentication via API proxy, session validation
- Accessibility: ARIA labels, keyboard shortcuts (Enter/Shift+Enter)
Architecture:
- ChatInterface manages state and SSE streaming
- MessageList displays messages with tool call indicators
- MessageInput handles user input with validation
- Events flow: MCP tool result → TaskEvent → Dashboard refresh
Files:
- frontend/src/components/chat/ChatInterface.tsx (SSE + MCP)
- frontend/src/components/chat/MessageList.tsx (UI + typing)
- frontend/src/components/chat/MessageInput.tsx (input + shortcuts)
- frontend/src/app/dashboard/page.tsx (integration)
Next: Phase 7 (US3 History), Phase 8 (US6 Animations), Phase 9 (Errors), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement conversation history with pagination
Completed Phase 7 (User Story 3 - Persistent Conversation History):
Phase 7 (US3 - T056-T060):
- T056: Configured pagination with limit=50, order=desc
- T057: Implemented loadConversationHistory() with useEffect on mount
- T058: Added "Load earlier messages" button with loading state
- T059: Implemented loadMoreMessages() handler with pagination logic
- T060: Added loading states (isLoadingHistory, isLoadingMore) with spinner UI
Frontend Implementation Complete:
- Conversation state management (conversationId, currentPage, hasMoreMessages)
- loadConversationHistory(): Loads user's persistent conversation on mount
- loadMoreMessages(): Fetches older messages with pagination (page, limit)
- Loading indicators: Spinner in "Load earlier" button during fetch
- Ready for backend integration
Backend API Endpoints Required (placeholders in code):
- GET /api/v1/{user_id}/conversations - Get user's single conversation
- GET /api/v1/{user_id}/conversations/{conversation_id}/messages?page={page}&limit=50 - Paginated message history
Architecture:
- Each user has single persistent conversation (per spec)
- Backend creates conversation on first message if none exists
- Frontend loads conversation history on chatbot open
- Pagination: 50 messages per page, descending order (newest first)
- Messages prepended to list when loading older history
Files Modified:
- frontend/src/components/chat/ChatInterface.tsx (history logic)
- frontend/src/components/chat/MessageList.tsx (pagination UI)
- specs/009-chatkit-frontend/tasks.md (marked T056-T060 complete)
Testing:
- T061: Deferred - requires backend conversation history API
Next: Phase 8 (Animations - mostly done), Phase 9 (Error handling), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): add prefers-reduced-motion accessibility support
Completed Phase 8 (User Story 6 - Smooth Popup Animations):
Phase 8 (US6 - T065-T068):
- T065: Animation timing already optimized (250ms content, 200ms backdrop) - from Phase 3
- T066: AnimatePresence wrapper already implemented - from Phase 3
- T067: Backdrop fade animation already synchronized - from Phase 3
- T068: Added prefers-reduced-motion detection for accessibility ✅ NEW
T068 Implementation:
- Added prefers-reduced-motion detection using window.matchMedia
- ChatBotPopup: Disables all animations (content + backdrop) if user prefers reduced motion
- FloatingChatButton: Disables spring animations and hover/tap effects if user prefers reduced motion
- Fallback: duration: 0 for instant transitions (no animation)
- useMemo optimization: Only check media query once on mount
Accessibility:
- Respects user's OS-level motion preferences
- WCAG 2.1 Level AA compliance (Success Criterion 2.3.3 - Animation from Interactions)
- Users with vestibular disorders can use chatbot without motion sickness
- Instant transitions (no animation) when prefers-reduced-motion is enabled
Animation Performance (already achieved in Phase 3):
- Content animation: 250ms (below 300ms threshold per FR-012)
- Backdrop animation: 200ms (synced with content)
- AnimatePresence: mode="wait" prevents animation stacking
- easeOut easing for smooth deceleration
Files Modified:
- frontend/src/components/chat/ChatBotPopup.tsx (prefers-reduced-motion detection)
- frontend/src/components/chat/FloatingChatButton.tsx (prefers-reduced-motion detection)
- specs/009-chatkit-frontend/tasks.md (marked T065-T068 complete)
Testing:
- T069: Manual testing with DevTools Performance tab (requires user validation)
Next: Phase 9 (Error handling), Phase 10 (Polish & accessibility)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 9 error handling and edge cases
**What**: Comprehensive error handling for all edge cases identified in spec.md
**Implementation**:
1. **ErrorBoundary.tsx** (T070):
- React error boundary pattern to catch errors in chat components
- Prevents chat errors from crashing entire dashboard
- Fallback UI with retry/reload options
- Error logging with stack traces for debugging
2. **ErrorState.tsx** (T071):
- Reusable error UI components for different error types:
- RateLimitError: Countdown timer from Retry-After header
- AuthError: 3-second countdown before redirect to sign-in
- TimeoutError: Cancel/Keep Waiting options
- NetworkError: Connection lost with retry button
- BackendUnavailable: 502/503 errors with correlation ID
- UnknownError: Generic fallback with correlation ID
- All components follow contracts/error-messages.yaml specifications
3. **ChatInterface.tsx** (T072-T077):
- T072: Rate limit handling (429 → countdown → clear error when done)
- T073: Network error handling (exponential backoff 1s/2s/4s already implemented)
- T074: Auth error handling (401 → 3s countdown → redirect to /auth/signin)
- T075: Timeout handling (AbortController + 10s threshold → dialog)
- T076: Correlation ID logging (already in chatkit-config.ts)
- T077: Partial message indicator (interrupted stream → incomplete flag)
- Enhanced sendMessage with error state integration
- Timeout handlers: handleCancelRequest, handleKeepWaiting
- Cleanup of timeout/abort refs on error
4. **MessageList.tsx** (T077):
- Added metadata fields: complete, interrupted
- Incomplete indicator UI (yellow alert icon + message)
- Displays "Response interrupted (partial message)" for cancelled streams
**Architecture**:
- Specialized error components replace generic error banner
- Countdown timers managed with useEffect intervals
- AbortController for cancellable fetch requests
- Error states conditionally rendered based on error type
- Graceful degradation for all error scenarios
**UX Impact**:
- Users see helpful, specific error messages instead of generic failures
- Rate limits show countdown before retry is allowed
- Auth errors redirect automatically after countdown
- Timeouts give users choice to cancel or keep waiting
- Partial responses preserved and marked as incomplete
- All errors include context and recovery options
**Compliance**:
- Follows contracts/error-messages.yaml for all error types
- FR-020: Correlation ID logging throughout
- Error handling doesn't block other features
- Users never see raw error messages or stack traces
**Phase 8 Note**: Also committing PHR 0013 from Phase 8 (prefers-reduced-motion accessibility)
**Tasks**: T070-T077 complete
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 10 core polish (T078b, T078c, T079, T085)
**What**: Log sanitization, mobile responsive design, and security audit
**Implementation**:
1. **T078b: Log Sanitization Utility** (frontend/src/lib/logging/sanitize.ts):
- Truncate content fields to 50 chars with "[...]" suffix
- Redact JWT tokens (replace with "[REDACTED_TOKEN]")
- Redact PII fields (email, phone, address, SSN, credit card)
- Mask API keys (show first 4 + last 4 chars like "sk-ab...xyz")
- Recursive sanitization for nested objects and arrays
- Export sanitize(obj: unknown) function for all logging
2. **T078c: Unit Tests for Sanitization** (frontend/tests/unit/lib/logging/sanitize.test.ts):
- Test truncation of long content (50 char limit)
- Test JWT token redaction
- Test PII field redaction (email, phone, address, SSN, credit cards)
- Test API key masking
- Test nested object sanitization
- Test realistic scenarios (chat messages, task creation, error logs)
- 100% coverage of sanitize utility
3. **T079: Mobile Responsive Design**:
- **ChatBotPopup.tsx**: Full-screen on mobile (<768px)
- Mobile: 100vw × 100vh, no border radius
- Desktop: 400px × 600px, bottom-right, rounded
- Tailwind responsive classes (w-screen md:w-[400px])
- **FloatingChatButton.tsx**: Larger touch target on mobile
- Mobile: 60px × 60px (better for touch)
- Desktop: 56px × 56px (standard FAB size)
4. **T085: Security Audit** - Fixed sensitive data logging:
- **ChatInterface.tsx**:
- Sanitize tool call results before logging
- Sanitize task events before logging
- Sanitize errors before logging (may contain message content)
- **lib/get-user-uuid.ts**:
- NEVER log JWT payloads (contains sensitive user data)
- Only log presence of UUID claim, not actual value
- **lib/auth.ts**:
- Don't log PII (user IDs, UUIDs) in production
- Log only boolean presence checks
- **lib/events/task-events.ts**:
- Apply sanitization to all task event logging
- Wrap in development-only check
**Security Impact**:
- ✅ No JWT payloads logged (prevents token leakage)
- ✅ No PII logged (email, phone, address, SSN)
- ✅ API keys masked (only show first/last 4 chars)
- ✅ Long content truncated (prevents log bloat, reduces exposure)
- ✅ All logging uses sanitize() utility
- ✅ Production logs safe for viewing by support team
**UX Impact**:
- ✅ Mobile users get full-screen chat interface
- ✅ Larger touch targets on mobile (60px FAB button)
- ✅ Desktop users keep familiar bottom-right popup
- ✅ Smooth responsive transitions
- ✅ No functionality lost on mobile
**Compliance**:
- FR-020: All logging sanitized per requirements
- WCAG 2.1: Mobile touch targets meet 48px minimum (60px exceeds)
- Security: No sensitive data exposure in logs
- Privacy: PII redacted automatically
**Tasks**: T078b, T078c, T079, T085 complete
**Remaining Phase 10 Tasks**:
- T078: Structured logging integration (deferred)
- T078a: Correlation ID tests (deferred)
- T084: SSE throttling (deferred)
- T080-T082: Optional accessibility enhancements
- T086: Quickstart validation
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chatbot feedback and task list display improvements (T051a-T051i)
Implemented explicit confirmation messages and formatted task list queries to improve
chatbot user experience and ensure 100% visibility of task operations.
**Backend Changes (server.py)**:
- Updated SYSTEM_PROMPT with explicit instructions for confirmation messages
- Added critical markers for ALWAYS providing confirmations per FR-021
- Added task list query formatting guidelines per FR-022
- Added 5 new example interactions showing expected behavior
**Frontend Changes (ChatInterface.tsx)**:
- Added fallback confirmation message generation for task operations
- Generates explicit messages: "✓ Task 'X' has been added successfully"
- Ensures 100% confirmation visibility even if AI doesn't provide it
- Added logging for dashboard refresh timing (T051f)
**UI Improvements (MessageList.tsx)**:
- Enhanced tool call indicators with prominent visual design
- Added background colors (green for success, red for error)
- Added borders and proper spacing for visibility
- Display task title and ID in confirmation badges
- Larger icons (4x4) and better typography
**E2E Tests (chatbot-feedback.spec.ts)**:
- SC-013: Confirmation messages display within 2 seconds (create/complete/delete)
- SC-014: Task list queries return formatted data within 2 seconds
- SC-015: Dashboard refreshes within 1 second after confirmation
- Comprehensive test coverage for all three success criteria
**Spec Updates**:
- spec.md: Added FR-021 to FR-024, SC-013 to SC-015, 5 new edge cases
- plan.md: Added "Chatbot Feedback & Task List Display" section
- tasks.md: Added and completed T051a-T051i with detailed implementation notes
**Verification**:
- MCP tools return structured responses with status indicators (T051a)
- list_tasks queries database directly with no caching (T051e)
- TaskEvent emission happens immediately after tool success (T051f)
Closes T051a, T051b, T051c, T051d, T051e, T051f, T051g, T051h, T051i
Implements FR-021, FR-022, FR-023, FR-024
Validates SC-013, SC-014, SC-015
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): enhance chatbot UX with emoji formatting and fix SSE handling
- Backend: Update system prompt with emoji-rich task formatting (✅🎯📅🔴🟡🟢)
- Backend: Add beautiful task list display grouped by priority with visual separators
- Frontend: Fix SSE handling for non-streaming 'message' events with tool_results
- Frontend: Add react-markdown for formatted chat responses
- Frontend: Improve sanitize order - mask API keys before field-name redaction
- Frontend: Add Vitest setup with test scripts for unit testing
- MCP: Add validation to convert empty strings to None for optional literal fields
- Debug: Add console logging for SSE event parsing troubleshooting
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore(009-chatkit-frontend): reorganize test files into test/ directory
- Move all temporary test scripts from root to test/ directory
- Add PHR for previous commit workflow
- Cleaner project root structure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-27 15:20:51 +05:00
|
|
|
"dotenv": "^17.2.3",
|
feat(auth): implement complete authentication foundation (Phases 1-7)
Complete implementation of authentication system for Todo Evolution Hackathon Phase II:
Backend (FastAPI):
- User registration and login endpoints with JWT authentication
- Argon2id password hashing and HS256 JWT signing
- Rate limiting (5/min login, 100/min global) to prevent brute force
- Security headers (HSTS, CSP, X-Frame-Options, etc.)
- Structured JSON logging with request ID tracking
- Database migrations with Alembic
- Connection pooling and async operations
- 57 unit and integration tests (pytest)
Frontend (Next.js 16):
- Registration and login pages with form validation
- Dashboard with protected routes
- Reusable UI components (Input, Button, ErrorMessage)
- Middleware for authentication and authorization
- Accessibility features (ARIA labels, keyboard navigation)
- 13 E2E tests with Playwright
Testing & Quality:
- 70 total automated tests (100% passing)
- 80%+ test coverage (constitutional requirement met)
- Security validation (password hashing, JWT, rate limiting)
- Accessibility testing (ARIA, keyboard navigation)
Tech Stack:
- Backend: Python FastAPI, SQLModel, Neon PostgreSQL, Alembic
- Frontend: Next.js 16 (App Router), TypeScript, Tailwind CSS
- Auth: Better Auth patterns with JWT
- Testing: pytest, pytest-cov, Playwright
Constitutional Compliance:
✅ 80%+ test coverage
✅ Type safety throughout
✅ Security best practices
✅ Documentation inline
✅ Spec-driven development
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-29 18:06:33 +05:00
|
|
|
"eslint": "^9.17.0",
|
|
|
|
|
"eslint-config-next": "^16.0.0",
|
feat(009-chatkit-frontend): Phase III chatbot UX enhancements and SSE fixes (#9)
* feat(009-chatkit-frontend): implement chatbot popup UI and event system
Completed Phase 2 (Foundational) and Phase 3 (User Story 1):
Phase 2 (Foundational - T004-T008):
- T004: ChatKit integration (building custom interface, no CDN SDK)
- T005: Custom event system for task synchronization
- T006: ChatKit configuration with custom fetch interceptor
- T007: API proxy route with JWT extraction and SSE streaming
- T008: Enhanced TaskContext to emit task events
Phase 3 (User Story 1 - T013-T018):
- T013: Created FloatingChatButton component with animations
- T014: Created ChatBotPopup wrapper with shadcn/ui Dialog
- T015: Integrated chatbot into dashboard with event listener (T046)
- T016: Added Framer Motion animations (<300ms)
- T017: Configured z-index layering (FAB z-40, Dialog z-50)
- T018: Added accessibility attributes (aria-label, role)
Key files:
- frontend/src/lib/events/task-events.ts (event system)
- frontend/src/lib/chatkit-config.ts (ChatKit config)
- frontend/src/app/api/chatkit/route.ts (API proxy)
- frontend/src/components/chat/FloatingChatButton.tsx
- frontend/src/components/chat/ChatBotPopup.tsx
- frontend/src/app/dashboard/page.tsx (integrated chatbot)
Real-time sync: Chatbot events → Dashboard refresh via CustomEvent
Security: JWT extraction in API proxy (httpOnly cookies)
UX: Orange/coral theme, smooth animations, accessible
Next: Phase 4 (US5 Security), Phase 5 (US4 Streaming)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chat interface with SSE streaming
Completed Phase 5 (User Story 4 - Streaming AI Responses) and partial Phase 6 (User Story 2):
Phase 5 (US4 - T033-T040):
- T033: Created ChatInterface component with SSE streaming support
- T034: Created MessageList component with streaming state and typing indicator (T038)
- T035: Created MessageInput component with auto-resize and keyboard shortcuts
- T036: Integrated ChatInterface into ChatBotPopup (dashboard)
- T037: SSE streaming already implemented in API proxy (T007)
- T038: Added typing indicator with animated loader and cursor
- T039: Implemented exponential backoff retry (1s, 2s, 4s) in sendMessage
- T040: Added error banner with manual retry button
Phase 6 (US2 - T046-T050) - Already Complete:
- T046: TaskEvent listener already in dashboard (from Phase 3)
- T047: Dashboard refresh logic already implemented (from Phase 3)
- T048: Tool call result event handling in ChatInterface
- T049: TaskEvent emission using createTaskEventFromTool helper
- T050: Success confirmation UI with checkmark icons in MessageList
Key Features:
- SSE streaming: Fetch API with ReadableStream for real-time responses
- MCP tool integration: Parse tool.call.result events and emit TaskEvents
- Real-time sync: Chatbot task operations update dashboard within 1s
- Error handling: Auto-retry with exponential backoff + manual retry
- Streaming UX: Typing indicator, progressive content rendering, cursor animation
- Security: JWT authentication via API proxy, session validation
- Accessibility: ARIA labels, keyboard shortcuts (Enter/Shift+Enter)
Architecture:
- ChatInterface manages state and SSE streaming
- MessageList displays messages with tool call indicators
- MessageInput handles user input with validation
- Events flow: MCP tool result → TaskEvent → Dashboard refresh
Files:
- frontend/src/components/chat/ChatInterface.tsx (SSE + MCP)
- frontend/src/components/chat/MessageList.tsx (UI + typing)
- frontend/src/components/chat/MessageInput.tsx (input + shortcuts)
- frontend/src/app/dashboard/page.tsx (integration)
Next: Phase 7 (US3 History), Phase 8 (US6 Animations), Phase 9 (Errors), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement conversation history with pagination
Completed Phase 7 (User Story 3 - Persistent Conversation History):
Phase 7 (US3 - T056-T060):
- T056: Configured pagination with limit=50, order=desc
- T057: Implemented loadConversationHistory() with useEffect on mount
- T058: Added "Load earlier messages" button with loading state
- T059: Implemented loadMoreMessages() handler with pagination logic
- T060: Added loading states (isLoadingHistory, isLoadingMore) with spinner UI
Frontend Implementation Complete:
- Conversation state management (conversationId, currentPage, hasMoreMessages)
- loadConversationHistory(): Loads user's persistent conversation on mount
- loadMoreMessages(): Fetches older messages with pagination (page, limit)
- Loading indicators: Spinner in "Load earlier" button during fetch
- Ready for backend integration
Backend API Endpoints Required (placeholders in code):
- GET /api/v1/{user_id}/conversations - Get user's single conversation
- GET /api/v1/{user_id}/conversations/{conversation_id}/messages?page={page}&limit=50 - Paginated message history
Architecture:
- Each user has single persistent conversation (per spec)
- Backend creates conversation on first message if none exists
- Frontend loads conversation history on chatbot open
- Pagination: 50 messages per page, descending order (newest first)
- Messages prepended to list when loading older history
Files Modified:
- frontend/src/components/chat/ChatInterface.tsx (history logic)
- frontend/src/components/chat/MessageList.tsx (pagination UI)
- specs/009-chatkit-frontend/tasks.md (marked T056-T060 complete)
Testing:
- T061: Deferred - requires backend conversation history API
Next: Phase 8 (Animations - mostly done), Phase 9 (Error handling), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): add prefers-reduced-motion accessibility support
Completed Phase 8 (User Story 6 - Smooth Popup Animations):
Phase 8 (US6 - T065-T068):
- T065: Animation timing already optimized (250ms content, 200ms backdrop) - from Phase 3
- T066: AnimatePresence wrapper already implemented - from Phase 3
- T067: Backdrop fade animation already synchronized - from Phase 3
- T068: Added prefers-reduced-motion detection for accessibility ✅ NEW
T068 Implementation:
- Added prefers-reduced-motion detection using window.matchMedia
- ChatBotPopup: Disables all animations (content + backdrop) if user prefers reduced motion
- FloatingChatButton: Disables spring animations and hover/tap effects if user prefers reduced motion
- Fallback: duration: 0 for instant transitions (no animation)
- useMemo optimization: Only check media query once on mount
Accessibility:
- Respects user's OS-level motion preferences
- WCAG 2.1 Level AA compliance (Success Criterion 2.3.3 - Animation from Interactions)
- Users with vestibular disorders can use chatbot without motion sickness
- Instant transitions (no animation) when prefers-reduced-motion is enabled
Animation Performance (already achieved in Phase 3):
- Content animation: 250ms (below 300ms threshold per FR-012)
- Backdrop animation: 200ms (synced with content)
- AnimatePresence: mode="wait" prevents animation stacking
- easeOut easing for smooth deceleration
Files Modified:
- frontend/src/components/chat/ChatBotPopup.tsx (prefers-reduced-motion detection)
- frontend/src/components/chat/FloatingChatButton.tsx (prefers-reduced-motion detection)
- specs/009-chatkit-frontend/tasks.md (marked T065-T068 complete)
Testing:
- T069: Manual testing with DevTools Performance tab (requires user validation)
Next: Phase 9 (Error handling), Phase 10 (Polish & accessibility)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 9 error handling and edge cases
**What**: Comprehensive error handling for all edge cases identified in spec.md
**Implementation**:
1. **ErrorBoundary.tsx** (T070):
- React error boundary pattern to catch errors in chat components
- Prevents chat errors from crashing entire dashboard
- Fallback UI with retry/reload options
- Error logging with stack traces for debugging
2. **ErrorState.tsx** (T071):
- Reusable error UI components for different error types:
- RateLimitError: Countdown timer from Retry-After header
- AuthError: 3-second countdown before redirect to sign-in
- TimeoutError: Cancel/Keep Waiting options
- NetworkError: Connection lost with retry button
- BackendUnavailable: 502/503 errors with correlation ID
- UnknownError: Generic fallback with correlation ID
- All components follow contracts/error-messages.yaml specifications
3. **ChatInterface.tsx** (T072-T077):
- T072: Rate limit handling (429 → countdown → clear error when done)
- T073: Network error handling (exponential backoff 1s/2s/4s already implemented)
- T074: Auth error handling (401 → 3s countdown → redirect to /auth/signin)
- T075: Timeout handling (AbortController + 10s threshold → dialog)
- T076: Correlation ID logging (already in chatkit-config.ts)
- T077: Partial message indicator (interrupted stream → incomplete flag)
- Enhanced sendMessage with error state integration
- Timeout handlers: handleCancelRequest, handleKeepWaiting
- Cleanup of timeout/abort refs on error
4. **MessageList.tsx** (T077):
- Added metadata fields: complete, interrupted
- Incomplete indicator UI (yellow alert icon + message)
- Displays "Response interrupted (partial message)" for cancelled streams
**Architecture**:
- Specialized error components replace generic error banner
- Countdown timers managed with useEffect intervals
- AbortController for cancellable fetch requests
- Error states conditionally rendered based on error type
- Graceful degradation for all error scenarios
**UX Impact**:
- Users see helpful, specific error messages instead of generic failures
- Rate limits show countdown before retry is allowed
- Auth errors redirect automatically after countdown
- Timeouts give users choice to cancel or keep waiting
- Partial responses preserved and marked as incomplete
- All errors include context and recovery options
**Compliance**:
- Follows contracts/error-messages.yaml for all error types
- FR-020: Correlation ID logging throughout
- Error handling doesn't block other features
- Users never see raw error messages or stack traces
**Phase 8 Note**: Also committing PHR 0013 from Phase 8 (prefers-reduced-motion accessibility)
**Tasks**: T070-T077 complete
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 10 core polish (T078b, T078c, T079, T085)
**What**: Log sanitization, mobile responsive design, and security audit
**Implementation**:
1. **T078b: Log Sanitization Utility** (frontend/src/lib/logging/sanitize.ts):
- Truncate content fields to 50 chars with "[...]" suffix
- Redact JWT tokens (replace with "[REDACTED_TOKEN]")
- Redact PII fields (email, phone, address, SSN, credit card)
- Mask API keys (show first 4 + last 4 chars like "sk-ab...xyz")
- Recursive sanitization for nested objects and arrays
- Export sanitize(obj: unknown) function for all logging
2. **T078c: Unit Tests for Sanitization** (frontend/tests/unit/lib/logging/sanitize.test.ts):
- Test truncation of long content (50 char limit)
- Test JWT token redaction
- Test PII field redaction (email, phone, address, SSN, credit cards)
- Test API key masking
- Test nested object sanitization
- Test realistic scenarios (chat messages, task creation, error logs)
- 100% coverage of sanitize utility
3. **T079: Mobile Responsive Design**:
- **ChatBotPopup.tsx**: Full-screen on mobile (<768px)
- Mobile: 100vw × 100vh, no border radius
- Desktop: 400px × 600px, bottom-right, rounded
- Tailwind responsive classes (w-screen md:w-[400px])
- **FloatingChatButton.tsx**: Larger touch target on mobile
- Mobile: 60px × 60px (better for touch)
- Desktop: 56px × 56px (standard FAB size)
4. **T085: Security Audit** - Fixed sensitive data logging:
- **ChatInterface.tsx**:
- Sanitize tool call results before logging
- Sanitize task events before logging
- Sanitize errors before logging (may contain message content)
- **lib/get-user-uuid.ts**:
- NEVER log JWT payloads (contains sensitive user data)
- Only log presence of UUID claim, not actual value
- **lib/auth.ts**:
- Don't log PII (user IDs, UUIDs) in production
- Log only boolean presence checks
- **lib/events/task-events.ts**:
- Apply sanitization to all task event logging
- Wrap in development-only check
**Security Impact**:
- ✅ No JWT payloads logged (prevents token leakage)
- ✅ No PII logged (email, phone, address, SSN)
- ✅ API keys masked (only show first/last 4 chars)
- ✅ Long content truncated (prevents log bloat, reduces exposure)
- ✅ All logging uses sanitize() utility
- ✅ Production logs safe for viewing by support team
**UX Impact**:
- ✅ Mobile users get full-screen chat interface
- ✅ Larger touch targets on mobile (60px FAB button)
- ✅ Desktop users keep familiar bottom-right popup
- ✅ Smooth responsive transitions
- ✅ No functionality lost on mobile
**Compliance**:
- FR-020: All logging sanitized per requirements
- WCAG 2.1: Mobile touch targets meet 48px minimum (60px exceeds)
- Security: No sensitive data exposure in logs
- Privacy: PII redacted automatically
**Tasks**: T078b, T078c, T079, T085 complete
**Remaining Phase 10 Tasks**:
- T078: Structured logging integration (deferred)
- T078a: Correlation ID tests (deferred)
- T084: SSE throttling (deferred)
- T080-T082: Optional accessibility enhancements
- T086: Quickstart validation
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chatbot feedback and task list display improvements (T051a-T051i)
Implemented explicit confirmation messages and formatted task list queries to improve
chatbot user experience and ensure 100% visibility of task operations.
**Backend Changes (server.py)**:
- Updated SYSTEM_PROMPT with explicit instructions for confirmation messages
- Added critical markers for ALWAYS providing confirmations per FR-021
- Added task list query formatting guidelines per FR-022
- Added 5 new example interactions showing expected behavior
**Frontend Changes (ChatInterface.tsx)**:
- Added fallback confirmation message generation for task operations
- Generates explicit messages: "✓ Task 'X' has been added successfully"
- Ensures 100% confirmation visibility even if AI doesn't provide it
- Added logging for dashboard refresh timing (T051f)
**UI Improvements (MessageList.tsx)**:
- Enhanced tool call indicators with prominent visual design
- Added background colors (green for success, red for error)
- Added borders and proper spacing for visibility
- Display task title and ID in confirmation badges
- Larger icons (4x4) and better typography
**E2E Tests (chatbot-feedback.spec.ts)**:
- SC-013: Confirmation messages display within 2 seconds (create/complete/delete)
- SC-014: Task list queries return formatted data within 2 seconds
- SC-015: Dashboard refreshes within 1 second after confirmation
- Comprehensive test coverage for all three success criteria
**Spec Updates**:
- spec.md: Added FR-021 to FR-024, SC-013 to SC-015, 5 new edge cases
- plan.md: Added "Chatbot Feedback & Task List Display" section
- tasks.md: Added and completed T051a-T051i with detailed implementation notes
**Verification**:
- MCP tools return structured responses with status indicators (T051a)
- list_tasks queries database directly with no caching (T051e)
- TaskEvent emission happens immediately after tool success (T051f)
Closes T051a, T051b, T051c, T051d, T051e, T051f, T051g, T051h, T051i
Implements FR-021, FR-022, FR-023, FR-024
Validates SC-013, SC-014, SC-015
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): enhance chatbot UX with emoji formatting and fix SSE handling
- Backend: Update system prompt with emoji-rich task formatting (✅🎯📅🔴🟡🟢)
- Backend: Add beautiful task list display grouped by priority with visual separators
- Frontend: Fix SSE handling for non-streaming 'message' events with tool_results
- Frontend: Add react-markdown for formatted chat responses
- Frontend: Improve sanitize order - mask API keys before field-name redaction
- Frontend: Add Vitest setup with test scripts for unit testing
- MCP: Add validation to convert empty strings to None for optional literal fields
- Debug: Add console logging for SSE event parsing troubleshooting
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore(009-chatkit-frontend): reorganize test files into test/ directory
- Move all temporary test scripts from root to test/ directory
- Add PHR for previous commit workflow
- Cleaner project root structure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-27 15:20:51 +05:00
|
|
|
"jsdom": "^27.4.0",
|
feat(frontend): implement complete design system with shadcn/ui components
Implement comprehensive frontend design system for Phase II web application:
- Add shadcn/ui component library (button, input, card, dialog, form, etc.)
- Refactor auth pages (login/register) with new design system
- Update dashboard with modern UI components
- Implement TypeScript schemas for tasks, tags, filters, and users
- Add authentication and dashboard-specific components
- Create comprehensive documentation (accessibility, performance, validation)
- Configure Tailwind with custom theme and animations
- Add context providers for state management
This establishes the complete UI foundation required for the hackathon Phase II deliverable.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 12:43:06 +05:00
|
|
|
"postcss": "^8.4.49",
|
feat(auth): implement complete authentication foundation (Phases 1-7)
Complete implementation of authentication system for Todo Evolution Hackathon Phase II:
Backend (FastAPI):
- User registration and login endpoints with JWT authentication
- Argon2id password hashing and HS256 JWT signing
- Rate limiting (5/min login, 100/min global) to prevent brute force
- Security headers (HSTS, CSP, X-Frame-Options, etc.)
- Structured JSON logging with request ID tracking
- Database migrations with Alembic
- Connection pooling and async operations
- 57 unit and integration tests (pytest)
Frontend (Next.js 16):
- Registration and login pages with form validation
- Dashboard with protected routes
- Reusable UI components (Input, Button, ErrorMessage)
- Middleware for authentication and authorization
- Accessibility features (ARIA labels, keyboard navigation)
- 13 E2E tests with Playwright
Testing & Quality:
- 70 total automated tests (100% passing)
- 80%+ test coverage (constitutional requirement met)
- Security validation (password hashing, JWT, rate limiting)
- Accessibility testing (ARIA, keyboard navigation)
Tech Stack:
- Backend: Python FastAPI, SQLModel, Neon PostgreSQL, Alembic
- Frontend: Next.js 16 (App Router), TypeScript, Tailwind CSS
- Auth: Better Auth patterns with JWT
- Testing: pytest, pytest-cov, Playwright
Constitutional Compliance:
✅ 80%+ test coverage
✅ Type safety throughout
✅ Security best practices
✅ Documentation inline
✅ Spec-driven development
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-29 18:06:33 +05:00
|
|
|
"tailwindcss": "^3.4.17",
|
feat(009-chatkit-frontend): Phase III chatbot UX enhancements and SSE fixes (#9)
* feat(009-chatkit-frontend): implement chatbot popup UI and event system
Completed Phase 2 (Foundational) and Phase 3 (User Story 1):
Phase 2 (Foundational - T004-T008):
- T004: ChatKit integration (building custom interface, no CDN SDK)
- T005: Custom event system for task synchronization
- T006: ChatKit configuration with custom fetch interceptor
- T007: API proxy route with JWT extraction and SSE streaming
- T008: Enhanced TaskContext to emit task events
Phase 3 (User Story 1 - T013-T018):
- T013: Created FloatingChatButton component with animations
- T014: Created ChatBotPopup wrapper with shadcn/ui Dialog
- T015: Integrated chatbot into dashboard with event listener (T046)
- T016: Added Framer Motion animations (<300ms)
- T017: Configured z-index layering (FAB z-40, Dialog z-50)
- T018: Added accessibility attributes (aria-label, role)
Key files:
- frontend/src/lib/events/task-events.ts (event system)
- frontend/src/lib/chatkit-config.ts (ChatKit config)
- frontend/src/app/api/chatkit/route.ts (API proxy)
- frontend/src/components/chat/FloatingChatButton.tsx
- frontend/src/components/chat/ChatBotPopup.tsx
- frontend/src/app/dashboard/page.tsx (integrated chatbot)
Real-time sync: Chatbot events → Dashboard refresh via CustomEvent
Security: JWT extraction in API proxy (httpOnly cookies)
UX: Orange/coral theme, smooth animations, accessible
Next: Phase 4 (US5 Security), Phase 5 (US4 Streaming)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chat interface with SSE streaming
Completed Phase 5 (User Story 4 - Streaming AI Responses) and partial Phase 6 (User Story 2):
Phase 5 (US4 - T033-T040):
- T033: Created ChatInterface component with SSE streaming support
- T034: Created MessageList component with streaming state and typing indicator (T038)
- T035: Created MessageInput component with auto-resize and keyboard shortcuts
- T036: Integrated ChatInterface into ChatBotPopup (dashboard)
- T037: SSE streaming already implemented in API proxy (T007)
- T038: Added typing indicator with animated loader and cursor
- T039: Implemented exponential backoff retry (1s, 2s, 4s) in sendMessage
- T040: Added error banner with manual retry button
Phase 6 (US2 - T046-T050) - Already Complete:
- T046: TaskEvent listener already in dashboard (from Phase 3)
- T047: Dashboard refresh logic already implemented (from Phase 3)
- T048: Tool call result event handling in ChatInterface
- T049: TaskEvent emission using createTaskEventFromTool helper
- T050: Success confirmation UI with checkmark icons in MessageList
Key Features:
- SSE streaming: Fetch API with ReadableStream for real-time responses
- MCP tool integration: Parse tool.call.result events and emit TaskEvents
- Real-time sync: Chatbot task operations update dashboard within 1s
- Error handling: Auto-retry with exponential backoff + manual retry
- Streaming UX: Typing indicator, progressive content rendering, cursor animation
- Security: JWT authentication via API proxy, session validation
- Accessibility: ARIA labels, keyboard shortcuts (Enter/Shift+Enter)
Architecture:
- ChatInterface manages state and SSE streaming
- MessageList displays messages with tool call indicators
- MessageInput handles user input with validation
- Events flow: MCP tool result → TaskEvent → Dashboard refresh
Files:
- frontend/src/components/chat/ChatInterface.tsx (SSE + MCP)
- frontend/src/components/chat/MessageList.tsx (UI + typing)
- frontend/src/components/chat/MessageInput.tsx (input + shortcuts)
- frontend/src/app/dashboard/page.tsx (integration)
Next: Phase 7 (US3 History), Phase 8 (US6 Animations), Phase 9 (Errors), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement conversation history with pagination
Completed Phase 7 (User Story 3 - Persistent Conversation History):
Phase 7 (US3 - T056-T060):
- T056: Configured pagination with limit=50, order=desc
- T057: Implemented loadConversationHistory() with useEffect on mount
- T058: Added "Load earlier messages" button with loading state
- T059: Implemented loadMoreMessages() handler with pagination logic
- T060: Added loading states (isLoadingHistory, isLoadingMore) with spinner UI
Frontend Implementation Complete:
- Conversation state management (conversationId, currentPage, hasMoreMessages)
- loadConversationHistory(): Loads user's persistent conversation on mount
- loadMoreMessages(): Fetches older messages with pagination (page, limit)
- Loading indicators: Spinner in "Load earlier" button during fetch
- Ready for backend integration
Backend API Endpoints Required (placeholders in code):
- GET /api/v1/{user_id}/conversations - Get user's single conversation
- GET /api/v1/{user_id}/conversations/{conversation_id}/messages?page={page}&limit=50 - Paginated message history
Architecture:
- Each user has single persistent conversation (per spec)
- Backend creates conversation on first message if none exists
- Frontend loads conversation history on chatbot open
- Pagination: 50 messages per page, descending order (newest first)
- Messages prepended to list when loading older history
Files Modified:
- frontend/src/components/chat/ChatInterface.tsx (history logic)
- frontend/src/components/chat/MessageList.tsx (pagination UI)
- specs/009-chatkit-frontend/tasks.md (marked T056-T060 complete)
Testing:
- T061: Deferred - requires backend conversation history API
Next: Phase 8 (Animations - mostly done), Phase 9 (Error handling), Phase 10 (Polish)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): add prefers-reduced-motion accessibility support
Completed Phase 8 (User Story 6 - Smooth Popup Animations):
Phase 8 (US6 - T065-T068):
- T065: Animation timing already optimized (250ms content, 200ms backdrop) - from Phase 3
- T066: AnimatePresence wrapper already implemented - from Phase 3
- T067: Backdrop fade animation already synchronized - from Phase 3
- T068: Added prefers-reduced-motion detection for accessibility ✅ NEW
T068 Implementation:
- Added prefers-reduced-motion detection using window.matchMedia
- ChatBotPopup: Disables all animations (content + backdrop) if user prefers reduced motion
- FloatingChatButton: Disables spring animations and hover/tap effects if user prefers reduced motion
- Fallback: duration: 0 for instant transitions (no animation)
- useMemo optimization: Only check media query once on mount
Accessibility:
- Respects user's OS-level motion preferences
- WCAG 2.1 Level AA compliance (Success Criterion 2.3.3 - Animation from Interactions)
- Users with vestibular disorders can use chatbot without motion sickness
- Instant transitions (no animation) when prefers-reduced-motion is enabled
Animation Performance (already achieved in Phase 3):
- Content animation: 250ms (below 300ms threshold per FR-012)
- Backdrop animation: 200ms (synced with content)
- AnimatePresence: mode="wait" prevents animation stacking
- easeOut easing for smooth deceleration
Files Modified:
- frontend/src/components/chat/ChatBotPopup.tsx (prefers-reduced-motion detection)
- frontend/src/components/chat/FloatingChatButton.tsx (prefers-reduced-motion detection)
- specs/009-chatkit-frontend/tasks.md (marked T065-T068 complete)
Testing:
- T069: Manual testing with DevTools Performance tab (requires user validation)
Next: Phase 9 (Error handling), Phase 10 (Polish & accessibility)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 9 error handling and edge cases
**What**: Comprehensive error handling for all edge cases identified in spec.md
**Implementation**:
1. **ErrorBoundary.tsx** (T070):
- React error boundary pattern to catch errors in chat components
- Prevents chat errors from crashing entire dashboard
- Fallback UI with retry/reload options
- Error logging with stack traces for debugging
2. **ErrorState.tsx** (T071):
- Reusable error UI components for different error types:
- RateLimitError: Countdown timer from Retry-After header
- AuthError: 3-second countdown before redirect to sign-in
- TimeoutError: Cancel/Keep Waiting options
- NetworkError: Connection lost with retry button
- BackendUnavailable: 502/503 errors with correlation ID
- UnknownError: Generic fallback with correlation ID
- All components follow contracts/error-messages.yaml specifications
3. **ChatInterface.tsx** (T072-T077):
- T072: Rate limit handling (429 → countdown → clear error when done)
- T073: Network error handling (exponential backoff 1s/2s/4s already implemented)
- T074: Auth error handling (401 → 3s countdown → redirect to /auth/signin)
- T075: Timeout handling (AbortController + 10s threshold → dialog)
- T076: Correlation ID logging (already in chatkit-config.ts)
- T077: Partial message indicator (interrupted stream → incomplete flag)
- Enhanced sendMessage with error state integration
- Timeout handlers: handleCancelRequest, handleKeepWaiting
- Cleanup of timeout/abort refs on error
4. **MessageList.tsx** (T077):
- Added metadata fields: complete, interrupted
- Incomplete indicator UI (yellow alert icon + message)
- Displays "Response interrupted (partial message)" for cancelled streams
**Architecture**:
- Specialized error components replace generic error banner
- Countdown timers managed with useEffect intervals
- AbortController for cancellable fetch requests
- Error states conditionally rendered based on error type
- Graceful degradation for all error scenarios
**UX Impact**:
- Users see helpful, specific error messages instead of generic failures
- Rate limits show countdown before retry is allowed
- Auth errors redirect automatically after countdown
- Timeouts give users choice to cancel or keep waiting
- Partial responses preserved and marked as incomplete
- All errors include context and recovery options
**Compliance**:
- Follows contracts/error-messages.yaml for all error types
- FR-020: Correlation ID logging throughout
- Error handling doesn't block other features
- Users never see raw error messages or stack traces
**Phase 8 Note**: Also committing PHR 0013 from Phase 8 (prefers-reduced-motion accessibility)
**Tasks**: T070-T077 complete
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement Phase 10 core polish (T078b, T078c, T079, T085)
**What**: Log sanitization, mobile responsive design, and security audit
**Implementation**:
1. **T078b: Log Sanitization Utility** (frontend/src/lib/logging/sanitize.ts):
- Truncate content fields to 50 chars with "[...]" suffix
- Redact JWT tokens (replace with "[REDACTED_TOKEN]")
- Redact PII fields (email, phone, address, SSN, credit card)
- Mask API keys (show first 4 + last 4 chars like "sk-ab...xyz")
- Recursive sanitization for nested objects and arrays
- Export sanitize(obj: unknown) function for all logging
2. **T078c: Unit Tests for Sanitization** (frontend/tests/unit/lib/logging/sanitize.test.ts):
- Test truncation of long content (50 char limit)
- Test JWT token redaction
- Test PII field redaction (email, phone, address, SSN, credit cards)
- Test API key masking
- Test nested object sanitization
- Test realistic scenarios (chat messages, task creation, error logs)
- 100% coverage of sanitize utility
3. **T079: Mobile Responsive Design**:
- **ChatBotPopup.tsx**: Full-screen on mobile (<768px)
- Mobile: 100vw × 100vh, no border radius
- Desktop: 400px × 600px, bottom-right, rounded
- Tailwind responsive classes (w-screen md:w-[400px])
- **FloatingChatButton.tsx**: Larger touch target on mobile
- Mobile: 60px × 60px (better for touch)
- Desktop: 56px × 56px (standard FAB size)
4. **T085: Security Audit** - Fixed sensitive data logging:
- **ChatInterface.tsx**:
- Sanitize tool call results before logging
- Sanitize task events before logging
- Sanitize errors before logging (may contain message content)
- **lib/get-user-uuid.ts**:
- NEVER log JWT payloads (contains sensitive user data)
- Only log presence of UUID claim, not actual value
- **lib/auth.ts**:
- Don't log PII (user IDs, UUIDs) in production
- Log only boolean presence checks
- **lib/events/task-events.ts**:
- Apply sanitization to all task event logging
- Wrap in development-only check
**Security Impact**:
- ✅ No JWT payloads logged (prevents token leakage)
- ✅ No PII logged (email, phone, address, SSN)
- ✅ API keys masked (only show first/last 4 chars)
- ✅ Long content truncated (prevents log bloat, reduces exposure)
- ✅ All logging uses sanitize() utility
- ✅ Production logs safe for viewing by support team
**UX Impact**:
- ✅ Mobile users get full-screen chat interface
- ✅ Larger touch targets on mobile (60px FAB button)
- ✅ Desktop users keep familiar bottom-right popup
- ✅ Smooth responsive transitions
- ✅ No functionality lost on mobile
**Compliance**:
- FR-020: All logging sanitized per requirements
- WCAG 2.1: Mobile touch targets meet 48px minimum (60px exceeds)
- Security: No sensitive data exposure in logs
- Privacy: PII redacted automatically
**Tasks**: T078b, T078c, T079, T085 complete
**Remaining Phase 10 Tasks**:
- T078: Structured logging integration (deferred)
- T078a: Correlation ID tests (deferred)
- T084: SSE throttling (deferred)
- T080-T082: Optional accessibility enhancements
- T086: Quickstart validation
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): implement chatbot feedback and task list display improvements (T051a-T051i)
Implemented explicit confirmation messages and formatted task list queries to improve
chatbot user experience and ensure 100% visibility of task operations.
**Backend Changes (server.py)**:
- Updated SYSTEM_PROMPT with explicit instructions for confirmation messages
- Added critical markers for ALWAYS providing confirmations per FR-021
- Added task list query formatting guidelines per FR-022
- Added 5 new example interactions showing expected behavior
**Frontend Changes (ChatInterface.tsx)**:
- Added fallback confirmation message generation for task operations
- Generates explicit messages: "✓ Task 'X' has been added successfully"
- Ensures 100% confirmation visibility even if AI doesn't provide it
- Added logging for dashboard refresh timing (T051f)
**UI Improvements (MessageList.tsx)**:
- Enhanced tool call indicators with prominent visual design
- Added background colors (green for success, red for error)
- Added borders and proper spacing for visibility
- Display task title and ID in confirmation badges
- Larger icons (4x4) and better typography
**E2E Tests (chatbot-feedback.spec.ts)**:
- SC-013: Confirmation messages display within 2 seconds (create/complete/delete)
- SC-014: Task list queries return formatted data within 2 seconds
- SC-015: Dashboard refreshes within 1 second after confirmation
- Comprehensive test coverage for all three success criteria
**Spec Updates**:
- spec.md: Added FR-021 to FR-024, SC-013 to SC-015, 5 new edge cases
- plan.md: Added "Chatbot Feedback & Task List Display" section
- tasks.md: Added and completed T051a-T051i with detailed implementation notes
**Verification**:
- MCP tools return structured responses with status indicators (T051a)
- list_tasks queries database directly with no caching (T051e)
- TaskEvent emission happens immediately after tool success (T051f)
Closes T051a, T051b, T051c, T051d, T051e, T051f, T051g, T051h, T051i
Implements FR-021, FR-022, FR-023, FR-024
Validates SC-013, SC-014, SC-015
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat(009-chatkit-frontend): enhance chatbot UX with emoji formatting and fix SSE handling
- Backend: Update system prompt with emoji-rich task formatting (✅🎯📅🔴🟡🟢)
- Backend: Add beautiful task list display grouped by priority with visual separators
- Frontend: Fix SSE handling for non-streaming 'message' events with tool_results
- Frontend: Add react-markdown for formatted chat responses
- Frontend: Improve sanitize order - mask API keys before field-name redaction
- Frontend: Add Vitest setup with test scripts for unit testing
- MCP: Add validation to convert empty strings to None for optional literal fields
- Debug: Add console logging for SSE event parsing troubleshooting
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore(009-chatkit-frontend): reorganize test files into test/ directory
- Move all temporary test scripts from root to test/ directory
- Add PHR for previous commit workflow
- Cleaner project root structure
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-27 15:20:51 +05:00
|
|
|
"typescript": "^5.7.2",
|
|
|
|
|
"vitest": "^4.0.17"
|
feat(auth): implement complete authentication foundation (Phases 1-7)
Complete implementation of authentication system for Todo Evolution Hackathon Phase II:
Backend (FastAPI):
- User registration and login endpoints with JWT authentication
- Argon2id password hashing and HS256 JWT signing
- Rate limiting (5/min login, 100/min global) to prevent brute force
- Security headers (HSTS, CSP, X-Frame-Options, etc.)
- Structured JSON logging with request ID tracking
- Database migrations with Alembic
- Connection pooling and async operations
- 57 unit and integration tests (pytest)
Frontend (Next.js 16):
- Registration and login pages with form validation
- Dashboard with protected routes
- Reusable UI components (Input, Button, ErrorMessage)
- Middleware for authentication and authorization
- Accessibility features (ARIA labels, keyboard navigation)
- 13 E2E tests with Playwright
Testing & Quality:
- 70 total automated tests (100% passing)
- 80%+ test coverage (constitutional requirement met)
- Security validation (password hashing, JWT, rate limiting)
- Accessibility testing (ARIA, keyboard navigation)
Tech Stack:
- Backend: Python FastAPI, SQLModel, Neon PostgreSQL, Alembic
- Frontend: Next.js 16 (App Router), TypeScript, Tailwind CSS
- Auth: Better Auth patterns with JWT
- Testing: pytest, pytest-cov, Playwright
Constitutional Compliance:
✅ 80%+ test coverage
✅ Type safety throughout
✅ Security best practices
✅ Documentation inline
✅ Spec-driven development
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-29 18:06:33 +05:00
|
|
|
},
|
|
|
|
|
"engines": {
|
|
|
|
|
"node": ">=18.0.0"
|
|
|
|
|
}
|
|
|
|
|
}
|