Ping-Post is a micro (temporary) blogging app where users can share short messages ("pings") along with pictures, similar to Twitter or Instagram Threads.
- Clone the repo:
git clone https://github.com/codebysnorlax/Django-PingPost.git - cd into the project:
cd Django-PingPost - python -m venv .venv
- source .venv/bin/activate (Linux/Mac) or .venv\Scripts\activate (Windows)
- pip install -r requirements.txt
- python manage.py migrate
- python manage.py runserver
PingPost is designed to make posting quick thoughts easy and distraction-free. Users can write short text updates (up to 250 characters), add a photo, and view all posts in a clean timeline. Each user manages their own posts—create, edit, or delete—while the public timeline shows everyone’s updates in reverse order. With Django handling authentication, CSRF protection, and password validation, the app stays secure and reliable. The interface is built with Bootstrap 5, keeping the design responsive and minimal. Overall, PingPost focuses on clarity, usability, and solid Django fundamentals without unnecessary complexity.
- Create short text posts (+ optional photo)
- Public timeline of all posts
- Login & registration with secure password rules
- Edit & delete only your posts
- Here’s how the code is organized:
- PingPost/manage.py → Django entry point
- PingPost/PingPost/ → Project settings & main URLs
- PingPost/tweet/ → Core app (models, forms, views, templates)
- PingPost/templates/ → Shared layouts + auth pages
- PingPost/static/ → CSS + JS files
- PingPost/media/ → Uploaded photos (dev only)
The goal was clarity over complexity. Everything revolves around one model: Tweet.
Django handles authentication, sessions, and CSRF protection out of the box
Ownership checks make sure only the author can edit/delete their posts
Bootstrap handles responsiveness with almost no extra CSS
SQLite is the default database so you can run it right away. Later, it could be upgraded with profiles, likes, comments, or even a REST API.
Video Demo:
graph TD
A[User/Browser] --> B[Project urls.py]
B --> C[home view]
B --> D[tweet/urls.py]
B --> L[accounts/ auth urls]
D --> E[tweet/views.py]
E --> F[Templates HTML]
E --> G[Forms]
G --> H[Tweet model]
G --> K[Auth User]
H --> I[SQLite]
K --> I
H --> J[media/photos]
L --> F
L --> K
Simple flow (fallback):
User → urls.py → tweet/urls.py → views → templates/forms → Tweet model → SQLite + media/photos
Note
Some docs are generated by AI, some of the CSS is AI-generated, and a bit comes from third-party sources. But not all of it — I’ve also written some myself. Honestly, dealing with CSS can get really frustrating. For backend logic, I’ve learned from Hitesh Choudhary on his channel Chai aur Code.