AutoDock Vina, reimagined for the web and mobile.
Also available as a native iOS & Android app built with Expo React Native.
Search 200,000+ structures from RCSB Protein Data Bank with organism, resolution, and method metadata.
RCSB PDBSearch 100M+ compounds from PubChem by name, SMILES, or drug name. View 2D structures and properties.
PubChemAutomatic removal of water molecules and heteroatoms. Protonation at pH 7.4 with partial charges.
AutomatedFull docking engine with configurable grid box, exhaustiveness, energy range, and number of poses.
Vina 1.2.5Submit jobs and track progress in real time. Queue position, status updates, and completion notifications.
Background WorkerReceive styled HTML emails when docking completes or fails, with direct links to results.
SMTPInteractive Mol* viewer for proteins, ligands, and docked poses with full rotation and zoom.
Mol*Export docked poses in PDB or PDBQT format for use in PyMOL, Chimera, or other tools.
PDB / PDBQT16 curated famous dockings with search and category filters. Tap to start docking instantly.
Imatinib, Aspirin, Caffeine …Native iOS & Android app built with Expo React Native. Same features, same backend.
Expo SDK 52MolDock includes 16 curated famous protein-ligand dockings across 7 categories. Search, filter, and tap any example to skip straight to docking with pre-filled protein and ligand.
| Ligand | Protein | Category | Description |
|---|---|---|---|
| Imatinib | BCR-ABL Kinase (1IEP) | Cancer | First targeted tyrosine kinase inhibitor for CML |
| Nutlin-3a | MDM2 (4HG7) | Cancer | Reactivates p53 tumor suppressor |
| Aspirin | COX-2 (5IKR) | Pain | World's most widely used drug |
| Caffeine | A2A Receptor (3RFM) | Neuroscience | Blocks adenosine receptors |
| Sildenafil | PDE5 (1UDT) | Cardiovascular | Famous repurposed drug |
| Oseltamivir | Neuraminidase (2HT8) | Antiviral | Tamiflu — influenza antiviral |
| Remdesivir | RdRp (7BV2) | Antiviral | COVID-19 RNA replication terminator |
| Lopinavir | HIV-1 Protease (1MUI) | Antiviral | HIV protease inhibitor |
| Paclitaxel | Tubulin (1JFF) | Cancer | Taxol — stabilizes microtubules |
| Metformin | AMPK (4CFF) | Metabolic | Most prescribed diabetes drug |
| Tamoxifen | ERα (3ERT) | Cancer | Breast cancer SERM |
| Donepezil | AChE (2RG6) | Neuroscience | First-line Alzheimer's treatment |
| Erlotinib | EGFR Kinase (3NYA) | Cancer | Lung cancer EGFR inhibitor |
| Atorvastatin | HMG-CoA (3OGP) | Cardiovascular | Lipitor — best-selling drug in history |
| Methotrexate | DHFR (2ITO) | Cancer | Antimetabolite chemotherapy |
| Penicillin G | PBP (1PWC) | Antibiotic | Started the antibiotic revolution |
Categories: Cancer, Antiviral, Neuroscience, Cardiovascular, Pain & Inflammation, Metabolic, Antibiotic
MolDock guides you through a 4-step molecular docking process:
| Step | Route | Description |
|---|---|---|
| 1 | /docking/protein |
Search and select a protein from RCSB PDB. View it in 3D with Mol*. |
| 2 | /docking/marinate |
Prepare the protein — remove water molecules and heteroatoms, add charges. |
| 3 | /docking/ligand |
Search PubChem for a ligand. View molecular properties and 2D structure. |
| 4 | /docking/cook |
Configure docking parameters (grid box, exhaustiveness), add email, and submit. |
/examples |
Browse 16 curated famous dockings with search and category filters. | |
/dashboard |
Real-time job tracker. Auto-polls every 3 seconds for status updates. | |
/results/[jobId] |
View docked pose in 3D, binding affinities table, download PDB/PDBQT. |
MolDock includes a standalone Expo React Native mobile app in the mobile/ directory. It provides the same 4-step docking workflow, examples gallery, and results viewer — optimized for touch.
Mobile apps call RCSB and PubChem APIs directly — no server-side proxy needed.
Uses the same CapRover backend at lcbc-server.apps.johnseong.com. No changes required.
Protein structures rendered in native WebView components via RCSB 3D viewer.
File-based navigation matching the web app's route structure.
cd mobile
npm install
npx expo start
Scan the QR code with Expo Go on your phone, or press i for iOS simulator / a for Android emulator.
# Install EAS CLI
npm install -g eas-cli
# Configure (first time only)
eas build:configure
# Build for both platforms
eas build --platform all
# Submit to stores
eas submit --platform ios
eas submit --platform android
| Field | Value |
|---|---|
| Bundle ID (iOS) | com.johnseong.dockit |
| Package (Android) | com.johnseong.dockit |
| Backend URL | https://lcbc-server.apps.johnseong.com |
| Theme | Dark mode only |
| Orientation | Portrait |
vina binary in PATHobabel binary in PATH# Clone the repository
git clone https://github.com/johnseong/LCBC-Dock.git
cd LCBC-Dock
# Install frontend dependencies
npm install
# Install backend dependencies
pip3 install -r requirements.txt
# Copy and configure environment variables
cp .env.example .env
# Start both frontend and backend concurrently
npm run dev
# Or run separately:
npm run next-dev # Frontend on :3000
npm run fastapi-dev # Backend on :8000
Open http://localhost:3000 to access the app.
The FastAPI backend exposes a RESTful API. Interactive docs are available at /docs when the backend is running.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/proteins/search?q={query} |
Search RCSB PDB with detailed metadata |
| GET | /api/proteins/{pdb_id} |
Get protein details (title, organism, resolution) |
| GET | /api/proteins/{pdb_id}/center |
Compute geometric center for grid box |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/ligands/search?q={query} |
Search PubChem by name or SMILES |
| GET | /api/ligands/{cid} |
Get ligand details, synonyms, image URL |
| GET | /api/ligands/{cid}/sdf |
Download 3D SDF structure |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/dock |
Submit a docking job |
| GET | /api/jobs/{job_id} |
Get job status and queue position |
| GET | /api/results/{job_id} |
Get full results with poses and affinities |
| GET | /api/results/{job_id}/download/pdb |
Download docked output as PDB |
| GET | /api/results/{job_id}/download/pdbqt |
Download docked output as PDBQT |
{
"protein_pdb_id": "4HG7",
"ligand_cid": 11314340,
"ligand_name": "Nutlin-3a",
"center_x": 0.0, // auto-computed if all zeros
"center_y": 0.0,
"center_z": 0.0,
"size_x": 20.0, // grid box size in Angstroms
"size_y": 20.0,
"size_z": 20.0,
"exhaustiveness": 8, // 1-32, higher = more thorough
"num_modes": 9, // number of poses to generate
"energy_range": 3.0, // kcal/mol
"email": "user@example.com" // optional
}
All configuration is through environment variables. Copy .env.example to .env and update:
| Variable | Description | Default |
|---|---|---|
| SMTP_HOST | SMTP server hostname | smtp.gmail.com |
| SMTP_PORT | SMTP server port | 587 |
| SMTP_USER | SMTP username / email | — |
| SMTP_PASS | SMTP password or app password | — |
| FROM_EMAIL | Sender address for notifications | noreply@dockit.app |
| BASE_URL | Public URL (for email links) | https://lcbc-client.apps.johnseong.com |
| LCBC_DB_PATH | SQLite database file path | lcbc_dock.db |
| VINA_PATH | AutoDock Vina executable path | vina |
To use Gmail for notifications:
SMTP_USER to your Gmail address and SMTP_PASS to the app passwordMolDock uses two CapRover apps: lcbc-client (frontend, port 3000) and lcbc-server (backend, port 8000).
captain.apps.yourdomain.com)npm install -g caproverlcbc-client and lcbc-serverThe included deploy.sh handles the captain-definition swap automatically:
# Login to CapRover (one-time, saves credentials)
caprover login
# Deploy everything (frontend + backend)
bash deploy.sh all
# Deploy frontend only
bash deploy.sh frontend
# Deploy backend only
bash deploy.sh backend
| App | Dockerfile | Container Port |
|---|---|---|
| lcbc-client | Dockerfile.frontend | 3000 |
| lcbc-server | Dockerfile.backend | 8000 |
In CapRover dashboard → lcbc-server → App Configs:
Go to Environmental Variables → Bulk Edit and paste:
SMTP_USER=yourname@gmail.com
SMTP_PASS=your_16_char_app_password
FROM_EMAIL=yourname@gmail.com
BASE_URL=https://lcbc-client.apps.johnseong.com
Go to Persistent Directories and add:
| Path in App | Label |
|---|---|
| /app/data | lcbc-data |
This keeps the SQLite database alive across redeploys.
Go to HTTP Settings → Enable HTTPS for both apps.
# Check backend health
curl https://lcbc-server.apps.johnseong.com/
# Expected: {"message":"MolDock API v2.0 is running!","docs":"/docs"}
# Check frontend
open https://lcbc-client.apps.johnseong.com
# If backend returns 502, redeploy it
bash deploy.sh backend
The backend Docker image includes AutoDock Vina 1.2.5 and Open Babel pre-installed.
docker build -f Dockerfile.backend -t dockit-api .
docker run -p 8000:8000 \
-e SMTP_USER=your@email.com \
-e SMTP_PASS=your-app-password \
-e BASE_URL=https://lcbc-client.apps.johnseong.com \
-v lcbc-data:/app/data \
dockit-api
The -v lcbc-data:/app/data flag persists the SQLite database across container restarts.
docker build -f Dockerfile.frontend -t dockit-web .
docker run -p 3000:3000 dockit-web
Next.js 13 with App Router, React, TypeScript, Tailwind CSS, Mol* (3D molecular viewer), Material UI icons.
Expo SDK 52, React Native, Expo Router, WebView for 3D viz. Direct API calls (no CORS proxy).
FastAPI (Python) with async endpoints. Background docking worker thread processes jobs from SQLite queue.
AutoDock Vina 1.2.5 for molecular docking. Open Babel for file format conversions (PDB, PDBQT, SDF).
RCSB PDB for protein structures. PubChem for small molecule / ligand data and 3D conformers.
CapRover (Docker PaaS) for web frontend + backend. EAS Build for iOS and Android app store releases.
When a job is submitted, the background worker: