📰 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

LanguagePython 3.13
FrameworkDjango 6
APIDjango REST Framework 3.17
AuthJWT (djangorestframework-simplejwt) — access + refresh, token blacklist
API docsdrf-spectacular (Swagger / OpenAPI)
DatabasePostgreSQL (psycopg 3)
Task queueCelery 5 + Redis
WSGIGunicorn
Static filesWhiteNoise (compressed manifest)
Media storagedjango-storages + boto3 (S3 / Cloudflare R2)
Rich textdjango-ckeditor-5 + Bleach sanitization
OtherPillow, python-decouple, django-cors-headers, django-filter

🎨 Frontend Stack

FrameworkNext.js 16 (App Router, Turbopack)
UIReact 19 + TypeScript 5
StylingTailwind CSS 4
AnimationFramer Motion
IconsLucide React
Date (Bengali)date-bengali-revised
LintESLint 9

☁️ Deployment & Infrastructure

HostingRailway — newsBackend (backend/), newsFrontend (frontend/), news_db (PostgreSQL)
Custom domainprbpost.com → frontend service
ContainersDocker — backend/Dockerfile, frontend/Dockerfile, docker-compose.yml
CI/CDGitHub Actions — Black, isort, Flake8, pytest (backend); ESLint, Next.js build (frontend)
DatabasePostgreSQL 18 (production on Railway; SQLite fallback for local dev)
Media CDNCloudflare 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.