An Instagram-inspired social media web application built with Django. Share photos, follow people, discover content through hashtags, and engage with a community.
- About
- Features
- Tech Stack
- Screenshots
- Getting Started
- Project Structure
- Roadmap
- Contributing
- License
- Author
Socipoki is a full-stack social media web application that replicates the core experience of photo-sharing platforms. Users can create accounts, upload posts with images, follow each other, interact through likes/saves/comments, and discover new content through hashtags and an algorithm-ranked explore page.
This project is built with Django and is intended as both a functional MVP and a learning resource for developers interested in social media application architecture.
Note: This repository is being prepared for public release. Some sections — such as screenshots, deployment guides, and final environment variable documentation — may need project-specific updates before your first public launch.
- Register, log in, and log out
- Edit profile (name, username, email, bio, website URL)
- Upload and auto-resize profile avatar (200×200 px)
- Change password securely
- Follow / unfollow other users
- Follow request system with accept/decline flow
- View followers and following lists per profile
- Create posts with image uploads
- Automatic multi-resolution image generation (1500×, 500×, 250×, original)
- Unique permalink per post via hashed ID
- Like and save posts
- View liked and saved posts per profile
- Comment on posts
- Nested replies (sub-comments)
- Delete your own comments
- Home feed of posts from followed users
- Explore page with weighted ranking (likes × 0.5 + saves × 0.8 + tag count × 0.2)
- Hashtag extraction from post descriptions
- Tag detail pages listing all tagged posts
- Search across users, posts, and tags
| Layer | Technology |
|---|---|
| Language | Python 3.12 |
| Framework | Django 4.1 |
| Frontend | Django Templates, HTML5, Custom CSS |
| Image Processing | Pillow |
| URL slugs | unicode-slugify |
| Static Files | WhiteNoise |
| WSGI Server | Gunicorn |
| Database (dev) | SQLite |
| Database (prod) | PostgreSQL (via DATABASE_URL) |
| Deployment | Heroku |
| Env Config | python-dotenv |
| Login | Home Feed |
|---|---|
![]() |
![]() |
| User Profile | Post Detail with Comments |
|---|---|
![]() |
![]() |
| Explore |
|---|
![]() |
- Python 3.10+
- pip
- Git
- (Optional) A virtual environment tool such as
venvorconda
# 1. Clone the repository
git clone https://github.com/ofcskn/SocialMediaApp.git
cd SocialMediaApp
# 2. Create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate # macOS / Linux
# .venv\Scripts\activate # Windows
# 3. Install dependencies
pip install -r requirements.txt
# 4. Copy the example environment file and fill in your values
cp .env.example .envCreate a .env file in the project root (copy .env.example as a starting point):
| Variable | Description | Default |
|---|---|---|
SECRET_KEY |
Django secret key (generate a new one for production) | — |
DEBUG |
Enable debug mode (True / False) |
False |
ALLOWED_HOSTS |
Comma-separated list of allowed hostnames | 127.0.0.1,localhost |
DATABASE_URL |
PostgreSQL connection string (optional; SQLite used if absent) | — |
Security: Never commit your
.envfile. It is listed in.gitignore.
To generate a new SECRET_KEY:
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"# Apply database migrations
python manage.py migrate
# (Optional) Create an admin superuser
python manage.py createsuperuser
# Start the development server
python manage.py runserverThe app will be available at http://127.0.0.1:8000.
Production only: Run
python manage.py collectstatic --noinputbefore deploying. Static files are served automatically by Django in development (DEBUG=True).
Visit http://127.0.0.1:8000/admin and log in with your superuser credentials.
SocialMediaApp/
├── account/ # User authentication, profiles, follow system
│ ├── models.py # User, UserFollower
│ ├── views.py
│ └── forms.py
├── post/ # Posts, likes, saves, comments
│ ├── models.py # Post, PostAction, PostComment
│ ├── views.py
│ └── forms.py
├── comment/ # Comment creation and deletion
├── tag/ # Hashtag extraction and tag pages
│ └── models.py # Tag
├── core/ # Home feed, explore, search
│ └── views.py
├── layouts/ # Base HTML templates and shared partials
├── static/ # CSS, images, static assets
├── media/ # User-uploaded files (excluded from git)
├── social_media_basic/ # Django project config (settings, urls, wsgi)
│ ├── settings.py
│ └── urls.py
├── requirements.txt
├── Procfile # Heroku deployment
├── manage.py
└── .env.example
The items below represent planned or in-progress features. Contributions are welcome on any open item.
| Feature | Status |
|---|---|
| User profiles with followers/following | Done |
| Post image upload with multi-resolution output | Done |
| Post likes and saves | Done |
| Hashtag system | Done |
| Explore page with engagement ranking | Done |
| Nested comment replies | Done |
| Follow request / accept flow | Done |
| Search (users, posts, tags) | Done |
| Post delete and edit | Planned |
| Email confirmation on signup | Planned |
| Explore page AI recommendations | Planned |
| Stories | Planned |
Tagging users in posts (@mention) |
Planned |
| Infinite scroll / pagination | Planned |
| Follower notifications | Planned |
| Password reset via email link | Planned |
| Multiple image uploads per post | Planned |
| Private accounts | Planned |
| Post image crop on upload | Planned |
| Comment likes and deep replies | Planned |
See roadmap.txt for the full tracking list including known bugs.
Contributions of all kinds are welcome — bug fixes, features, documentation, and design improvements.
Please read CONTRIBUTING.md before submitting a pull request.
Quick summary:
- Fork the repository
- Create a feature branch:
git checkout -b feat/your-feature - Commit your changes:
git commit -m "feat: add your feature" - Push and open a Pull Request against
master
Distributed under the MIT License. See LICENSE for details.
Ömer Faruk Coşkun
- GitHub: @ofcskn
- Email: omer@chainabit.com
Built with Django. Made open-source to help developers learn and build on top of social media patterns.




