A multi-tenant SaaS platform that lets any school or business deploy a fully functional AI chatbot — powered by their own website data — in minutes. One script tag. Zero technical knowledge required.
Schools and small businesses worldwide handle hundreds of repetitive inquiries every day — fee structures, admission dates, timings, faculty details. Hiring dedicated staff for this is expensive, and off-the-shelf chatbot solutions are either too generic, too costly, or require extensive manual setup.
School admins and receptionists answer the same 20–30 questions every day — fee structure, admission deadlines, timings — consuming hours of productive time.
Enterprise chatbot platforms charge thousands of dollars per month and require weeks of manual content setup — completely out of reach for schools and SMBs.
Existing tools require technical knowledge to train chatbots on custom data. School admins have no time or expertise for this.
Static chatbots go stale. When a school updates its fees or admission dates on its website, the chatbot still gives old answers — damaging trust.
The core question was: Can we build an AI chatbot that reads a school's own website automatically and stays updated — with zero effort from the client?
A multi-tenant SaaS platform where each client is fully onboarded in under 10 minutes. The platform auto-scrapes their website, builds a GPT context, and delivers an embeddable chatbot widget — no manual data entry, no technical knowledge required.
The admin dashboard where each school registers, pastes their URL, and gets their chatbot script in under 10 minutes.
The platform is built on Flask with a clean multi-tenant architecture — each school's data is completely isolated. The system combines intelligent scraping, GPT-4o-mini, response caching, and a dynamically served embeddable widget.
┌──────────────────────────────────────────────────────────────┐
│ ADMIN DASHBOARD (Flask + Jinja2) │
│ Register / Login → Add School URL → View Chatbot Script │
└───────────────────────────┬──────────────────────────────────┘
│
┌───────────────────────────▼──────────────────────────────────┐
│ INTELLIGENT SCRAPER │
│ BeautifulSoup (static sites) + Playwright (JS/React sites) │
│ MD5 hash → skip scrape if site unchanged │
│ Auto-detect: fees, admission, contact pages │
│ 50-page limit with priority ordering │
└───────────────────────────┬──────────────────────────────────┘
│ scraped data → per-school folder
┌───────────────────────────▼──────────────────────────────────┐
│ SMART CONTEXT BUILDER │
│ Priority pages (about/fees/admission) → 4000 chars each │
│ Standard pages → 1000 chars each │
│ Feeds ranked context to GPT-4o-mini │
└────────────┬────────────────────────────────┬────────────────┘
│ │
┌────────────▼────────────┐ ┌──────────────▼──────────────┐
│ GPT-4o-mini (OpenAI) │ │ Response Cache │
│ System prompt per │ │ 500 Q&A pairs per school │
│ school with context │ │ 40–60% API cost reduction │
└────────────┬────────────┘ └─────────────────────────────┘
│
┌────────────▼────────────────────────────────────────────────┐
│ EMBEDDABLE WIDGET (Vanilla JS) │
│ Served at /widget.js?school_id=xxx │
│ SVG avatar + tooltip + conversation memory (10 turns) │
│ Page link buttons + multilingual (EN / Roman Urdu / Urdu) │
│ Zero dependency — works on any website / framework │
└─────────────────────────────────────────────────────────────┘
│ APScheduler
┌────────────▼────────────────────────────────────────────────┐
│ AUTO-SYNC (Daily at 6 AM) │
│ Hash check → scrape only if website changed │
│ Cache clears on update │
└─────────────────────────────────────────────────────────────┘
Automatically detects whether a website is static or JavaScript-rendered and switches scraping strategy accordingly:
Not all pages are equal. The context builder ranks pages before sending them to GPT-4o-mini:
Identical questions return cached answers instantly — no OpenAI API call needed. Cache holds up to 500 Q&A pairs per school, reducing API costs by an estimated 40–60% for high-traffic clients.
A dynamically served JavaScript widget that works on any website regardless of framework:
APScheduler runs a daily scrape at 6 AM. If the website's homepage MD5 hash matches the stored hash, scraping is skipped entirely. If changed, data updates automatically and the response cache clears — keeping chatbot answers always current.
The embeddable widget live on a school's website — answering visitor questions in real time from the scraped website data.
Designed as a commercially viable SaaS product targeting school admins, coaching centers, and small businesses with websites — across Pakistan, UAE, UK, US, and anywhere in the world.
| Plan | Price | Features |
|---|---|---|
| Starter | Rs. 2,000 / month | 1 chatbot, up to 20 pages scraped |
| Growth | Rs. 5,000 / month | 3 chatbots, up to 50 pages, priority support |
| Enterprise | Custom | Unlimited chatbots, custom branding, dedicated support |
Client acquisition strategy: target school admins and business owners directly. Demo takes under 10 minutes — show them their own website's chatbot answering live questions.
Cache-Control: no-store headers on the /widget.js endpoint — forcing a fresh fetch every time.
The widget supports English, Roman Urdu, and Urdu — with smart page link buttons that surface relevant pages based on the visitor's question.
| Client | Pages Scraped | What It Answers |
|---|---|---|
| The City School | 33 pages | Admission, fee structure, branch locations, timings |
| Yveloxy | 27 pages | Founder story, services, blog content, contact info |
| Young Scholars | Full site | Timings, faculty details, contact, school information |
| Layer | Platform | Notes |
|---|---|---|
| Backend + Widget | Render.com / Railway.app | Gunicorn (1 worker, 120s timeout) — free tier |
| Headless Browser | nixpacks.toml on cloud | Chromium + Playwright configured for cloud environment |
| Process Manager | Gunicorn | Handles concurrent requests; background scraping via Python threads |
| Scheduler | APScheduler (in-process) | Daily auto-sync at 6 AM per tenant |
Designing complete data isolation between tenants from day one — separate directories, separate caches, separate API keys — prevents cross-contamination bugs that are very hard to fix later.
Real-world websites vary enormously. Building a dual-mode scraper (static + JS-rendered) with graceful fallback taught practical web crawling resilience far beyond tutorial examples.
Feeding 50 pages of raw text to GPT produces poor results. Ranking, trimming, and prioritizing context is as important as the AI model itself for answer quality.
Never block the user on a long-running task. Background threading + polling gave a smooth experience where the UI stayed responsive during 90-second scrapes.
We build plug-and-play AI chatbots that answer your customers' questions 24/7 — using your own website data, with zero manual setup. Serving clients in Pakistan, UAE, UK, US, and worldwide.