On this page:
1 Overview
1.1 What counts as an acceptable project
1.2 What is not sufficient
2 Learning Objectives
3 Team Requirements
4 Timeline and Milestones
4.1 M2 — Vertical prototype (October 29)
4.2 M3 — Feature complete (November 19)
4.3 Final (December 1)
5 What Counts as an AI Project?
6 Suggested Final Project Ideas
6.1 How to use this list
6.2 The scope test
6.3 The ideas
6.3.1 AI Software Engineering Assistant
6.3.2 AI Incident Response Center
6.3.3 AI Data Analyst
6.3.4 Natural Language → SQL, Focused on Safety
6.3.5 Knowledge Navigator (Courses, Degrees, Policies)
6.3.6 AI Code Tutor and Debugging Coach
6.3.7 AI Debugging Assistant with a Fix Loop
6.3.8 AI Research Assistant with Citation Verification
6.3.9 AI Security Auditor
6.3.10 AI Meeting Intelligence with Persistent Memory
6.3.11 AI Support Platform That Knows When Not to Answer
6.3.12 Personal Finance Intelligence
6.3.13 AI Test Generation and Test-Quality Analyzer
6.3.14 Constraint-Aware Planner (Events, Itineraries, Scheduling)
6.4 Ideas that need work before they qualify
6.5 Choosing
6.6 Before you commit
7 Project Requirements
7.1 Frontend
7.2 Backend
7.3 Database
7.4 AI /   LLM
7.5 Agents and Tools
7.6 AI Reliability — “What happens when the AI is wrong?”
7.7 Evaluation
7.8 Testing
7.9 Security
7.10 Architecture
7.11 Docker
7.12 CI/  CD
7.13 Deployment
8 Project Proposal
8.1 Audience
8.2 Required contents
9 Git and Git  Lab Requirements
10 Documentation
11 AI Usage Policy
12 Final Deliverables
13 Final Presentation and Demo
14 Grading Rubric
15 What Makes a Project Ambitious?
16 FAQ
9.1

Final Project🔗

    1 Overview

    2 Learning Objectives

    3 Team Requirements

    4 Timeline and Milestones

    5 What Counts as an AI Project?

    6 Suggested Final Project Ideas

    7 Project Requirements

    8 Project Proposal

    9 Git and GitLab Requirements

    10 Documentation

    11 AI Usage Policy

    12 Final Deliverables

    13 Final Presentation and Demo

    14 Grading Rubric

    15 What Makes a Project Ambitious?

    16 FAQ

1 Overview🔗

The final project is a team-based software engineering project in which you will design, implement, test, secure, and deploy an AI-powered application. Over roughly nine weeks you will take a system from a written proposal to a running, publicly reachable deployment, and then defend it in a live demo.

The project should demonstrate that you can integrate LLMs and AI agents into a substantial software system—not that you can build a chatbot or call an LLM API.

The goal is not to build the most sophisticated AI model. The goal is to engineer a reliable software system that uses AI effectively.

Everything this course has covered—RAG, tool calling, agentic workflows, MCP, full-stack development, databases, testing, security, Git/GitLab, Docker, and CI/CD—exists in this project for a reason. You are being graded on engineering, not on how impressive your idea sounds.

1.1 What counts as an acceptable project🔗

  • AI is one component of a larger software system that also has a real frontend, backend, database, and deployment story.

  • The AI does something the rest of your system can act on: retrieve, plan, call tools, produce structured output.

  • Your system can tell when the AI is wrong, and does something about it.

  • You can show, with numbers, that it works.

1.2 What is not sufficient🔗

  • A prompt box that forwards text to an LLM and prints the reply.

  • A RAG chatbot over a folder of PDFs, with nothing built on top of the answers.

  • A project where the “database” is a JSON file.

  • A project that only runs on your laptop.

  • A polished UI wrapped around an AI component that was never evaluated.

2 Learning Objectives🔗

By the end of this project you should be able to:

  • Design a nontrivial software system and justify its architecture.

  • Build and deploy a full-stack application.

  • Design and use a relational database.

  • Integrate LLM APIs into application code.

  • Implement RAG and/or tool calling.

  • Build an agentic workflow that plans, acts, and verifies.

  • Evaluate AI-generated results quantitatively.

  • Write automated tests at the unit, API, and behavioral level.

  • Identify and mitigate security threats, including prompt injection.

  • Containerize and deploy an application with CI/CD.

  • Use Git/GitLab as a collaborating team, not as a backup drive.

  • Document architectural and engineering decisions for another engineer.

3 Team Requirements🔗

  • Teams of 2 students are recommended.

  • Teams of 3 are allowed only for projects that are genuinely large and challenging, and only with instructor approval at the proposal stage. A 3-person team is held to a visibly larger scope than a 2-person team.

  • Solo projects are not the default. Talk to the instructor before assuming one.

Every student must have identifiable ownership of part of the system. A typical split:

Student

Primary responsibility

A

Frontend + UX

B

Backend + database

C

AI/agent + evaluation

These roles are a starting point, not a wall. The actual requirement is:

Every student must contribute substantial code and participate in design, testing, and documentation.

Your Git history must show that participation. Commit count alone is not the measure—a hundred one-line commits is not contribution, and one well-structured merge request can be. Each student also submits an individual contribution statement with the final deliverables.

4 Timeline and Milestones🔗

Milestone

What is due

Date

M1 — Proposal

Finalized written proposal, approved by the instructor

Thursday, October 1, 2026

M2 — Vertical prototype

End-to-end system running, however thin

Thursday, October 29, 2026

M3 — Feature complete

Core functionality done; testing/evaluation/security underway

Thursday, November 19, 2026

Final submission

Deployed system, repository, documentation, evaluation, report

Tuesday, December 1, 2026

Demo

Live presentation to the class

Final week — schedule announced in class

Your proposal must be finalized before October 1, which means drafts and revisions happen during the last week of September. Start early; a proposal that arrives on October 1 with no prior discussion will usually need changes.

4.1 M2 — Vertical prototype (October 29)🔗

By this date the system must already work end-to-end:

UI -> Backend -> Database -> AI -> Response

Functionality can be very limited. A single page, a single endpoint, a single table, and one real LLM call is enough—as long as a request genuinely travels the whole path.

This milestone exists to stop teams from spending a month building infrastructure with nothing running. If you are still “setting things up” on October 15, you are behind.

4.2 M3 — Feature complete (November 19)🔗

Core functionality is done. The remaining three weeks go to:

  • testing

  • AI evaluation

  • security analysis and mitigation

  • reliability and error handling

  • UI polish

  • deployment

4.3 Final (December 1)🔗

Deployed system, GitLab repository, documentation, evaluation results, final report, and demo materials. Note that Thanksgiving break falls in the week before the deadline (November 25–29)do not plan to do real work that week.

Milestone policy: M1–M3 are required and graded satisfactory/unsatisfactory. Each missed or unsatisfactory milestone costs 5 points from your final project grade. They exist so you get feedback while feedback is still useful.

5 What Counts as an AI Project?🔗

The distinction that matters:

AI is part of a software system, not the entire software system.

Too simple

Good project

Chatbot that answers questions about a PDF

AI incident-response system that investigates logs, Git history, and deployment data and produces a verified diagnosis

RAG chatbot over a collection of PDFs

Research assistant that retrieves papers, compares claims, and verifies citations against the source text

Upload a CSV, ask ChatGPT questions about it

AI data analyst that generates SQL, executes it, validates the results, and produces visualizations

“Summarize my meeting notes”

Meeting system that extracts decisions and action items, stores them, and creates tracked tasks you can query months later

See Suggested Final Project Ideas for worked examples. You are not restricted to that list—original ideas are encouraged, and the list is there to calibrate scope and ambition.

6 Suggested Final Project Ideas🔗

    6.1 How to use this list

    6.2 The scope test

    6.3 The ideas

      6.3.1 AI Software Engineering Assistant

      6.3.2 AI Incident Response Center

      6.3.3 AI Data Analyst

      6.3.4 Natural Language → SQL, Focused on Safety

      6.3.5 Knowledge Navigator (Courses, Degrees, Policies)

      6.3.6 AI Code Tutor and Debugging Coach

      6.3.7 AI Debugging Assistant with a Fix Loop

      6.3.8 AI Research Assistant with Citation Verification

      6.3.9 AI Security Auditor

      6.3.10 AI Meeting Intelligence with Persistent Memory

      6.3.11 AI Support Platform That Knows When Not to Answer

      6.3.12 Personal Finance Intelligence

      6.3.13 AI Test Generation and Test-Quality Analyzer

      6.3.14 Constraint-Aware Planner (Events, Itineraries, Scheduling)

    6.4 Ideas that need work before they qualify

    6.5 Choosing

    6.6 Before you commit

Fall 2026 · Companion to Final Project

6.1 How to use this list🔗

These are starting points, not assignments. You may pick one, modify one, combine two, or propose something entirely your own. Original ideas are encouraged—the list exists mainly to calibrate what “ambitious enough” looks like for a 2–3 person team with nine weeks.

Every idea below is written in the same shape, matching what your proposal has to contain:

  • Conceptwhat it does

  • Featureswhat users can do

  • Toolscandidate tools for your agent (you need at least 3 meaningful ones)

  • Reliabilitywhat happens when the AI is wrong

  • Evaluationsomething you can measure

  • Difficulty / fithonest assessment for a 9-week term

  • Watch out forthe thing that usually goes wrong

Read Project Requirements before you choose. Then read What Makes a Project Ambitious?and check your idea against those five dimensions before you write a proposal.

6.2 The scope test🔗

Nearly every project in this course fails or succeeds on one distinction:

AI is part of a software system, not the entire software system.

Too simple

Substantial

Chatbot that answers questions about a PDF

System that retrieves, cross-checks, verifies citations, and flags conflicting sources

Upload a CSV, ask ChatGPT about it

Agent that inspects the schema, writes SQL, executes it, validates the numbers, and charts them

“Review my code with AI”

Reviewer that runs static analysis and an LLM, compares them, and verifies its own findings

“Summarize my meetings”

System that extracts decisions and owners, stores them, tracks them across months, and answers questions with evidence

Trip-planning chatbot

Planner that builds an itinerary satisfying real constraints—hours, distance, budget—and re-plans only what changed

If a wrong answer from your model produces no visible consequence anywhere in your system, your idea is on the left side of that table.

6.3 The ideas🔗

6.3.1 AI Software Engineering Assistant🔗

Concept. Connect a GitLab repository and let an agent continuously analyze the project: answer questions about the code, explain architecture, review merge requests, find missing test coverage, summarize commit ranges, and open issues for what it finds.

Features. Repository ingestion and indexing · natural-language code Q&A · MR review with inline findings · test coverage gap report · commit range summaries · issue creation · review history

Tools. inspect_repository() · get_commits() · get_merge_request_diff() · run_tests() · get_coverage() · create_issue() · search_code()

Reliability. Before reporting a bug, the agent must locate the code and run the test suite. Findings that cannot be grounded in a file and line are dropped. Generated issues go to a human approval queue before they are created.

Evaluation. Seed a repository with 25–30 known defects. Measure detection rate, false positive rate, and how often the agent points at the right file.

Advanced version. Give the agent a failing test and have it investigate autonomously—read the failure, search history, form a hypothesis, and produce a written diagnosis.

Difficulty: ★★★★★ · Fit: strong for a team of 3

Watch out for. Repository size. Index one moderate repo well rather than handling arbitrary ones badly. Decide your chunking strategy early—this is where most of the AI work actually lives.

6.3.2 AI Incident Response Center🔗

Concept. A miniature DevOps/SRE platform where an agent investigates simulated production incidents using logs, deployment history, Git commits, metrics, and configuration.

You give it an incident—“18.4% of API requests are failing”and it investigates:

Incident

   

Inspect logs -> Inspect recent deployments -> Inspect Git commits -> Inspect DB status

   

Form hypotheses

   

Run diagnostic tools

   

Rank hypotheses

   

Incident report

The UI shows the investigation as it happens, step by step, so a human can follow the reasoning.

Features. Incident dashboard · log ingestion and search · deployment timeline · live investigation view · ranked hypotheses with evidence · generated incident report · incident history

Tools. search_logs() · get_deployment_history() · search_git_history() · get_metrics() · run_diagnostic() · create_incident_report()

Reliability. Every hypothesis must cite the specific log lines, commits, or metrics supporting it. Claims without evidence are rejected before display. Confidence is shown per hypothesis.

Evaluation. Build 20–30 synthetic incidents with known root causes. Measure top-1 and top-3 root cause accuracy, and average number of tool calls to reach the answer.

Difficulty: ★★★★★ · Fit: team of 3

Watch out for. You have to generate realistic incident data before you can build anything. Budget a full week for the simulator and make it a deliverable in its own right.

6.3.3 AI Data Analyst🔗

Concept. Users connect a database or upload CSVs and ask questions in English—“What changed in our sales this quarter?” The agent plans, inspects the schema, writes SQL, runs it, validates the results, and produces a chart with an explanation.

The rule that makes this project good:

The LLM may not state a number it did not obtain through a tool.

Features. Data upload / DB connection · schema browser · natural-language queries · visible query plan · generated SQL shown to the user · charts · saved analyses · export

Tools. inspect_schema() · run_sql() · calculate_statistics() · create_chart() · profile_column()

Reliability. SQL passes a validator before execution: read-only enforcement, table allowlist, column existence check, row limit, query timeout. Numbers in the final answer are cross-checked against the actual result set—if the model reports a figure that is not in the returned rows, the answer is rejected and regenerated.

Evaluation. 30–40 questions with known correct answers. Measure exact-match answer accuracy, SQL validity rate, and how often the validator catches a bad query.

Difficulty: ★★★★★ · Fit: 2 or 3

Watch out for. This is the idea most likely to become a thin wrapper if you skip the validation layer. The validator is the project. Build it in week 2, not week 7.

6.3.4 Natural Language → SQL, Focused on Safety🔗

Concept. A narrower, deeper sibling of AI Data Analyst that investigates one question: how do you make LLM-generated SQL safe?

Question -> LLM -> SQL -> Validator -> Security checker -> Database -> Results -> Explanation

Features. Query interface · generated SQL with explanation · validator verdict shown to the user · blocked-query log · role-based table access · query history

Tools. inspect_schema() · validate_sql() · run_sql() · explain_plan() · check_permissions()

Reliability. The whole project is the reliability mechanism. Test against: invalid SQL, destructive statements, unauthorized tables, injection attempts, hallucinated columns, and ambiguous questions.

Evaluation. An adversarial suite of 40+ queries—legitimate and malicious. Measure block rate for unsafe queries, false-block rate for safe ones, and correctness on the legitimate half.

Difficulty: ★★★★☆ · Fit: good for a team of 2

Watch out for. Narrower scope means the engineering has to be excellent. Per Grading Rubric, that is a completely viable way to score well.

6.3.5 Knowledge Navigator (Courses, Degrees, Policies)🔗

Concept. RAG over a large collection of institutional information—course descriptions, prerequisites, schedules, degree requirements, department policies—that answers questions like “I want to take machine learning next semester. What do I need first?” with citations.

What lifts it above a RAG chatbot: query decomposition, multi-source retrieval, conflict detection between documents, citation verification, document freshness tracking, and an admin interface for ingesting new material.

Question -> Query decomposition -> Search multiple sources -> Retrieve

   -> Check for conflicts -> Generate answer -> Verify citations -> Response

Features. Document ingestion (PDF/HTML/Markdown) · semantic + keyword search · cited answers · conflict warnings · prerequisite chain resolution · “why did you recommend this?” · admin upload console · freshness indicators

Tools. search_documents() · get_course() · resolve_prerequisites() · check_requirements() · verify_citation()

Reliability. Every factual claim must map to a retrieved span. A verification pass re-checks each citation against the source text; unsupported claims are stripped or flagged before the answer is shown.

Evaluation. 30–50 questions with known correct answers drawn from the catalog. Measure answer accuracy, citation precision (does the cited source actually support the claim?), and retrieval recall.

Difficulty: ★★★★☆ · Fit: 2 or 3

Watch out for. Prerequisite chains are graph problems, not text problems. Model them in your database and let the agent query them with a tool—do not ask the LLM to reason over prerequisite text.

6.3.6 AI Code Tutor and Debugging Coach🔗

Concept. Not “ask AI to fix my code.” A student submits broken code and the system teaches them to debug it, revealing information progressively:

Hint 1: Your function works for positive integers. What happens when n = 0?

Hint 2: Look at the recursive call.

[Show solution]

Features. Code submission and sandboxed execution · test running · progressive hints · Socratic follow-up questions · attempt tracking · generated practice problems · instructor dashboard of common mistakes

Tools. run_code() · run_tests() · parse_ast() · get_stack_trace() · generate_test_case() · record_attempt()

Reliability. Hints must be grounded in an actual failing test or a real AST finding, never in the model’s guess about what looks wrong. Before a hint is shown, the system verifies the claimed defect actually reproduces.

Evaluation. A set of 25+ programs with known bugs. Measure defect localization accuracy and hint relevance. If you can recruit classmates, measure time-to-fix with hints versus without—a small user study is a strong differentiator here.

Difficulty: ★★★★☆ · Fit: 2 or 3

Watch out for. Running untrusted student code is a genuine security problem. Sandbox it properly (container, resource limits, no network) and write that up in your security section—it is one of the better security analyses available in this list.

6.3.7 AI Debugging Assistant with a Fix Loop🔗

Concept. A developer submits source code, an error message, a stack trace, and optionally Git history. The system diagnoses the problem and proposes a fix—then checks its own work:

AI -> proposed fix -> generated test -> run suite -> feedback -> AI revision

Features. Submission interface · likely cause with cited code · suggested fix as a diff · generated reproducing test · generated verification test · automatic test execution · revision history showing each attempt

Tools. run_tests() · apply_patch() · get_git_blame() · search_codebase() · generate_test()

Reliability. The loop itself: a proposed fix is only presented as successful if the reproducing test fails before and passes after, with no other tests broken. Fixes that do not survive that check are marked unverified.

Evaluation. 20–30 bugs with known fixes. Measure verified-fix rate, average revision attempts, and regression rate.

Difficulty: ★★★★★ · Fit: 2 or 3

Watch out for. Scope the language and project type narrowly—one language, one test framework. “Any repository” is a trap.

6.3.8 AI Research Assistant with Citation Verification🔗

Concept. A research tool over a collection of academic papers: upload, search semantically, ask questions, compare methods across papers, extract claims, and find supporting or contradicting evidence.

Paper A --+  method · dataset · results · limitations

Paper B --+--> Structured comparison

Paper C --+

Features. PDF ingestion and parsing · semantic search · cross-paper comparison tables · claim extraction · evidence linking · contradiction detection · literature map · export

Tools. search_papers() · extract_section() · compare_papers() · verify_claim() · find_contradictions()

Reliability. A citation verification agent checks whether each generated claim is actually supported by the cited passage. Unsupported claims are flagged in the UI rather than silently shown.

Evaluation. Hand-label 30–40 claim/citation pairs (some genuine, some deliberately wrong). Measure how often the verifier correctly accepts and rejects.

Difficulty: ★★★★☆ · Fit: 2 or 3

Watch out for. PDF parsing is miserable and will eat more time than you expect. Use a known-good library, test it on your actual corpus in week 1, and keep the corpus small and clean.

6.3.9 AI Security Auditor🔗

Concept. Submit a repository; the system performs automated security analysis combining static analysis, dependency scanning, secret detection, and LLM review, then produces a report where each finding is verified before it is shown.

CRITICAL   Hard-coded database password       src/config.py:17

HIGH       Possible SQL injection             api/users.py:82

MEDIUM     Missing CSRF protection            api/app.py:34

Features. Repository submission · multi-analyzer pipeline · severity-ranked findings · per-finding explanation (“why is this vulnerable?”) · suggested patch · verification status · scan history · false-positive marking

Tools. run_static_analysis() · scan_dependencies() · detect_secrets() · search_code() · lookup_vulnerability_db() · verify_finding()

Reliability. The AI must not trust its own findings. Each LLM-reported issue is checked against a static analyzer, a rule-based test, or a vulnerability database. Unconfirmed findings are labeled as such.

Evaluation. A corpus of repositories with known planted vulnerabilities. Measure precision, recall, and false positive rate—and compare three configurations: static analysis alone, LLM alone, and both combined. That comparison is the most interesting result in this project.

Difficulty: ★★★★★ · Fit: 2 or 3

Watch out for. Scope to one language and a fixed vulnerability list. Also: you are running untrusted code’s source, not the code itself—keep it that way.

6.3.10 AI Meeting Intelligence with Persistent Memory🔗

Concept. More than transcription. From meeting transcripts, extract decisions, action items, owners, deadlines, and unresolved questions—then keep them as persistent project memory you can query months later:

“What did we decide about the database last Tuesday?”

An agent can then act: “Create tasks for all outstanding action items.”

Features. Transcript upload · decision and action-item extraction · owner and deadline assignment · searchable meeting history · evidence-linked answers · task creation in an internal tracker · follow-up detection for stale items

Tools. search_meetings() · extract_action_items() · create_task() · get_task_status() · link_to_transcript()

Reliability. Every extracted decision links to the transcript span it came from and is shown alongside it. Task creation requires human confirmation before it writes to the database. Extraction output is schema-validated.

Evaluation. Hand-annotate 20–30 transcripts with ground-truth action items. Measure extraction precision and recall, and owner-assignment accuracy.

Difficulty: ★★★★☆ · Fit: team of 2

Watch out for. Getting transcripts. Decide your source in week 1—public meeting transcripts, generated ones, or your own recordings with consent.

6.3.11 AI Support Platform That Knows When Not to Answer🔗

Concept. A real support platform, not a chatbot:

Ticket -> AI classification -> RAG over documentation -> Agent investigates

   -> Proposed solution -> Confidence assessment -> Human approval -> Response

The interesting requirement: the system must know when not to answer.

Confidence: 42% → escalate to a human

Features. Ticket intake and queue · automatic classification and routing · documentation search · drafted responses with citations · confidence scoring · escalation workflow · agent approval interface · resolution analytics

Tools. search_documentation() · get_customer_history() · classify_ticket() · check_known_issues() · escalate_to_human()

Reliability. Confidence thresholds with escalation, plus citation checks on every drafted answer. Test it by deliberately removing or corrupting documentation and measuring whether the system escalates instead of inventing an answer.

Evaluation. 30+ tickets, some answerable from your docs and some deliberately not. Measure answer accuracy on the answerable half and correct-escalation rate on the rest. The second number is the interesting one.

Difficulty: ★★★★☆ · Fit: team of 2

Watch out for. Calibrating confidence is genuinely hard. Do not use the model’s self-reported confidence alone—combine it with retrieval scores and agreement across generations.

6.3.12 Personal Finance Intelligence🔗

Concept. Users import transactions; the system categorizes them, detects recurring payments and anomalies, builds budgets, and answers analytical questions agentically:

“Why did my spending increase this month?”

get_transactions() -> get_previous_month() -> group_by_category()

   -> find_recurring() -> compare_categories() -> explanation

Features. Transaction import · automatic categorization · recurring payment detection · anomaly flags · budget creation and tracking · natural-language questions · monthly summaries · duplicate detection

Tools. get_transactions() · group_by_category() · find_recurring() · compare_periods() · detect_anomalies()

Reliability. As in AI Data Analyst, every figure in an explanation must come from a tool result, verified against the returned data before display. Categorization confidence below a threshold is surfaced for user correction, and corrections feed back into the system.

Evaluation. A labeled transaction set. Measure categorization accuracy, recurring-payment detection rate, and numerical correctness of generated explanations.

Difficulty: ★★★★☆ · Fit: team of 2

Watch out for. Use synthetic or anonymized data only. Never use real financial data belonging to anyone, including yourselves. Privacy and authorization belong at the center of your security analysis.

6.3.13 AI Test Generation and Test-Quality Analyzer🔗

Concept. Submit a codebase; the system generates tests—and then asks the harder question: are these tests any good? It measures coverage, and uses mutation testing to check whether the generated tests actually catch injected defects.

Features. Repository submission · test generation per module · coverage reporting before and after · mutation testing · test-quality score · flaky test detection · gap report identifying untested branches

Tools. analyze_coverage() · generate_test() · run_tests() · mutate_code() · detect_flaky()

Reliability. A generated test is only kept if it (a) passes on the correct code, (b) fails on at least one mutant, and (c) is not flaky across repeated runs. Everything else is discarded. This is one of the cleanest verification loops available in this list.

Evaluation. Measure coverage delta, mutation kill rate, and the discard rate of generated tests—that last number tells you how often the LLM produced a test that looked fine and tested nothing.

Difficulty: ★★★★★ · Fit: 2 or 3

Watch out for. Mutation testing is slow. Limit mutant count and module scope, and run it as a background job rather than in the request path.

6.3.14 Constraint-Aware Planner (Events, Itineraries, Scheduling)🔗

Concept. A planning agent that builds a real plan under real constraints, rather than describing one. Two concrete forms:

Campus event planner“Organize a study group for 20 people next Thursday evening.” The agent negotiates rooms, capacity, equipment, schedules, and calendar conflicts, then creates the event.

Itinerary planner“5 days in Tokyo, $2,500, interested in food and museums.” The agent builds an itinerary respecting opening hours, travel time, geographic distance, and budget—then re-plans only the affected portion when the user changes a constraint.

Features. Constraint input · generated plan with reasoning · constraint violation warnings · interactive editing with partial re-planning · alternatives · plan persistence and export

Tools. search_availability() · check_capacity() · get_travel_time() · check_conflicts() · calculate_cost() · create_booking()

Reliability. A rule-based constraint validator checks the finished plan independently of the LLM: no double-booking, nothing scheduled outside opening hours, travel times physically possible, total within budget. Violations are either repaired or shown to the user—never hidden.

Evaluation. 25+ scenarios with known-feasible solutions. Measure constraint satisfaction rate, plan validity, and how often the validator has to intervene.

Difficulty: ★★★★★ · Fit: team of 3

Watch out for. External APIs (maps, venues, flights) have rate limits and costs. Cache aggressively, and have a fixture-based fallback so your demo does not depend on a live third party.

6.4 Ideas that need work before they qualify🔗

These come up every term. Each is too small as stated—but each has a version that works. If one appeals to you, propose the right-hand column.

As usually proposed

What would make it a CMSC389A project

Study assistant: upload notes, ask questions

Add quiz generation with verified answers, spaced repetition backed by real performance data, and retrieval quality measurement against a labeled question set

Resume / job description matcher

Extract structured requirements from both sides, match them against a skills database, and evaluate against human-labeled match ratings

Email classifier

Compare a classical ML baseline against an LLM on the same labeled set—report precision, recall, latency, and cost per thousand messages

Flashcard generator

Verify each generated card against the source text, track learner performance, and measure whether card quality affects retention

Meeting summarizer

See AI Meeting Intelligence with Persistent Memorythe persistent memory and the task creation are what make it a system

“Chatbot for X”

Give the AI tools that change state, and a verification layer that catches it when it is wrong

6.5 Choosing🔗

Project

AI depth

Engineering

Demo

Team size

1. Software Engineering Assistant

★★★★★

★★★★★

★★★★★

3

2. Incident Response Center

★★★★★

★★★★★

★★★★★

3

3. Data Analyst

★★★★★

★★★★☆

★★★★★

2–3

4. NL→SQL Safety

★★★★☆

★★★★☆

★★★★☆

2

5. Knowledge Navigator

★★★★☆

★★★★☆

★★★★☆

2–3

6. Code Tutor

★★★★☆

★★★★☆

★★★★★

2–3

7. Debugging Assistant

★★★★★

★★★★☆

★★★★★

2–3

8. Research Assistant

★★★★☆

★★★★☆

★★★★☆

2–3

9. Security Auditor

★★★★★

★★★★★

★★★★☆

2–3

10. Meeting Intelligence

★★★★☆

★★★★☆

★★★★☆

2

11. Support Platform

★★★★☆

★★★★☆

★★★★☆

2

12. Finance Intelligence

★★★★☆

★★★★☆

★★★★☆

2

13. Test Quality Analyzer

★★★★★

★★★★☆

★★★☆☆

2–3

14. Constraint Planner

★★★★★

★★★★☆

★★★★★

3

A five-star project that half works will score below a four-star project that works completely. See Grading Rubric.

6.6 Before you commit🔗

Ask these five questions. If you cannot answer all of them, you are not ready to write the proposal:

  1. What does a user actually do with this? Name three concrete actions.

  2. What are my three tools, and could each one be replaced by pasting text into the prompt? If yes, it is not a tool.

  3. What happens when the AI is wrong? Name the mechanism, and name what visibly breaks without it.

  4. What number will I report in December, and how will I build the test cases for it?

  5. What is the smallest version of this that still works end to end? That version is your October 15 milestone.

Bring your answers to office hours before October 1. A twenty-minute conversation in September is worth three weeks in November.

7 Project Requirements🔗

7.1 Frontend🔗

  • React with TypeScript.

  • A real interface with multiple views, not a single textarea.

  • Handles loading, error, and partial-result states—AI calls are slow and sometimes fail, and your UI has to say so.

7.2 Backend🔗

  • FastAPI (Python), or an equivalent API framework approved at the proposal stage.

  • A REST API or equivalent, with a documented set of endpoints.

  • Application logic lives here. The frontend must not call the LLM provider directly.

7.3 Database🔗

  • PostgreSQL or MySQL.

  • Real schema design: tables, keys, relationships, indexes where they matter, and migrations.

  • Storing application state in JSON files instead of the database does not satisfy this requirement.

Document your schema in your README.

7.4 AI / LLM🔗

The project must meaningfully use one or more of:

  • an LLM

  • RAG

  • tool calling

  • an AI agent

  • structured generation

  • embeddings / vector search

But:

A simple “prompt -> LLM -> response” application is insufficient.

7.5 Agents and Tools🔗

Your AI system must have at least 3 meaningful tools that let it interact with data or external systems. Examples:

search_database()

get_user_information()

run_analysis()

search_documents()

create_ticket()

run_tests()

inspect_repository()

get_deployment_history()

send_notification()

A tool is meaningful when:

It performs an operation that cannot be replaced by simply including the same information in the prompt.

A “tool” that returns a hardcoded string, or that returns data you already pasted into the system prompt, does not count. Tools that query your database, hit an external API, run a computation, or change system state do.

Your proposal must list your tools and what each one does.

7.6 AI Reliability — “What happens when the AI is wrong?”🔗

This is the requirement we care about most, and the one most projects underestimate.

Every project must implement at least one mechanism for detecting or mitigating incorrect AI output, and must be able to demonstrate it working. Acceptable mechanisms include:

  • schema validation on structured output

  • citation verification against source documents

  • test execution against generated code

  • human approval before a consequential action

  • confidence thresholds with escalation

  • tool-result validation

  • consistency checking across multiple generations

  • rule-based verification

  • retrieval quality evaluation

Build this:

LLM

 

Generate SQL

 

Validate SQL

 

Execute

 

Check result

 

Return answer

Not this:

LLM

 

Trust answer

A good heuristic while you design: your project should contain something that fails if the AI is wrong. If a wrong answer from the model produces no visible consequence anywhere in your system, you have not built a reliability mechanism—you have built a text box.

7.7 Evaluation🔗

You must define at least one quantitative evaluation metric and report results on a test dataset or a set of test scenarios. Candidates:

  • accuracy

  • hallucination rate

  • retrieval precision / recall

  • task completion rate

  • tool-selection accuracy

  • code-generation success rate

  • classification accuracy

  • response time

  • cost per request

  • human satisfaction ratings

This does not need to be a research project. 20–50 carefully constructed test cases is a reasonable target. What matters is that the cases are real, that you built them deliberately, and that the number you report means something.

Report your results in your README and in your final report, and explain what the number does not tell you.

7.8 Testing🔗

Automated tests are required at three levels:

Backend
  • unit tests for business logic

  • API tests for endpoints

  • database tests

Frontend
  • at least some component or integration tests

AI
  • evaluation/test cases for AI behavior (these overlap with Evaluation)

You must also be able to answer, in your documentation:

What kinds of failures are caught by your tests?

Tests must run in CI.

7.9 Security🔗

Identify the threats relevant to your application and address them. Common ones:

  • authentication and authorization

  • SQL injection

  • XSS

  • CSRF

  • prompt injection

  • sensitive information disclosure

  • insecure tool execution

  • excessive agent permissions

  • API key protection

  • malicious uploaded documents

Prompt injection analysis is mandatory for any project involving agents or RAGwhich means nearly all of them. You must demonstrate at least one concrete attack against your own system and your mitigation for it. Show the attack input, what it did before the mitigation, and what it does after.

Authentication and authorization are required. An agent with tools must not be able to reach data the current user is not allowed to see.

7.10 Architecture🔗

Produce an architecture diagram, for example:

        +---------------+

        | React/TS UI   |

        +-------+-------+

                |

                v

        +---------------+

        |    FastAPI    |

        +-------+-------+

                |

    +-----------+-----------+

    v           v           v

PostgreSQL     Agent      External API

                |

        +-------+-------+

        v       v       v

      Tool 1  Tool 2  Tool 3

As a rule of thumb: if component A sends messages to component B, draw an arrow from A to B.

Alongside the diagram, explain your components, data flow, AI architecture, database architecture, external services, authentication, and deployment.

7.11 Docker🔗

docker compose up

must start your frontend, backend, and database. Document any setup steps (environment variables, seed data, migrations) in your README.

This is not optional—it is how your project gets graded without a two-hour setup session.

7.12 CI/CD🔗

Configure GitLab CI to run on push:

git push

   |

   v

CI

   |-- lint

   |-- tests

   |-- build

   +-- security checks

Automated deployment is encouraged but not required. A reproducible build is.

7.13 Deployment🔗

A deployed, reachable version of your application is required. You choose the infrastructure:

  • UMD VM

  • a cloud VM

  • Render, Railway, Fly.io

  • AWS, Azure, GCP

  • any other platform approved at the proposal stage

The requirement is simply:

The instructor and TAs must be able to access and evaluate the application without reproducing your entire development environment.

Keep costs in mind and use free tiers where you can. If your deployment needs credentials to log in, provide a test account.

8 Project Proposal🔗

Due: Thursday, October 1, 2026. Maximum 3 pages.

Do not spend four weeks building the wrong thing. The proposal is where scope gets fixed, and it is where the instructor can still save you.

8.1 Audience🔗

Write for a technical reader who may not know your domain. If you are building a security tool, assume your reader can code but has never written a static analyzer. As you write each section, ask what questions a reader would have—and answer them there, rather than leaving them to ask you later. Too much detail is better than too little, but do not explain what an API is.

8.2 Required contents🔗

  1. Project name

  2. Team membersand whether you are a team of 2 or 3

  3. Problem statementwhat problem, for whom, and why it is worth solving

  4. Target users

  5. Pitch1–2 clear sentences on what the system does and who benefits. No implementation details, no programming languages. This is your first impression; write it last and rewrite it twice.

  6. Why AI is necessary or useful herewhat breaks if you remove the AI?

  7. Main features5–10 specific actions a user can complete. Each should stand alone and say what the user can do, not how. Write “Users can compare two research papers,” not “Users can click the compare button to open a side-by-side view.” Scope this list against the nine weeks you actually have.

  8. AI architectureretrieval, prompting, agent loop, structured output, and where verification happens

  9. Toolsyour 3+ tools, what each does, and why each is meaningful under Agents and Tools

  10. Database designtables and relationships

  11. Technology stackand, for each major component, why that choice given your team’s skills

  12. Reliability planwhat happens when the AI is wrong (AI Reliability — “What happens when the AI is wrong?”)

  13. Evaluation planyour metric, how you will build test cases, and what result would count as success

  14. Security considerationsincluding your prompt injection threat model

  15. Risksat least three things that could go wrong, each with a plan: how you would resolve it, the expected schedule impact, and how you would adjust. “Ask the instructor for help” is a legitimate plan for one risk, not for all three.

  16. Teamworkone concrete way you will reduce friction across your development environments (and why it fits your team), plus how you will divide the work. Assign pieces of the project, not individual methods.

  17. Timelineyour own task breakdown against the four milestones in Timeline and Milestones, with at least two tasks per week

Scheduling is genuinely hard and you will not stick to your schedule perfectly. That is expected and is not graded as a failure. What is graded is whether the schedule is balanced and whether you adjusted it honestly as things changed.

9 Git and GitLab Requirements🔗

  • A GitLab repository, instructor created and shares it with you and TAs

  • Meaningful commit messages and history

  • Feature branches (or an equivalent documented workflow)

  • Merge requests—at least one MR reviewed by another team member for each major feature

  • Issue tracking used for real work

  • README.md (see Documentation)

  • .gitignore

  • .env.example documenting every environment variable

  • No API keys, credentials, or secrets committed—ever. If you commit one, rotate it immediately and say so in your final report.

Merge request review is where the collaborative engineering actually happens. Reviewing your teammate’s code is part of your grade, not a favor you do them.

10 Documentation🔗

Your repository README must follow this structure:

# Project Name

 

## Team Members

 

## Problem

 

## Features

 

## Architecture

 

## Technology Stack

 

## AI Architecture

 

## Tools

 

## Database

 

## Installation

 

## Running Locally

 

## Deployment

 

## Testing

 

## Evaluation

 

## Security

 

## Limitations

 

## Future Work

Limitations is the section that matters most for an AI project, and it is the one most teams write badly. Answer directly:

Where does your system fail?

Name the inputs that break it, the cases your evaluation does not cover, and the failure modes you know about and did not fix. An honest limitations section raises your grade. A limitations section that says “the system works well in all tested scenarios” lowers it.

11 AI Usage Policy🔗

You are expected to use AI coding and development tools on this project. That is the subject of the course. Using Claude Code, Copilot, Cursor, or anything comparable is encouraged.

However:

You are responsible for all code you submit and must be able to explain how your system works.

Submit an AI-USAGE.md documenting:

  • which AI tools you used

  • how you used them

  • where AI-generated code was incorporated

  • how you verified AI-generated code before merging it

  • significant AI failures you encounteredbugs it introduced, confident wrong answers, code that passed review and broke later

That last item is graded, and graded generously. It is the point of the course.

12 Final Deliverables🔗

Due Tuesday, December 1, 2026:

  • GitLab repository (instructor and TAs have access)

  • Deployed, reachable application (with a test account if login is required)

  • Docker configuration—docker compose up works from a clean clone

  • README following the Documentation structure

  • Architecture diagram

  • Automated tests, running in CI

  • AI evaluation with reported results

  • Security analysis, including a demonstrated prompt injection attack and mitigation

  • AI-USAGE.md

  • Final report

  • Presentation / demo materials

  • Individual contribution statement from each team member

13 Final Presentation and Demo🔗

10–15 minutes per team, structured:

Time

Section

Content

2 min

Problem

What problem are you solving, and for whom?

2 min

Architecture

How does the system work?

5 min

Live demo

An actual workflow, running against your deployment

2 min

AI

Your AI/agent architecture and tools

2 min

Evaluation & security

How you tested it, your metric and result, and what happens when the AI fails

Followed by questions from the instructor and the class.

The live demo is the centerpiece—this is a demo, not a slide deck. Show your system failing safely at least once: trigger your reliability mechanism, or run your prompt injection attack against your mitigation. A demo that only shows the happy path tells us nothing about your engineering.

Record a backup video. Live demos break.

14 Grading Rubric🔗

Category

Points

Functionality & completeness

20

Software architecture

15

AI/agent integration

15

AI reliability & evaluation

10

Testing

10

Security

10

Code quality & engineering practices

10

Deployment & DevOps

5

Documentation

5

Total

100

Missed or unsatisfactory milestones (Timeline and Milestones): -5 points each.

Two consequences of this rubric, stated plainly:

A technically ambitious idea that does not work reliably will not receive a high score simply because the idea is ambitious.

A smaller project with excellent engineering, testing, evaluation, and reliability can outperform a much larger project that is incomplete.

Choose your scope accordingly.

15 What Makes a Project Ambitious?🔗

Use these five dimensions when you are deciding whether your idea is big enough—and when the instructor is deciding whether to approve it:

ScaleDoes the system have multiple meaningful components?

IntelligenceDoes the AI perform reasoning, retrieval, planning, or tool use?

EngineeringIs there a real backend, database, API, test suite, and deployment?

ReliabilityDoes the system detect and handle AI errors?

EvaluationCan you demonstrate objectively that it works?

You do not need to maximize every dimension. Your project should be substantial in several of them.

A project that scores low on all five will not be approved. A project that scores very high on reliability and evaluation but is modest in scale is a perfectly good CMSC389A project.

16 FAQ🔗

Can I work alone?

Not by default. Talk to the instructor first.

Can we be a team of 3?

Yes, if your project is large and challenging enough to justify it, and the instructor approves it at the proposal stage. Your scope expectations go up accordingly.

Can we use a stack other than React/FastAPI/PostgreSQL?

Propose it in the technology stack item of Project Proposal with a justification. Reasonable alternatives are usually approved. Decide before October 1, not in November.

Can we use a framework like LangChain, LlamaIndex, or an MCP server?

Yes. You still have to explain what it is doing and remain responsible for the behavior of your system.

Which LLM provider should we use?

Use the LLM API key we provided or any other LLM provided you have access to. Budget for API costs, cache aggressively during development, and never commit your keys. If cost is a problem, raise it early rather than quietly scaling down your evaluation.

Does a vector database count as our database requirement?

No. You need a relational database (Database). A vector store is in addition to it, not instead of it.

Our evaluation numbers came out bad. Should we hide that?

No. Report them, explain why, and describe what you would change. Honest negative results score well. Fabricated or unexamined positive results score very badly—and are easy to spot at the demo.

How much should we build ourselves versus generate with AI?

Generate as much as you want. Understand all of it. See AI Usage Policy.

Something is going wrong and we are behind.

Tell the instructor at the next milestone, not on December 1. Milestones exist precisely so that a struggling project can be rescoped while there is still time.