A next-gen portfolio platform built with Django, MySQL, APIs, and creativity — to showcase projects, skills, experiences, and more in an interactive and intelligent way.
🌍 Live Demo: https://roshandamor.me | 📖 Setup Guide: SETUP.md
DevMitra is not just a portfolio — it’s a personal platform.
It goes beyond static resumes by offering dynamic features like blogs, projects, music playlists, AI chatbot, achievements, resources, and even collaboration tools.
This project reflects my journey, creativity, and technical growth.
I built DevMitra to document my work, share my learnings, and provide visitors with an interactive experience instead of just static information.
- 🖥 Responsive UI — Fully mobile-friendly, smooth animations, optimized CSS architecture
- 📂 Projects & Experience — Detail pages with filtering, sorting, and pagination
- ✍️ Blog System — Dedicated blog app with commenting, categories, and rich content
- 🎵 Music Integration — Spotify API integration with playlist management
- 🏆 Skills & Achievements — Interactive showcase with detailed skill pages
- 📚 Resources Hub — Personal resources and downloadable materials (roshan app)
- 🤖 AI Assistant — Gemini API powered chatbot for portfolio queries
- ✉️ Smart Notifications — Email system with contact forms and confirmations
- 📄 Resume Features — PDF preview and video resume integration
- 🔒 Authentication System — Complete user management with secure login/signup
- 🎨 Centralized CSS — Consolidated animations, components, and responsive design
- ✅ ToDo App (integrated mini-app).
- ✅ Project Manager & Blog Manager (admin tools).
- 🌍 Dedicated Blog Website with preferences, social login, AI suggestions.
- 🛠 Custom Admin Dashboard to manage projects, blogs, resources, and notifications.
- 🔗 REST API Integration across apps (portfolio + blog + community).
- 💬 Real-time Collaboration (WebSockets for Code Together).
- 🎮 Gamified Blogs — Reader badges & engagement tracking.
- 👥 User Profiles — Social login, preferences, and personalization.
- ⚡ DevOps Ready — Dockerization, CI/CD, and scalable deployment.
portfolio-v2.0/
├── 📁 Root Files & Configuration
│ ├── manage.py # Django management script
│ ├── requirements.txt # Python dependencies
│ ├── db.sqlite3 # SQLite database (auto-generated)
│ ├── .env # Environment variables (create this)
│ ├── .gitignore # Git ignore rules
│ ├── README.md # Project documentation
│ ├── SETUP.md # Detailed setup guide
│ ├── CONTRIBUTING.md # Contribution guidelines
│ ├── CODE_QUALITY.md # Code standards & best practices
│ ├── SECURITY.md # Security policy & vulnerability reporting
│ ├── deploye_key # SSH deploy key (if needed)
│ └── deploye_key.pub # SSH public key (if needed)
│
├── 📁 Django Apps
│ ├── config/ # Main Django project settings
│ │ ├── __init__.py
│ │ ├── settings.py # Django configuration
│ │ ├── urls.py # URL routing
│ │ ├── wsgi.py # WSGI application
│ │ └── asgi.py # ASGI application (async support)
│ │
│ ├── portfolio/ # Main portfolio application
│ │ ├── models.py # Database models (Projects, Skills, etc.)
│ │ ├── views.py # View logic
│ │ ├── urls.py # URL patterns
│ │ ├── admin.py # Django admin configuration
│ │ ├── forms.py # Django forms
│ │ ├── context_processors.py # Context processors
│ │ ├── sitemaps.py # SEO sitemaps
│ │ ├── migrations/ # Database migrations
│ │ └── templatetags/ # Custom template tags
│ │
│ ├── blog/ # Blog system
│ │ ├── models.py # Blog models (Post, Comment, Category)
│ │ ├── views.py # Blog views
│ │ ├── urls.py # Blog URL patterns
│ │ ├── admin.py # Blog admin interface
│ │ ├── sitemaps.py # Blog SEO
│ │ └── migrations/ # Blog database migrations
│ │
│ ├── ai/ # AI Assistant (Gemini API)
│ │ ├── models.py # AI conversation models
│ │ ├── views.py # AI API endpoints
│ │ ├── llm_utils.py # AI utility functions
│ │ ├── utils.py # Helper functions
│ │ ├── urls.py # AI URL patterns
│ │ └── templates/ai/ # AI chat templates
│ │
│ ├── music/ # Spotify Integration
│ │ ├── models.py # Music models (Playlist, Track)
│ │ ├── views.py # Music views
│ │ ├── spotify_service.py # Spotify API service
│ │ ├── urls.py # Music URL patterns
│ │ ├── static/ # Music app static files
│ │ └── templates/music/ # Music templates
│ │
│ ├── auth_app/ # Authentication System
│ │ ├── models.py # User models (if extended)
│ │ ├── views.py # Auth views (login, signup, etc.)
│ │ ├── urls.py # Auth URL patterns
│ │ └── migrations/ # Auth migrations
│ │
│ ├── notifications/ # Email & Notification System
│ │ ├── models.py # Notification models
│ │ ├── views.py # Notification views
│ │ ├── services.py # Email services
│ │ ├── signals.py # Django signals
│ │ └── migrations/ # Notification migrations
│ │
│ └── roshan/ # Personal Resources App
│ ├── models.py # Resource models
│ ├── views.py # Resource views
│ ├── forms.py # Resource forms
│ ├── urls.py # Resource URL patterns
│ ├── templates/ # Resource templates
│ └── migrations/ # Resource migrations
│
├── 📁 Testing Infrastructure
│ ├── tests/ # Test utilities and factories
│ │ ├── __init__.py
│ │ ├── factories.py # Factory Boy test data generators
│ │ └── utils.py # Test utilities and base classes
│ │
│ ├── requirements-test.txt # Testing dependencies
│ ├── pytest.ini # Pytest configuration
│ ├── config/test_settings.py # Test-specific Django settings
│ └── TESTING.md # Comprehensive testing documentation
│
├── 📁 Frontend Assets
│ ├── static/ # Static files (served in production)
│ │ ├── css/ # Compiled CSS files
│ │ ├── js/ # JavaScript files
│ │ └── images/ # Static images
│ │
│ ├── templates/ # HTML Templates
│ │ ├── base.html # Base template
│ │ ├── home.html # Homepage
│ │ ├── aboutme.html # About page
│ │ ├── projects.html # Projects listing
│ │ ├── project-dtl.html # Project detail
│ │ ├── blogs.html # Blog listing
│ │ ├── blog-dtl.html # Blog detail
│ │ ├── experience.html # Experience page
│ │ ├── experience-dtl.html # Experience detail
│ │ ├── achievements.html # Achievements page
│ │ ├── resources.html # Resources page
│ │ ├── resource-detail.html # Resource detail
│ │ ├── skill-dtl.html # Skill detail
│ │ ├── robots.txt # SEO robots file
│ │ ├── auth_app/ # Auth templates
│ │ ├── emails/ # Email templates
│ │ └── legal/ # Legal pages (privacy, terms)
│ │
│ └── media/ # User uploaded files (auto-generated)
│ ├── achievements/ # Achievement images
│ ├── avatars/ # User avatars
│ ├── blog_covers/ # Blog cover images
│ ├── project_covers/ # Project cover images
│ ├── project_images/ # Project gallery images
│ ├── resume/ # Resume files (PDF, etc.)
│ └── tech_icons/ # Technology icons
│
├── 📁 Development & Documentation
│ ├── screenshots/ # Project screenshots for README
│ ├── logs/ # Application logs (auto-generated)
│ └── .vscode/ # VS Code settings (optional)
│
└── 📁 Deployment & CI/CD
└── .github/ # GitHub workflows (if using GitHub Actions)
⚠️ Important: Follow these steps carefully to avoid common setup issues like "logs folder not found" and other errors.
For complete setup details with API configurations, see: SETUP.md
# Clone the project
git clone https://github.com/logicbyroshan/portfolio-v2.0.git
cd portfolio-v2.0
# Verify you're in the right directory
ls # Should show manage.py, requirements.txt, etc.# Create missing directories that might cause errors
mkdir logs # For application logs
mkdir media # For uploaded files (if not exists)
mkdir static # For static files (if not exists)
# Create media subdirectories (Windows)
mkdir media\achievements, media\avatars, media\blog_covers, media\project_covers, media\project_images, media\resume, media\tech_icons
# Create media subdirectories (macOS/Linux)
mkdir -p media/{achievements,avatars,blog_covers,project_covers,project_images,resume,tech_icons}# Create virtual environment
python -m venv venv
# Activate virtual environment
# Windows (PowerShell)
venv\Scripts\Activate.ps1
# Windows (Command Prompt)
venv\Scripts\activate.bat
# macOS/Linux
source venv/bin/activate
# Verify activation (should show (venv) in prompt)
which python # Should point to venv/Scripts/python or venv/bin/python# Upgrade pip first
python -m pip install --upgrade pip
# Install requirements
pip install -r requirements.txt
# Verify installation
pip list # Should show Django, etc.Create a .env file in the root directory:
# Create .env file
# Windows
echo. > .env
# macOS/Linux
touch .envAdd this content to .env:
# Django Settings
SECRET_KEY=django-insecure-your-very-long-secret-key-here-make-it-at-least-50-characters-long
DEBUG=True
ALLOWED_HOSTS=127.0.0.1,localhost
# Database (SQLite is default, no setup needed)
# For MySQL: DATABASE_URL=mysql://username:password@localhost:3306/portfolio_db
# Email Configuration (for contact forms)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_HOST_USER=your_email@gmail.com
EMAIL_HOST_PASSWORD=your_app_password
# Optional API Keys (leave blank if not using)
SPOTIPY_CLIENT_ID=your_spotify_client_id
SPOTIPY_CLIENT_SECRET=your_spotify_client_secret
GEMINI_API_KEY=your_gemini_api_key
# Redis (Optional - for caching)
REDIS_URL=redis://localhost:6379/0# Create initial migrations (if needed)
python manage.py makemigrations
# Apply migrations
python manage.py migrate
# Create superuser (optional - for admin access)
python manage.py createsuperuser# Collect static files
python manage.py collectstatic --noinput# Run development server
python manage.py runserver
# Or specify port
python manage.py runserver 8000🌐 Access the website at: http://127.0.0.1:8000/
# ✅ Solution: Create the logs directory
mkdir logs# ✅ Solution: Make sure you're in the project root directory
pwd # Should show .../portfolio-v2.0
ls # Should show manage.py# ✅ Solution: Enable script execution in PowerShell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Then activate venv
venv\Scripts\Activate.ps1# ✅ Solution: Use a different port
python manage.py runserver 8001
# Or find and kill the process using port 8000
# Windows
netstat -ano | findstr :8000
taskkill /PID <PID_NUMBER> /F
# macOS/Linux
lsof -ti:8000 | xargs kill -9# ✅ Solution: Generate Gmail App Password
# 1. Enable 2-Factor Authentication on Gmail
# 2. Go to Google Account Settings → Security → App Passwords
# 3. Generate password for "Mail"
# 4. Use this password in EMAIL_HOST_PASSWORD (not your regular password)# ✅ Solution: Collect static files again
python manage.py collectstatic --clear --noinput
# Ensure DEBUG=True in .env for developmentFor experienced developers:
Windows:
git clone https://github.com/logicbyroshan/portfolio-v2.0.git; cd portfolio-v2.0; mkdir logs, media, static; python -m venv venv; venv\Scripts\Activate.ps1; pip install -r requirements.txt; python manage.py migrate; python manage.py runservermacOS/Linux:
git clone https://github.com/logicbyroshan/portfolio-v2.0.git && cd portfolio-v2.0 && mkdir -p logs media static media/{achievements,avatars,blog_covers,project_covers,project_images,resume,tech_icons} && python -m venv venv && source venv/bin/activate && pip install -r requirements.txt && python manage.py migrate && python manage.py runserverAfter setup, you should be able to:
- Access the homepage at http://127.0.0.1:8000/
- Navigate through different sections (Projects, Blog, Experience, etc.)
- Access admin panel at http://127.0.0.1:8000/admin/ (if superuser created)
- See no error messages in terminal
- View static files loading correctly (CSS, images, icons)
- Check Python Version:
python --version(should be 3.11+) - Check Virtual Environment: Your prompt should show
(venv) - Check Dependencies:
pip listshould show Django and other packages - Create an Issue: If problems persist, create a GitHub issue with error details
| Technology | Purpose |
|---|---|
| Python 3.11+ | Programming language |
| Django 5.2.5 | Backend framework |
| MySQL / SQLite | Database |
| HTML5, CSS3, JS | Frontend |
| Redis | Caching & async tasks |
| Spotipy | Spotify API integration |
| Google Gemini API | AI chatbot |
| Django AllAuth | Authentication & social login |
| TinyMCE | Rich text editor |
| Whitenoise & Gunicorn | Deployment |
From requirements.txt:
Django==5.2.5django-allauth==65.4.0django-cors-headers==4.8.0django-tinymce==4.1.0mysqlclient==2.2.7/PyMySQL==1.1.2redis==6.4.0spotipy==2.25.1google-generativeai==0.8.5google-ai-generativelanguage==0.6.15gunicorn==23.0.0whitenoise==6.10.0python-dotenv==1.1.1pillow==11.3.0
(Full list available in requirements.txt.)
- Render / Railway — Easy cloud deployment.
- Dockerized Setup — Coming soon.
- Custom VPS with Nginx + Gunicorn + SSL.
- ✅ CSS Architecture Overhaul — Consolidated 300+ lines of duplicate CSS into centralized components
- ✅ Responsive Optimization — Enhanced mobile experience with better spacing and typography
- ✅ Blog System — Completely separated blog functionality into dedicated Django app
- ✅ Animation System — Unified data-animation system across all pages
- ✅ Component Consolidation — Breadcrumbs, page headers, and grid layouts centralized in base.css
- ✅ Performance Boost — Reduced CSS bloat and improved maintainability
We welcome contributions from developers of all skill levels! Whether you're fixing bugs, adding features, improving documentation, or enhancing security, your contributions make this project better.
Before contributing, please read our comprehensive guides:
- Contributing Guidelines - Complete guide to contributing
- Code Quality Standards - Coding standards and best practices
- Security Policy - Security guidelines and vulnerability reporting
- Setup Guide - Local development setup instructions
- Fork & Clone: Fork the repository and clone your fork
- Setup Environment: Follow the SETUP.md guide
- Choose an Issue: Browse open issues or create a new one
- Follow Standards: Adhere to our code quality guidelines
- Submit PR: Create a pull request following our contributing guidelines
- 🐛 Bug fixes and performance improvements
- 📱 Mobile responsiveness enhancements
- ♿ Accessibility improvements
- 🧪 Test coverage expansion
- 📖 Documentation updates
- 🔒 Security enhancements
- 🎨 UI/UX improvements
Look for issues labeled good first issue - these are perfect for newcomers and first-time contributors.
This project includes comprehensive testing to ensure reliability and deployment readiness.
# Install testing dependencies
pip install -r requirements-test.txt
# Run all tests
pytest
# Run tests with coverage
pytest --cov=.
# Run specific test categories
pytest -m models # Model tests only
pytest -m views # View tests only
pytest -m security # Security tests onlyOur test suite covers:
- ✅ Models - Data validation and relationships (95% coverage target)
- ✅ Views - HTTP responses and templates (85% coverage target)
- ✅ Forms - Data validation and processing (90% coverage target)
- ✅ APIs - External integrations (Spotify, Gemini AI) (85% coverage target)
- ✅ Security - Authentication and data protection (95% coverage target)
- ✅ Performance - Load handling and optimization (70% coverage target)
- ✅ Integration - Cross-app functionality (75% coverage target)
For detailed testing information, see TESTING.md:
- Test structure and organization
- Running different test types
- Writing new tests
- Coverage reports and CI/CD integration
- Performance testing and benchmarks
- Troubleshooting common issues
Security is a top priority for this project. Please read our Security Policy for:
- Supported versions
- How to report vulnerabilities
- Security best practices
- Incident response procedures
Found a security issue? Please report it responsibly by emailing security@roshandamor.me
This project is licensed under the MIT License — see the LICENSE file for details.
💡 Tip: Always keep your live demo link updated in this README to impress recruiters and collaborators instantly.



