12 KiB
12 KiB
Story: [Feature Name]
Story ID: JS-[NUMBER]
Epic: [Epic Name]
Sprint: [Sprint Number]
Assignee: [Developer Name]
Status: [To Do | In Progress | In Review | Done]
Priority: [P0 | P1 | P2]
Estimated Effort: [Small | Medium | Large] ([1-2 days | 3-5 days | 1+ weeks])
Story Description
User Story
As a [type of user]
I want [to do something]
So that [I can achieve some goal or benefit]
Background
[Provide context about why this story is important and how it fits into the larger feature or product]
Goals
- Goal 1: [Specific outcome this story should achieve]
- Goal 2: [Another outcome]
- Goal 3: [Third outcome]
Acceptance Criteria
Functional Requirements
- Criterion 1: [Specific, testable requirement]
- Criterion 2: [Another requirement]
- Criterion 3: [Third requirement]
- Criterion 4: [Fourth requirement]
Technical Requirements
- TypeScript types defined with no
anytypes - Unit tests written with >80% coverage
- Integration tests for critical paths
- Error handling implemented
- Loading and error states handled in UI
- Accessibility requirements met (WCAG 2.1 AA)
- Responsive design for mobile, tablet, desktop
- API documentation updated (if applicable)
Performance Requirements
- Component renders in < 16ms (60fps)
- API response time < 200ms (p95)
- Bundle size increase < 50KB
- Lighthouse score > 90 (if applicable)
Security Requirements
- Input validation implemented
- XSS prevention measures in place
- CSRF protection (if applicable)
- Authentication/authorization checked
- No sensitive data in logs or error messages
Technical Specification
Frontend Implementation
Components to Create/Modify
-
Component:
[ComponentName]- Location:
src/components/[path]/[ComponentName].tsx - Purpose: [What this component does]
- Props Interface:
interface [ComponentName]Props { prop1: string; prop2: number; onAction?: () => void; } - Key Features:
- Feature 1
- Feature 2
- State Management: [None | Local useState | Context | Zustand | Redux]
- Location:
-
Component:
[AnotherComponent]- [Similar structure as above]
Hooks to Create/Modify
- Hook:
use[HookName]- Location:
src/hooks/use[HookName].ts - Purpose: [What this hook does]
- Interface:
interface Use[HookName]Return { data: DataType; loading: boolean; error: Error | null; refetch: () => Promise<void>; }
- Location:
State Management
- Approach: [React Query | Zustand | Redux | Context API]
- State Shape:
interface [StateName] { field1: Type; field2: Type; } - Actions/Mutations:
action1: [Description]action2: [Description]
Styling
- Approach: [Tailwind CSS | CSS Modules | Styled Components]
- New Classes/Components: [List any new UI components or styles]
- Responsive Breakpoints: [mobile, tablet, desktop]
Route Changes (if applicable)
- New Routes:
/path/to/route- [Description]
- Modified Routes:
/existing/route- [Changes]
Backend Implementation
API Endpoints
Endpoint 1: [METHOD] /api/v1/[resource]
- Description: [What this endpoint does]
- Authentication: [Required | Optional | None]
- Authorization: [Roles/permissions required]
- Request:
interface Request { params: { id: string; }; query?: { page?: number; limit?: number; }; body: { field1: string; field2: number; }; } - Response:
interface SuccessResponse { data: { id: string; field1: string; field2: number; createdAt: string; }; } interface ErrorResponse { error: string; details?: string[]; } - Status Codes:
200 OK- Success400 Bad Request- Validation error401 Unauthorized- Not authenticated403 Forbidden- Not authorized404 Not Found- Resource not found500 Internal Server Error- Server error
Endpoint 2: [METHOD] /api/v1/[resource]
- [Similar structure as above]
Database Changes
Schema Changes
// Prisma schema changes
model [ModelName] {
id String @id @default(cuid())
field1 String
field2 Int
userId String
user User @relation(fields: [userId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([userId])
@@index([field1])
}
Migrations
- Migration Name:
add_[feature]_table - Changes:
- Create table
[table_name] - Add column
[column_name]to[table_name] - Add index on
[table_name].[column_name]
- Create table
Seeds/Data (if applicable)
- [Any initial data that needs to be seeded]
Service Layer
- Service:
[ServiceName]Service - Location:
src/services/[serviceName].service.ts - Methods:
create(data: CreateDto): Promise<Entity>findById(id: string): Promise<Entity | null>update(id: string, data: UpdateDto): Promise<Entity>delete(id: string): Promise<void>
Validation
- Schemas:
const createSchema = z.object({ field1: z.string().min(1), field2: z.number().positive(), });
Background Jobs (if applicable)
- Job:
[JobName] - Trigger: [When this job runs]
- Purpose: [What it does]
- Implementation:
queue.add('[job-name]', data, { attempts: 3, backoff: { type: 'exponential', delay: 2000 }, });
Integration Points
External APIs
- API: [API Name]
- Purpose: [Why we're calling this API]
- Endpoints Used:
[METHOD] /endpoint- [Description]
- Error Handling: [How to handle API failures]
Third-Party Services
- Service: [Service Name]
- Purpose: [What it's used for]
- Configuration: [Any config needed]
Data Flow
Frontend → Backend
- User [performs action]
- Frontend calls
[API endpoint] - Backend validates request
- Backend processes request
- Backend returns response
- Frontend updates UI
Backend → Database
- Receive validated request data
- Transform data for database
- Execute database query
- Transform database result
- Return to controller
Real-time Updates (if applicable)
- Event occurs in backend
- Publish event to WebSocket/Redis
- Subscribers receive event
- Frontend updates UI in real-time
Testing Strategy
Frontend Tests
Unit Tests
-
Component Tests:
- Test component renders correctly
- Test props handling
- Test event handlers
- Test conditional rendering
- Test error states
-
Hook Tests:
- Test hook return values
- Test hook state updates
- Test hook error handling
-
Utility Tests:
- Test utility functions with various inputs
- Test edge cases
Integration Tests
-
User Flow:
- [Step 1 of user flow]
- [Step 2 of user flow]
- [Verify expected outcome]
-
API Integration:
- Mock API calls
- Test success scenarios
- Test error scenarios
- Test loading states
Backend Tests
Unit Tests
- Service Tests:
- Test business logic
- Test error handling
- Test edge cases
- Mock database calls
Integration Tests
-
API Tests:
describe('POST /api/v1/[resource]', () => { it('creates a new resource', async () => { const response = await request(app) .post('/api/v1/[resource]') .send(validData) .expect(201); expect(response.body).toMatchObject(expectedShape); }); it('returns 400 for invalid data', async () => { const response = await request(app) .post('/api/v1/[resource]') .send(invalidData) .expect(400); }); }); -
Database Tests:
- Test CRUD operations
- Test transactions
- Test constraints and validations
E2E Tests
- Critical Path:
- [User action 1]
- [User action 2]
- [Verify result]
Error Handling
Frontend Error Scenarios
-
API Error:
- Show error toast notification
- Log error to monitoring service
- Provide retry option if applicable
-
Validation Error:
- Show inline error messages
- Highlight invalid fields
- Prevent form submission
-
Network Error:
- Show offline indicator
- Queue requests for retry
- Provide manual refresh option
Backend Error Scenarios
-
Validation Error:
- Return 400 with detailed error messages
- Include field-specific errors
-
Authentication Error:
- Return 401 with clear message
- Include info about token expiration
-
Authorization Error:
- Return 403 with permission info
- Log unauthorized access attempt
-
Database Error:
- Return 500 with generic message to user
- Log full error details
- Alert monitoring system
Performance Considerations
Frontend Performance
- Implement code splitting for heavy components
- Use React.memo for expensive components
- Implement virtualization for long lists
- Optimize images (WebP, lazy loading)
- Debounce expensive operations
- Use React Query caching effectively
Backend Performance
- Add database indexes for queried fields
- Implement caching for frequently accessed data
- Use pagination for large datasets
- Optimize database queries (avoid N+1)
- Implement request batching if needed
Bundle Size
- Check bundle size impact
- Use dynamic imports for large dependencies
- Tree-shake unused code
Security Considerations
Frontend Security
- Sanitize user inputs
- Implement CSP headers
- Validate data before rendering
- Don't expose sensitive data in client
- Use HTTPS only
Backend Security
- Validate all inputs
- Use parameterized queries
- Implement rate limiting
- Check authorization on all endpoints
- Hash sensitive data
- Use security headers (Helmet.js)
- Log security events
Accessibility
Requirements
- All interactive elements keyboard accessible
- Proper ARIA labels on custom components
- Sufficient color contrast (4.5:1 minimum)
- Screen reader tested
- Focus indicators visible
- Form labels and error messages
- Skip navigation links (if applicable)
Testing
- Run axe DevTools
- Test with keyboard only
- Test with screen reader (NVDA/VoiceOver)
Documentation
Code Documentation
- JSDoc comments on public functions
- README updated with new features
- Component prop documentation
- API endpoint documentation
User Documentation
- User guide updated (if applicable)
- Help text added to UI
- Tooltips for complex features
Developer Documentation
- Architecture decision recorded
- Setup instructions updated
- API documentation generated/updated
Definition of Done
- All acceptance criteria met
- Code reviewed and approved
- All tests passing (unit, integration, E2E)
- Test coverage meets requirements (>80%)
- No TypeScript errors
- No ESLint errors
- Documentation updated
- Accessibility requirements met
- Performance requirements met
- Security review completed
- Deployed to staging
- QA tested on staging
- Product owner approval
- Ready for production deployment
Dependencies
Blocked By
- [Story ID]: [Description of blocking story]
- [Story ID]: [Another blocking story]
Blocks
- [Story ID]: [Story that depends on this one]
- [Story ID]: [Another dependent story]
Related Stories
- [Story ID]: [Related story]
- [Story ID]: [Another related story]
Notes
Technical Notes
- [Any technical considerations or decisions]
- [Trade-offs made]
- [Future improvements to consider]
Design Notes
- [Design decisions]
- [UX considerations]
Questions/Clarifications Needed
- Question 1: [Question needing clarification]
- Question 2: [Another question]
Timeline
- Started: [Date]
- In Review: [Date]
- Merged: [Date]
- Deployed to Staging: [Date]
- Deployed to Production: [Date]
Links
- Figma Design: [URL]
- PRD: [URL]
- Architecture Doc: [URL]
- API Docs: [URL]
- Pull Request: [URL]
- Staging URL: [URL]
- Production URL: [URL]