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.



