Overview
AniDojo is built as a modern, full-stack web application using Next.js 15 with the App Router architecture. The system integrates multiple services to provide a seamless anime tracking and discovery experience.Frontend
React 19 with Next.js 15 App Router for modern, performant UI
Backend
Supabase for authentication, database, and storage
External API
Jikan API (MyAnimeList) for anime data and metadata
State Management
Zustand for client-side state, React Context for auth
Architecture Diagram
Core Architectural Principles
1. Server and Client Components
AniDojo leverages Next.js 15’s App Router architecture with a clear separation:Server Components (Default)
Server Components (Default)
- Used for pages that fetch data server-side
- Better performance and SEO
- Direct database access via Supabase server client
- Examples:
/app/browse/page.tsx,/app/anime/[id]/page.tsx
Client Components ('use client')
Client Components ('use client')
- Used for interactive UI elements
- State management with hooks
- Event handlers and user interactions
- Examples:
Navbar.tsx,AuthContext.tsx,ThemeToggle.tsx
2. Data Flow Architecture
- User clicks “Add to List” button in
AddAnimeModal.tsx - Component calls
supabase/queries.tsfunction - Query function uses Supabase client to insert record
- Database updates via Supabase PostgreSQL
- Success response triggers UI update
- Component re-renders with updated state
3. Authentication Flow
AniDojo uses Supabase Auth with JWT tokens for secure, stateless authentication.
/src/contexts/AuthContext.tsx- Auth state management/src/lib/supabase/client.ts- Browser client/src/lib/supabase/server.ts- Server-side client/src/lib/supabase/middleware.ts- Session refresh
4. API Integration Layer
Jikan API (External)
Custom rate-limited API client insrc/lib/animeApi.ts:
Rate Limiting Strategy
Rate Limiting Strategy
- Queue-based request management
- 350ms minimum interval between requests (~3 requests/second)
- Automatic retry with exponential backoff
- 5-minute response caching
- Prevents 429 (Too Many Requests) errors
API Functions
API Functions
searchAnime()- Search anime by querygetTopAnime()- Get top-rated animegetAnimeById()- Get detailed anime infogetCurrentSeasonAnime()- Get seasonal animeconvertJikanToAnime()- Transform API data to internal format
Supabase Database Queries
Structured query functions insrc/lib/supabase/queries.ts:
- User anime lists (CRUD operations)
- Reviews and ratings
- Custom lists
- Profile management
- Social features (votes, comments)
Design Patterns
Provider Pattern
- Authentication state (
AuthProvider) - Theme management (
ThemeProvider) - Global UI state (future:
UIProvider)
Custom Hooks Pattern
Repository Pattern
Database operations abstracted in query modules:Performance Optimizations
Server-Side Rendering
Pages render on the server for faster initial load and better SEO
API Response Caching
5-minute cache for Jikan API responses reduces redundant requests
Image Optimization
Next.js Image component with remote patterns for CDN images
Code Splitting
Automatic route-based code splitting for smaller bundles
Security Considerations
Row Level Security (RLS)
Supabase database uses RLS policies:- Users can only access their own data
- Public data (profiles, published reviews) is readable by all
- Write operations require authentication
Environment Variables
Sensitive configuration stored in.env.local:
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEY
The anon key is safe for client-side use. RLS policies enforce access control.
Authentication Security
- JWT tokens with automatic refresh
- Session-based authentication
- Secure cookie storage
- HTTPS-only in production
Scalability Considerations
Horizontal Scaling
- Stateless Next.js application (can run multiple instances)
- Supabase handles database scaling
- CDN for static assets
Caching Strategy
- Browser Cache: Static assets cached by Next.js
- API Cache: In-memory cache for Jikan API responses
- Database Query Cache: Supabase connection pooling
Future Enhancements
- Redis for distributed caching
- Background job processing for heavy operations
- Real-time subscriptions with Supabase Realtime
- CDN integration for user-uploaded content
Related Documentation
Tech Stack
Detailed breakdown of all technologies and versions
Project Structure
File organization and folder hierarchy