A modern, feature-rich professional networking platform built with Django, WebSockets, and Tailwind CSS.
Connecting professionals, one post at a time.
Features Β· Installation Β· Tech Stack Β· Changelog Β· Roadmap Β· Contributing
LinkUp is a comprehensive professional networking platform designed to connect professionals, facilitate job opportunities, and enable meaningful interactions. Built independently using Python/Django and modern web technologies, it delivers a seamless experience for users to build their professional network β complete with real-time messaging, live notifications, job listings, and rich content creation.
Built using vibe coding β the entire full-stack platform developed independently in Python, Django, Tailwind CSS, JavaScript, and Django Channels.
Founded by: Techhackontime999 Β· amitkumarkh010102006@gmail.com
- Secure registration and login system
- Comprehensive user profiles with avatars
- Work experience and educational background
- Skills and endorsements showcase
- Rich text posts via CKEditor integration
- Image uploads and sharing
- Like, comment, edit, and delete posts
- Real-time feed updates
- Follow/unfollow system
- Connection requests
- User discovery and suggestions
- Public profile pages
- Browse and search job listings with type, workplace & location filters
- Post job openings (recruiters/companies)
- Apply to jobs directly through the platform
- Track and manage applications
- Saved jobs and custom job alerts (instant/daily/weekly)
- Instant WebSocket-powered chat
- Typing indicators and read receipts
- Online/offline user status
- Offline message queuing
- Full conversation history
- Real-time push notifications via WebSocket
- Types: likes, comments, follows, messages, job updates
- Customizable notification preferences
- Notification grouping and badge counts
- Unified search across users, posts, and jobs
- Advanced filters and result highlighting
- Real-time suggestions
- Improved form rendering (v1.2.0)
- Fully responsive, mobile-first design
- Modern glassmorphism-inspired interface (Tailwind CSS)
- Interactive 3D neural-aurora background (Three.js)
- Smooth animations, page loader, and skeleton loading states
- Dark/light theme with system preference detection
- WCAG 2.1 AA accessibility compliant
- CSRF protection on all forms
- XSS prevention with HTML sanitization (Bleach)
- Rate limiting per user/IP
- Secure session management
- File upload validation
- HSTS, X-Frame-Options, Content-Security-Policy headers
| Layer | Technology |
|---|---|
| Backend | Django 5.2.10, Python 3.10+ |
| Database | SQLite (dev) / PostgreSQL (production) |
| Real-time | Django Channels, Redis, WebSockets |
| ASGI Server | Daphne |
| Frontend | Tailwind CSS 4.2, Vanilla JS (ES6+) |
| Rich Text | CKEditor 6.7.3 |
| Icons | Heroicons (SVG) |
| Image Processing | Pillow |
| HTML Sanitization | Bleach |
| File Detection | Python-Magic |
- Python 3.10+
- Redis Server
- Git
# 1. Clone the repository
git clone https://github.com/Techhackontime999/LinkUp.git
cd LinkUp
# 2. Create and activate virtual environment
python3 -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# 3. Install dependencies
pip install -r requirements.txt
# 4. Start Redis (required for real-time features)
sudo systemctl start redis # Linux
# brew services start redis # macOS
# 5. Run database migrations
python3 manage.py makemigrations
python3 manage.py migrate
# 6. Create an admin account
python3 manage.py createsuperuser
# 7. Collect static files
python3 manage.py collectstatic --noinput
# 8. Install and build Tailwind CSS
python3 manage.py tailwind install
python3 manage.py tailwind build
# 9. Start the development server
python3 manage.py runserverOpen http://127.0.0.1:8000 in your browser.
Create a .env file in the project root:
SECRET_KEY=your-secret-key-here
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1
# Database (PostgreSQL for production)
DB_ENGINE=django.db.backends.postgresql
DB_NAME=linkup_db
DB_USER=your_db_user
DB_PASSWORD=your_db_password
DB_HOST=localhost
DB_PORT=5432
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
# Email
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_HOST_USER=your-email@gmail.com
EMAIL_HOST_PASSWORD=your-app-passwordSECRET_KEY=your-secret-key
DEBUG=False
DJANGO_ENVIRONMENT=production
ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com
DATABASE_URL=postgresql://user:pass@host:5432/dbname
REDIS_URL=redis://localhost:6379/0
CSRF_TRUSTED_ORIGINS=https://yourdomain.comLinkUp/
βββ core/ # Security middleware, validators, search views
βββ users/ # Auth, profiles, experience, education
βββ feed/ # Posts, comments, likes
βββ network/ # Follow/connection system
βββ jobs/ # Job listings and applications
βββ messaging/ # WebSocket consumers, real-time chat, notifications
βββ theme/ # Tailwind CSS source
βββ professional_network/ # Django settings, URLs, ASGI/WSGI config
βββ templates/ # Base templates
βββ static/ # CSS, JS, CKEditor assets
βββ media/ # User uploads (avatars, post images)
βββ manage.py
βββ requirements.txt
βββ README.md
# HTTP server
gunicorn professional_network.wsgi:application --config gunicorn.conf.py
# WebSocket server
daphne -b 0.0.0.0 -p 8001 professional_network.asgi:application| Endpoint | Purpose |
|---|---|
/health/ |
Basic health check |
/health/db/ |
Database connectivity |
/health/redis/ |
Redis connectivity |
/readiness/ |
Full readiness check |
- Heroku β one-click deployment with add-ons
- DigitalOcean β App Platform or Droplet
- AWS β Elastic Beanstalk or EC2
- Docker β
docker-compose.ymlincluded
- Set
DEBUG=Falseand a strongSECRET_KEY - Switch to PostgreSQL
- Configure Redis in production
- Run
collectstatic - Set up Nginx reverse proxy + SSL (Let's Encrypt)
- Enable HSTS and all security headers
| Method | Endpoint | Description |
|---|---|---|
POST |
/like/<post_id>/ |
Like / unlike a post |
POST |
/post/<post_id>/comment/ |
Add a comment |
GET |
/post/<post_id>/comments/ |
Fetch all comments |
GET |
/post/<post_id>/edit/ |
Get post data for editing |
POST |
/post/<post_id>/update/ |
Save post edits |
POST |
/post/<post_id>/delete/ |
Delete a post |
| Method | Endpoint | Description |
|---|---|---|
POST |
/follow/<user_id>/ |
Follow / unfollow a user |
// Real-time chat
const chatSocket = new WebSocket('ws://localhost:8000/ws/chat/<username>/');
// Notifications
const notifSocket = new WebSocket('ws://localhost:8000/ws/notifications/');# Run all tests
python3 manage.py test
# Run by app
python3 manage.py test users
python3 manage.py test feed
python3 manage.py test messaging
# With coverage
pip install coverage
coverage run --source='.' manage.py test
coverage report
coverage htmlCross-platform UI/UX Revolution:
- Complete visual redesign β glassmorphism-inspired UI with CSS custom properties
- Interactive 3D neural-aurora background powered by Three.js
- Elegant page loader with animated spinner, gradient text, and smooth content reveal
- Dark/light theme with automatic system preference detection and manual toggle
- Scroll-reveal animations, stagger containers, magnetic buttons, and parallax tilt cards
- Responsive mobile navigation and refined component system
Enhanced Job Management:
- Job type & workplace type filter dropdowns with instant auto-submit
- Fully functional Job Alerts β create, list, activate/deactivate, and delete alerts
JobAlertmodel with keyword, location, type, workplace, and frequency (instant/daily/weekly) settings- Job alert management interface in Django admin
Django 5.2 Compatibility & Stability:
- Upgraded to Django 5.2.10 with cross-platform fixes
- Fixed WhiteNoise middleware duplication in settings
- All migrations consolidated and production-ready
Real-time messaging fix:
Resolved critical WebSocket event handling issues preventing real-time message display in chat. Messages were only appearing after a page refresh.
Root cause: Django Channels WebSocket consumers were missing handlers for several event types β multi_tab_sync, notification_message, user_status, read_receipt_update, and badge_update β causing ValueError: No handler for message type X and connection drops.
Fix: Added all missing event handlers to both ChatConsumer and NotificationsConsumer in linkup/messaging/consumers.py (+60 lines).
Impact:
- Messages now appear instantly for both sender and receiver
- No more WebSocket connection drops
- Cross-tab synchronization, read receipts, and badge updates all functioning correctly
First official release of LinkUp.
Core platform delivered:
- User authentication, profiles, experience, and education
- Rich text post creation with image sharing (CKEditor)
- Like, comment, edit, delete on posts
- Follow/connection system and user discovery
- Job listings and application tracking
- Real-time WebSocket messaging with typing indicators and read receipts
- Live notification system
- Unified search across users, posts, and jobs
- Django admin panel with content moderation
- Full security hardening (CSRF, XSS, rate limiting, HSTS)
- Production-ready deployment (PostgreSQL, Redis, Daphne, Docker, Nginx)
| Version | Status | Features | |---|---|---|---| | v1.0.0 | β Released | Auth, posts, messaging, jobs, notifications, search | | v1.1.0 | β Released | Real-time messaging WebSocket fix | | v1.2.0 | β Released | Job management, enhanced search, admin tools | | v2.0.0 | β Released | UI/UX redesign, 3D background, theme switcher, job alerts & filters, Django 5.2 | | v2.1.0 | π΅ Planned | Video posts, Stories, advanced analytics | | v3.0.0 | π΅ Planned | Groups, events, premium subscriptions, company pages, learning platform |
Contributions are welcome!
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature - Commit using conventional format:
feat: add user profile editing - Push and open a Pull Request
Commit types: feat Β· fix Β· docs Β· style Β· refactor Β· test Β· chore
Areas to contribute: bug fixes, new features, documentation, UI/UX, performance, security, tests, translations.
Redis connection error
redis-cli ping # Should return PONG
sudo systemctl start redisStatic files not loading
python3 manage.py collectstatic --noinputWebSocket not connecting β verify Redis is running and CHANNEL_LAYERS is configured in settings.py.
Rate limit exceeded (429)
python3 clear_rate_limit.pyMIT License β see LICENSE for details.
- Bug reports: GitHub Issues
- Discussions: GitHub Discussions
- Email: amitkumarkh010102006@gmail.com