Imported from samatvaintelligence/MBBS-with-Dr.Shivang (
.claude/worktrees/focused-ramanujan-efca21/AGENTS.md). Install upstream withnpx skills add samatvaintelligence/MBBS-with-Dr.Shivang --skill focused-ramanujan-efca21. Copyright stays with the author.
MBBS with Dr. Shivang — project guide for Codex
What this is
A static marketing + lead-capture site for Dr. Shivang Gupta's personal mentorship service that helps Indian NEET aspirants (especially droppers) enrol in MBBS at Russian government medical universities. The 2026 intake is featured at Chuvash State University, Cheboksary.
The brand is the founder, not a company. Dr. Shivang dropped NEET three times, graduated MBBS from Russia, currently interns at G.R.M.C Gwalior, and runs this mentorship 1:1. Every piece of copy should sound like him talking — first-person, empathetic, anti-consultant. Repeating brand promises (verbatim from the PDF):
- "Talking with me is completely free."
- "This is about guidance — not selling."
- "No agent or consultant can offer this kind of real-world support."
Source of truth: /Users/vansh/Downloads/2026MBBSwithDr.Shivang chuvash.pdf is the brand deck. When a content question comes up, check the PDF before inventing copy. A full synthesis lives at /Users/vansh/.Codex/plans/users-vansh-downloads-2026mbbswithdr-sh-gentle-wall.md (read this first if you're picking up the project cold).
Tech stack
- Pure static HTML. No build step, no framework, no package manager.
- Tailwind via CDN (
<script src="https://cdn.tailwindcss.com?plugins=forms,container-queries">). Each HTML file declares its owntailwind.config = {...}inline — these configs are duplicated across pages and must stay in sync. Custom design tokens (colors likeprimary#b90039, fonts Epilogue / Manrope, named spacing). - One JS file:
assets/app.js— vanilla, no modules. Handles WhatsApp/tel/social link rewriting, dormant Calendly click handling, Meta Pixel hooks, UTM/referrer attribution, and the short admissions form. (The language-page toggle is dead code now that language.html is orphaned.) - Photos in
assets/img/— mostly extracted from the brand PDF and resized as JPEG (max 1600px, q=85). Campus photos for Chuvash, Moscow, and Pskov are credited inassets/img/IMAGE_CREDITS.md. - Calendly widget assets are still loaded on
admissions.html, but the current visible flow does not use Calendly. The post-submit handoff is WhatsApp. - Lead backend: Google Apps Script + Google Sheet.
google-apps-script/lead-capture.gsis the deployable endpoint template. The live deployed Web App URL is stored inassets/app.js → LEAD_ENDPOINT_URL. Admin lead review happens in the Google SheetLeadstab. - Meta tracking:
assets/app.jshas Meta Pixel hooks andMETA_PIXEL_IDis set locally. Verify events in Meta Events Manager before scaling paid traffic.
Open the site by double-clicking index.html or running a quick local server (python3 -m http.server from the repo root). There are no tests.
File map
index.html Home: greeting animation, hero gallery, Russia vs India comparison, founder section, concern carousel, CTA strip
mbbs.html Core product page: Chuvash featured + Moscow/Pskov support routes, course details, fees, eligibility, beyond-admission, FAQ
admissions.html Short lead form (name + phone only), then redirects to WhatsApp
life.html Student-life lookbook + masonry gallery (testimonials moved to homepage)
language.html ORPHANED — Russian-language prep course catalogue. No pages link to it. Do not add links back.
assets/app.js All JS (WhatsApp/tel/social links, dormant Calendly hook, Meta Pixel, attribution, admissions form; language toggle is dead code)
assets/img/ Brand photos from the PDF plus credited campus photos
assets/img/IMAGE_CREDITS.md Credits for externally sourced campus images
google-apps-script/lead-capture.gs Google Apps Script lead endpoint template
docs/lead-funnel-setup.md Setup notes for Google Sheets + Meta Pixel + ad URL parameters
Site structure and nav
All four active pages share the same nav order (no Language link anywhere):
MBBS IN RUSSIA | LIFE IN RUSSIA | ADMISSIONS
The site title "MBBS WITH DR. SHIVANG" links back to index.html (homepage). There is no separate "Programs" section — the homepage IS the landing page reached by clicking the title.
On mobile, the primary nav must remain visible as compact pills:
MBBS | LIFE | ADMISSIONS
Do not hide mobile navigation behind social icons. Keep the nav row visually attached to the header; there should not be a divider line above the mobile nav pills.
Page-by-page notes
index.html
- Greeting animation: EF.com-style variable-font weight bounce across 5 languages (English, Hindi, Russian, Tamil, Telugu). Uses Epilogue variable font
font-variation-settings: 'wght'animating from 100 → 900 on each word. Words cycle every ~1.8 s with fade-in/fade-out keyframes (word-enter,word-exit). Noto Sans is loaded as a Google Font fallback for Devanagari / Tamil / Telugu / Cyrillic scripts. - #programs section: Replaced with a full-width Russia vs India Private comparison — two columns on desktop, stacked on mobile. Left card (dark
bg-zinc-950) = Russia recommended path with green-check bullets and fee callouts. Right card (lightbg-surface) = India private cautionary comparison with warning bullets. Reassurance tagline below: "Both paths lead to the same Indian medical licence. The difference is ₹50L+ and 3 years of NEET retakes." Russia card CTA links tombbs.html. - Concern carousel: Three slides, auto-advances every 4 s, dot indicators. This replaced the fabricated testimonial carousel. It should stay as honest parent/student concern messaging unless real student quotes are provided.
- Founder photo: Uses
object-topto keep Dr. Shivang's face in frame.
mbbs.html
Sub-nav and section order (top to bottom):
- Universities — Chuvash featured card, then two "Also supported" route cards: Moscow and Pskov. Each alternate card uses a real campus photo and a single
I want to be a doctorCTA leading toadmissions.html. - Course Details
- Fees — Has a toggle between official tuition + hostel and all-inclusive real cost, plus RUB/INR conversion. Keep the three all-inclusive cards and one official tuition/hostel view readable on mobile.
- Eligibility
- Beyond Admission (mentorship services)
- FAQs
admissions.html
- Short form only:
Full NameandPhone. - Captures
{ fullName, phone }plus hidden attribution fields for UTM/ad params. - Submits to Google Apps Script via
assets/app.js → LEAD_ENDPOINT_URLusingfetch(..., { mode: "no-cors" }). Apps Script responses are opaque in-browser, so a successful browser request redirects to WhatsApp with the prefilled message. - After successful submission, send the prospective student to WhatsApp with "I want to be a doctor" ready to send.
- On submission failure before the request is sent, the page shows a direct WhatsApp fallback so the query is not missed.
- Calendly CSS/JS are still present, but no visible CTA should open Calendly unless the user explicitly asks to reintroduce call booking.
life.html
- Student-life lookbook and masonry photo gallery.
- Testimonial section was moved to
index.html— do not re-add it here.
Conventions
WhatsApp + tel links
Anchors with data-wa="1" are auto-rewritten by app.js to https://wa.me/919211567773?text=I%20want%20to%20be%20a%20doctor. Anchors with data-tel="1" get the same number on tel:. Don't hard-code the WhatsApp URL — use the data attribute and let app.js handle it. Number lives in assets/app.js as WA_NUMBER / WA_MESSAGE constants.
Visible lead CTAs across the site should be one unified action:
I want to be a doctor
Use the official WhatsApp icon from assets/icons/whatsapp.svg, but route normal page CTAs to admissions.html first so name and phone are captured before WhatsApp opens. Direct data-wa="1" links should be reserved for fallback/error states where the form could not submit.
Lead-form state
assets/app.js → initAdmissionsForm() keeps a state object: { fullName, phone }. Required inputs are validated, captured into state, and sent through buildLeadPayload(). If you add a new field to admissions.html, you must also add it to the state object and buildLeadPayload() — these don't auto-derive.
Lead backend + admin access
- Live lead submissions go to the Google Sheet created from
google-apps-script/lead-capture.gs, tab nameLeads. - Current admin Sheet URL:
https://docs.google.com/spreadsheets/d/1OuS24ECwZBXdJrdcnlLFI00HsCUjPxvXizJjav_Bbc4/edit. setupLeadSheet()creates headers and dropdown validation. It also migrates existing rows by header name before trimming removed columns, so schema reorders do not scramble kept data.doPost(e)appends rows.- Sheet columns are ordered for daily lead work first, then tracking: lead identity/contact, consent, status, qualifier score/tier, objection, next action, AI summary, follow-up fields, academic/budget fields, notes/outcome, landing/referrer, UTM fields, Meta campaign/adset/ad IDs, placement, and FB click ID.
- Lead status workflow:
new,qualified,parent call booked,call done,admission started,closed,lost. - If Apps Script code changes, saving the script is not enough. Use Deploy → Manage deployments → Edit → Version: New version → Deploy, then update
LEAD_ENDPOINT_URLif the URL changes. - If the form shows success but no row appears, check Apps Script Executions for a
doPostentry. NodoPostmeans the deployed URL/version/access is wrong or the page is cached.
Optimized Leads schema, in order:
Lead ID, Submitted At, Full Name, Phone, Consent To Contact,
Lead Status, Qualifier Score, Qualifier Tier, Main Objection, Recommended Next Action, AI Summary,
Follow-up Stage, Next Follow-up Due, Follow-up Message, WhatsApp Follow-up Link, Last Contacted At, Follow-up Attempts,
Parent Call Time, NEET Score, Drop Years, Budget, Target Intake,
Notes, Final Outcome, Lost Reason, Optimization Event, Outcome Updated At,
Landing Page, Referrer, UTM Source, UTM Medium, UTM Campaign, UTM Content, UTM Term,
Campaign ID, Adset ID, Ad ID, Placement, FB Click ID
Dropped from the Sheet to keep it usable: raw user agent, duplicate source/ad-platform fields, FBC/FBP, retargeting notes, AI-review flag, offline-upload notes, upload-ready flag, and per-row conversion value. The Optimization tab computes quality value from outcomes instead.
Attribution + tracking
assets/app.jsstores first-touch attribution insessionStorageand writes hidden fields in the admissions form.- Supported ad params:
utm_id,utm_source,utm_medium,utm_campaign,utm_content,utm_term,ad_platform,campaign_id,adset_id,ad_id,placement,fbclid. - Meta Pixel is initialized only when
META_PIXEL_IDis non-empty. - Events implemented:
PageView,WhatsAppClick,LeadFormStart,LeadSubmitted, standardLead,LeadSubmitFailed.CalendlyClicksupport remains inassets/app.jsonly for future/dormant Calendly buttons. - Recommended ad URL pattern is documented in
docs/lead-funnel-setup.md.
Tailwind config sync
Every HTML file ships its own copy of the tailwind.config = {...} block (inline <script id="tailwind-config">). When changing design tokens, edit them in all active HTML files (index, mbbs, admissions, life) or visual drift will appear on whichever page you missed. Long-term this should be extracted to a shared partial, but there's no build step to do that today.
Tone
- First-person Dr. Shivang, not "we" / "our team" / "our mentors."
- Mention drop years matter-of-factly ("Drop years are completely fine — Dr. Shivang dropped three").
- Use INR, not USD. Audience thinks in lakhs.
- The Chuvash 2026 numbers are: ₹9.12L first year (incl. flights), ₹3.35L/yr thereafter, ₹25.85L total over 5.8 years. These are headline numbers — don't paraphrase them away.
- India private college comparison range: ₹70L – 1.5Cr total (established line, used on both
index.htmlandmbbs.html).
Image policy
Most photos in assets/img/ are Dr. Shivang's own (extracted from the brand PDF, ©Dr. Shivang Gupta). The externally sourced campus images are:
chuvash-state-university-campus.jpgmoscow-rudn-university.jpgpskov-state-university.jpg
Keep credits in assets/img/IMAGE_CREDITS.md if these images are edited or replaced.
If you swap an image, also rewrite any caption / alt text that referenced the previous image's content.
What not to invent
The site previously claimed 1.2K+ Students Placed, 12 Partner Universities, 100% Visa Success. These were fabricated and have been removed. Don't add metrics that aren't grounded in something real Dr. Shivang has said. Honest replacements like 3 yrs NEET dropper / 6 yrs MBBS in Russia / 1:1 mentorship are fine.
Current progress
- Release 1 lead capture is live. Google Apps Script is deployed,
LEAD_ENDPOINT_URLis set inassets/app.js, and a test form submission appeared in the Google SheetLeadstab. - Google Sheet is the current admin panel. Filled forms are accessed at
https://docs.google.com/spreadsheets/d/1OuS24ECwZBXdJrdcnlLFI00HsCUjPxvXizJjav_Bbc4/edit, tabLeads. - Fake testimonials were removed. Homepage/life-page fake testimonial content was replaced with honest parent/student concern messaging.
- Parent-call/follow-up fields remain in the Sheet. The public form now captures only name + phone; detailed qualification happens over WhatsApp/follow-up.
- UTM/ad attribution is wired. The form captures campaign/adset/ad/placement fields and stores them in the lead row.
- Meta Pixel is configured locally.
META_PIXEL_IDis set inassets/app.js; verify events in Meta Events Manager before scaling traffic. - Single CTA flow is live locally. Visible lead CTAs use
I want to be a doctor, point to the short details form first, and then redirect to WhatsApp after submission. - Mobile navigation is live locally. All active pages show mobile nav pills for MBBS, Life, and Admissions.
- Facebook link is live locally.
FACEBOOK_URLpoints tohttps://www.facebook.com/share/18g92rEW95/?mibextid=wwXIfr. - Moscow/Pskov support routes are live locally. Kazan, Pirogov, and Pavlov placeholder cards were removed from
mbbs.html. - Release 3 follow-up workflow is added locally.
google-apps-script/lead-capture.gsnow generates follow-up stage, due time, WhatsApp draft link, message template, contact tracking, and attempt count. Paste/deploy the latest script and runsetupLeadSheet()plusrefreshFollowUpQueue()in Apps Script. - Release 4 qualifier layer is added locally. The Sheet now computes qualifier score/tier, main objection, and recommended next action.
AI Summaryexists as the future AI/chat summary field. This is rules-based until real lead data justifies a secure AI backend. - Release 5 optimization layer is added locally. The Sheet now tracks optimization event, lost reason, outcome timestamp, and an
Optimizationdashboard tab via Apps Script. It does not send data to Meta automatically.
2026 release roadmap
Implement the broader ads + AI plan in 5 releases, not all at once.
Release 1 — Make lead capture live
Goal: every website query becomes a row that Dr. Shivang can track.
Status:
- Done:
google-apps-script/lead-capture.gsdeployed. - Done: connected to Google Sheet
MBBS-with-Dr.Shivang, tabLeads. - Done: deployed Web App URL pasted into
assets/app.js → LEAD_ENDPOINT_URL. - Done: form submission verified in the Sheet.
- Done: real Meta Pixel ID added to
assets/app.js → META_PIXEL_ID. - Done: consent-to-contact line added before submit.
Admin system:
- Google Sheet is the v1 mini-CRM.
- Lead statuses:
new,qualified,parent call booked,call done,admission started,closed,lost.
Release 2 — Ads + tracking
Goal: identify which ads produce real parent calls and admissions intent, not just views.
- Campaign split: 60% Instagram/WhatsApp click-to-message lead ads, 25% website/instant-form lead ads, 15% retargeting.
- Every ad URL should include UTMs and Meta IDs so the Sheet records which campaign, ad set, ad, and placement produced the lead.
- Start with a ₹5k–₹10k tracking test before spending the full ₹50k test budget.
- Keep Advantage+ placements/audience on unless the early data shows waste.
- Prefer safe ad copy like “For NEET students considering MBBS in Russia” instead of copy that directly labels a person as failed or unsuccessful.
Release 3 — Follow-up workflow
Goal: fix last year’s leakage where students used the guidance but enrolled elsewhere.
- Use the Sheet as the source of truth.
- New lead: WhatsApp acknowledgement within 5 minutes.
- Qualified lead: push parent call booking.
- No reply after 24 hours: fee summary + free-call reminder.
- No reply after 3 days: Dr. Shivang story + parent FAQ.
- Interested but not ready: retarget with proof/FAQ Reels.
- Implementation:
google-apps-script/lead-capture.gsadds follow-up stage, next due time, WhatsApp draft link, message template, contact tracking, and attempt count. RunsetupLeadSheet()after pasting the updated script, and userefreshFollowUpQueue()to refresh follow-up stages for existing rows.
Release 4 — AI qualifier
Build only after 1–2 weeks of real tracked leads.
The AI should:
- Ask 5–6 qualifying questions.
- Answer only from approved site/PDF FAQ content.
- Score the lead.
- Summarize objections.
- Hand off to Dr. Shivang on WhatsApp or in the Sheet.
Implementation constraints:
- First version should be a static-site chat widget plus a backend proxy.
- Do not expose Gemini/OpenAI API keys in frontend code.
- Google Apps Script or Cloudflare Worker can call Gemini/OpenAI securely.
- AI writes summary + score back to the same
LeadsSheet. - AI must not close admissions or promise admission, visa, FMGE/NExT outcomes, seats, discounts, or unsupported claims.
Release 5 — Optimization
Goal: optimize Meta around lead quality and admissions outcomes.
- Once admissions outcomes exist, feed quality data back to Meta using Conversions API or offline conversion upload.
- Optimize for cost per qualified lead, cost per parent call, cost per admission started, cost per admission closed, and lost reason.
- Use Sheet/CRM fields as first-party outcome data for better retargeting and creative decisions.
Other open work
- Private admin dashboard not built. Leads are currently accessed in Google Sheets. Do not expose lead data in the public static site. If a web admin UI is needed, build a separate Google Apps Script admin webapp restricted to the owner account that reads/writes the same
Leadssheet. - Tailwind configs duplicated 4× (language.html excluded as orphaned). Consider a single
assets/tailwind-config.jsif this becomes painful. - Hosting is currently GitHub Pages + custom domain. Domain is
mbbswithdrshivang.in; DNS and GitHub Pages should be checked if HTTPS/domain behavior regresses.
Reference: WhatsApp + key numbers
- WhatsApp: +91-9211567773 (prefilled message: "I want to be a doctor")
- Instagram:
@mbbswithdr.shivang,@dr.shivang_skywalker - Calendly:
https://calendly.com/samatvaintelligence/30min - Featured university (2026): Chuvash State University, Cheboksary
- Total course cost: ₹25.85L over 5.8 years (₹9.12L yr 1 incl. flights; ₹3.35L/yr yrs 2–6)
- India private comparison: ₹70L – 1.5Cr total
