Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# Logs
logs
*.log
npm-debug.log*
Expand All @@ -7,18 +6,15 @@ yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

# Node/Frontend Dependencies and Build Output
node_modules
dist
dist-ssr
*.local

# Environment Variables
env
.env*
!.env.example

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
Expand All @@ -29,7 +25,6 @@ env
*.sln
*.sw?

# Python Caches and Bytecode
__pycache__/
*.pyc
*.pyo
Expand All @@ -38,5 +33,4 @@ __pycache__/
.mypy_cache/
.ruff_cache/

# General Caches
.cache/
1 change: 0 additions & 1 deletion CODEOWNERS

This file was deleted.

84 changes: 1 addition & 83 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,83 +1 @@
# 🎓 College Transfer AI

**College Transfer AI** is an intelligent planning tool that helps California Community College students generate a personalized PDF report showing transferable courses to selected University of California (UC) campuses for a chosen major and transfer year. If a required course is not offered at the primary community college, the system searches other CCCs for articulated equivalents. It even includes an AI counselor that provides tailored academic advice based on the report.

---

## 🚀 Features

- ✅ Input your:
- Target UC campuses (e.g., UC Berkeley, UC San Diego)
- Major (e.g., Computer Science)
- Transfer year (e.g., Fall 2026)
- Primary CCC (e.g., Diablo Valley College)

- 📄 Outputs a PDF for each selected UC campus:
- Lists all transferable courses needed for the selected major.
- Maps CCC equivalents with course name, unit count, and originating college.
- Indicates if a course is not offered at your CCC and shows an alternative from another CCC (if available).
- Clearly notes any courses that must be taken at the UC post-transfer.

- 💬 Includes an AI guidance counselor:
- Reads the PDF and user input.
- Recommends a personalized education plan.
- Provides helpful advice and strategies for successful transfer.

---

## 📥 Getting Started

```bash
# Clone the repository
git clone https://github.com/your-username/college-transfer-ai.git
cd college-transfer-ai

# (Optional) Create a virtual environment
python -m venv venv
source venv/bin/activate # or venv\Scripts\activate on Windows

# Install dependencies
pip install -r requirements.txt

# Run the script
python -m college_transfer_ai.app
```
## 📌 Example

For a student transferring **Computer Science** from **Los Medanos College** and **Diablo Valley College** to **UC Berkeley**, the system generates a PDF showing:

- Required UC courses (e.g., CS 61A, Math 1B)
- Equivalent CCC courses (e.g., COMSC 132 at LMC)
- Notes if a course must be taken after transfer or is unavailable at any CCC
- Multiple CCCs where required courses may be completed

Each PDF starts with the name of the UC campus, followed by the list of CCCs where articulated classes can be taken. If no CCC offers a transferable course, the PDF clearly states that.

---

## 🤖 Coming Soon

- Web interface for input/output
- Full integration with AI academic advisor
- Export education plan to calendar/schedule

---

## 📄 License

This project is licensed under the MIT License.

---

## 🤝 Contributing

Contributions are welcome! Open an issue to discuss your idea or submit a pull request.

---

## 📬 Contact

Made by [Ahmon Embaye]

For questions or support, reach out at [ahmonembaye@example.com] or via GitHub Issues.

Still in development. Testing phase coming soon.
63 changes: 63 additions & 0 deletions backend/college_transfer_ai/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import os
import traceback
from flask import Flask
from flask_cors import CORS

from college_transfer_ai.config import load_configuration
from college_transfer_ai.database import init_db, close_db
from college_transfer_ai.routes.stripe_routes import stripe_bp
from college_transfer_ai.routes.agreement_pdf_routes import agreement_pdf_bp
from college_transfer_ai.routes.chat_routes import init_chat_routes
from college_transfer_ai.routes.course_map_routes import course_map_bp
from college_transfer_ai.routes.user_routes import user_bp
from college_transfer_ai.routes.api_info_routes import api_info_bp
from college_transfer_ai.routes.igetc_routes import igetc_bp

def create_app():
app = Flask(__name__)

print("--- Creating Flask App ---")

try:
config = load_configuration()
app.config['APP_CONFIG'] = config
except Exception as config_err:
print(f"!!! CRITICAL: Failed to load configuration: {config_err}")
traceback.print_exc()
exit(1)

cors_origins = config.get("FRONTEND_URL", "*")
CORS(app, resources={r"/*": {"origins": cors_origins}})
print(f"--- CORS Initialized (Origins: {cors_origins}) ---")

try:
init_db(app, config.get('MONGO_URI'))
except (ConnectionError, ValueError, Exception) as db_err:
print(f"!!! CRITICAL: Database initialization failed: {db_err}")
if not isinstance(db_err, (ConnectionError, ValueError)):
traceback.print_exc()
exit(1)

try:
init_chat_routes(app)
except Exception as gemini_err:
print(f"!!! WARNING: Failed to initialize Gemini/Chat: {gemini_err}")

api_prefix = '/api'
app.register_blueprint(stripe_bp, url_prefix=api_prefix)
app.register_blueprint(agreement_pdf_bp, url_prefix=api_prefix)
app.register_blueprint(course_map_bp, url_prefix=api_prefix)
app.register_blueprint(user_bp, url_prefix=api_prefix)
app.register_blueprint(api_info_bp, url_prefix=api_prefix)
app.register_blueprint(igetc_bp, url_prefix=api_prefix)
print(f"--- Blueprints Registered (Prefix: {api_prefix}) ---")

@app.route('/')
def index():
return "College Transfer AI Backend is running."

app.teardown_appcontext(close_db)
print("--- Database teardown function registered ---")

print("--- Flask App Creation Complete ---")
return app
Loading
Loading