Unified platform for exploring and managing CLEP college credit data with a single Django backend and React frontend.
- 🎓 Students browse CLEP exam credit policies by institution.
- 🛠️ Admins securely manage schools, exams, and policies directly in MongoDB via token-protected endpoints.
- 🔗 Unified architecture: all REST endpoints under
/api/, served by one Django project.
| Layer | Technology | Purpose |
|---|---|---|
| Backend | Django 5.x | REST API, auth, MongoDB integration |
| Frontend | React (Vite + TypeScript) | CLEP explorer UI |
| CLEP data store | MongoDB Atlas | Schools, exams, policies |
| Auth/session store | SQLite | Django auth & sessions |
| Configuration | .env |
Secrets and environment variables |
Team-18/
├── backend/
│ ├── manage.py
│ ├── core/ # Django project settings, URLs, Mongo connection
│ ├── clep_backend/ # Public CLEP endpoints
│ ├── admin_backend/ # Token-protected admin endpoints
│ ├── utils/ # Helper scripts (Mongo check, admin workflow)
│ ├── data.csv # CLEP seed data for import script
│ ├── requirements.txt
│ └── .env
├── frontend/ # React + Vite application
├── venv/ # Python virtual environment (ignored)
└── README.md
cd backend
python3 -m venv ../venv # skip if venv already exists
source ../venv/bin/activate
pip install -r requirements.txt
cp env.example .env # update with your Mongo URI and credentials
python manage.py migrate
python manage.py createsuperuser # creates staff account for /api/login/
python manage.py runserver # http://127.0.0.1:8000/cd frontend
npm install
npm run dev # http://localhost:5173/All endpoints are namespaced under http://127.0.0.1:8000/api/.
| Endpoint | Method | Description |
|---|---|---|
/ping/ |
GET | Health check – validates Django + MongoDB connectivity |
/schools/ |
GET | List schools with CLEP policy data (filters supported) |
/schools/{id}/ |
GET | Retrieve a single school by Mongo _id |
/exams/ |
GET | List CLEP exams stored in MongoDB |
/exams/{id}/ |
GET | Retrieve a single exam by Mongo _id |
/login/ |
POST | Admin login – returns auth token |
/get/ |
GET | Admin: read collections (collection, optional id) |
/insert/ |
POST | Admin: insert document (collection, data) |
/update/ |
POST | Admin: update document (collection, id, data) |
/delete/ |
DELETE | Admin: delete document (collection, id) |
Combine any of the following query parameters:
state– two-letter state codezip_code– postal codeexam_name– matches embedded CLEP policyexamfieldmin_cut_score– filters policies withcut_score >= value
Example:
curl "http://127.0.0.1:8000/api/schools/?state=FL&exam_name=College Algebra&min_cut_score=55"| Script | Location | Description |
|---|---|---|
test_mongodb_connection.py |
backend/utils/ |
Quick MongoDB connectivity test |
quick_edit_test.py |
backend/utils/ |
Demonstrates admin login and CRUD workflow |
Run helper scripts with the virtualenv active:
cd backend
source ../venv/bin/activate
python utils/quick_edit_test.py.envcontains sensitive values (Mongo URI, admin credentials). Never commit actual secrets.CORS_ALLOW_ALL_ORIGINS = Truesimplifies local dev; tighten allowed origins in production.- MongoDB stores CLEP data; SQLite only backs Django authentication and sessions.
- Both APIs now share
/api/, ensuring consistent integration with the frontend.
AI tooling was used as a learning and productivity aid to:
- Explore best practices for Django ↔︎ MongoDB integration.
- Iterate on API design and data flows quickly.
- Improve code readability, structure, and documentation.
Team-18 — OSU Code for Good Columbus 2025
- Shayan Manoharan – The Ohio State University
- Rishi Movva – University of Delaware
- Chase McCluskey – Ohio Northern University
- Mohamed Jirac – The Ohio State University
- Heidy Naranjo – Brandeis University
- Nihar Xavier – University of Maryland
- Spencer Smith – University of Michigan
The code ("Code") in this repository was created solely by the student teams during a coding competition hosted by JPMorgan Chase Bank, N.A. ("JPMC"). JPMC did not create or contribute to the development of the Code. This Code is provided AS IS and JPMC makes no warranty of any kind, express or implied, as to the Code, including but not limited to, merchantability, satisfactory quality, non-infringement, title or fitness for a particular purpose or use.