Course ChatBot
Client
Myself
When
Q2 2026 - Present
Built with
React
TypeScript
Vite
Tailwind CSS
shadcn/ui
TanStack Query
AWS Lambda
API Gateway
DynamoDB
Cognito
CloudFront
AWS CDK
Claude API

A student-facing AI assistant for the courses I teach at Bellevue College. Students sign in with their student ID and ask about assignments, due dates, grading, and course content, and every answer is grounded in the real course documents. Those documents live in a private GitHub repository and are fetched at request time, so the course can change without a redeploy. It is a React single-page app on CloudFront with a serverless AWS backend: Lambda functions behind an HTTP API Gateway, Cognito sign-in with per-course groups, DynamoDB for conversation history and per-student spend quotas, all defined in AWS CDK, and the Anthropic API (Claude Haiku) for the answers.
It first ran in fall 2026. Student feedback from that quarter drove a round of fixes to sign-in, session handling, and the chat layout, and content guardrails keep it from writing code or discussion posts that could be turned in as graded work.
Accomplishments
- Multi-course from day one: one deployment serves several courses, keyed by a course id and enforced by Cognito group membership
- Grounded answers: course content is fetched from a private GitHub repository with a five-minute cache and injected into every prompt, so updating the course needs no code change
- A per-student spend cap tracked atomically in DynamoDB, conversation history that expires at course end, and scheduled deprovisioning of students
- Fully serverless and infrastructure-as-code: Lambda, HTTP API Gateway, Cognito, DynamoDB, S3, CloudFront, EventBridge Scheduler, and CodeBuild in CDK with template assertions, plus unit tests for the frontend and the Lambdas
Still to do
- A refresh-token flow in place of long sessions
- Transactional email through SES instead of the Cognito daily send limit



