The project follows Django's app-based architecture with all apps located in the apps/ directory:
mainsite/: Main Django project settings, URLs, middleware, and core utilitiesbadgeuser/: User management, authentication, and user profilesissuer/: Badge creation, issuer management, and badge class definitionsbackpack/: Badge collection and sharing functionality for earnersinstitution/: Educational institution management and hierarchies
directaward/: Direct badge awarding system and bulk operationsendorsement/: Badge endorsement and approval workflowslti13/: LTI 1.3 integration for learning management systemslti_edu/: Educational LTI-specific functionalitysigning/: Digital signature and timestamping for badgesnotifications/: User notification system
entity/: Base entity models and utilitiescachemodel/: Caching framework and utilitiesbasic_models/: Shared base model classesbadgrlog/: Logging and audit trail functionalitystaff/: Administrative dashboard and staff tools
badgrsocialauth/: Social authentication providers (eduID, SURF Conext)mobile_api/: Mobile application API endpointspublic/: Public-facing API endpointsob3/: Open Badges 3.0 specification support
apps/[app_name]/
├── __init__.py
├── models.py # Database models
├── api.py # API views and endpoints
├── serializers.py # DRF serializers
├── permissions.py # Permission classes
├── schema.py # GraphQL schema definitions
├── admin.py # Django admin configuration
├── migrations/ # Database migrations
└── tests/ # Test files
api_urls.py: REST API URL patternsurls.py: General URL patternsv1_api_urls.py: Versioned API URLs (legacy)
apps/mainsite/settings.py: Main Django settingsapps/mainsite/templates/: Django templatesapps/mainsite/static/: Static assetsmediafiles/uploads/: User-uploaded files (badges, logos)queries/: Raw SQL queries for reportingscripts/: Utility scriptsdocker/: Docker configuration files
- Use singular names:
BadgeClass,BadgeInstance,Institution - Follow Django conventions for field names
- Use
entity_idfor unique identifiers across apps
- RESTful naming:
/api/v2/badgeclasses/,/api/v2/issuers/ - Use plural nouns for collections
- Consistent versioning in URL paths
- Use lowercase with underscores:
badge_user.py,direct_award/ - Test files:
test_[functionality].py - Migration files: Auto-generated Django format
- Each app manages its own models and migrations
- Shared functionality in
entity/andbasic_models/ - Foreign key relationships follow Django conventions
- Use UUIDs for public-facing identifiers