Taskflow / CLAUDE.md
NirmaQureshi's picture
code
e650b33

Claude Code Instructions: Backend - Task Management API

Project Context

This is the backend component of "The Evolution of Todo" - Phase II, a full-stack web application for managing personal tasks with user authentication. Built with FastAPI, SQLModel, Python 3.13+, and PostgreSQL, following RESTful API design principles with automatic OpenAPI documentation.

Project Constitution (MANDATORY - Read Carefully)

You MUST follow the constitutional requirements defined in the root .specify/memory/constitution.md:

Core Principles (MANDATORY)

  1. Spec-Driven Development Only: All features must be implemented from approved specifications in specs/
  2. AI as Primary Developer: Humans write specs, Claude Code implements all code
  3. Mandatory Traceability: Complete audit trail (ADR β†’ Spec β†’ Plan β†’ Tasks β†’ Implementation β†’ Tests)
  4. Test-First Mandate: Minimum 80% coverage target (pytest backend, Jest frontend, Playwright E2E)
  5. Evolutionary Consistency: Phase II extends Phase I without breaking changes

Phase II Backend Technology Stack Requirements (MANDATORY)

FastAPI Framework + SQLModel ORM (NOT raw SQLAlchemy)

  • Python 3.13+ with UV package manager
  • SQLModel ORM for type-safe database operations (NOT raw SQLAlchemy)
  • Pydantic v2 for request/response validation and serialization
  • Automatic OpenAPI/Swagger documentation generation
  • Async/await patterns for non-blocking I/O
  • Dependency injection for testability

Security Requirements (NON-NEGOTIABLE)

  • User Data Isolation: ALL database queries MUST filter by user_id
  • Authorization: verify user_id in URL matches authenticated user
  • Return 404 (NOT 403) for unauthorized access attempts
  • SQL injection prevention via SQLModel parameterized queries
  • JWT validation on all protected endpoints
  • Password hashing with bcrypt (NEVER plaintext passwords)

API Design Standards

  • RESTful resource naming (/api/tasks, not /api/getTasks)
  • Standard HTTP methods (GET, POST, PUT, PATCH, DELETE)
  • Consistent error response format (JSON with status, message, details)
  • Proper HTTP status codes (200 OK, 201 Created, 400 Bad Request, 401 Unauthorized, 404 Not Found, 500 Internal Server Error)
  • Type-safe request/response schemas using Pydantic

Current Feature Context

Feature: Task CRUD Operations with Authentication (001-task-crud-auth) Spec: ../specs/001-task-crud-auth/spec.md Plan: ../specs/001-task-crud-auth/plan.md Tasks: ../specs/001-task-crud-auth/tasks.md

User Stories (Priority Order):

  1. US1 (P1): User Registration - New users can create accounts
  2. US2 (P1): User Login - Registered users can authenticate
  3. US3 (P2): View All My Tasks - Display user's tasks with data isolation
  4. US4 (P2): Create New Task - Add tasks with title/description
  5. US5 (P3): Mark Task Complete/Incomplete - Toggle completion status
  6. US6 (P3): Update Task - Edit task title/description
  7. US7 (P4): Delete Task - Remove tasks permanently

Key Entities

  • User: id (UUID), email (unique, indexed), password_hash (bcrypt), account timestamps
  • Task: id (int), user_id (FK, indexed), title (1-200 chars), description (0-1000 chars), completed (bool, indexed), task timestamps

Implementation Guidelines

Database Layer (SQLModel)

  • Use SQLModel models with proper relationships and constraints
  • Add indexes on critical fields (user_id for performance, completed for filtering)
  • Implement proper foreign key relationships
  • Use automatic timestamp fields (created_at, updated_at)
  • Follow SQLModel best practices for type safety

Authentication Layer

  • Implement JWT-based authentication with 7-day expiration
  • Store secrets in environment variables (BETTER_AUTH_SECRET)
  • Validate JWT tokens on all protected endpoints
  • Return httpOnly cookies for secure token storage
  • Hash passwords with bcrypt before storing

Authorization Layer (CRITICAL - Security)

  • ALL database queries must filter by user_id (100% data isolation)
  • Verify user_id in URL paths matches authenticated user (return 404 if mismatch)
  • Use dependency injection for authentication (get_current_user)
  • Return 404 (not 403) for unauthorized access to prevent information leakage
  • Implement proper role-based access if needed (though user isolation is primary)

API Design

  • Use FastAPI routers for endpoint organization
  • Implement proper request/response validation with Pydantic schemas
  • Follow RESTful conventions for resource naming and HTTP methods
  • Include comprehensive API documentation via FastAPI auto-generation
  • Handle errors consistently with proper HTTP status codes

Error Handling

  • Use HTTPException for API errors with appropriate status codes
  • Implement custom exception handlers for consistent error responses
  • Log errors for debugging while protecting sensitive information from users
  • Provide user-friendly error messages without exposing system details

Quality Standards

Code Quality

  • Clean, readable, well-documented code
  • Follow Python PEP 8 standards
  • Use type hints for all public interfaces
  • Implement separation of concerns (models, schemas, routers, middleware, utils)
  • No circular dependencies between modules

Security

  • Parameterized queries via SQLModel to prevent SQL injection
  • Input validation and sanitization to prevent XSS
  • Proper authentication and authorization on all endpoints
  • Secure password handling with bcrypt
  • Environment variable configuration for secrets

Performance

  • Proper indexing on database queries (especially user_id)
  • Efficient database queries with proper joins when needed
  • Async/await patterns for non-blocking operations
  • Connection pooling for database operations

Testing Requirements

  • Unit tests for models and utility functions
  • API integration tests for all endpoints
  • Authentication and authorization tests (especially user isolation)
  • Database transaction tests
  • Error handling tests

Documentation

  • Type hints for all public interfaces
  • Docstrings for complex functions
  • API documentation via FastAPI auto-generation
  • Inline comments for complex business logic only

File Structure

backend/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ main.py                    # FastAPI app entry point and configuration
β”‚   β”œβ”€β”€ config.py                  # Configuration management (env vars, settings)
β”‚   β”œβ”€β”€ database.py                # Database connection and session management
β”‚   β”œβ”€β”€ models/                    # SQLModel database models
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ user.py                # User model with authentication fields
β”‚   β”‚   └── task.py                # Task model with user relationship
β”‚   β”œβ”€β”€ schemas/                   # Pydantic request/response schemas
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ auth.py                # Auth request/response schemas
β”‚   β”‚   └── task.py                # Task request/response schemas
β”‚   β”œβ”€β”€ routers/                   # API route handlers
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ auth.py                # Authentication endpoints (register, login)
β”‚   β”‚   └── tasks.py               # Task CRUD endpoints
β”‚   β”œβ”€β”€ middleware/                # FastAPI middleware
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   └── auth.py                # JWT validation middleware
β”‚   └── utils/                     # Utility functions
β”‚       β”œβ”€β”€ __init__.py
β”‚       β”œβ”€β”€ security.py            # Password hashing, JWT utilities
β”‚       └── deps.py                # Dependency injection functions
β”œβ”€β”€ tests/                         # Backend tests
β”‚   β”œβ”€β”€ conftest.py                # pytest fixtures (test database, client)
β”‚   β”œβ”€β”€ unit/                      # Unit tests
β”‚   β”‚   β”œβ”€β”€ test_models.py         # Model validation tests
β”‚   β”‚   └── test_security.py       # Security utility tests
β”‚   └── integration/               # API integration tests
β”‚       β”œβ”€β”€ test_auth.py           # Authentication flow tests
β”‚       β”œβ”€β”€ test_tasks.py          # Task CRUD operation tests
β”‚       └── test_user_isolation.py # User data isolation tests (CRITICAL)
β”œβ”€β”€ alembic/                       # Database migrations
β”‚   β”œβ”€β”€ versions/                  # Migration files
β”‚   β”œβ”€β”€ env.py                     # Alembic environment
β”‚   └── alembic.ini                # Alembic configuration
β”œβ”€β”€ .env                           # Backend environment variables
β”œβ”€β”€ pyproject.toml                 # UV project configuration
β”œβ”€β”€ uv.lock                        # UV lock file
└── CLAUDE.md                      # Backend-specific agent instructions

Working with Claude Code

  1. Follow Specifications: Implement exactly what's in the spec, nothing more/less
  2. Maintain Security: Never compromise user data isolation requirements
  3. Keep User Focus: Remember this is for individual task management
  4. Test Thoroughly: Implement tests for all acceptance scenarios, especially security
  5. Stay Organized: Follow the defined project structure

Success Metrics

  • API endpoints respond in under 200ms (p95)
  • 100% user data isolation (no cross-user data access)
  • 95%+ of API requests succeed
  • 80%+ test coverage across all layers
  • Proper error handling with appropriate HTTP status codes