Free, Privacy-First, Human-In-The-Loop Chrome Extension
Native Manifest V3 browser automation assistant for the official Indian Visa Application Center (IVAC).
- ❌ No Standalone Website
- ❌ No Localhost Server Required
- ❌ No Cloned or Fake Pages
- ✅ 100% Native Chrome Extension injecting a floating Shadow DOM panel directly into
https://appointment.ivacbd.com/*.
- 🛡️ Human-In-The-Loop Safety: Never bypasses CAPTCHA, Turnstile, or OTP. Automatically halts and alerts the user to complete verification steps manually.
- ⚡ Shadow DOM Isolation: Complete CSS and DOM isolation prevents any conflicts with the host website stylesheet.
- 📅 Smart Slot Availability Checker: Scrapes open appointment dates and matches against user priority preferences with configurable jitter and 429 exponential backoff.
-
📄 Document Upload Automation: Safely uploads primary and multiple additional applicant PDFs (
$\le 500\text{KB}$ ) using HTML5DataTransfer. -
🔐 Local Privacy: Zero external telemetry, zero tracking, zero remote analytics. All configurations are stored locally in
chrome.storage.local.
Invisa/
├── manifest.json # Manifest V3 (targets https://appointment.ivacbd.com/*)
├── package.json # Dependencies and npm scripts
├── tsconfig.json # TypeScript compiler settings
├── vite.config.ts # Extension bundler (Rollup)
├── .gitignore # Git ignore rules
│
├── public/
│ └── icons/ # Chrome Extension icons (16, 48, 128 px)
│
├── src/
│ ├── background/
│ │ └── serviceWorker.ts # Service Worker lifecycle & tab messaging
│ │
│ ├── content/
│ │ ├── contentScript.ts # Content script entry point (auto-runs on IVAC)
│ │ ├── injectPanel.ts # Shadow DOM injector with pointer-events transparency
│ │ ├── pageDetector.ts # Real IVAC page & route detector
│ │ └── domObserver.ts # MutationObserver & URL change monitor
│ │
│ ├── automation/
│ │ ├── automationEngine.ts # Main automation orchestrator
│ │ ├── stateMachine.ts # 9-stage finite state machine
│ │ └── actions/ # DOM interaction modules
│ │ ├── actionValidator.ts # Defensive safety & visibility checks
│ │ ├── loginActions.ts # Form field population
│ │ ├── uploadActions.ts # DataTransfer PDF injector
│ │ ├── navigationActions.ts # Safe button clicks & popup dismisser
│ │ └── appointmentActions.ts # Slot scraper & calendar picker
│ │
│ ├── selectors/ # Centralized IVAC DOM selector definitions
│ │ ├── loginSelectors.ts # Sign-in field selectors
│ │ ├── otpSelectors.ts # 6-box OTP field selectors
│ │ ├── uploadSelectors.ts # Document upload & confirmation selectors
│ │ ├── appointmentSelectors.ts# Calendar & slot selectors
│ │ └── index.ts # Selectors barrel export
│ │
│ ├── storage/ # Local storage adapters (chrome.storage.local)
│ │ ├── settingsStorage.ts
│ │ ├── sessionStorage.ts
│ │ └── storageAdapter.ts
│ │
│ ├── utils/ # Helper utilities
│ │ ├── logger.ts # Masked logger (INFO, SUCCESS, WARNING, ERROR, ACTION)
│ │ ├── dateMatcher.ts # Strict Priority vs Date Rotation
│ │ ├── backoff.ts # Jitter (±5s) & 429 exponential backoff
│ │ ├── validation.ts # PDF format and <=500KB size validation
│ │ └── domHelpers.ts # DOM query fallbacks & visibility checks
│ │
│ └── ui/ # React UI inside Shadow DOM
│ ├── App.tsx # Floating panel container & drag logic
│ ├── styles.css # Shadow DOM encapsulated dark theme styles
│ └── components/
│ ├── Header.tsx # Drag handle (⠿ ◆ VISA AUTOMATOR drag me _ ✕)
│ ├── ProgressTracker.tsx# 9-stage visual stepper (1-2-3-4-5-6-7-8-9-✓)
│ ├── RunTab.tsx # Credentials, 6 OTP boxes, START/STOP, Metrics, Turnstile
│ ├── ConfigTab.tsx # Mission, Center, Load Session, PDF queue, Toggles, Pills
│ └── LogsTab.tsx # Masked logs stream & JSON/TXT export
│
└── tests/ # Vitest unit tests (21/21 passing)
- Node.js (v18 or higher)
- npm (v9 or higher)
# 1. Install dependencies
npm install
# 2. Run unit tests
npm test
# 3. Build Chrome Extension
npm run buildThe compiled Chrome Extension will be generated inside the dist/ directory:
dist/manifest.jsondist/background.jsdist/content.jsdist/icons/
- Open Google Chrome and navigate to:
chrome://extensions/ - Enable Developer mode via the toggle in the top-right corner.
- Click the Load unpacked button in the top-left corner.
- Select the
dist/directory from this project:d:\Project _ For client\Invisa\dist - Open the official portal:
👉
https://appointment.ivacbd.com/signin - The VISA AUTOMATOR floating panel will automatically appear on the webpage.
- No Remote Servers: This extension does not communicate with any third-party backend.
- Zero Credentials Leakage: Passwords are never saved unless the user explicitly enables local storage.
- No Bypass Mechanisms: Complies with web security standards by leaving CAPTCHA and OTP solving to human operators.