This repository hosts the boilerplate for the Submission Tracker assignment. It includes a Django + Django REST Framework backend and a Next.js frontend scaffold so candidates can focus on API design, relational data modelling, and product-focused UI work.
Operations managers need a workspace to review broker-submitted opportunities. Build a lightweight tool that lets them browse incoming submissions, filter by business context, and inspect full details per record. Deliver a polished frontend experience backed by clean APIs.
- Backend: Model the domain, expose list and detail endpoints, and support realistic filtering.
- Frontend (higher weight): Craft an intuitive list and detail experience with filters that map to query parameters. Focus on UX clarity, organization, and maintainability.
Required entities (already defined in submissions/models.py):
Broker: name, contact emailCompany: legal name, industry, headquarters cityTeamMember: internal owner for a submissionSubmission: links to company, broker, owner with status, priority, and summaryContact: primary contacts for a submissionDocument: references to supporting filesNote: threaded context for collaboration
Seed data (~25 submissions with dozens of related contacts, documents, and notes) is available via
python manage.py seed_submissions. Re-run with --force to rebuild the dataset.
GET /api/submissions/- Returns paginated submissions with company, broker, owner, counts of related documents/notes, and the latest note preview.
- Supports filters via query params.
statusis wired up; extend filters forbrokerIdandcompanySearch(plus optional extras likecreatedFrom,createdTo,hasDocuments,hasNotes).
GET /api/submissions/<id>/- Returns the full submission plus related contacts, documents, and notes.
GET /api/brokers/- Returns brokers for the frontend dropdown.
Viewsets, serializers, and base filters are in place but intentionally minimal so you can refine the query behavior and filtering logic.
The Next.js 16 + React 19 app in frontend/ is pre-wired for this challenge. Material UI handles
layout, axios powers HTTP requests, and @tanstack/react-query is ready for data fetching. The list
and detail routes under /submissions are scaffolded so you can focus on API consumption and UX
polish.
- Global providers supply Material UI theming and a shared React Query client.
/submissionshosts the list view with filter inputs and hints about required query params./submissions/[id]hosts the detail shell and links back to the list.- Custom hooks in
lib/hooksdefine how to fetch submissions and brokers. Each hook is disabled by default (enabled: false) so no network requests fire until you enable them.
- Wire the filter state to query parameters and React Query
queryFns. - Render table/card layouts for the submission list along with loading, empty, and error states.
- Build the detail page sections for summary data, contacts, documents, and notes.
- Enable the queries and handle pagination or other UX you want to highlight.
backend/: Django project with REST API, seed command, and submission models.frontend/: Next.js app described above.INTERVIEWER_NOTES.md: Context for reviewers/interviewers.
- Frontend requests default to
http://localhost:8000/api. Override this by creatingfrontend/.env.localand settingNEXT_PUBLIC_API_BASE_URL.
cd backend
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py seed_submissions # optional but recommended
# add --force to rebuild the generated sample data
python manage.py runserver 0.0.0.0:8000cd frontend
npm install
cp .env.example .env.local # create if you want a custom API base
# NEXT_PUBLIC_API_BASE_URL defaults to http://localhost:8000/api
npm run devVisit http://localhost:3000/submissions to start building.
- Start the Django server on port 8000 (
python manage.py runserver). - Start the Next.js dev server on port 3000 (
npm run dev). - Iterate on backend filters, serializers, and viewsets, then refresh the frontend to see updated data.
- When ready, add README notes summarizing your approach, tradeoffs, and any stretch goals.
- Provide a short README update summarizing approach, tradeoffs, and how to run the solution.
- Record and share a brief screen capture (max 2 minutes) demonstrating the frontend working end-to-end with the backend.
- Call out any stretch goals implemented.
- Automated tests are optional, but including targeted backend or frontend tests is a strong signal.
- Frontend (45%) – UX clarity, filter UX tied to query params, state/data management, handling of loading/empty/error cases, and overall polish.
- Backend (30%) – API design, serialization choices, filtering implementation, and attention to relational data handling.
- Code Quality (15%) – Structure, naming, documentation/readability, testing where it adds value.
- Product Thinking (10%) – Workflow clarity, assumptions noted, and thoughtful UX details.
Authentication, deployment, or extra tooling are not required but welcome if scope allows.