- Project Overview
- Purpose, Industry Context and Objectives
- Concept Goals
- Core Features
- Future Features
- Planning
- Accessibility
- Typography
- Design Process & Documentation
- Site Map
- User Flow Diagrams
- ERD
- Agile Project Management
- Themes, Epics, and User Stories
- Fibonacci Sequence for Estimation
- GitHub Projects & Agile Implementation
- Technologies Used
- Site Features
- Deployment
- Testing
- Future Enhancements
- Credits & References
- Acknowledgements
modmixx is a web-based platform designed to foster creativity and collaboration among music makers of all skill levels. It provides a safe, inclusive space where users can share unfinished ideas, learn from others, and build meaningful connections. The platform prioritises creativity over perfection and community over competition, offering an alternative to traditional self-promotion-focused platforms.
Note: Currently hosted on Heroku with eco dynos - initial load may take 10-15 seconds as dynos require wake-up time after periods of inactivity
The music industry is undergoing significant transformation, presenting both challenges and opportunities for independent artists. With declining revenue from streaming platforms and the rise of AI-generated content, original, human-made music risks being undervalued. Despite these shifts, the demand for creativity, connection, and community in music remains as strong as ever.
Simultaneously, music creation tools have become more accessible than ever before. The market for both professional and hobbyist hardware continues to thrive, from analogue synthesizers to MIDI controllers. Additionally, powerful free software including Digital Audio Workstations (DAWs), VST plugins, and sample libraries have dramatically lowered barriers to entry, empowering a new generation of creators. This democratisation of production tools has expanded the community of music makers, creating a need for platforms that genuinely support their creative journey.
modmixx addresses this gap by providing a dedicated space where music creators of all skill levels can share, experiment, and grow without the pressure of perfection or competition that characterises existing platforms. Unlike traditional social media that prioritises polished content and algorithmic visibility, modmixx fosters authentic creativity, collaboration, and experimentation.
The platform's focus on authentic creativity and community building creates natural opportunities for meaningful partnerships with the hardware and software brands that creators use daily. When users share their creative processes and the tools that enable their work, it builds genuine, trust-based connections between creators and the brands that support their journey.
With its emphasis on inclusivity and authentic connection, modmixx has the potential to evolve into a thriving, user-driven platform that truly empowers creators while establishing valuable partnerships that benefit the entire community.
- Creative Playground: A space for users to upload musical ideas, sketches, and tracks without fear of judgment.
- A Safe & Inclusive Space: Prioritises a safe and welcoming environment for all creators, with a focus on amplifying voices often underrepresented in the music industry.
- Learning Through Sharing: Encourages users to share their creative processes (e.g., DAW, techniques, effects) to inspire and educate others.
- Community & Feedback: Promotes thoughtful, collaborative feedback rather than criticism.
- Connection, Not Clout: Eliminates follower counts to focus on genuine creative exchange rather than competition.
- Welcome Page: Introduces users to the platform and its values.
- Navigation Bar: Provides intuitive access to key sections.
- User Authentication: Secure registration, login, and logout functionality.
- Track Uploads: Allows users to upload tracks with metadata (title, DAW used, description, optional image).
- Main Feed: Displays user uploads for discovery and engagement.
- Commenting System: Enables collaborative feedback on tracks.
- User Profiles: Includes pronouns, bio, profile picture, and uploaded tracks.
- Static Pages: Includes About, Community Guidelines, and 404 pages.
- Contact Form: Allows users to provide feedback or request support.
- Challenges: Monthly creative prompts to inspire participation and experimentation.
- Learning Content: Tutorials, masterclasses, and mentorship opportunities featuring a diverse range of artists and producers to ensure representation and broad perspectives.
- Social Features: Follow/friend functionality with personalized feeds.
- Collaboration Tools: Direct messaging and shared project spaces.
- Forum: A dedicated space for sharing free resources and discussions.
- Blog Section: Updates and insights from the community.
- Engagement Tools: Like button (with hidden counts) and a report button for moderation.
- Video Integration: Support for short performance video uploads and sharing.
- Listening Parties: Real-time collaborative listening sessions. Recreating the feel of in-person jam sessions and open mic nights.
Primary Brand Colours:
- Yellow: #FFD20B
- Orange: #F3682C
- Pink: #F82170
- Purple: #B544D0
Interface Colours:
- Background: #FFFFFF (Clean white base)
- Text: #24343c (Charcoal black for readability)
- Gradient Backgrounds:
- #FFFCF0 (Pale cream)
- #FEF6F2 (Soft peach)
- #FFF2F6 (Light pink)
Design Approach: The interface emphasises clean white space and visual breathing room, with subtle pale gradient backgrounds in near off-white tones (#FFFCF0 → #FEF6F2 → #FFF2F6). This creates a way to introduce colour without overwhelming the user experience. Interactive elements feature vibrant orange-to-pink gradients with white text for clear call-to-action visibility, while maintaining accessibility and readability throughout.
Note: The MVP colour palette is documented in detail, while the complete brand palette is maintained in CSS custom properties for consistent design system implementation and future development phases.
Accessibility was prioritised from the planning phase through implementation and testing. Colour contrast ratios were carefully evaluated and tested throughout the development process to ensure WCAG compliance.
Planning Phase:
- Colour contrast combinations were evaluated during design planning using WebAIM contrast checker
- Multiple contrast scenarios documented on Miro planning board with screenshots
- Accessibility considerations informed colour palette decisions from the start
Implementation Phase:
- Continuous contrast testing during development using eyedropper tools and WebAIM contrast checker
- Strategic design decisions made to enhance readability and user experience, including:
- Hero overlay gradient with 70% opacity for sufficient background contrast
- Gradient overlay prevents hero image from detracting attention from CTA buttons and headline
- Text shadows and box shadows added to improve text legibility over images
- White text on gradient overlays tested for contrast ratios
Example - Hero Section Design Strategy:
/* Hero brand pink to orange gradient overlay for contrast enhancement */
.hero-gradient-overlay {
background: linear-gradient(135deg, rgba(248,33,112,0.7) 0%, rgba(243,104,44,0.7) 100%);
}
/* Deep burgundy text shadow for enhanced readability */
.hero-text {
text-shadow: 0px 3px 20px rgba(84, 6, 35);
}Primary Fonts:
Nunito - Main body font, clean and highly readable

Raleway - Headlines and subheadings in bold weights for visual hierarchy

Design Strategy: Both fonts were chosen for exceptional readability across devices and accessibility compliance. Raleway's versatile weight range (100-900) provides strong visual hierarchy for headlines and taglines, while Nunito ensures comfortable reading for body content.
For a comprehensive view of the complete design process, brainstorming, and planning documentation, visit the project planning board:
View Complete Design Process on Miro →
What's Included:
- User Research & Personas - Understanding target users and their needs
- Visual Mood Boards - Design inspiration and aesthetic direction
- Agile Planning & Sprint Management - User story mapping and iteration planning
- Retrospectives & Learning Documentation - Continuous improvement throughout development
- Technical Architecture Planning - Database design and system architecture decisions
The Miro board contains planning and research documentation that informed the development of this MVP, demonstrating the iterative design process from initial concept through to final implementation.
Note: This user flow represents planned functionality for monthly challenges, which were strategically deferred from the MVP scope to prioritise core platform features. Challenge functionality provides greater community value once the platform has established its user base and proven engagement with core features. The challenges feature is planned for future development phases.
Entity Relationship Diagram showing the core data structure: User authentication, Profile management, Track uploads with S3 storage (PATH), Comments, and Contact form functionality.
Agile methodology was used for project management, with a focus on iterative development and reassessment. The project was broken down into manageable themes, epics, and user stories to ensure a user-centered approach to development.
Personas were created to represent the target users of the application, helping to guide design and development decisions.
User Persona 1: Ava - The Curious Hobbyist
Uses: Freeware like GarageBand, BandLab
Experience Level: Beginner / Hobbyist
Age Range: 18–30
Pronouns: She/Her
Goals:
- Share early music ideas without fear of judgment
- Learn how other people build tracks (DAW, FX chains, etc.)
- Connect with other female/female-identifying and non-binary producers
Frustrations:
- Other platforms feel performative, competitive, or male-dominated
- Gets little to no feedback - just likes/hearts
- Feels like there's an “entry bar” just to post anything
Needs:
- A space where messy creativity is celebrated
- Encouragement to grow, not perform
- A safe space with protections against toxic or inappropriate interactions
User Story:
As a beginner producer, I want to upload unfinished tracks without fear, so that I can get support and learn from others.
User Persona 2: Jules - The Burnt-Out Pro
Uses: Ableton Live, plugins like Serum
Experience Level: Professional / Advanced
Age Range: 30–45
Pronouns: They/Them
Goals:
- Explore new genres outside of “client work”
- Give back by mentoring or helping beginners
- Play without branding pressure
Frustrations:
- Platforms feel like an extension of work/branding
- Feels pressure to always share “portfolio-ready” content
- Doesn't want to keep curating a public persona
Needs:
- A low-stakes, fun space to make weird music
- Opportunities to teach/share knowledge organically
User Story:
As an experienced producer, I want to share ideas without “branding,” so that I can reconnect with music as play.
User Persona 3: Diane - The Rediscovering Creative
Background: Recently became an empty nester. Used to write songs and dabble in music 30 years ago but stopped when life got busy. Now exploring digital music tools (DAWs, loops, etc.) and wants a hobby that feels meaningful and social.
Goals:
- Reconnect with her creative side
- Learn digital music production at her own pace
- Be part of a kind, intergenerational community
Frustrations:
- Feels too old for YouTube comment sections, Discord servers or TikTok
- Tech culture feels like it’s “not for her”
- Intimidated by forums that assume prior knowledge
- Real life social circle doesn't share her interest in producing beats
Needs:
- A gentle, welcoming space with no age assumptions
- Encouragement and space to learn
User Story:
As an older woman rediscovering music, I want to find a friendly space that values creative exploration, so that I feel confident sharing and learning without judgment or pressure to be “pro.”
User Persona 4: Emmi - The Shy Beginner
Uses: Logic Pro, sometimes GarageBand on iPad
Experience Level: Beginner - Intermediate
Age Range: 16–25
Pronouns: She/Her
Goals:
- Share a track for the first time
- Connect with others at a similar level
- Be inspired by others who post “in-progress” music
Frustrations:
- Intimidated by polished production
- Doesn’t feel “good enough” to belong on music platforms
- Scared of negative or no feedback
Needs:
- A welcoming, feedback-focused space
- Examples of imperfection being OK
User Story:
As a beginner learning music production, I want to share my work without judgment, so I can build confidence.
User Persona 5: Jesse - The Experimental Collaborator
Uses: Avid Pro Tools
Experience Level: Intermediate
Age Range: 18–30
Pronouns: He/Him
Goals:
- Build creative friendships through music
- Collaborate on experimental projects
- Find others to collab with or remix
Frustrations:
- Forums and collab spaces often feel cliquey, competitive, or ego-driven
- Finds online collabs break down due to miscommunication or lack of follow-through
- Misses the community vibe of in-person jam sessions
- Finds algorithmic platforms reward polish over playfulness
Needs:
- A platform that encourages collaboration through openness and shared values
- Clear ways to indicate openness to collab or remix
- Community norms that reward sincerity and creativity over self-promotion
- A vibe that feels like “a band room online” - playful, trusting, inspiring
User Story:
As a seasoned music producer who thrives on collaboration, I want to find a space where experimentation is encouraged and users are open to sharing project files or stems, so that I can co-create without the pressure of perfection or self-promotion.
Site Owner - Developer
Uses: Ableton Live
Experience Level: Professional / Advanced
Goals:
- Build a welcoming community for music creativity
- Reduce barriers to entry for people in music tech
- Focus on fun, honesty, connection, learning - not performance or clout
- A music producers hangout/playground
Frustrations:
- Music spaces dominated by perfectionism and ego
- Toxic gatekeeping in production communities
- Beginners feeling too intimidated to start
User Story:
As the developer, I want to build a platform that encourages authenticity over polish, so that music creators of all levels and backgrounds feel they belong.
The project was organised into themes, epics, and user stories to ensure a user-centered approach to development. Each theme represents a key area of focus, with epics breaking down larger goals into manageable user stories.
| Story Number | User Story | Story Point |
|---|---|---|
| 1.1.1 | As a new visitor, I want to see a welcoming message and clear call to action, so that I understand what the site is for and feel encouraged to join. | 2 |
| 1.1.2 | As a returning user, I want a quick log in option, so that I can easily access my account. | 2 |
| Story Number | User Story | Story Point |
|---|---|---|
| 1.2.1 | As a logged-out user, I want clear links to log in, sign up, and learn more, so that I can easily navigate the site. | 3 |
| 1.2.2 | As a logged‑in user, I want navigation to change dynamically, so I can access relevant parts of the site like feed and profile. | 5 |
| Story Number | User Story | Story Point |
|---|---|---|
| 1.3.1 | As a new user, I want to register with my email address and a secure password, so that I can create an account safely. | 5 |
| 1.3.2 | As a returning user, I want to log in with my credentials, so that I can access my profile and uploads. | 3 |
| 1.3.3 | As a logged-in user, I want to log out securely, so that my session ends safely. | 2 |
Note: Track tagging functionality was deferred to future releases.
| Story Number | User Story | Story Point |
|---|---|---|
| 2.1.1 | As a user, I want to upload a music track with a title, DAW used, description, and image, so that others can understand my creative process. | 8 |
| 2.1.2 | As a user, I want to tag my upload with 'feedback wanted' so that others know I am looking for constructive feedback. (Future Release) | 5 |
| 2.1.3 | As a user, I want to edit or delete my uploaded track post, so that I can update or remove content if needed. | 5 |
| Story Number | User Story | Story Point |
|---|---|---|
| 2.2.1 | As a user, I want to scroll through a feed of recent uploads, so that I can discover and listen to other users’ music. | 5 |
| 2.2.2 | As a user, I want to open a track post to see more details and comments, so that I can learn and engage more deeply. | 5 |
| Story Number | User Story | Story Point |
|---|---|---|
| 2.3.1 | As a user, I want to leave thoughtful comments on tracks, so that I can encourage and engage with others. | 5 |
| 2.3.2 | As a user, I want to edit or delete my own comments, so that I can correct or remove what I wrote. | 3 |
| Story Number | User Story | Story Point |
|---|---|---|
| 3.1.1 | As a user, I want to view and edit my profile (bio, pronouns, image), so that others can understand who I am. | 5 |
| 3.1.2 | As a user, I want to see all my uploaded tracks in one place, so that I can track my creative progress. | 3 |
Strategic MVP Decision: Monthly challenges were initially planned but strategically deferred from the MVP scope to prioritise core platform functionality. This feature provides maximum value when there's sufficient user adoption and content volume to create meaningful community engagement. The MVP focuses on establishing the foundational user experience authentication, track sharing, and community interaction which are prerequisites for successful challenge participation. Monthly challenges will be implemented in future releases once the platform has grown its user base and proven the core value proposition.
| Story Number | User Story | Story Point |
|---|---|---|
| 3.2.1 | As a user, I want to view the current monthly challenge, so that I can be inspired and participate. (Future Release) | 3 |
| 3.2.2 | As a user, I want to see other user submissions for the challenge, so that I feel part of a community effort. (Future Release) | 2 |
| 3.2.3 | As a user, I want to upload my monthly challenge, so that my track is grouped with other submissions. (Future Release) | 2 |
| Story Number | User Story | Story Point |
|---|---|---|
| 4.1.1 | As a visitor, I want to read about the community and its values, so I know if it’s right for me. | 1 |
| 4.1.2 | As a user, I want clear community guidelines, so that I understand what’s expected and what’s not allowed. | 2 |
| 4.1.3 | As a user, I want to see a helpful 404/504 page if something is missing, so I’m not confused. | 1 |
| Story Number | User Story | Story Point |
|---|---|---|
| 4.2.1 | As a visitor or user, I want to contact the site owner for help or feedback, so that I feel heard and supported. | 3 |
| 4.2.2 | As a user, I want to receive a confirmation message when I submit the form, so I know it went through. | 2 |
| User Story |
|---|
| As a beginner/intermediate user, I want access to tutorials, mentorship, and learning content, so that I can improve my skills in a supportive environment. |
| As an experienced producer, I want to offer lessons or feedback to others, so that I can give back to the community and share my expertise. |
| User Story |
|---|
| As a user, I want to follow or friend other users, so that I can stay connected with artists whose work I admire. |
| As a user, I want a personalised feed of uploads from users I follow, so that I can easily discover new tracks from my creative circle. |
| As a user, I want to message or collaborate directly with others, so that we can create music together and stay on track with shared projects. |
| User Story |
|---|
| As a user, I want a forum or discussion area to ask questions and share production tips, so that I can learn and connect with others. |
| As a user, I want to browse and contribute free production resources, so that I can both benefit from and support the community. |
| User Story |
|---|
| As a user, I want to like tracks privately (with no visible counts), so that I can show appreciation without promoting competition. |
| As a user, I want to report inappropriate content, so that the community stays safe and welcoming. |
| User Story |
|---|
| As a user, I want to upload and share short performance videos, so that I can showcase my creative process and style. |
| As a user, I want to participate in real-time listening parties, so that I can experience the joy of sharing music live with others. |
The Fibonacci sequence was used for estimating the complexity of user stories, helping to prioritise features and manage workload effectively.
This project utilised GitHub Projects with a comprehensive agile approach, implementing MoSCoW prioritisation (Must Have, Should Have, Could Have, Won't Have) combined with iterative development cycles.
Link to the modmixx Project Boards
Click to expand
MoSCoW prioritised user stories tracked through GitHub Projects with clear priority labels and sub-issue organisation
Iteration 1: Accounts & Profiles
- User registration and login functionality
- Profile management system
Iteration 2: Tracks
- Audio file upload functionality
- Track display in main feed
- Individual track page creation
Iteration 3: Comments System
- Comment model linking to tracks and users
- Comment form and display logic
- Moderation planning
Iteration 4: AWS + Media Setup (Milestone: Storage & Backend)
- AWS S3 integration for audio and image storage
- Production upload functionality testing
- Moderation implementation
Iteration 5: UI + Forms + Auth Polish (Milestone: Frontend)
- Bootstrap integration and responsive design
- Custom signup/login form styling
- Navigation and template optimisation
- Content creation
Iteration 6: QA + Documentation + Testing (Milestones: Testing & Release 1 MVP)
- Comprehensive testing implementation
- README documentation completion
- Screenshots and UX documentation
- MVP release preparation
Deferred Feature: Challenges System (Planned for Release 2)
- Monthly challenge model implementation
- Challenge-track linking functionality
- Upload logic extension for challenges
The agile approach allowed for flexibility and adaptability throughout the project. Regular iterations enabled continuous reassessment of priorities, leading to the strategic deferral of the challenges system to a future release. This ensured that core functionalities were delivered with high quality within the project timeline.
Detailed iteration planning, retrospectives, and strategic decision-making were documented on the project's Miro board:
View Miro Planning Board - modmixx Project
- HTML5 - Semantic structure and content
- CSS3 - Styling, responsive layouts, custom properties
- JavaScript (ES6+) - Client-side interactivity and dynamic functionality
- Python 3.13 - Backend application logic
- Django 5.2.4 - Full-stack web framework with ORM and templating
- Bootstrap 5 - Responsive CSS framework and components
- Django Crispy Forms 2.4 - Enhanced form rendering and styling
- Crispy Bootstrap5 2025.6 - Bootstrap 5 integration for forms
- Google Fonts - Typography (Nunito, Raleway)
- Font Awesome - Iconography
- Fetch API - Modern AJAX for dynamic content loading
- File API - Drag-and-drop and file upload handling
- Intersection Observer API - Infinite scroll and lazy loading
- HTML5 Audio API - Audio playback and management for tracks
- Bootstrap Modal & Toast API - Enhanced UI feedback and modal management
- PostgreSQL - Primary relational database management (psycopg2)
- Custom User Model - Email-based authentication system
- Django Signals - Automated profile creation and model events
- dj-database-url 3.0.1 - Database configuration management
- Django Allauth 65.10.0 - Comprehensive authentication system with Google OAuth
- Google OAuth 2.0 - Social authentication for Google account sign-up/login
- Custom Form Validation - Multi-layered security with regex patterns
- Honeypot Spam Protection - Bot detection via hidden form fields
- File Upload Security - Type, size, and content validation
- Content Moderation - AI-powered filtering for text and images
- GitGuardian – Enhanced security monitoring and vulnerability detection
- AWS S3 - Cloud storage for audio files and images
- AWS Rekognition - AI-powered image content moderation
- Google Perspective API - Real-time toxicity detection for text content by Google & Jigsaw
- Gmail SMTP - Email service for contact forms
- Boto3 1.40.1 - AWS SDK for Python
- Pillow 11.3.0 - Image processing and validation
- Mutagen 1.47.0 - Audio file metadata extraction and duration calculation
- Python-ULID 3.0.0 - Unique identifier generation for file naming
- GitHub - Version control and repository management
- VSCode - Code editing and development environment
- Heroku - Application hosting and deployment
- Gunicorn 23.0.0 - WSGI HTTP server for production
- Whitenoise 6.9.0 - Static file serving in production
- Django Storages 1.14.6 - Custom storage backends for S3
- Black 25.1.0 - Python code formatter
- Flake8 7.3.0 - Python linting and style guide enforcement
- isort 6.0.1 - Python import statement sorting
- djlint 1.36.4 - Django template linting and formatting
- ESLint - JavaScript linting and style guide enforcement
- GitHub Projects - For agile project management and issue tracking
- Miro - Whiteboarding platform
- Adobe Photoshop - Graphic design and image editing
- Adobe Illustrator - Vector graphics editing and illustration
- ChatGPT - Used to refine written content and improve clarity in documentation. Also utilised for learning alongside traditional documentation and resources.
- Coolors - Colour palette generation tool
- Drawdb - ERD (Entity Relationship Diagram) design tool
- Eyedropper - Colour extraction tool for design
The landing page introduces new visitors to the modmixx community with a clear value proposition and welcoming design. Features include:
- Hero Section - Compelling call-to-action with gradient overlay for optimal text contrast
- Community Values - Clear messaging about creativity, inclusivity, and collaboration
- Getting Started - Streamlined signup/login options prominently displayed
- Responsive Design - Optimised experience across all device sizes
Contextual navigation that adapts based on user authentication status:
Pre-Authentication Navigation
- Clear signup/login options
- Access to About and Contact pages
- Responsive collapse on mobile devices
Post-Authentication Navigation
- Feed access for track discovery
- Upload functionality for content creation
- Profile management
- Secure logout option
Mobile-Responsive Design
- Bootstrap 5 collapse component
- Touch-friendly interface
- Maintains full functionality on smaller screens
Multi-Modal Registration System:
- Email/Password Registration - Traditional account creation with validation
- Google OAuth Integration - One-click social authentication
- Profile Setup - Immediate profile creation with username, display name, optional bio, pronouns, and profile image
Comprehensive Upload Process:
- Drag-and-Drop Interface - Intuitive file selection with visual feedback
- Multi-Format Support - Accepts various audio formats (MP3, WAV, M4A, etc.)
- Rich Metadata Collection - Title, description, DAW used, optional cover art
- File Validation - Security checks for file type, size, and content
- AWS S3 Integration - Secure cloud storage
- Audio Processing - Automatic duration extraction
Content Moderation Pipeline:
- Image Analysis - AWS Rekognition for inappropriate visual content detection
- Text Moderation - Google Perspective API for toxicity and inappropriate language detection
- Multi-Layer Security - File type validation, size limits, and content scanning
- Admin Override - Manual moderation capabilities for edge cases
(AKA lazy loading)
Initial Content Strategy: The main feed implements a performance-optimised loading strategy that balances user experience with server resources:
Initial Load (5 Tracks):
- Displays the 5 most recent tracks immediately
- Provides instant content engagement
- Reduces initial page load time
- Optimises AWS S3 data transfer costs - Only loads audio/image files for tracks currently being viewed
- Minimises bandwidth usage - Prevents unnecessary downloads of media files that users may never interact with
- Includes complete track information (audio player, metadata, comments)
Infinite Scroll Implementation:
Demonstration with throttled connection speed to show loading behaviour
Technical Implementation:
- Intersection Observer API - Efficient scroll detection without performance impact
- Loading States - Visual feedback during content fetching
Navigation Enhancement:
- Back to Top Button - Smooth scroll functionality for long feeds
- Dynamic Visibility - Appears/disappears based on scroll position
- Accessibility Compliance - Keyboard navigation support
Full description of the track and its dedicated comments section
Only the user who uploaded the track can see edit and delete options
View of the track details and comments section by other users
Delete warning to minimise accidental removals
Only the user who uploaded the track can see delete option
Seamless User Experience with AJAX Implementation:
- Real-Time Commenting - Users can comment while listening to tracks without interrupting audio playback
- Instant Feedback - Comments appear immediately after submission using AJAX, eliminating page refreshes that would stop the music
- Uninterrupted Listening Experience - Essential for music platforms where continuous playback maintains the user's engagement with the track
Additional Features:
- Threaded Comments - Organised discussion structure
- Real-Time Validation - Immediate feedback on comment length and content
- Edit/Delete Functionality - User control over their contributions
- Moderation Integration - Google Perspective API powered content filtering for community safety
- Responsive Design - Optimised for mobile and desktop interaction
Multi-Service Moderation Pipeline:
Image Content Analysis:
- AWS Rekognition Integration - Detects inappropriate visual content
- Confidence Thresholding - Configurable sensitivity levels (default: 80%)
- Category Detection - Identifies harmful content categories
- Admin Dashboard - Review and override moderation decisions
In addition to regular default settings of AWS Rekognition of inappropriate content detection, images of smoking have been added to the configuration for testing purposes. A demonstration of this feature is shown below:
Confidence settings have been configured to high sensitivity mode for testing purposes. Below is a demonstration of a cheese plant image being flagged for pending review:
These settings are not for a production launch and will be less extreme in a live environment.
Text Content Analysis:
- Google Perspective API - Real-time toxicity detection
- Multiple Attribute Analysis - Toxicity and severe toxicity
- Instant User Feedback - Immediate toxic post prevention and user feedback for potentially harmful content
Perspective API detects not only toxic language but also the perceived toxicity of user comments in real-time. The example above shows how a potentially toxic comment "your music is rubbish" is flagged. The user is notified instantly and prevented from posting it. When the comment is then changed to "your music is great", it is successfully posted.
Comprehensive Profile System:
- Identity Expression - Pronouns field, bio, profile images
- Creative Portfolio - Automatic display of user's uploaded tracks
- Profile Customisation - Image upload with validation and processing
- Social Features Ready - Architecture supports future follow/friend functionality
Edit profile features are only available on users own profile page

Community Building Pages:
- About Page - Platform mission, values, and community focus
- Community Guidelines - Clear expectations for behaviour and content
User Support Infrastructure:
- Contact Form - Direct communication channel with site administrators with email confirmation
- Anti-Spam Protection - Honeypot field and validation
- User Feedback - Success/error messaging with clear next steps
- Responsive Design - Accessible across all device types
Site-Wide Footer:
Mobile-Optimised Footer:
- Clean Design - Minimal, professional appearance
- Consistent Branding - Maintains visual identity across all pages
- Essential Links - Quick access to key information
- Responsive Layout - Adapts seamlessly to different screen sizes
Comprehensive Error Management:
-
Custom 404 Pages - User-friendly error messages with navigation options
-
500 Error Handling - Server error management
-
Form Validation - Real-time feedback and clear error messaging
- File Upload Security - Type validation, size limits
- User Authentication - Secure password handling and session management
- CSRF Protection - Django built-in cross-site request forgery prevention
- SQL Injection Prevention - ORM-based database queries
- Content Security Policy - XSS attack prevention
- Secure Headers - HTTPS enforcement and security header configuration
- Python 3.13
- Git
- GitHub account
- Heroku account
- AWS account
- Google Cloud account (for Perspective API)
- Navigate to the source repository on GitHub
- Click the "Fork" button in the top-right corner
- Select your account as the destination for the fork
- Choose fork settings:
- Keep the same repository name or change it
- Add a description (optional)
- Choose to copy only the main branch or all branches
- Click "Create fork"
- If using a template (like Code Institute's):
- Click "Use this template" → "Create a new repository"
- Fill in repository details (name, description, public/private)
- Click "Create repository from template"
- For a completely new repository:
- Go to GitHub → Click "New" button
- Enter repository name and settings
- Initialize with README (recommended)
- Choose .gitignore template: Python
- Select license (optional)
- Open VS Code
- Install GitHub extension if not already installed
- Connect GitHub account:
- Click Accounts icon (bottom-left)
- Sign in to GitHub and authorise VS Code
- Clone repository:
- Press
Ctrl+Shift+P(Windows) orCmd+Shift+P(Mac) - Type "Git: Clone" and select it
- Choose "Clone from GitHub"
- Search and select your repository
- Choose local folder where you want to store the project
- Click "Open in VS Code" when cloning completes
- Press
# Navigate to where you want to store the project
cd /path/to/your/projects
# Clone the repository (replace with your actual repository URL)
git clone https://github.com/YOUR-USERNAME/YOUR-REPOSITORY-NAME.git
# Navigate into the project folder
cd YOUR-REPOSITORY-NAME
# Open in VS Code (optional)
code .- Download and install GitHub Desktop
- Sign in to your GitHub account
- Click "Clone a repository from the Internet"
- Select your repository from the list
- Choose local path and click "Clone"
Setting Up Git Configuration (First Time Only)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# Verify configuration
git config --listBasic Git Workflow for Development
# Check current status
git status
# Add changes to staging area
git add . # Add all changes
git add filename.py # Add specific file
# Commit changes with descriptive message
git commit -m "Add user authentication system"
# Push changes to GitHub
git push origin main # Push to main branch
# Pull latest changes from GitHub (before starting work)
git pull origin mainNote: This project was developed solo using direct commits to main branch. The branch strategy below is recommended for team collaboration and will be adopted for future development of this project.
# Always start from the latest main branch
git checkout main
git pull origin main
# Create a new feature branch for each feature/fix
git checkout -b feature/user-authentication
# or
git checkout -b fix/navbar-mobile-bug
# or
git checkout -b update/readme-deployment-sectionpython -m venv venv
# Activate
# Windows:
venv\Scripts\activate
# macOS/Linux:
source venv/bin/activate
pip install -r requirements.txtcp env_example.py env.py
echo "env.py" >> .gitignore- Fill in real values in
env.py. - Never commit
env.py.
python manage.py migrate
python manage.py createsuperuser # optional
python manage.py runserver- AWS Console → S3 → Create bucket.
- Enter unique name + region → configure → Create bucket.
Bucket Policy (replace YOUR-BUCKET-NAME):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::YOUR-BUCKET-NAME/*"
}
]
}CORS Configuration:
[
{
"AllowedHeaders": ["*"],
"AllowedMethods": ["GET", "POST", "PUT"],
"AllowedOrigins": ["*"],
"ExposeHeaders": []
}
]- IAM → Users → Add user (
django-s3-user) → Programmatic access. - Attach policies:
AmazonS3FullAccessAmazonRekognitionReadOnlyAccess
- Save Access Key ID and Secret Access Key.
- Google Cloud Console → create/select a project.
- APIs & Services → Library: enable
- Google+ API (for OAuth)
- Perspective Comment Analyzer API
- APIs & Services → Credentials:
- Create Credentials → OAuth 2.0 Client ID (type: Web application).
- Configure consent screen (External) and required fields.
- Authorised redirect URIs:
http://127.0.0.1:8000/accounts/google/login/callback/https://your-heroku-app.herokuapp.com/accounts/google/login/callback/
- Save Client ID and Client Secret.
- Ensure Perspective Comment Analyzer API is enabled.
- Credentials → Create Credentials → API Key.
- Restrict key: API restrictions → Perspective Comment Analyzer API.
- Save the API key.
Performance Note: Heroku Eco dynos "sleep" after 30 minutes of inactivity and require 10-15 seconds to "wake up" on first access. This is normal behaviour for free/low-cost hosting tiers and does not reflect the application's actual performance once active.
Ensure you have these files in your project root:
- requirements.txt - List of Python dependencies
- Procfile containing:
web: gunicorn modmixx.wsgi - runtime.txt containing:
Note: Only the major.minor version (e.g.,
3.133.13not3.13.0).
- Create Heroku account at heroku.com
- Verify your email address
- Complete account setup
- Download Heroku CLI from devcenter.heroku.com/articles/heroku-cli
- Install following platform-specific instructions:
- Windows: Download installer and run
- macOS: Use installer or
brew install heroku/brew/heroku - Linux: Use package manager or snap
- Verify installation:
heroku --version- Login to Heroku:
heroku login
# Follow the prompts to complete login- Log into your Heroku Dashboard at dashboard.heroku.com
- Click New → Create new app
- Enter app details:
- App name: Must be unique (e.g.,
your-project-name) - Region: Choose closest to your users (US/Europe)
- App name: Must be unique (e.g.,
- Click Create app
- Go to Deploy tab in your Heroku app dashboard
- Deployment method section: Click GitHub
- Connect to GitHub:
- Click Connect to GitHub
- Authorise Heroku to access your GitHub account
- Search for repository:
- Enter your repository name
- Click Search
- Click Connect next to your repository
-
In "Automatic deploys" section:
- Select branch: Usually
main - Check "Wait for CI to pass before deploy" (if using CI)
- Click "Enable Automatic Deploys"
- Select branch: Usually
-
What this means: Every time you push to GitHub, Heroku automatically updates your live site
Important Considerations:
- Testing recommended: Set up automated tests to ensure code quality before automatic deployment. (tests are planned for future development of this project).
- Security: Always use environment variables for sensitive data (see section 7: Environment Variables Reference)
- Branch protection: Consider enabling branch protection rules on GitHub for additional safety
- In Manual deploy section:
- Select branch to deploy (usually
main) - Click Deploy Branch
- Wait for build to complete (you'll see build logs)
- Click View to see your live app
- Select branch to deploy (usually
- Go to Settings tab in your Heroku app
- Click Reveal Config Vars
- Add each environment variable as key-value pairs:
| Key | Value Example |
|---|---|
| SECRET_KEY | your-django-secret-key-here |
| DEBUG | False (Always use False in production!) |
| DATABASE_URL | your-database-connection-string |
| AWS_ACCESS_KEY_ID | your-aws-access-key |
| AWS_SECRET_ACCESS_KEY | your-aws-secret-key |
| AWS_REGION | eu-west-1 |
| SOCIAL_AUTH_GOOGLE_OAUTH2_KEY | your-google-client-id |
| SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET | your-google-client-secret |
| PERSPECTIVE_API_KEY | your-perspective-api-key |
| EMAIL_HOST_USER | your-gmail-address |
| EMAIL_HOST_PASSWORD | your-gmail-app-password |
| IMAGE_MODERATION_ENABLED | true |
| REKOG_MIN_CONFIDENCE | 80 |
- Click Add after entering each key-value pair
heroku login
heroku create your-app-nameSet Config Vars:
# Django
heroku config:set SECRET_KEY="your-secret-key"
heroku config:set DEBUG=False
heroku config:set DATABASE_URL="your-database-url"
# AWS
heroku config:set AWS_ACCESS_KEY_ID="your-aws-access-key"
heroku config:set AWS_SECRET_ACCESS_KEY="your-aws-secret-key"
heroku config:set AWS_REGION="eu-west-1"
# Google OAuth & Perspective API
heroku config:set SOCIAL_AUTH_GOOGLE_OAUTH2_KEY="your-google-client-id"
heroku config:set SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET="your-google-client-secret"
heroku config:set PERSPECTIVE_API_KEY="your-perspective-api-key"
# Email
heroku config:set EMAIL_HOST_USER="your-gmail-address"
heroku config:set EMAIL_HOST_PASSWORD="your-gmail-app-password"
# Rekognition
heroku config:set IMAGE_MODERATION_ENABLED="true"
heroku config:set REKOG_MIN_CONFIDENCE="80"Release & Setup:
git push heroku mainVia Heroku CLI:
heroku run python manage.py migrateVia Console:
python manage.py collectstatic --noinput
python manage.py createsuperuser- Make changes locally
- Test thoroughly with
python manage.py runserver - Commit and push to GitHub:
git add .
git commit -m "Description of changes"
git push origin main- If automatic deploys enabled: Heroku automatically updates
- If manual deploy needed: Go to Heroku dashboard → Deploy tab → Deploy Branch
- Use your live Heroku URL:
https://YOUR-HEROKU-APP.herokuapp.com/accounts/google/login/callback/
- Site loads without errors
- User registration
- Google OAuth login
- File uploads to S3
- Static files served
- Emails sent successfully
Always ensure your env.py or .env file is added to your .gitignore and never committed to version control
import os
# Django
os.environ.setdefault("SECRET_KEY", "your-actual-secret-key")
os.environ.setdefault("DEBUG", "True") # False for production
os.environ.setdefault("DATABASE_URL", "your-database-url")
# AWS
os.environ.setdefault("AWS_ACCESS_KEY_ID", "your-actual-aws-key")
os.environ.setdefault("AWS_SECRET_ACCESS_KEY", "your-actual-aws-secret")
os.environ.setdefault("AWS_REGION", "eu-west-1")
# Google
os.environ.setdefault("SOCIAL_AUTH_GOOGLE_OAUTH2_KEY", "your-actual-google-client-id")
os.environ.setdefault("SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET", "your-actual-google-client-secret")
# Google Perspective API
os.environ.setdefault("PERSPECTIVE_API_KEY", "your-actual-perspective-key")
# Email
os.environ.setdefault("EMAIL_HOST_USER", "your-actual-email")
os.environ.setdefault("EMAIL_HOST_PASSWORD", "your-actual-app-password")
# AWS Rekognition
os.environ.setdefault("IMAGE_MODERATION_ENABLED", "true")
os.environ.setdefault("REKOG_MIN_CONFIDENCE", "80")heroku logs --tail- Confirm all config vars are set.
- Ensure
requirements.txtis current.
This project underwent comprehensive testing including manual functionality testing, user acceptance testing, and lighthouse audits. All core features were tested across multiple devices and browsers to ensure consistent performance and user experience.
View Complete Testing Documentation →
The testing documentation includes detailed test cases, validation reports, device compatibility testing, lighthouse audits, security testing and bugs/issues tracking.
- Dark Mode Toggle - User preference settings for light/dark theme switching
- Custom Audio Player - Enhanced player controls using Web Audio API with audio waveform visualisation and potentially a spectrogram display for mixing analysis tools
- Mobile App - iOS/Android app for improved mobile experience
- Version Control for Tracks - Track revision history showing creative evolution
- Notifications System - Real-time updates for comments, follows, and challenges
- Reporting System - User-friendly tools for reporting inappropriate content or behaviour
- Monthly Challenges System - Creative prompts to inspire participation and experimentation
- Learning Content Hub - Tutorials, masterclasses, and workshops featuring diverse artists and producers
- Social Features - Follow/friend functionality with personalised feeds
- Collaboration Tools - Direct messaging, shared project spaces, and collaboration requests
- Forum Integration - Dedicated spaces for sharing resources, tips, and discussions
- Listening Parties - Real-time collaborative listening sessions
- Advanced Admin Dashboard - Comprehensive content management with analytics and user engagement metrics
- Contact Form Management - Admin panel integration allowing direct email replies to user inquiries with conversation threading
- Enhanced Moderation Tools - Bulk actions, automated flagging rules, and improved moderation queue management
- User Management System - Advanced user roles, suspension capabilities, and community guideline enforcement tools
- Content Analytics - Track engagement patterns, popular content types, and community growth metrics
These enhancements were discussed with my mentor Daniel Hamilton, who shared valuable professional industry insights:
- Environment Variable Expansion - Move
ALLOWED_HOSTSto environment variables to prevent unauthorised site mirroring on similar domains and protect brand integrity - Key Rotation System - Implement regular rotation of API keys and secrets with automated processes
- Incident Response Protocol - Establish procedures for immediate key regeneration if credentials are accidentally shared
- Secret Management Service - Consider services like AWS Secrets Manager or HashiCorp Vault for enterprise-level secret management
- Access Monitoring - Implement logging and alerting for unauthorised access attempts
- Regular Security Audits - Scheduled reviews of all authentication and authorisation mechanisms
- Content Delivery Network (CDN) - Global audio streaming optimisation for reduced latency (this would be beneficial for users in different geographical locations and a large user base)
- Advanced Search & Filtering - Search by DAW, genre tags, BPM, and other metadata
- Performance Optimisation - Database query optimisation and caching strategies for improved load times
- Beta Testing Program - Controlled scalability testing with early user feedback collection
- Cost Optimisation - Alternative moderation APIs (e.g., OpenAI's multimodal moderation API) and storage solutions
- Partnership Integration - Hardware/software brand partnerships with gear showcasing and affiliate programs
- Paid Features - Optional paid tiers for increased storage, masterclasses, and exclusive content access (but at a reasonable price point to ensure accessibility and always maintaining free high value resources for all users . Community first.)
- Scholarship Program - Funded workshops and masterclasses for creators facing barriers to entry, including those from low-income backgrounds and underrepresented groups in music production. As a platform built from personal experience in the music industry, supporting accessible learning opportunities and fostering inclusivity in the community is fundamental to the modmixx mission.
- Hero Image: Jona Meza - Pexels
- Producer wearing orange beanie: Anna Pou - Pexels
- Mobile music creator: Unsplash
- Laptop music creator: Unsplash
All demo content below is used under appropriate licenses for demonstration and testing purposes to showcase platform functionality with realistic user-generated content examples.
All demo tracks sourced from Pixabay under Creative Commons license:
- "Chill" by lkoliks | "Neuro Synth" by Night City Radio | "Jungle Waves" by DIMMYSAD
- "Under the Arcade Glow" by Runa Mirai | "Slow downtempo chillwave" by Elisaveta Stoycheva
- "Cyberpunk Futuristic City Music" by HitsLab | "Metaverse Event" by HitsLab
- "Cyberpunk" by TuneTrove | "Dark Synthwave" by TurtleBeats
- Profile images: Konstantin Mishchenko (Pexels), Studio Shephrd (Unsplash)
- Track artwork: Various artists via Unsplash, Pexels, and Freepik
View Complete Image Credits
Track Artwork Sources:
Unsplash Contributors:
- Adi Goldstein, Harrison Mitchell, Arvind Pillai, MARK ADRIAN, Efe Kurnaz, Olegs Jonins
Pexels Contributors:
- Jess Loiterton
Freepik Contributors:
- Wirestock, lucabravo
- Code Institute - Django Blog walkthrough foundational structure
- Django Custom User Model - Email-based authentication implementation
- Django Documentation - Templates, pagination, ORM optimisation, validators
- Django Project Structure - Best practices
- Bootstrap 5 Documentation - Modal components and responsive framework
- CSS Component Architecture - Scalable styling methodology
- Django Allauth Styling - Custom authentication forms
- OWASP Security Guidelines - File upload vulnerabilities, CSP implementation
- Django Security Best Practices - User-uploaded content security
- Google OAuth2 Integration - Social authentication
- Django Allauth Documentation - Authentication framework
- MDN Web APIs - File API, Intersection Observer, HTML5 Audio
- Web.dev Performance - Infinite scroll optimisation
- Django AJAX Handling - Asynchronous requests
- Google Perspective API - Content moderation integration
- AWS Documentation - S3 storage and Rekognition services
- GitHub Sub-Issues Tutorial - Project management by Kera Cudmore
- djlint Documentation - Django template linting
- PEP 257 - Python documentation standards
- UUIDs vs ULIDs - Identifier strategy decisions
- Python ULID Library - Unique identifier implementation
- Accessibility Guidelines - UX considerations
Daniel Hamilton - Code Institute Mentor
I am deeply grateful for Daniel's exceptional mentorship throughout this project. His industry expertise and willingness to share real-world insights have been invaluable to my development as a developer. Daniel's constructive feedback during our discussions and his demonstration of best practices has significantly accelerated my learning. His guidance on security implementations and production-ready development has shaped not just this project, but my understanding of software development standards. I genuinely learn something new from every conversation with Daniel and strive to emulate the practices he demonstrates.
Marko Tot - Code Institute Cohort Facilitator
Special thanks to Marko for his additional learning support during weekly standups, particularly with Entity Relationship Diagrams and Django framework concepts. His clear explanations and patient guidance helped solidify my understanding of complex database relationships and Django's architecture. Marko's extra support sessions were invaluable in building the foundation that made this project possible.
Code Institute - Fellow Students
Heartfelt appreciation to my fellow students and our weekly standup sessions. The collaborative learning environment, shared challenges, and mutual support have been a constant source of motivation and insight. Whether discussing roadblocks (like my memorable 5-hour rollercoaster journey to get Google OAuth working!), celebrating breakthroughs, or learning from each other's unique problem-solving approaches, these sessions have enriched my learning journey immeasurably. The opportunity to share both struggles and successes with peers who truly understand the challenges has been invaluable.














































