| """ |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| CORVO AI - Complete Teaching Platform |
| Main Application Entry Point |
| |
| Run: python app.py |
| Open: http://localhost:5000 |
| โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ |
| """ |
|
|
| import os |
| from flask import Flask, redirect, url_for, session, flash, render_template, send_from_directory |
| from flask_socketio import SocketIO |
|
|
| from config import SECRET_KEY, DEBUG, HOST, PORT, REQUIRED_DIRS |
|
|
| |
| app = Flask(__name__) |
| app.secret_key = SECRET_KEY |
| socketio = SocketIO(app, cors_allowed_origins="*", async_mode='threading') |
|
|
| |
| for d in REQUIRED_DIRS: |
| os.makedirs(d, exist_ok=True) |
|
|
| |
| from database.users import init_users_db |
| from database.cards import init_cards_db |
| from database.chat_history import init_chat_history_db |
|
|
| init_users_db() |
| init_cards_db() |
| init_chat_history_db() |
|
|
| |
| from chat.agent import AIAgent |
| from board.engine import BoardEngine |
|
|
| agent = AIAgent() |
| board_engine = BoardEngine() |
|
|
| |
|
|
| |
| from auth.routes import auth_bp, init_auth_socketio |
| init_auth_socketio(socketio) |
| app.register_blueprint(auth_bp) |
|
|
| |
| from chat.routes import chat_bp, init_chat_agent |
| init_chat_agent(agent) |
| app.register_blueprint(chat_bp) |
|
|
| |
| from board.routes import board_bp, init_board_engine |
| init_board_engine(board_engine) |
| app.register_blueprint(board_bp) |
|
|
| |
| from exam.routes import exam_bp |
| app.register_blueprint(exam_bp) |
|
|
| |
| from media.routes import media_bp, init_media_agent |
| init_media_agent(agent) |
| app.register_blueprint(media_bp) |
|
|
| |
| from market.routes import market_bp |
| app.register_blueprint(market_bp) |
|
|
| |
| from websocket.events import register_socketio_events |
| register_socketio_events(socketio) |
|
|
|
|
| |
| |
| |
|
|
| from auth.helpers import is_session_valid |
| from database.users import load_users_db, get_user |
| from subjects.definitions import SUBJECTS, is_board_enabled |
|
|
|
|
| @app.route('/') |
| def index(): |
| if is_session_valid(): |
| return redirect(url_for('dashboard')) |
| return redirect(url_for('auth.signup')) |
|
|
|
|
| @app.route('/dashboard') |
| def dashboard(): |
| if not is_session_valid(): |
| session.clear() |
| flash('ุงูุชูุช ุงูุฌูุณุฉุ ูุฑุฌู ุชุณุฌูู ุงูุฏุฎูู ู
ุฑุฉ ุฃุฎุฑู.', 'error') |
| return redirect(url_for('auth.login')) |
|
|
| username = session['username'] |
| users_db = load_users_db() |
| user_data = users_db.get(username, {}) |
|
|
| student_type = user_data.get('student_type', 'ุนูู
ู') |
| all_subjects = SUBJECTS.get(student_type, []) |
| purchased_subjects = user_data.get('purchased_subjects', ['islamic']) |
|
|
| my_subjects = [] |
| for s in all_subjects: |
| if s['id'] in purchased_subjects: |
| subject_info = dict(s) |
| subject_info['board_enabled'] = is_board_enabled(s['id']) |
| my_subjects.append(subject_info) |
|
|
| available_subjects = [s for s in all_subjects if s['id'] not in purchased_subjects] |
|
|
| return render_template('dashboard.html', |
| username=username, |
| user_data=user_data, |
| my_subjects=my_subjects, |
| available_subjects=available_subjects, |
| balance=user_data.get('balance', 0)) |
|
|
|
|
| @app.route('/static/<path:filename>') |
| def serve_static(filename): |
| return send_from_directory('static', filename) |
|
|
|
|
| |
| |
| |
|
|
| if __name__ == '__main__': |
| print("\n" + "โ" * 60) |
| print(" ๐ CORVO AI - Complete Teaching Platform") |
| print("โ" * 60) |
| print() |
| print(" ๐ Architecture:") |
| print(" โโโ auth/ โ Login, signup, sessions") |
| print(" โโโ chat/ โ Text AI chat (multi-subject)") |
| print(" โโโ board/ โ Interactive whiteboard (multi-subject)") |
| print(" โโโ exam/ โ MCQ exam generation") |
| print(" โโโ media/ โ Voice & image processing") |
| print(" โโโ market/ โ Subject purchasing & cards") |
| print(" โโโ websocket/ โ Real-time session management") |
| print(" โโโ database/ โ JSON file persistence") |
| print(" โโโ subjects/ โ Subject definitions & loading") |
| print() |
| print(" ๐ง FEATURES:") |
| print(" โ
Multi-subject support (chat + board)") |
| print(" โ
Per-user per-subject chat history") |
| print(" โ
Interactive whiteboard with TTS") |
| print(" โ
Board supports ANY subject dynamically") |
| print(" โ
<page>N</page> โ per-subject book page images") |
| print(" โ
<svg>keyword</svg> โ Icons8 hand-drawn icons") |
| print(" โ
MCQ exam generation per subject/chapter") |
| print(" โ
Voice input & image analysis") |
| print(" โ
Card-based balance & subject purchasing") |
| print() |
| print(f" ๐ Open: http://localhost:{PORT}") |
| print("โ" * 60 + "\n") |
|
|
| socketio.run(app, debug=DEBUG, host="0.0.0.0", port=7860, allow_unsafe_werkzeug=True) |