Prompt file imported from shoaibnigamshaik/MentorMatrix (
.github/prompts/context.prompt.md). Copyright stays with the author.
This is an app with a backend in flask and a frontend made with HTML, CSS and JS, with a little tailwind sprinkled here and there. It does not use any JS framework.
The remote is at github.com/Shoaib-Programmer/MentorMatrix
Here is the structure of the app: . āāā LICENSE āāā MentorMatrix.docx āāā MentorMatrix.md āāā MentorMatrix.pdf āāā README.md āāā app āĀ Ā āāā init.py āĀ Ā āāā app.py āĀ Ā āāā config.py āĀ Ā āāā forms.py āĀ Ā āāā middleware.py āĀ Ā āāā models.py āĀ Ā āāā notes āĀ Ā āĀ Ā āāā AI āĀ Ā āĀ Ā āĀ Ā āāā init.py āĀ Ā āĀ Ā āĀ Ā āāā answer_open.py āĀ Ā āĀ Ā āĀ Ā āāā chatbot.py āĀ Ā āĀ Ā āĀ Ā āāā description.py āĀ Ā āĀ Ā āĀ Ā āāā fill_in_the_blank.py āĀ Ā āĀ Ā āĀ Ā āāā flashcards.py āĀ Ā āĀ Ā āĀ Ā āāā get_title_for_context.py āĀ Ā āĀ Ā āĀ Ā āāā multiple_choice.py āĀ Ā āĀ Ā āĀ Ā āāā podcast.py āĀ Ā āĀ Ā āĀ Ā āāā question_generation.py āĀ Ā āĀ Ā āĀ Ā āāā quiz.py āĀ Ā āĀ Ā āĀ Ā āāā semantic_compare.py āĀ Ā āĀ Ā āĀ Ā āāā stopwords.py āĀ Ā āĀ Ā āĀ Ā āāā summarize.py āĀ Ā āĀ Ā āāā init.py āĀ Ā āĀ Ā āāā transcription āĀ Ā āĀ Ā āāā init.py āĀ Ā āĀ Ā āāā audio āĀ Ā āĀ Ā āĀ Ā āāā init.py āĀ Ā āĀ Ā āĀ Ā āāā audio_analysis.py āĀ Ā āĀ Ā āāā text āĀ Ā āĀ Ā āĀ Ā āāā pdf.py āĀ Ā āĀ Ā āāā util.py āĀ Ā āĀ Ā āāā video āĀ Ā āĀ Ā āĀ Ā āāā init.py āĀ Ā āĀ Ā āĀ Ā āāā video_analysis.py āĀ Ā āĀ Ā āāā video_transcribe.py āĀ Ā āĀ Ā āāā youtube.py āĀ Ā āĀ Ā āāā youtube_id.py āĀ Ā āāā routes āĀ Ā āĀ Ā āāā init.py āĀ Ā āĀ Ā āāā auth.py āĀ Ā āĀ Ā āāā chatbot.py āĀ Ā āĀ Ā āāā dashboard.py āĀ Ā āĀ Ā āāā errors.py āĀ Ā āĀ Ā āāā flashcards.py āĀ Ā āĀ Ā āāā notes.py āĀ Ā āĀ Ā āāā podcast.py āĀ Ā āĀ Ā āāā quiz.py āĀ Ā āĀ Ā āāā transcribe.py āĀ Ā āāā src āĀ Ā āĀ Ā āāā styles āĀ Ā āĀ Ā āāā tailwind.css āĀ Ā āāā static āĀ Ā āĀ Ā āāā css āĀ Ā āĀ Ā āĀ Ā āāā base.css āĀ Ā āĀ Ā āĀ Ā āāā chatbot.css āĀ Ā āĀ Ā āĀ Ā āāā dashboard āĀ Ā āĀ Ā āĀ Ā āĀ Ā āāā dashboard.css āĀ Ā āĀ Ā āĀ Ā āāā flashcards.css āĀ Ā āĀ Ā āĀ Ā āāā light.css āĀ Ā āĀ Ā āĀ Ā āāā notes.css āĀ Ā āĀ Ā āĀ Ā āāā popup.css āĀ Ā āĀ Ā āĀ Ā āāā quiz.css āĀ Ā āĀ Ā āĀ Ā āāā settings.css āĀ Ā āĀ Ā āĀ Ā āāā tailwind.css āĀ Ā āĀ Ā āĀ Ā āāā transcript.css āĀ Ā āĀ Ā āĀ Ā āāā view_note.css āĀ Ā āĀ Ā āĀ Ā āāā view_transcript.css āĀ Ā āĀ Ā āāā dist āĀ Ā āĀ Ā āāā images āĀ Ā āĀ Ā āĀ Ā āāā MentorMatrix_logo.png āĀ Ā āĀ Ā āĀ Ā āāā angle-left.svg āĀ Ā āĀ Ā āĀ Ā āāā angle-right.svg āĀ Ā āĀ Ā āĀ Ā āāā download.svg āĀ Ā āĀ Ā āĀ Ā āāā edit.svg āĀ Ā āĀ Ā āĀ Ā āāā favicon.ico āĀ Ā āĀ Ā āĀ Ā āāā hamburger.svg āĀ Ā āĀ Ā āĀ Ā āāā mic.svg āĀ Ā āĀ Ā āĀ Ā āāā mr_grumpy.png āĀ Ā āĀ Ā āĀ Ā āāā mr_spooky.png āĀ Ā āĀ Ā āĀ Ā āāā sidebar-toggle.svg āĀ Ā āĀ Ā āĀ Ā āāā three_dots.svg āĀ Ā āĀ Ā āĀ Ā āāā upload.svg āĀ Ā āĀ Ā āāā js āĀ Ā āĀ Ā āāā chatbot.js āĀ Ā āĀ Ā āāā dashboard āĀ Ā āĀ Ā āĀ Ā āāā popup.js āĀ Ā āĀ Ā āāā flashcards.js āĀ Ā āĀ Ā āāā notes.js āĀ Ā āĀ Ā āāā progress.js āĀ Ā āĀ Ā āāā quiz.js āĀ Ā āĀ Ā āāā settings.js āĀ Ā āĀ Ā āāā transcript.js āĀ Ā āĀ Ā āāā util.js āĀ Ā āāā templates āĀ Ā āĀ Ā āāā 404.html āĀ Ā āĀ Ā āāā 500.html āĀ Ā āĀ Ā āāā base.html āĀ Ā āĀ Ā āāā chatbot.html āĀ Ā āĀ Ā āāā create_deck.html āĀ Ā āĀ Ā āāā dashboard.html āĀ Ā āĀ Ā āāā edit_flashcard.html āĀ Ā āĀ Ā āāā email āĀ Ā āĀ Ā āĀ Ā āāā confirm.html āĀ Ā āĀ Ā āāā flashcards.html āĀ Ā āĀ Ā āāā generate_podcast.html āĀ Ā āĀ Ā āāā layout.html āĀ Ā āĀ Ā āāā login.html āĀ Ā āĀ Ā āāā notes.html āĀ Ā āĀ Ā āāā podcast.html āĀ Ā āĀ Ā āāā pricing.html āĀ Ā āĀ Ā āāā quiz.html āĀ Ā āĀ Ā āāā quiz_question.html āĀ Ā āĀ Ā āāā review_deck.html āĀ Ā āĀ Ā āāā settings.html āĀ Ā āĀ Ā āāā transcript.html āĀ Ā āĀ Ā āāā view_note.html āĀ Ā āĀ Ā āāā view_transcript.html āāā instance āĀ Ā āāā dev.db āĀ Ā āāā flask_session āĀ Ā ... āāā package.json āāā pnpm-lock.yaml āāā podcasts āāā postcss.config.js āāā requirements.txt āāā run.py āāā setup.sh āāā tailwind.config.js āāā uploads āĀ Ā ... āāā vite.config.js
38 directories, 186 files
This app uses Clerk for auth. It also uses an SQLite Database, with the cs50 library.
Here is the schema for your reference:
CREATE TABLE transcripts ( id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))), title TEXT NOT NULL, content TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE notes ( id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))), transcript_id TEXT, title TEXT NOT NULL, content TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (transcript_id) REFERENCES transcripts(id) ON DELETE CASCADE ); CREATE TABLE files ( id INTEGER PRIMARY KEY AUTOINCREMENT, transcript_id TEXT NOT NULL, file_type TEXT CHECK(file_type IN ('audio', 'youtube', 'pdf')) NOT NULL, name TEXT NOT NULL, metadata TEXT, uploaded_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (transcript_id) REFERENCES transcripts(id) ON DELETE CASCADE); CREATE TABLE sqlite_sequence(name,seq); CREATE TABLE quizzes ( id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))), transcript_id TEXT NOT NULL, title TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (transcript_id) REFERENCES transcripts(id) ON DELETE CASCADE ); CREATE TABLE quiz_questions ( id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))), quiz_id TEXT NOT NULL, question TEXT NOT NULL, answer TEXT NOT NULL, question_type TEXT CHECK(question_type IN ('open_ended', 'multiple_choice')) NOT NULL, options TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (quiz_id) REFERENCES quizzes(id) ON DELETE CASCADE ); CREATE TABLE decks ( id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))), title TEXT NOT NULL, description TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE flashcards ( id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))), deck_id TEXT NOT NULL, note_id TEXT, question TEXT NOT NULL, answer TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (deck_id) REFERENCES decks(id) ON DELETE CASCADE, FOREIGN KEY (note_id) REFERENCES notes(id) ON DELETE CASCADE ); CREATE TABLE quiz_results ( id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))), quiz_id TEXT NOT NULL, score INTEGER NOT NULL, total_questions INTEGER NOT NULL, attempted_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (quiz_id) REFERENCES quizzes(id) ON DELETE CASCADE ); CREATE TABLE podcasts ( id TEXT PRIMARY KEY DEFAULT (lower(hex(randomblob(16)))), note_id TEXT, content TEXT NOT NULL, path TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (note_id) REFERENCES notes(id) ON DELETE CASCADE ); CREATE INDEX idx_transcript_id ON notes (transcript_id); CREATE INDEX idx_file_transcript_id ON files (transcript_id); CREATE INDEX idx_quiz_transcript_id ON quizzes (transcript_id); CREATE INDEX idx_quiz_question_quiz_id ON quiz_questions (quiz_id); CREATE INDEX idx_deck_title ON decks (title); CREATE INDEX idx_flashcard_deck_id ON flashcards (deck_id);
Secrets are stored in .env.
The notes folder is a services folder which acts like an API for the project's tasks, like summarizing and creating flashcards.
This project uses local ollama for AI services. We are looking forward to integrate OpenAI or DeekSeek's API.