Inspiration
We're engineering students at the American University of Sharjah. Every semester, we live through the same ritual: racing to build a schedule during registration, cross-referencing prerequisites across PDF catalogs, checking section times on Banner, and hoping our advisor — shared among 375 other students — has time to confirm we're not making a mistake that delays graduation.
At AUS, 6,200+ students share fewer than 17 full-time advisors. That's a 375:1 student-to-advisor ratio. During peak registration, the system buckles — courses fill up before students can verify prerequisites, time conflicts go unnoticed until it's too late, and graduation timelines slip by a semester or more. Globally, delayed graduation costs students an estimated $29.2 billion per year.
We didn't set out to build a chatbot. We set out to fix a process we've personally suffered through — and to prove that a self-improving AI agent could do it better than any static tool.
What it does
AskAtlas is an AI academic advisor that generates, evaluates, and iteratively improves student course schedules using real university data.
A student tells Atlas what courses they need, along with any personal constraints — "no 8 AMs," "Fridays off," "I have an internship on Thursday afternoons." The agent then:
- Generates a full semester schedule by querying live course data — 1,768 actual AUS Banner sections, 16 degree plans, and complete prerequisite chains with AND/OR dependency logic.
- Evaluates the schedule against hard constraints (time conflicts, prerequisite violations, corequisite mismatches) and soft preferences (preferred time slots, workload balance).
- Improves by feeding the evaluation back into itself and re-planning — repeating the loop until it reaches zero conflicts.
The self-improvement is measurable: across iterations, conflicts drop — 4 → 2 → 0 — and judges can watch it happen in real time. Each cycle isn't just a retry; the agent learns from its own mistakes within the session, adjusting section selections, swapping alternatives, and reprioritizing constraints based on what failed in the previous attempt.
Beyond scheduling, AskAtlas tracks degree progress, flags prerequisite gaps, and gives students a clear path to graduation — all through a conversational chat interface.
How we built it
Data pipeline first. Before writing a single line of agent logic, we needed real data. We built a Playwright-based scraper (dana.py) that connects to AUS's Banner system and extracts live course listings — every section, time slot, instructor, location, and seat count for Spring 2026. We then parsed 16 degree plan PDFs and the full course requirements catalog, handling AND/OR prerequisite logic, corequisite relationships, and attribute requirements.
All of this feeds into a SQLite database (askatlas.db) built by build_db.py, with normalized tables for courses, sections (with days/times/CRNs), prerequisites, corequisites, attributes, and degree plans. The database holds 1,768 live sections across all colleges.
The agent layer runs on AWS Bedrock through a FastAPI backend. The LLM agent is equipped with 12 tool functions — it can query available sections for a course, check prerequisites, look up degree plan requirements, detect time overlaps, verify corequisites, and more. The agent doesn't just generate text; it calls tools, reasons about the results, builds a schedule, evaluates it against constraints, and loops until the output is clean.
The self-improvement loop is the core architecture:
- Iteration 1: The agent builds an initial schedule. The evaluator flags conflicts (e.g., three courses all scheduled at TR 9:30).
- Iteration 2: The agent receives the conflict report, swaps sections, and tries alternative time slots. Conflicts drop.
- Iteration 3: Remaining edge cases (a lab corequisite that only runs at one time, a preference violation) are resolved. Zero conflicts.
Each iteration carries forward the full context of what was tried and what failed — the agent doesn't start from scratch, it builds on its own history.
The frontend is built with React + Vite + Tailwind CSS, featuring a dark-themed UI with four main views: an overview dashboard (credits, GPA, degree progress), an advisor chat with rich message types (schedule cards, calendar grids, course comparisons), a Schedule Studio for comparing AI-generated plan options, and a Degree Plan Studio showing multi-semester graduation paths.
Tech stack summary: React + Vite (frontend) → FastAPI (API gateway) → AWS Bedrock (LLM agent) → SQLite (AUS data) — with 12 custom tool functions bridging the agent to the database.
Challenges we ran into
Getting real data was harder than building the agent. AUS's Banner system isn't designed for programmatic access. We had to build a semi-automated scraper with Playwright that navigates Banner's multi-step interface, waits for dynamic page loads, and parses inconsistently formatted HTML tables. Some sections had missing time data, others had non-standard day codes. Cleaning and normalizing 1,768 sections across multiple colleges took significant effort.
Prerequisite logic is surprisingly complex. It's not just "take A before B." AUS prerequisites involve AND/OR trees — for example, a course might require (CMP 220 AND CMP 232) OR (COE 202). Parsing this from catalog text and representing it as a queryable graph required a custom parser and careful data modeling.
Connecting the frontend to the live agent was a late-stage challenge. The chat UI was built early with keyword-matched mock responses, and rewiring it to handle real asynchronous agent responses — including streaming, multi-step tool calls, and the iteration loop — required rethinking the message flow.
Balancing hard and soft constraints in the improvement loop was tricky. A schedule with zero time conflicts isn't useful if every class is at 8 AM and the student asked for mornings off. We had to design the evaluation to weigh constraint types differently and give the agent clear signals about which violations to prioritize.
Accomplishments that we're proud of
It works on real data. This isn't a demo on synthetic courses. AskAtlas queries 1,768 actual AUS Banner sections, real prerequisite chains, and real degree plans. The conflicts it finds and resolves are genuine scheduling problems that AUS students face every semester.
The self-improvement is measurable and visible. We can show a conflict count dropping across iterations — 4 → 2 → 0 — in real time. It's not a vague claim about "learning"; it's a concrete, observable metric that improves with each cycle.
Zero competitors in the MENA region. We researched every major player — EAB Navigate, Advisor.AI, Mainstay, Ocelot, DegreeWorks. None of them combine schedule optimization, conflict detection, prerequisite intelligence, and self-improving AI. And none of them operate in the GCC.
We're AUS students solving an AUS problem. We've personally experienced every pain point this system addresses. That domain knowledge shaped every design decision — from which constraints matter most to how the chat should feel during a stressful registration period.
What we learned
Self-improvement needs structure, not just prompting. Early on, we tried simply telling the agent to "try again and do better." It didn't work — the agent would make the same mistakes or introduce new ones. The breakthrough was building a formal evaluation step that produces a structured conflict report, which the agent then uses as explicit input for the next iteration. The loop only works when the feedback is specific and actionable.
Tool design matters as much as the model. The quality of the agent's output is directly tied to how well its tools are designed. A tool that returns too much data overwhelms the context; one that returns too little forces the agent to guess. We iterated heavily on the 12 tool functions — what they accept, what they return, and how they're described to the agent — and each improvement made the schedules noticeably better.
Real data exposes real edge cases. Synthetic data would have let us demo a clean loop every time. Real Banner data threw curveballs: sections with TBA times, courses with no available sections, labs that only meet once a week at a single time slot. These edge cases forced us to build a more robust system — and that robustness is what makes AskAtlas actually useful.
What's next for AskAtlas
AskAtlas today is a schedule advisor. The vision is a student lifecycle companion — from the moment a student applies to university, through graduation, and into their career.
Near-term: Pilot deployment at AUS, connecting to Banner's live API for real-time seat availability and waitlist monitoring. We also plan to add an early warning system that detects at-risk students based on GPA trends and course load patterns, flagging issues before they become critical.
Mid-term: Expand to additional UAE universities — AUD, Khalifa University, UAEU, Zayed University. The agent logic is university-agnostic; only the data layer (Banner scrape + degree plans) needs to be swapped. We're also building out career guidance features that leverage a student's academic history, grades, and extracurriculars to map potential post-graduation paths.
Long-term: Pre-university major exploration for incoming applicants, scholarship and financial aid matching, internship scheduling integration for engineering co-ops, and alumni mentorship matching — connecting current students with graduates who walked similar academic paths.
The 375:1 ratio isn't just an AUS problem. With 57,000+ new university students entering the UAE system annually, and advising infrastructure that hasn't scaled to match, AskAtlas is built for a market that's only getting bigger.
Built With
- amazon-web-services
- aws-bedrock
- boto3
- eslint
- fastapi
- gemma-3-27b
- gpt-5.2
- npm
- openai-api
- postcss
- pydantic
- python
- react-18
- sql
- sqlite
- tailwind-css
- typescript
- uvicorn
- vite
Log in or sign up for Devpost to join the conversation.