Inspiration

Every year, over 100,000 California community college students attempt to transfer to a UC campus. The process should be straightforward—but it's not. Students spend countless hours on ASSIST.org, manually cross-referencing their completed courses against thousands of articulation agreements, trying to figure out if they're on track. We've been there. The anxiety of wondering "Did I take the right classes?" The spreadsheets. The confusion when course names don't quite match. The panic when you realize you might have missed a requirement. We built assist+ because we believe transfer planning shouldn't require a PhD in bureaucracy. Every student deserves to know exactly where they stand—instantly.

What it does

assist+ transforms the transfer planning experience from hours of manual research into a 30-second upload. Upload your transcript – Just drop in your unofficial transcript PDF Select your goals – Choose your target UC campus and intended major Get instant clarity – See exactly which transfer requirements you've completed, what's still needed, and your overall progress percentage

How we built it

Frontend: React with Vite for a fast, responsive UI. We used Tailwind CSS for styling and React Router for navigation. Backend: Flask API server handling transcript analysis, agreement matching, and recommendation generation. AI Integration: We use OpenRouter's API with Google's Gemini 2.0 Flash model for two key tasks: Parsing uploaded transcript PDFs to extract course data (codes, names, grades, credits) Generating personalized transfer advice based on the student's progress Data Pipeline: We built an indexer that processes 1,939 articulation agreement JSON files from ASSIST.org These are stored in SQLite for fast searching by university/major combinations The raw JSON files contain the full articulation mappings with course equivalencies Matching Algorithm: The core comparison logic handles: Course code normalization (e.g., "MATH 150" vs "MATH150") University name standardization (e.g., "UCLA" → "University of California, Los Angeles") Requirement group logic (handling "complete all" vs "select N from list" requirements) Section-level rules for complex prerequisite patterns

Challenges we ran into

Parsing ASSIST.org's data structure – The articulation agreement JSON files have deeply nested structures with courses embedded in sections, groups, and requirement blocks. Understanding how to extract the actual course mappings took significant reverse-engineering. Handling "Select N from list" requirements – Not all requirements are "complete all courses." Many say things like "Select 2 from the following 5 options." Building logic to properly calculate progress for these mixed requirement types was tricky. Transcript variability – Every community college formats their transcripts differently. Getting consistent course extraction from diverse PDF formats required careful prompt engineering with the AI model. Port conflicts on macOS – A fun debugging moment: Port 5000 is used by AirPlay Receiver on modern Macs, which broke our Flask server until we switched to port 5001!

Accomplishments that we're proud of

Real data, real impact – We're working with actual articulation agreements covering all 9 UC campuses and hundreds of majors Intelligent matching – Our algorithm correctly handles complex requirement structures, not just simple course lookups Clean UX – The interface is intuitive enough that any student can use it without instructions AI-powered insights – The recommendation system provides actionable next steps, not just raw data Speed – What used to take hours of manual research now takes seconds

What we learned

Domain complexity matters – The California transfer system has more edge cases than we initially imagined. "Select 2 courses from Group A OR 1 course from Group B plus 1 from Group C" is a real requirement pattern AI prompt engineering is an art – Getting Gemini to consistently return structured JSON from messy PDFs required iteration Data quality > quantity – Having 1,939 agreement files is useless if you can't parse them correctly Build for real users – Every design decision was guided by "Would this actually help a stressed student at 2 AM trying to figure out their classes?"

What's next for assist+

Short term: Support for more majors and course options in the dropdown Better handling of in-progress courses vs. completed courses GPA calculation and TAG (Transfer Admission Guarantee) eligibility checking Medium term: Semester planning tool – "Here's the optimal course schedule for your remaining requirements" Integration with community college course catalogs to show class availability Support for CSU transfers (not just UC) Long term: Mobile app for on-the-go planning Counselor dashboard so advisors can track multiple students Expand beyond California to other state transfer systems Our vision: Every transfer student should walk into their counselor's office informed, not anxious. assist+ is step one toward making that a reality.

Share this project:

Updates