A full-stack web application for managing marketing campaigns.
Feel free to create an account with any email for testing purposes.
- 🔒 User Authentication - JWT-based user authentication
- ✏️ Campaign Management - Full CRUD operations capabilities for campaigns
- 📊 Campaign Dashboard - View campaigns with search and filtering
- Framework: Django 5.2+ with Django REST Framework
- Language: Python 3.12+
- Database: PostgreSQL 16+ (Production) / SQLite (Development)
- Authentication: JWT (JSON Web Tokens)
- API: RESTful API with DRF
- Testing: pytest + pytest-django
- Framework: Next.js 15.3+ (React 19.0+)
- Language: TypeScript
- Styling: Tailwind CSS + shadcn/ui components
- State Management: React Context
- Forms: react-hook-form with Zod validation
- HTTP Client: Axios
- Testing: Jest + Playwright (E2E)
- Package Manager: npm
- Containerization: Docker + Docker Compose
- CI/CD: GitHub Actions
- Cloud Platform: Render (Backend + Database) + Vercel (Frontend)
- Node.js 22+
- Python 3.12+
- Clone the repository
git clone https://github.com/QianqianQ/campaign-management-app.git cd campaign-management-app
- Set up the backend
cd server python -m venv venv source venv/bin/activate pip install -r requirements.txt pip install -r requirements-dev.txt python manage.py migrate python manage.py runserver
- Set up the frontend
cd client npm install npm run dev
- Access the application
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
-
Clone the repository
git clone https://github.com/QianqianQ/campaign-management-app.git cd campaign-management-app
-
Run the application
docker compose -f docker-compose.dev.yml -p campaign-dev up --build
-
Access the application
- Frontend: http://localhost or http://localhost:3000 (with hot-reloading)
- Backend API: http://localhost:8000 (with hot-reloading)
- Dockerized database: http://localhost:5432
NOTE: docker-compose.yml
is configured for a production-like environment, where:
- local files are not mounted to the container, so changes to the code will not be reflected in the container
- The frontend is pre-built into static files (no hot-reloading)
- An external database (PostgreSQL) is used
cd server
pytest # Run all tests
pytest --cov # with coverage report
pytest -v # verbose output
cd client
npm run test # Unit tests with Jest
npm run test:e2e # E2E tests with Playwright
POST /api/signup/
- User registrationPOST /api/signin/
- User authenticationGET /api/profile/
- Get user profile
GET /api/campaigns/
- List all campaignsPOST /api/campaigns/
- Create new campaignGET /api/campaigns/{id}/
- Get campaign detailsPUT /api/campaigns/{id}/
- Update campaignPATCH /api/campaigns/{id}/
- Partial updateDELETE /api/campaigns/{id}/
- Delete campaign
- Migrate JWT token storage to httpOnly cookies
- Implement JWT refresh token strategy
- Redis caching implementation
- CDN setup for static assets
- Pagination and virtual scrolling for large lists