A community-driven platform to discover internships, certification courses, workshops,
hackathons, and more — beautifully organized and effortlessly accessible.
Navigate the Documentation
| Feature | Description |
|---|---|
| 🎯 | Public Listings — Browse internships, workshops, certification courses, hackathons, roadmaps, and external resources |
| 👨💼 | Admin Dashboard — Add, edit, delete content, and promote items as ads |
| 🔒 | User Authentication — Register, log in, and manage sessions with secure password hashing |
| 📸 | Image Uploads — Seamless integration with Cloudinary for storing and serving images |
| 📊 | Ad Tracking — Impression and click tracking endpoints for analytics |
| 🔍 | Search & Pagination — Global search across collections and paginated listings |
| ⚡ | Optimized Performance — Rate limiting, caching, and response compression out of the box |
graph LR
A[Python 3.10+] --> B[Flask Framework]
B --> C[PyMongo]
C --> D[MongoDB Atlas]
B --> E[Cloudinary]
B --> F[Flask Extensions]
F --> G[CORS]
F --> H[Limiter]
F --> I[Caching]
F --> J[Compress]
B --> K[HTML/CSS/JS]
style A fill:#3776AB,color:#fff
style B fill:#000000,color:#fff
style D fill:#47A248,color:#fff
style E fill:#3448C5,color:#fff
| Category | Technologies |
|---|---|
| Backend | Python 3.10+, Flask, PyMongo |
| Database | MongoDB (Atlas or self-hosted) |
| Image Storage | Cloudinary |
| Extensions | Flask-CORS, Flask-Limiter, Flask-Caching, Flask-Compress |
| Frontend | HTML5, CSS3, JavaScript (vanilla – easily upgradable to modern frameworks) |
| Deployment | Render (example), Gunicorn + Nginx recommended for production |
| Requirement | Version/Details |
|---|---|
| 🐍 Python | 3.10 or higher |
| 🗄️ MongoDB | Local or Atlas instance |
| ☁️ Cloudinary | Free tier account |
| 🔧 Git | Latest version |
All Python dependencies are listed in requirements.txt
Follow these steps to get started
git clone https://github.com/Adinath-Jagtap/Internships-Certifications-Website.git
cd Internships-Certifications-Website# Linux/macOS
python -m venv .venv
source .venv/bin/activate
# Windows
python -m venv .venv
.venv\Scripts\activatepip install -r requirements.txtCreate a .env file in the project root (see Environment Variables)
python app.py🎉 Visit http://localhost:5000 in your browser
⚠️ Create a.envfile with the following variables. Never commit this file!
| Variable | Description | Example |
|---|---|---|
SECRET_KEY |
Flask session secret (required in production) | your-strong-secret-key |
MONGO_URI |
MongoDB connection string | mongodb+srv://user:pass@cluster0.mongodb.net/community_platform |
CLOUDINARY_CLOUD_NAME |
Cloudinary cloud name | your_cloud_name |
CLOUDINARY_API_KEY |
Cloudinary API key | your_api_key |
CLOUDINARY_API_SECRET |
Cloudinary API secret | your_api_secret |
ADMIN_USERNAME |
Admin dashboard username (change default!) | admin (default) |
ADMIN_PASSWORD |
Admin dashboard password (change default!) | admin123 (default) |
PORT |
Port for the Flask server (default: 5000) | 5000 |
Database Name: community_platform
| Collection | Purpose |
|---|---|
users |
User authentication data |
jobs_internships |
Job and internship listings |
workshops |
Workshop information |
courses |
Certification courses |
hackathons |
Hackathon events |
roadmaps |
Learning roadmaps |
websites |
External resources |
advertisements |
Ad content |
ad_clicks |
Ad analytics |
💡 Indexes (unique email, text indexes, timestamp indexes) are automatically created on startup by
app.pyto optimize search and performance.
| Endpoint | Method | Description |
|---|---|---|
/ |
GET |
Homepage |
/jobs |
GET |
Paginated jobs/internships |
/workshops |
GET |
Workshops listing |
/courses |
GET |
Courses listing |
/hackathons |
GET |
Hackathons listing |
/roadmaps |
GET |
Roadmaps listing |
/websites |
GET |
External resources listing |
/api/get-ads |
GET |
Retrieve active ads (randomized) |
/ad/impression/<ad_id> |
POST |
Record an ad impression |
/ad/click/<ad_id> |
POST |
Record an ad click (saves to ad_clicks) |
/api/search?q=<term> |
GET |
Global search across all collections |
/login, /register, /logout |
* |
Session‑based authentication endpoints |
⚠️ All routes and their exact behavior are defined inapp.py— always check there for the latest implementations.
Production Deployment Guidelines
- ✅ Use a managed MongoDB like MongoDB Atlas for production
- ✅ Set all required environment variables in your hosting provider (Render, Heroku, etc.)
- ✅ The app expects a
PORTenvironment variable on most PaaS platforms ⚠️ Do not useapp.run()in production — deploy with a production WSGI server like Gunicorn behind a reverse proxy (Nginx)
Example Gunicorn command:
gunicorn -w 4 -b 0.0.0.0:$PORT app:app| Priority | Action Item |
|---|---|
| 🔴 | Change default admin credentials (ADMIN_USERNAME / ADMIN_PASSWORD) |
| 🔴 | Use a strong SECRET_KEY (generate with os.urandom(24)) |
| 🟠 | Enable HTTPS and set secure cookie flags (SESSION_COOKIE_SECURE=True, SESSION_COOKIE_HTTPONLY=True) |
| 🟠 | Create a MongoDB user with least‑privilege permissions (read/write only to required collections) |
| 🟡 | Validate and sanitize all user inputs (forms, file uploads) |
| 🟡 | Limit file upload sizes and verify images before sending to Cloudinary |
| 🟢 | Monitor rate‑limiting (configured via Flask-Limiter) and set up alerts for suspicious activity |
| 🟢 | Keep dependencies updated — regularly run pip-audit or similar tools |
Transform this project into a truly modern, eye‑catching platform
- CSS Framework — Replace vanilla CSS with Tailwind CSS or Bootstrap 5 for a sleek, responsive design
- Component‑based UI — Introduce a lightweight frontend framework like Alpine.js or Vue.js for dynamic components (search, modals, infinite scroll)
- Animations — Add subtle scroll animations using AOS (Animate on Scroll) or GSAP
- Dark Mode — Implement a theme toggle with CSS variables
- Icons — Use Font Awesome or Heroicons for consistent, modern icons
- API Blueprint — Refactor
app.pyinto Flask Blueprints for better maintainability - Caching — Implement Redis for session storage and advanced caching (beyond Flask-Caching's simple cache)
- Search — Replace basic text search with Elasticsearch or MongoDB Atlas Search for better relevance
- File Uploads — Add image preview and cropping before upload
- Testing — Add unit and integration tests (pytest) and run them via GitHub Actions
- Containerization — Provide a
Dockerfileanddocker-compose.ymlfor easy local development and deployment - Monitoring — Integrate an error tracker like Sentry and performance monitoring with New Relic
- Email Notifications — Notify users about new opportunities matching their interests
- Social Login — Allow sign‑in with Google/GitHub for smoother onboarding
- Bookmarking — Let users save their favorite listings
- Comments/Ratings — Enable community feedback on opportunities
We welcome contributions! Here's how you can help:
graph LR
A[1. Fork Repository] --> B[2. Create Feature Branch]
B --> C[3. Commit Changes]
C --> D[4. Push to Branch]
D --> E[5. Open Pull Request]
style A fill:#3776AB,color:#fff
style E fill:#47A248,color:#fff
Guidelines:
- 🍴 Fork the repository
- 🌿 Create a feature branch:
git checkout -b feat/your-feature - 💬 Commit your changes with clear messages
- 🚀 Push to your branch and open a Pull Request
Please ensure your code follows existing style conventions and includes appropriate comments. For major changes, open an issue first to discuss what you'd like to change.