This project is a backend-only REST API built for university coursework. It helps users track job applications, interview stages, notes, and outcomes in a simple and structured way.
The API is designed to be:
- easy to understand for students
- suitable for Swagger UI demonstration
- suitable for a technical report and oral presentation
This system demonstrates core web service concepts required in a typical university module:
- API design with clear endpoints
- SQL database integration
- data validation and serialization
- CRUD operations
- structured testing with pytest
- Create a job application record
- List all application records
- Retrieve one application by ID
- Update an existing application
- Delete an application
- Filter records by status
- Search records by company name or job title
- View summary metrics for application progress
- FastAPI: web framework and automatic API documentation
- SQLite: lightweight relational database for local development
- SQLAlchemy ORM: model and database interaction layer
- Pydantic: request validation and response schemas
- Uvicorn: ASGI server for running FastAPI
- pytest + TestClient: automated endpoint tests
FastAPI was chosen because it is well suited for coursework projects:
- clear, modern Python syntax
- built-in request validation with Pydantic
- automatic Swagger UI generation
- easy mapping between models, schemas, and endpoints
This makes the project straightforward to explain in an oral exam.
SQLite was chosen for simplicity and portability:
- no separate database server is required
- easy setup for local testing and marking
- fully compatible with SQLAlchemy ORM
It is ideal for a student backend API where the focus is API design and data handling.
This coursework project uses a small seed CSV file for local demonstration:
- data/job_applications_seed.csv
The seed file is educational sample data for testing the API flow. For assessed submissions that require public datasets, the same import workflow can be used with a dataset from:
- Kaggle: https://www.kaggle.com/datasets
- data.gov.uk: https://www.data.gov.uk/
- Google Dataset Search: https://datasetsearch.research.google.com/
Always verify dataset license terms and cite the dataset source in your technical report.
Generative AI can support a simple workflow:
- Identify a relevant public dataset.
- Inspect columns and clean fields.
- Map columns to the Application model fields.
- Use the import script to load rows into SQLite.
- Validate imported results via Swagger UI and tests.
webcwk1/
|-- app/
| |-- __init__.py
| |-- main.py
| |-- database.py
| |-- models.py
| |-- schemas.py
| |-- crud.py
| |-- routers/
| |-- __init__.py
| |-- applications.py
|-- tests/
| |-- __init__.py
| |-- test_applications.py
|-- data/
| |-- job_applications_seed.csv
|-- scripts/
| |-- import_applications_csv.py
|-- requirements.txt
|-- README.md
- Clone the repository and open the project folder.
- Create and activate a virtual environment.
- Install dependencies:
pip install -r requirements.txtRun the API server:
uvicorn app.main:app --reloadDefault local URL:
Open interactive API documentation at:
Alternative OpenAPI JSON:
pytest -qThe current PythonAnywhere deployment flow is documented in PYTHONANYWHERE_DEPLOYMENT.md. It uses the experimental pa website create ASGI command that matches the live deployment setup.
The repository includes a professional seed dataset with 50 job application records from leading technology companies (Google, Microsoft, Amazon, Apple, Netflix, Tesla, IBM, Oracle, Spotify, and others).
Run the CSV import script to load the dataset:
python scripts/import_applications_csv.pyOutput:
Imported 49 records from data\job_applications_seed.csv
Dataset Coverage:
- 49 job applications from top global tech companies
- Status distribution: 12 applied, 20 interviewing, 10 offers, 9 rejected, 6 withdrawn
- Interview progression: Records with 0-4 interview rounds
- Realistic scenarios: Phone screens, coding assessments, system design rounds, offers, and rejections
The import script uses the AI-assisted workflow pattern:
- Source identification: Professional dataset covering major tech companies
- Format inspection: CSV with company_name, job_title, application_date, status, interview_round, notes, result
- Schema mapping: Python script maps CSV columns to Application ORM model fields
- Batch import: Database transaction handles all 50 records with validation
- Outcome verification: SQL query confirms all records persisted successfully
Primary API documentation is available in two formats:
- Live Swagger UI:
http://127.0.0.1:8000/docs - OpenAPI JSON:
http://127.0.0.1:8000/openapi.json
For coursework submission, export the API docs to PDF and place the file in this repository. Recommended filename:
API_DOCUMENTATION.pdf
Then add its repository link in your technical report submission section.
- Public GitHub repository with visible commit history
- Runnable source code matching the presented version
- README with setup, run, and docs links
- API documentation file (PDF) referenced from README/report
- Technical report with GenAI declaration
- Presentation slides for oral exam
- Optional deployment URL and demonstration evidence