Overview
The backend is a Django 4.2+ REST API that handles:- User authentication with Sign-In With Ethereum (SIWE)
- Contribution tracking and validation
- Leaderboard calculations with dynamic multipliers
- Category-based user profiles (Validators, Builders, Stewards)
Installation
Configure environment variables
Create a Edit the
.env file in the backend/ directory:.env file with your configuration. See Environment Variables for details.Start development server
Dependencies
Key packages fromrequirements.txt:
Django Apps Structure
The backend is organized into several Django apps:Core Apps
api - Core API functionality
api - Core API functionality
Location:
backend/api/Handles authentication endpoints:/api/auth/nonce/- Get nonce for SIWE/api/auth/login/- Verify signed message and login/api/auth/verify/- Check authentication status/api/auth/logout/- End session
users - User management
users - User management
Location:
backend/users/Custom user model with:- Email-based authentication
- Ethereum wallet address linkage
- Profile fields (name, bio, social links)
- GitHub OAuth integration
- Referral system
contributions - Contribution tracking
contributions - Contribution tracking
Location:
backend/contributions/Manages all contribution types and submissions:- ContributionType: Categories of contributions (slug-based)
- Contribution: Actual contribution records with frozen points
- SubmittedContribution: User submissions pending review
- Evidence: URLs and descriptions (no file uploads)
- Mission: Featured time-limited missions
- ContributionHighlight: Featured contributions
leaderboard - Rankings and multipliers
leaderboard - Rankings and multipliers
Location:
backend/leaderboard/Point calculation and ranking system:- LeaderboardEntry: User rankings per category
- GlobalLeaderboardMultiplier: Time-based point multipliers
- ReferralPoints: 10% of referred users’ points
validator- Active validatorsbuilder- Active buildersvalidator-waitlist- Waitlist participantsvalidator-waitlist-graduation- Graduated validators (frozen points)
validators - Validator profiles
validators - Validator profiles
Location:
backend/validators/Validator-specific functionality:- Node version tracking
- Blockchain integration
- Validator contract interaction
builders - Builder profiles
builders - Builder profiles
Location:
backend/builders/Builder-specific features:- Project tracking
- Builder journey completion
stewards - Steward management
stewards - Steward management
Location:
backend/stewards/Steward role and permissions:- Submission review workflow
- Proposal system
- CRM notes
utils - Shared utilities
utils - Shared utilities
Database Configuration
SQLite (Development)
Default configuration insettings.py:
PostgreSQL (Production)
SetDATABASE_URL in your .env file:
DATABASE_URL is set.
Common Commands
API Endpoints
All API endpoints are prefixed with/api/v1/ except authentication:
Authentication (no v1 prefix)
GET /api/auth/nonce/- Get nonce for signingPOST /api/auth/login/- Login with signed messageGET /api/auth/verify/- Verify authenticationPOST /api/auth/logout/- Logout
Users
GET /api/v1/users/- List usersGET /api/v1/users/me/- Get current user (auth required)PATCH /api/v1/users/me/- Update profile (auth required)GET /api/v1/users/by-address/{address}/- Get user by address
Contributions
GET /api/v1/contributions/- List contributionsPOST /api/v1/contributions/- Submit contribution (auth required, reCAPTCHA)GET /api/v1/contributions/{id}/- Get contribution detailsPATCH /api/v1/contributions/{id}/- Edit submission (auth required)
Contribution Types
GET /api/v1/contribution-types/- List typesGET /api/v1/contribution-types/{id}/- Get type detailsGET /api/v1/contribution-types/statistics/- Type statistics
Leaderboard
GET /api/v1/leaderboard/- Get rankingsGET /api/v1/leaderboard/stats/- Global statisticsGET /api/v1/leaderboard/user_stats/by-address/{address}/- User stats
Testing
Run All Tests
Run Specific Tests
Test Organization
Use the
{app}/tests/ folder structure for better organization:- Create
{app}/tests/__init__.py - Separate files:
test_models.py,test_views.py,test_serializers.py
Admin Panel
Access the Django admin at http://localhost:8000/admin Features:- User management
- Contribution type configuration
- Manual contribution creation
- Multiplier management
- Submission review
Performance Optimization
The project uses context-aware serialization:- Light serializers for list views (minimal fields)
- Full serializers for detail views (complete data)
select_related()for ForeignKey/OneToOneprefetch_related()for reverse/ManyToMany
users/serializers.py:
Next Steps
Frontend Setup
Set up the Svelte 5 frontend
Data Model
Understand the database structure
Authentication Flow
Learn the SIWE auth process
Environment Variables
Configure your environment