
SmartHub Academy
Founder & AI/Platform Engineer
About the Project
SmartHub Academy is a learning platform I built from scratch and continue to operate, serving 500+ graduates. It runs as a set of services rather than a single app: a Node/Express API on MongoDB, three Next.js surfaces (public site, student LMS, operations admin), and a separate Python FastAPI worker service that owns every AI and automation task that must run outside the request cycle. The centrepiece is Oreo — an agentic assistant that answers questions for admins, instructors, students, and anonymous visitors, each from a different tool catalogue.
Key Highlights
- Built Oreo, a tool-calling agent with four audience-scoped catalogues — 24 admin tools plus separate student, instructor, and public toolsets — running a bounded pick-and-execute loop that returns an answer, its supporting data, and an audit trail of which tools ran
- Made the security boundary structural: the caller's identity comes from a verified signed subject token and is injected server-side, so the model supplies arguments but can never supply an identity — a student physically cannot reach another student's records
- Built RAG site search as a crawl → embed → index → retrieve pipeline, with batched OpenAI embeddings to keep round-trips down during a full re-crawl
- Shipped an automated recording pipeline: watch Google Drive, match a recording to its class, transcribe it, label the topic with an LLM, then rename, move, and notify — plus meeting-minutes and attendance extraction
- Added token-level cost governance — per-admin monthly caps with usage visibility, and a separate global daily ceiling on the unauthenticated public widget
Technical Challenges
The decision I think about most is where the two budget paths disagree. Authenticated usage fails open: a monitoring blip shouldn't lock an admin out of a tool they're paying for. The public widget fails closed, because there is no user to key a bucket on, nothing stops one script from looking like a thousand visitors, and the failure mode is an uncapped LLM endpoint exposed to the internet. A budget we can't read is treated as a budget already spent. The other lesson was in error text: when the agent called a tool that hadn't shipped yet, a bare "unknown tool" made it apologise to the visitor. The errors are now written to steer the model — they name what is available and tell it to call one of those instead.