A deployment-ready full-stack AI application for explainable customer-support triage. It routes requests into billing, account, technical, or feedback queues; estimates urgency and sentiment; redacts common personal data; and exposes the strongest model signals instead of returning a black-box label.
Many AI portfolio projects stop at a notebook. SignalDesk demonstrates the complete delivery path: a trained text model, typed API, batch endpoint, responsive frontend, automated tests, Docker images, CI, and cloud deployment manifests.
- Multinomial Naive Bayes classifier trained at startup on bundled examples
- Category confidence normalized from log probabilities
- Transparent token-level evidence for each prediction
- Urgency and sentiment signals with deterministic, testable rules
- Email and payment-number redaction before display
- Single and batch inference endpoints
- Interactive React dashboard with example tickets and responsive design
- FastAPI OpenAPI docs at
/docs - Docker Compose for a two-service local environment
- Render backend blueprint and Vercel frontend configuration
React/Vite browser
|
| POST /api/v1/analyze
v
FastAPI + Pydantic
|
+--> PII redaction
+--> local Naive Bayes classifier
+--> urgency/sentiment signals
`--> typed explanation response
The model is deliberately local and inspectable—no API key, remote inference, or hidden cost. This keeps the demo reproducible while showing the same service boundaries used with a larger hosted model.
ai-app-deployed-fastapi-react/
|-- backend/app/ # API, schemas, and inference service
|-- tests/ # API and model tests
|-- frontend/src/ # React dashboard
|-- assets/ # architecture and portfolio visuals
|-- docs/ # API, architecture, deployment
|-- .github/workflows/ # backend and frontend CI
|-- docker-compose.yml
`-- render.yaml
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install -r backend/requirements-dev.txt
uvicorn app.main:app --app-dir backend --reloadOpen http://localhost:8000/docs for interactive API documentation.
cd frontend
Copy-Item .env.example .env
npm install
npm run devOpen http://localhost:5173.
docker compose up --buildThe frontend is served at http://localhost:5173 and the API at http://localhost:8000.
curl -X POST http://localhost:8000/api/v1/analyze \
-H "Content-Type: application/json" \
-d '{"text":"Urgent: production dashboard crashes and every user is blocked"}'{
"category": "technical",
"confidence": 0.91,
"urgency": "high",
"sentiment": "negative",
"redacted_text": "Urgent: production dashboard crashes and every user is blocked",
"signals": [{"token": "crashes", "strength": 0.84}],
"model_version": "local-nb-1.0"
}Exact probabilities depend on the bundled training vocabulary. See the complete API contract.
python -m pytest tests -q
ruff check backend
cd frontend
npm ci
npm run buildCI runs all four checks on every push and pull request.
render.yamldefines the FastAPI web service.frontend/vercel.jsondefines the Vite build and SPA routing.- Set
VITE_API_URLin Vercel to the deployed Render API URL. - Update
ALLOWED_ORIGINSin Render to the frontend origin.
The repository is deployment-ready but does not claim a live production URL until those account-specific resources are provisioned. Follow deployment.md.
This compact model is a portfolio demonstration, not a production decision system. Its bundled dataset is intentionally small, confidence is not calibrated on real support traffic, and urgency rules need organization-specific validation. Human review should remain in the loop for high-impact routing.
- Replace bundled samples with a versioned, anonymized dataset
- Add calibrated confidence and out-of-distribution detection
- Persist review corrections for supervised retraining
- Add authentication, queue integrations, and audit logging
- Add Playwright end-to-end coverage after deployment
Mayank Singh — aspiring AI Engineer building practical, tested AI products end to end.
- GitHub: @mayanksingh-GIT-CODER
- Email: mayanksingh.mie@gmail.com