🏠 Home
📅 Today
📅 Scheduled Tests
⚡ Quick Actions
🧾 Recent Activity
Nothing yet.
The detailed stats/tables this page used to open with — everything below still works exactly the same, just tucked away by default.
Students
🔍 Duplicate Accounts
Ek hi phone number pe 2+ account bane hon to yahan dikhega — jaise koi bachcha do baar
signup kar de, ya guest se real account alag ban jaaye. Sirf dikhata hai; kuch delete nahi
karta — access yahin se ✏️/+15 din se badal sakte ho, baaki khud dekh ke faisla karo.
₹11-paid status Razorpay ke apne captured payment ke contact number se milaya
jaata hai, kisi order ke uid se nahi — payment teesre (guest) UID pe bhi ho sakta
hai jo dono account mein se kisi mein na dikhe.
⚡ Sabka access sahi karo
Har duplicate number pe (upar ke filter se alag — yahan SABPE chalta hai): jisme sabse zyada attempt (mcqAttempts + mqbAttempts + judiciaryAttempts + mockAttempts milaake) uspe access jaata hai; barabar ho to sabse purana account jeetega. Baaki account bilkul chhue nahi jaate — na access hataya jaata hai, na delete/merge kuch.
Batch Summary
| Batch | Students | Tests Allotted | Given | Reviewed |
|---|---|---|---|---|
| No students yet. | ||||
Free Batch Signups (pending — from the public "Enroll for Free Batch" form)
| Name | Phone | Course | Date | |||
|---|---|---|---|---|---|---|
| No pending signups. | ||||||
Access Requests (pending — "already enrolled, no login yet" from join.html's Request Access tab)
| Name | Phone | Claimed Batch | Date | ||
|---|---|---|---|---|---|
| No pending requests. | |||||
🗑️ Purani Requests Saaf Karo
Upar ke Free Batch Signups + Access Requests mein jitni bhi pending request hain, sab ek saath hata degi — koi student account nahi banega. (Neeche ki "Purane Students — Batch 2026" list is button se asar mein nahi aati — wo apni alag, persistent list hai.)
📋 Purane Students (Batch 2026) (join.html par "2026" batch chunne walon ki apni list — Pending se Approved tak)
| Naam | Number | Status | |||
|---|---|---|---|---|---|
| Koi entry nahi. | |||||
Help Requests ("Trouble logging in?" box on join.html — someone stuck before they can even reach chat)
| Name | Phone | Message | Date | ||
|---|---|---|---|---|---|
| No pending help requests. | |||||
Create Student Login (Copy Checking Portal)
Give each student a unique ID + password so they can log into the Copy Checking Portal and upload their answer sheets — no phone OTP needed.
Bulk Import Students
Paste one student per line as Name, Phone (comma or tab separated) — Student ID and password are auto-generated from the phone number, same as a single Create above. Pick where to put all of them below; you can fine-tune any individual student afterward from the table.
| Name | Student ID | Batch | Phone | Signup Date | Course End Date | 💰 Plan | 📅 ADPO Access | Tests | Last Login | Activity | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| No data yet — connect Firebase to see live students. | ||||||||||||
Videos
Add New Video
All Videos
| Title | YouTube ID | Category | Added | |
|---|---|---|---|---|
| No videos yet — add one above. | ||||
Answer Evaluations — Judiciary Mains
Pending copies by area — click a box to jump straight to it
Updated a grading instruction (Settings or Knowledge Base)? This re-runs Claude on every submission still "Pending Review" (already-released ones are untouched) — no need to re-upload.
| Student | Subject | Submitted | AI Score | Status | ||
|---|---|---|---|---|---|---|
| No submissions yet — waiting for the Cloud Function to grade uploaded PDFs. | ||||||
Homework
Create a dated assignment with one or more questions — students see it in the Copy Checking Portal with a separate upload slot for each question.
New Homework
All Homework
Sorted by date, then batch, then topic.
| Date | Batch | Topic | Paper 4 Area | Title | Questions | Status | |
|---|---|---|---|---|---|---|---|
| No homework created yet. | |||||||
🛈 Portal Help Content
Controls the "i" info button students see on every screen of the ADPO MCQ portal, and the mandatory first-time onboarding walkthrough (shown once per device, as a colourful flashcard-style deck). Each feature is a short hook: a relatable question, then this feature's answer — e.g. "Does the same question keep tripping you up?" → "It lands in Tough Questions on its own — and won't let go till you crack it." Keep both short (one line each). A feature with no question/answer is simply skipped — nothing broken shows to students.
Click "Portal Help" in the sidebar to load.
ℹ️ Dashboard Heading Tooltips
Controls the small "i" next to each heading on the student home dashboard (Today's Focus, Your Performance, etc.) — tap it and this text pops up right under that heading. Plain explanations in simple language, not a Q&A hook like Portal Help above. A heading with no text here falls back to a built-in default, so nothing ever shows empty to students.
Click "Portal Help" in the sidebar to load.
ADPO MCQ
Questions live in Question Bank only — this page just forwards a copy into a course, split by subject pool. Build a test below, then publish it when it's ready for students.
🎯 Single Subject — Send to Course
Pick a Subject, then any Test(s) inside it (all ticked by default — untick to send only specific ones). Sources are Question Bank and True/False Bank (True/False items become 2-option MCQs). The course is filed under the same Subject/Test name automatically — no typing. Time limit auto (45 sec/question, student can adjust before starting) and marking (+3/−1) are automatic too.
📦 Bulk Publish — Multiple Subjects
Tick as many Subjects as you want (or Select All) — each ticked Subject is published as its OWN separate course with everything inside it (every Test, combined), in one click. To mix several subjects together into a single combined/sectioned test instead, use Multi Subject below.
🔀 Multi Subject — Build & Forward Test
For combining/mixing several subjects into one test. Pick one or more source subjects below — a small box next to each one sets exactly how many questions to pull from THAT subject (blank = every available question from it); set a part's overall Question Count and hit 🎲 Auto-fill to split it evenly across the ticked subjects, then hand-tweak any of them before sending. A single unnamed part mixes those subjects into one flat random test; add more parts (each with a name, e.g. "Law" / "GK") to build a sectioned test — students see it as distinct blocks. All copied in, so later edits to the source won't change it.
Saves the destination, title, time limit, marking, and every part's name/count/subjects below — Load brings back the whole setup so you can tweak and reuse it.
Same subject + title published more than once in this category — the same content likely went out to students twice. Each group is pre-ticked down to "keep the newest one" — adjust before deleting.
| Unit | Subject | Chapter | Time Limit | Questions | Status | Marking | Free | OTP Demo | Attempts | Order | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| No courses created yet. | ||||||||||||
🎁 Free & Demo Access
Two ways a visitor gets in without being an enrolled student: Free for Everyone — name + phone, no OTP, no login — and OTP Demo — phone-verified, then full access like a paid student for a set number of days from when they join. Both are per-test toggles set on the MCQ page; this is a focused view of what's currently open, plus a quick way to open a new one.
🌍 Whole ADPO Course — Master Switches
These open EVERY test in the entire ADPO course at once — not one test at a time. Whichever is on shows automatically as a banner on the student join page.
No login, no OTP — anyone can start immediately. A time limit (if set) is a hard cutoff for everyone using it, not per-visitor — it ends for people already in too, the moment it passes.
| Test | Category | Status | |
|---|---|---|---|
| Loading… | |||
Requires phone verification. Each student who joins gets that many days of full paid-student-like access from THEIR join moment, not a shared countdown — turning this off only stops new signups, students already in keep their remaining days.
| Test | Category | Days per Student | |
|---|---|---|---|
| Loading… | |||
📊 Test Results
Per-chapter attendance for every ADPO MCQ test — how many students have given each test vs.
not, plus average/highest score where marking is on. Read-only: nothing here writes to
mcqCourses, mcqAttempts, or students.
Note: the data model only records a submitted attempt, not a started-but-abandoned one, so
"Not Attempted" means "no submitted attempt on record" — it can't distinguish a student who
never opened the test from one who started and gave up partway through.
⚠️ This is the old chapter-wise MCQ engine (mcqCourses/mcqAttempts)
— already hidden from students. Master Question Bank tests (Test Maker) have their own separate results, not shown here.
| Unit | Subject | Chapter | Total Students | Attempted | Not Attempted | Avg Score | Highest Score | |
|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||
🔴 Live Sessions
Every Live Session (Kahoot-style) run in this category — same read-only reporting as the table
above, just for mcqLiveSessions instead of mcqCourses. Average score is
read straight off each participant's score field, no recomputation.
| Title | Date | Status | Participants | Avg Score | |
|---|---|---|---|---|---|
| Loading… | |||||
📊 Mock Test Analytics
Allotment-aware attendance for every compiled Book Maker Mock Test — how many of the
students actually allotted to each test have attempted it, vs. not, plus average/highest
score where marking is on. Read-only: nothing here writes to mockTests,
mockAttempts, students, or any other collection.
"Allotted Students" reflects each test's current allottedBatches — a student
allotted after this page loaded, or whose batch changed since, is reflected live via this
page's own listeners, same as everywhere else in the panel.
| Test Name | Subject(s) | Portal | Allotted Students | Attempted | Not Attempted | Attendance % | Avg Score | Highest Score |
|---|---|---|---|---|---|---|---|---|
| Loading… | ||||||||
🆕 Updates
Every test created, and every Publish/Allot/Marking/Attempts change made afterward — MCQ (ADPO) and Book Maker — newest first, grouped by date. Updates live from anywhere in the admin.
Loading…
🔴 Live Session
Kahoot-style: every joined student sees the same question at the same time, with a shared timer.
Create Live Session
Live Sessions
"Next Question" also auto-fires when the timer runs out — but only while this tab stays open, so keep this page open while running a session.
No live sessions yet.
Book Maker — Subjects
The shared subject registry behind the chapter-notes PDF maker and the Judiciary/ADPO Mock
test makers. Deliberately separate from the ADPO MCQ tab above — no data is shared with
mcqCourses. A subject tagged for both Judiciary Mock and ADPO Mock shares one
backend record (its chapters and questions) across both.
New Subject
Bulk Add
One subject per line. A line starting with ## sets the Unit for the subjects
that follow it (ADPO Mock only — ignored for Judiciary). Pre-filled below with the official
32-subject / 5-unit MPPSC ADPO Law breakdown — review it, then pick "ADPO Mock" and submit.
| Name | Used In | Unit (ADPO) | Questions | Chapters | |
|---|---|---|---|---|---|
| No subjects created yet. | |||||
Compile & Allot Mock Test
Pulls a random sample of questions from the subjects below into one frozen test. New tests are created not allotted to any batch — use the ADPO/Judiciary toggle buttons in the table below to actually allot one after reviewing it.
| Name | Portal | Questions | Allotted To | Attempts | Export | |
|---|---|---|---|---|---|---|
| No mock tests compiled yet. | ||||||
📦 Question Bank
A master staging repository for pre-written content — deliberately separate from both
mcqCourses (ADPO MCQ) and subjects (Book Maker). Nothing here is
student-visible. Two levels: Folders are pure organization (folder inside
folder, any depth); a Test is a named leaf inside a folder where questions
actually live — open one to add questions manually, paste, upload a Word file, or import
JSON. Every question is either MCQ (4 options) or True/False, always bilingual (English +
Hindi). Every write here is a direct, verbatim save of what's typed or pasted — no AI
rewriting of question/option/solution content, ever.
🏛️ Publish to Judiciary
Moved to its own page — see ⚖️ Judiciary → Course Manager in the sidebar. It now works for every configured state, not just MP, and shows exactly which questions are available before you publish.
📊 Bird's Eye Report
Your whole Question Bank at a glance — every folder, nested, with how many files (Tests) and questions live under each, and their status (🟢 Ready · 🔴 Need Fix · 🟣 Live · 🟡 Partially Live). Click any folder name to jump straight there.
🚨 Urgent Test — Paste & Publish Instantly
For when a test needs to go live right now, no review step. Pick (or add) a Subject folder, name the Test, paste questions below, then hit Publish — it's saved into the Question Bank and a course is created and published at the same time, visible to every student in that category immediately. This skips the usual "publish later" step on purpose — only use it when you actually mean right now.
Paste format — one question per block, separated by a blank line, bilingual (English | Hindi):
Q: English question text | हिंदी में सवाल
A) English option | हिंदी विकल्प
B) English option | हिंदी विकल्प
C) English option | हिंदी विकल्प
D) English option | हिंदी विकल्प
Answer: B
Tags: tag1, tag2
Difficulty: simple / tough
Solution: optional explanation shown after submit
Folders
Pure organization — a folder can hold more folders (any depth) and Tests, never questions directly.
Tests
A Test is where questions actually live — name it, open it, then pick how to add questions (manual, paste, Word upload, or JSON).
📚 Reference Material & Source Check
Upload the real source (a bare act PDF, study material) for this folder — optional. Then check every question here for factual accuracy, not just structure, against your uploaded library, general AI knowledge, or both (pick below). Every result says exactly which one it actually used, so a library-backed verdict is never confused with an unverified one. This only ever classifies — it never changes anything on its own; you decide what to fix.
Reference files live in one shared Library — upload/paste an Act once here and it can be linked to other subjects too (via "🔗 Attach Existing" in their own folder), instead of re-adding the same Act per subject.
Already uploaded/pasted for another subject? Link it here instead of adding it again.
Checked against whatever's picked above ("Check against"). Not added to this folder — paste into "Bulk Import via Paste" inside a Test if you also want to save them.
Import Word Files as Tests
Pick several ClassPlus-format .docx files at once — each one becomes its OWN
new Test in this folder, named after the file (extension stripped), pre-filled with that
file's questions. No need to create/open a Test by hand first.
📁 Import from Multiple Folders (batch)
For when you have several folders on your computer, one per Subject. Add a row per folder —
pick that folder's Subject, choose its .docx files (same as above: each file
becomes its own new Test) — then "+ Add Another Folder" for the next one. Nothing uploads
until you hit "Upload All" at the very end.
🗂️ Auto-Import a Folder Tree (Law)
Pick one folder on your computer that contains a sub-folder per Act (short names are fine — e.g. "POCSO", "NSA", "MP Rasuka", "DV Act"). Every sub-folder's name is checked against the 32 Law Acts; a confident match auto-creates its Tests straight in that Act's Question Bank folder. No match? It still imports — just into "⏳ Needs Review" under its original folder name, untouched, for you to move into the right Act afterward. Nothing is guessed or renamed — only matched or set aside.
🧠 Smart Upload
Pick any .docx files — no need to organize them into folders first. AI reads each file's questions, suggests a clean name and a Question Bank folder for it (reusing an existing folder when it's a good match, or proposing a new one), and shows you both below to review and edit before anything is created. Nothing is filed until you hit "File All".
⚡ Bulk Actions — All Tests in This Folder
Once several Tests exist in this folder (e.g. one per uploaded chapter file), use these instead of opening each Test and building it one at a time. All three copy from the Question Bank — nothing here is student-visible until you publish/allot it afterward.
More than one test: each is its OWN independent random draw from the whole folder, so the same question can land in more than one of them — this isn't "split the folder into N non-overlapping tests". Auto-named "T1 — {count}Q — {folder name}", "T2 — ...", and so on — no need to type a name.
⚖️ Judiciary — State Configuration
Each state's syllabus (its Subjects list below) is the single source of truth for question availability — a question becomes available to a state the moment its Subject is checked here, with no per-question re-tagging. Question Bank questions still need "🏛️ Also applicable to Judiciary" checked (Add/Edit form) to be eligible at all.
States
"Set Up" writes the exact Prelims master data given — MP's 18 subjects with their real marks (totals 150, no negative marking); CG's 16 subjects and Rajasthan's 22 subjects with marks left blank (not yet provided) and no negative marking. Exam dates stay blank. Safe to click again after editing this file's data — it fully replaces these 3 states' subjects/config each time (not a merge), so re-running always matches whatever's coded here.
🏛️ Judiciary — Course Manager
Available Questions below is always computed fresh from (a question's subject × the selected state's syllabus, set in State Configuration) — nothing here is manually tagged per state. Publishing copies your selection into a real course for that one state; Question Bank itself is never changed except marking the question "sent to Judiciary."
Before Publishing — Question Order
Applied fresh to every student's attempt. The Master Question Bank itself is never shuffled — only what a student sees.
Available Questions
🧠 PSC PYQ AI Machine — All States
One shared GK/GS PYQ database across every state's PSC papers — pick the State once per upload batch, everything else (Units/Topics, duplicate detection) stays shared, so a repeated fact still links up even if it was asked by two different states' exams. Upload exam papers (same Question/Option/Solution .docx format as every other Question Bank import) and let AI sort the real General Knowledge/General Studies questions from the subject-specific ones, then tag each as Static or Current Affairs. Review and correct anything below before saving — nothing is written to the PYQ database until you hit "Save All".
Upload & Classify
The fields below apply to this whole upload batch (one exam paper's set of files, typically). If a paper's exam/stage/paper isn't obvious, leave it as "Needs Review" rather than guessing — a wrong label is worse than a missing one.
Pre-filled by guessing from the filename — check/fix it, don't trust it blindly.
.docx uses the same Question/Option/Solution table as every other Question Bank import (includes the correct answer). .pdf is read page-by-page directly by AI (no separate OCR step) — no answer key assumed, so the Answer shows "Needs Review" until filled in some other way.
🧬 Embeddings — Backfill
Every ✅ Include question saved from now on gets a Voyage embedding automatically (Phase 4B Stage A) — this only covers questions saved BEFORE that existed. Safe to run anytime; only questions still missing an embedding are touched, so re-running costs nothing extra.
🔁 Repetition Intelligence
Finds questions already saved in the PYQ database that are Exact Same (identical once formatting is ignored — detected automatically, no AI needed) or Almost Same (same underlying fact, different wording). Almost Same now searches the WHOLE database via vector similarity, not just a same-batch chunk — Claude is only asked to confirm the few candidates the search actually finds close, so most questions cost nothing but a quick search. Needs an embedding to be searchable — run Backfill Missing Embeddings above first for anything saved before that existed. Nothing is merged or deleted — a confirmed group becomes a Question Family linking the original records. Only questions marked ✅ Include are checked.
🗂️ Units → Topics → Sub-topics
AI proposes a structure from the questions already saved — edit anything below (rename, remove, add) before approving. Once approved, this becomes the fixed list every question gets filed into; approving again after edits replaces it (already-classified questions keep their old labels until you re-classify).
🏷️ Classify Into Structure
Files every ✅ Include question that doesn't have a Unit yet into the approved structure above. Safe to run again later — only unclassified questions are touched.
📖 PYQ Database — Question Kundli
Every question saved so far, with its full record. Click a row to expand its Kundli — GK type, relevance, repeat counts and exams (from Repetition Intelligence), Unit/Topic/Sub-topic, and source.
⚖️ Law PYQ AI Machine — All States
Upload Law/Judiciary Prelims papers (same Question/Option/Solution .docx format as every other Question Bank import, or raw .pdf read page-by-page) and classify every question against the chosen state's REAL syllabus — no Include/Exclude filter, since a Law paper's questions are all Law-relevant already. Add or edit a state's subject list in ⚖️ Judiciary → State Configuration; it's immediately usable here, no code changes needed.
Upload & Classify
.docx includes the correct answer; .pdf shows "Needs Review" for Answer (no answer key assumed).
🧬 Embeddings — Backfill
Same as the PSC PYQ Machine's backfill — only questions saved before embeddings existed for this collection are touched. Safe to run anytime.
🔁 Repetition Intelligence
Exact Same (free, deterministic) plus whole-database Almost Same (vector search, Claude only confirms real candidates) — across ALL states' Law questions together, so a repeated legal point still links up even if asked by two different states' exams. Nothing is merged/deleted.
📖 Law PYQ Database — Question Kundli
🔴 Needs Fix
Every Test that has at least one question preventing it from publishing — missing Hindi or English (question text or any option), an MCQ without exactly 4 options, two identical options, or leftover English in a Hindi field. Nothing here is written anywhere — it's computed fresh every time from what's already in the Question Bank, so it's never stale. Click a Test below, then "Fix →" to jump straight to that question's Edit form.
Claude reads each flagged question's actual content and judges whether it's a genuine problem or a false positive (e.g. a legal abbreviation the auto-check rule doesn't recognize). It never edits or rewrites anything — only classifies. You decide what to do with each verdict. Checks every currently-flagged question in one run; costs a small amount per question.
📅 Daily Content
Publish the "Today's Homework" bundle students see for a given date — one Daily GK Question,
a Current Affairs Challenge, a Computer-in-5-Minutes set, a Shortcut of the Day and a Computer
One-Liner. Each is its own dailyContent doc keyed by date + type, so publishing
again for the same date replaces what's already there — just paste/type again
and hit Publish, no separate edit step needed.
Everything below applies to this date. Switch dates to see and replace what's already published for another day.
Daily GK Question (exactly one MCQ)
Paste one bilingual question below, click Parse to preview, then Publish. If the paste
yields more than one question, only the first is used. Same format as elsewhere in this
panel — Tags/Difficulty lines are required by the parser but not stored for Daily Content,
any values work:
Q: English | Hindi
A) English | Hindi
B) English | Hindi
C) English | Hindi
D) English | Hindi
Answer: B
Tags: gk
Difficulty: simple
Solution: Optional explanation shown after the student answers.
Current Affairs Challenge (5–10 MCQs — a.k.a. "Daily Current Affairs")
Paste 5–10 bilingual questions below (one block per question, separated by a blank line), click Parse to preview, then Publish. There's no separate source/date field — put the source/date for this challenge inside each question's Solution line instead (e.g. "Source: The Hindu, 20 Aug 2026 — ..."), since Solution is already shown to students after they answer.
Computer in 5 Minutes (up to 10 MCQs)
Paste up to 10 bilingual questions below (one block per question, separated by a blank line), click Parse to preview, then Publish. Same format as elsewhere in this panel.
Shortcut of the Day (short plain-text tip)
Computer One-Liner of the Day (short plain-text tip)
🃏 Flashcard Bank
Live content for the student-facing "Revise with Legal Om" flashcards — adding or bulk-importing an entry here publishes it immediately, there is no separate staging step. Law and Case Law subjects come from the same fixed list of 32 Bare Acts; GK and Computer subjects/topics are open — type a new one any time and it becomes selectable from then on.
Add Flashcard
Bulk Import via Paste
Pick the Category once for this whole batch, paste one or more blocks below (separated by
a blank line), click Parse to preview, then Publish. Bilingual fields use
English text | Hindi text. When Category is Law, every block's
Subject: must exactly match one of the 32 fixed Bare Act names — anything
else is flagged as an error rather than silently saved.
Format, one block per flashcard:
Subject: <exact subject name>
Heading: English text | Hindi text
Major: English text | Hindi text
Details: English text | Hindi text
Generate from MQB
Turns Master Question Bank questions into flashcards — front shows the question and all 4 options with the correct one already highlighted, back shows the explanation exactly as written (never AI-rephrased). Nothing is saved until you review the draft below and click Publish. A question that's already been turned into a card is skipped automatically.
| Category | Subject | Cards | |
|---|---|---|---|
| Loading… | |||
✅ True/False Bank
Live content for the student-facing "Revise with Legal Om" True/False cards — adding or bulk-importing an entry here publishes it immediately, there is no separate staging step. Law and Case Law subjects come from the same fixed list of 32 Bare Acts as the Flashcard Bank; GK and Computer subjects/topics are open — type a new one any time and it becomes selectable from then on.
Add True/False Item
Bulk Import via Paste
Pick the Category once for this whole batch, paste one or more blocks below (separated by
a blank line), click Parse to preview, then Publish. Bilingual fields use
English text | Hindi text. When Category is Law, every block's
Subject: must exactly match one of the 32 fixed Bare Act names — anything
else is flagged as an error rather than silently saved.
Format, one block per item (Answer: accepts True/False, case-insensitive):
Subject: <exact subject name>
Statement: English text | Hindi text
Answer: True
Explanation: English text | Hindi text
| Category | Subject | Statement | Answer | |
|---|---|---|---|---|
| Loading… | ||||
Chat
Knowledge Base
Upload your own model answers, notes and question banks — the grading AI uses these for context/accuracy, and you can generate new practice questions in the same style below.
Add Material
All Material
| Title | Topic | Type | Status | |
|---|---|---|---|---|
| Nothing added yet. | ||||
Generate Practice Questions
Uses your Knowledge Base material as reference to generate new questions in the same style.
📚 Subject Library
Every Act imported from legalom-sources — EN/HI availability, review status, and how much practice content is linked to it so far.
Naya/edited content search (Source se MCQ, RAG) mein tab tak nahi aata jab tak "Re-embed" na chale — Paste & Parse ya Edit karne ke baad ek baar chala do.
⬇️ Download All Acts
Kholo ▾Settings
AI Cost
Estimated Claude API spend, based on this project's own call log (not fetched from Anthropic — there's no API for that). Figures are estimates from Anthropic's list price per token; check the Anthropic Console for your actual bill and remaining balance, which isn't something any app can read back automatically.
| Feature | Calls | Cost |
|---|---|---|
| No usage logged yet. | ||
Other Platform Costs
GitHub, Netlify and Firebase don't offer an API a personal project can use to read back its own bill — that only exists for GitHub/Google Cloud org-level billing accounts, which needs extra one-time setup in each platform's own console (not something I can do from code). So these three are manual for now: check each platform's billing page occasionally and note the number here, so it sits next to the real Claude number above for one place to check everything.
Usually $0 unless you're on a paid plan or heavy on Actions minutes.
Usually $0 unless you're past the free-tier bandwidth/build limits.
Check Firebase Console → Usage and billing. This is the one most likely to move as usage grows.
AI Grading Instructions
Write ongoing instructions for how the AI should grade answer sheets — e.g. "be stricter on case law citations" or "for MP Judiciary, weight local amendments highly." Applied to every submission from now on, no code changes needed.
Two-Factor Authentication
Require a 6-digit code from an authenticator app (Google Authenticator, Authy, etc.) in addition to your password when logging into this admin panel.
Checking status…
OTP Login
Set your phone number to log into this panel with an SMS OTP instead of email+password — same as the student portal's OTP login. Note: OTP login skips two-factor authentication even if you have it enabled above, since it's a full alternative sign-in path, not a second factor on top of your password.
Preview as Student
Opens the student portal in a new tab, signed in as a dedicated test account with full access to every batch and paper — no fees, nothing tracked for real. Use it to try out uploads, MCQs, everything, exactly as a fully-paid student would see it. Only reachable from here — there's no public way to sign into this account.
Free Trial Courses
Which courses show up as options on the public "New Student" free-trial signup form. Each phone number gets exactly one free trial ever, for one of these courses — they can't re-signup once used, and they can't free-trial a course they're already a paid student in.
📅 Exam Dates
Drives the countdown banner and revision schedule on the student dashboard (adpo-mcq.html) —
writes appSettings/examDates. Leave a course's date/time blank to leave it
untouched (not cleared) — only courses you actually fill in get saved.
📅 Course End Dates (Defaults)
The default Course End Date auto-filled for new ADPO students (Create/Bulk Import forms) and
used by "📅 Set ADPO Default" on the Students page — writes appSettings/courseDefaults.
This does NOT change any student's date by itself; use "🔧 Purani Tareekh Theek Karo" below for that.
One-time cleanup: finds every student whose ADPO Course End Date is still the OLD stale default (18 Oct 2026) and sets it to the current default above instead. Never touches a student whose date is anything else (a genuinely custom date, or already correct).
Login Settings
Controls what login options students actually get — enforced on the server, not just hidden in the app, so "Mandatory" or "Off" really holds even from a combined admin+student login.
Enrolled Students
Free / Demo Students
Add Another Admin
1. Firebase Console → Authentication → Users → Add User (email + password).
2. Copy that user's UID.
3. Firebase Console → Firestore → create/open the admins collection →
add a document whose Document ID is that UID (fields can be empty, e.g. { role: "admin" }).
4. That user can now log in to this panel.
Telegram Channels
Channels the Social Media Studio can post posters to directly. To connect one: message
@BotFather on Telegram → /newbot → follow the prompts to get a bot
token (set once via firebase functions:secrets:set TELEGRAM_BOT_TOKEN, not entered
here) → add that bot as an admin of your channel → forward any message from the
channel to @userinfobot to get its numeric Chat ID (looks like
-1001234567890).
Social Media Style Guide
Ongoing instructions for how Claude should draft Social Media Studio posts — e.g. "always keep the headline under 8 words" or "prefer Ember templates for exam alerts, Classic for case law." Applied to every generation from now on, no code changes needed.
Telegram Reverse Connection
DM your bot (@Legalom_social_bot) raw news text — or forward it a photo/PDF — and it drafts a post and auto-posts the poster to every connected channel above, same as the Urgent button. Only Telegram accounts listed here are allowed to trigger it (anyone else who messages the bot is ignored). To find your own numeric Telegram user ID: message @userinfobot directly (don't forward anything — just chat with it) and it replies with your ID.
One-Time Cleanup: Old "Medium" Difficulty Tags
Difficulty is now just Simple / Tough (Tough is earned automatically once 5 students flag a question, for ADPO questions only). Run this once to convert any question still tagged "Medium" from before — across ADPO tests, Book Maker subjects, Question Bank, and the True/False Bank — over to Simple.
Check a Phone Number List
Paste a list of phone numbers (one per line, or comma/space separated — any format works, they're matched by digits only). Get back which of them are already registered as students right now — handy for checking how many of an older contact list have since joined.
Firebase Project
Connected project ID: not configured
🧰 Maintenance Tools
One-off admin utilities — not day-to-day work, safe to leave alone unless you know you need one. Each button here recomputes/overwrites its own data fresh every time, so re-running one is always safe.
Backfill Report Card Mirror
Recomputes mqbReportCardMirror for every already-submitted MQB attempt. Needed after that mirror's own shape changes (a field gets added) — brand-new attempts always pick up a change automatically; this is only for attempts that already existed before it.
📏 Question Length Backfill
Fills in a length field on mqbQuestions (Short/Medium/Long, by character count) — needed for whatever
uses that to filter/balance a test. "Pehle dekho" counts by reading questionEn/Hi directly (no backend
dependency); "Backfill Chalao" calls backfillMqbQuestionLength to actually write the field.
📏 Question Size Rules
Word-count thresholds that decide Short/Medium/Long for the Question Length Backfill above. Saving here changes only the RULE — already-backfilled questions keep their old size until Backfill Chalao runs again.
(isse kam = short)
🎛️ Feature Switches
Toggles for flags that today live as hardcoded const values inside individual page files
(adpo-mcq.html, copy-check.html, etc.) — this page writes to one shared Firestore doc
(appSettings/featureFlags) those pages read on load instead. A flag genuinely missing from
that doc (not yet migrated, or the doc itself doesn't exist) always falls back to that page's own
previous hardcoded value — flipping nothing here can never be what breaks a page that hasn't been
wired up to read it yet.
Switches
Login & Access
These write the exact same docs as the Settings page's Login Settings card and the Free & Demo Access page's master switches — a live listener, not a cache, so a change from either place shows up here immediately and vice versa. Per-course Free/OTP-Demo detail (individual test control, not the whole-course master switch) is only on the Free & Demo Access page — not duplicated here on purpose.
Login Settings
🔐 Login Settings
A single simplified view over the exact same settings/loginPolicy doc as the card above
and the Settings page's Login Settings card — live, not a cache. "OTP se login" and
"Khud reset kar sake" here are ONE switch each for both Enrolled and Free/Demo students together; use
the detailed card above if Enrolled and Free/Demo need genuinely different values for those two.
Advanced — Login setup requirement
🎨 Student Interface
Text, colors and sizes shown on the student dashboard (adpo-mcq.html) — writes one shared doc
(appSettings/studentUI) that page reads on load. Every field's placeholder shows what's
live today — leave a field empty (or a color's checkbox unchecked) and that piece
keeps its default exactly as it is now; nothing changes until you type/pick something and Save.
Clearing a field you'd previously filled in and saving again reverts it back to default too. The
preview on the left updates as you type — it's a live look, nothing is saved until you press Save.
🔐 Login Interface
Text, tile visibility, and tile order shown on the login pages (index.html / join.html / portal.html) —
writes one shared doc (appSettings/loginUI) those pages read via getLoginUISettings
(index.html and join.html don't carry the Firestore SDK, so they read this through a callable — same
reason getFeatureFlags exists). Every field's placeholder shows what's live today
— leave a field empty and it keeps its default; nothing changes until you type/pick something and Save.
The preview on the left updates as you type. footerText is shared by index.html's and
join.html's footers — one field, both pages. This editor doesn't cover colors/sizes yet, though the
engine on those 3 pages already supports them.
Social Media
Paste content (or attach a photo/screenshot), let Claude draft a caption, hashtags and case-law refs, then pick a template and post it yourself — or push it straight to a connected Telegram channel. Instagram/Facebook/YouTube auto-publish isn't set up yet.
1. Input Content
Multiple files (e.g. several pages of one scan) are read together as one source.
Urgent skips review entirely — generates with the default template and posts straight to every connected Telegram channel, no preview.
Content Calendar
My OCR
Standalone text extraction for your own use (e.g. digitizing printed materials) — upload a PDF or image, get the raw OCR text back plus a downloadable Word file. Pure OCR only: no AI grading, summarizing, or analysis runs on this text.
Upload a Document
A PDF longer than 20 pages is automatically split into parts of that size — each part uploads and OCRs one at a time, and you get every part's text plus a combined download at the end.
Fees
Track each student's fee total, what's been paid, and what's remaining. Recording a payment generates a receipt PDF — the student gets it in their Fees tab plus a chat notification.
Student Fees
| Student | Batch | Total Fee | Paid | Discount | Remaining | Last Payment | |
|---|---|---|---|---|---|---|---|
| No students yet. | |||||||
💰 Paid Students
Har payment ki apni line — feeReceipts se, sabse zaroori column Payment Date hai.
| Naam | Number | Plan | Amount | Payment Date | Signup Date | Course End | Last Login |
|---|---|---|---|---|---|---|---|
| Loading… | |||||||
💳 Payment Recovery
Payment gaya, par student ko access nahi mila — client-side handler orderId/paymentId/signature teeno pura backend ko nahi de paaya to aisa hota hai. Yahan sirf orderId daalo — Razorpay se seedha confirm karke (typed ID pe bharosa nahi) access de diya jaayega, uska catalog plan jo bhi ho.
💳 Bulk Access (Payment se)
Ek saath kai payment ke liye — jaise 10-15 bachcho ka ₹11 wala access guest UID pe chala gaya ho. Daam aur/ya tareekh (dono optional — khaali chhodo to sab paid order check honge) se Razorpay ka asli captured payment dhoondhta hai aur uska contact number use karta hai — order ka apna uid galat ho to bhi, ye number checkout pe khud bachche ne bhara tha.
💰 Course Plans
Course catalog — daam, duration, aur enrollment flag har plan ke liye. Ye sirf catalog hai; koi payment yahan se nahi hoti. Ek course (jaise ADPO Foundation) ke kai alag plan ho sakte hain — 3/6/12 mahine, alag daam.
| Course | Daam | Samay | Student | Enrollment Flag | Chalu? | |
|---|---|---|---|---|---|---|
| Loading… | ||||||
🚩 Reported Questions
Students flag MCQ questions they think are wrong, from either the ADPO MCQ system or Book Maker's subject question banks. Ask Claude to suggest a fix, jump to the question with "Go Fix It" to edit it, then mark the report Resolved or Dismiss it once you're done.
📊 Student Review
Pick a student, then one of their submitted MQB tests, to see every question exactly as they saw it — their answer, the correct one, and the explanation. Read-only.
🎮 Challenge Activity
Every peer-to-peer MCQ Challenge students have created in the ADPO MCQ portal — targeted invites and "Challenge Anyone" alike. Read-only: results here are exactly what the scheduled scoring sweep computes, nothing can be edited or cancelled from this screen.
Student Comments (auto-clears 7 days after your reply)