📰 PRB Post — AI-Powered Modern News & Media Platform
Developed a production-grade Bengali news and media platform using a monorepo architecture (Django 6 REST API + Next.js 16 frontend). Implemented JWT authentication, role-based CMS permissions, versioned REST APIs with OpenAPI documentation, and a reverse-proxy admin panel served from a single custom domain. Deployed backend, frontend, and PostgreSQL on Railway with Docker; media assets stored on Cloudflare R2/S3 via django-storages. Set up GitHub Actions for automated linting, testing, and build verification.
- 📋 Type: Full-stack Bengali news portal + CMS
- 🌍 Live URL: prbpost.com
- 📁 Structure: Monorepo —
backend/(Django API) +frontend/(Next.js) - 🚀 Deployment: Railway (backend, frontend, PostgreSQL) + custom domain + Cloudflare R2 media
✨ Key Features
- Bengali news portal — Homepage, categories, tags, search, video, and author pages.
- Custom CMS — Article/video publishing, SEO tags, featured and breaking news.
- Role-based access — Admin, Editor, Reporter, Member, and Reader roles.
- JWT authentication — Register, login, profile API with access + refresh tokens and blacklist.
- Admin proxy architecture — Single-domain CMS via Next.js reverse proxy (
/admin/*,/static/*,/media/*). - API versioning —
/api/v1/with Swagger / OpenAPI docs. - Cloud media storage — Thumbnails and videos on S3 / Cloudflare R2.
- Performance optimization — Server-side paginated tag picker for large tag lists; S3 timeout tuning.
🏗️ Architecture
Request flow — Browser → prbpost.com (Next.js on Railway) → public pages fetch REST API (/api/v1/); admin and media routes proxied to Django backend → Gunicorn → PostgreSQL + S3/R2 + Redis/Celery (background jobs).
Backend pattern — views → services (write) / selectors (read) → PostgreSQL across 18 domain modules: accounts, content, articles, categories, tags, comments, videos, advertisements, sync, media, subscriptions, search, notifications, analytics, ai, live, podcasts, and recommendations.
🛠️ Backend Stack
| Language | Python 3.13 |
|---|---|
| Framework | Django 6 |
| API | Django REST Framework 3.17 |
| Auth | JWT (djangorestframework-simplejwt) — access + refresh, token blacklist |
| API docs | drf-spectacular (Swagger / OpenAPI) |
| Database | PostgreSQL (psycopg 3) |
| Task queue | Celery 5 + Redis |
| WSGI | Gunicorn |
| Static files | WhiteNoise (compressed manifest) |
| Media storage | django-storages + boto3 (S3 / Cloudflare R2) |
| Rich text | django-ckeditor-5 + Bleach sanitization |
| Other | Pillow, python-decouple, django-cors-headers, django-filter |
🎨 Frontend Stack
| Framework | Next.js 16 (App Router, Turbopack) |
|---|---|
| UI | React 19 + TypeScript 5 |
| Styling | Tailwind CSS 4 |
| Animation | Framer Motion |
| Icons | Lucide React |
| Date (Bengali) | date-bengali-revised |
| Lint | ESLint 9 |
☁️ Deployment & Infrastructure
| Hosting | Railway — newsBackend (backend/), newsFrontend (frontend/), news_db (PostgreSQL) |
|---|---|
| Custom domain | prbpost.com → frontend service |
| Containers | Docker — backend/Dockerfile, frontend/Dockerfile, docker-compose.yml |
| CI/CD | GitHub Actions — Black, isort, Flake8, pytest (backend); ESLint, Next.js build (frontend) |
| Database | PostgreSQL 18 (production on Railway; SQLite fallback for local dev) |
| Media CDN | Cloudflare R2 / S3 via django-storages |
🔧 Dev Tools
Version Control
- Git, GitHub
Quality
- Black, isort, Flake8
- pytest, pre-commit
- ESLint 9
Local Dev
- Docker Compose
- Python venv, npm
- Swagger UI (/api/docs/)
PRB Post — Full-stack Bengali news platform built with Django 6, DRF, PostgreSQL, and Next.js 16. Deployed on Railway with custom domain prbpost.com. Features JWT auth, role-based CMS, REST API (/api/v1/), admin proxy architecture, S3/R2 media storage, and GitHub Actions CI. Monorepo with Docker support.