QDesign is a next-generation collaborative platform that revolutionizes biological research by combining multimodal data integration, explainable AI, and knowledge graph visualization. Scientists can create research projects, upload diverse biological data, explore semantic relationships, and leverage AI assistance—all with full biological interpretability.
- 📁 Project Workspaces - Create collaborative research environments with objectives, constraints, and notes
- 📤 Multimodal Upload - Support for PDFs, CIF, FASTA, images, and text documents
- 🔬 3D Visualization - Interactive protein structure viewer and data annotation tools
- 🕸️ Knowledge Graphs - Auto-generated semantic networks powered by XQdrant vector database
- 🔍 Explainable Search - Understand why proteins are similar in biological terms
- 🤖 AI Co-Scientist - Interactive AI assistant with human-in-the-loop feedback
- 📝 Research Export - Generate IEEE-formatted research papers automatically
- 🔄 Git-like History - Version control for research objectives and findings
- 👥 Real-time Collaboration - Live updates and team synchronization
Category: Use Case 4 - Multimodal Biological Design & Discovery
Modern biological research faces critical challenges:
| Challenge | Impact | Our Solution |
|---|---|---|
| 🗂️ Data Fragmentation | Scattered across multiple formats | Unified multimodal workspace |
| 🔗 Hidden Connections | Valuable relationships remain undiscovered | Automated knowledge graphs |
| ❓ Explainability Gap | Vector search doesn't explain why | XQdrant explainability layer |
| 🤝 Collaboration Friction | Difficult to share context | Real-time collaborative workspaces |
| 📚 Knowledge Transfer | Hard to document workflows | Auto-generated IEEE papers |
|
Watch on YouTube See QDesign in action |
View on Canva Detailed slide deck |
qdesign.moetezfradi.me Try it yourself |
Login: [email protected] | Password: 123456
Or create your own account and join with code: WKYQ35
⚠️ Note: LLM and retrieval endpoints limited due to free tier
Moetez Fradi • Ghassen Naouar • Ahmed Saad • Omar Chiboub
Modern, intuitive workbench interface
Centralized data collection and organization
Interactive tools for exploring biological structures
Multimodal knowledge graph with explanatory edges - PDFs, images, structures, and sequences interconnected
QDesign follows a microservices architecture with four main components:
graph TB
UI[🖥️ Next.js UI] --> Core[🔧 NestJS Core]
Core --> MongoDB[(💾 MongoDB)]
Core --> KG[🧠 Knowledge Service]
Core --> CS[🤖 Co-Scientist Service]
KG --> XQ[⚡ XQdrant]
CS --> XQ
XQ --> |Structures| ESM[ESM-2 Embeddings]
XQ --> |Text| BERT[MiniLM Embeddings]
XQ --> |Images| CLIP[CLIP Embeddings]
📋 View Detailed Architecture Diagram
| Component | Technology | Purpose |
|---|---|---|
| UI | Next.js 16 + React 19 | Real-time collaborative interface |
| Core | NestJS 11 + MongoDB | Authentication, project management, file storage |
| XQdrant | Rust (Custom Qdrant fork) | Explainable vector search (see below) |
| Knowledge Service | FastAPI + Python | Graph generation & expansion |
| Co-Scientist | LangChain + LangGraph | AI research assistant |
Traditional vector databases like Qdrant find similar items but provide black box results:
"Protein A is 95% similar to Protein B"
But why? For biological research, understanding the biological reasons is critical.
XQdrant is our custom Rust fork of Qdrant with an explainability layer that answers the "why" question.
sequenceDiagram
User->>XQdrant: Search for similar proteins
XQdrant->>Qdrant Core: Compute cosine similarity
Qdrant Core->>Explainability Module: Analyze vectors
Explainability Module->>Explainability Module: Identify top contributing dimensions
Explainability Module->>Mapping DB: Map dims → biological properties
Mapping DB-->>User: "Similar because: α-helix (87%), surface exposure (6%)"
- Standard Search - User queries for similar structures
- Qdrant Core - Computes similarity across 1280-dim ESM2 embeddings
- Explainability Module (
explainability.rs) - Identifies top dimensions contributing to similarity - Biological Mapping - Maps dimensions to properties using
esm2_dim_to_biological_property.json - Interpreted Result - Returns biological explanations
Query: Find proteins similar to 1ABC.pdb
Traditional Result:
{
"id": 42,
"score": 0.95
}XQdrant Result:
{
"id": 42,
"score": 0.95,
"score_explanation": {
"top_dimensions": [
{"dimension": 1160, "contribution": 0.878, "property": "α-helix propensity"},
{"dimension": 234, "contribution": 0.059, "property": "Surface accessibility"},
{"dimension": 736, "contribution": 0.019, "property": "Charge distribution"}
]
}
}Interpretation: "These proteins are similar because both have high α-helix content (87.8% contribution) and similar surface exposure patterns (5.9%)."
| Collection | Model | Dimensions | Purpose |
|---|---|---|---|
🧬 qdesign_structures |
ESM-2 | 1280 | PDB/CIF 3D protein similarity |
🔤 qdesign_sequences |
ESM-2 | 1280 | FASTA homology search |
📄 qdesign_text |
MiniLM-L6-v2 | 384 | PDFs, papers, documents |
🖼️ qdesign_images |
CLIP ViT-B-32 | 512 | Diagrams, microscopy |
Our dimension-to-property mapping is based on probing experiments inspired by this BioRxiv paper:
- Extract protein sequences from CIF files
- Generate ESM2 embeddings (1280 dimensions)
- Compute biological properties (secondary structure, accessibility, flexibility)
- Train linear probes to predict properties from embeddings
- Analyze probe weights to identify important dimensions
- Create dimension → biological meaning mappings
📓 Full methodology: Interpretability/esm_cif_interpretability.ipynb
| Technology | Version | Purpose |
|---|---|---|
| Next.js | 16.1.4 | React framework with SSR |
| React | 19.2.3 | UI library |
| TypeScript | Latest | Type safety |
| Tailwind CSS | 4.x | Styling |
| Socket.io | 4.8.3 | Real-time sync |
| @xyflow/react | 12.10.0 | Knowledge graph viz |
| NGL | 2.4.0 | 3D molecular viewer |
| React PDF | 10.3.0 | PDF rendering |
| Zustand | 5.0.10 | State management |
| TanStack Query | 5.90.20 | Server state |
| Framer Motion | 12.29.0 | Animations |
| Technology | Version | Purpose |
|---|---|---|
| NestJS | 11.0.1 | Backend framework |
| Technology | Version | Purpose |
|---|---|---|
| NestJS | 11.0.1 | Backend framework |
| Node.js | 18+ | Runtime |
| MongoDB | 9.1.5 (Mongoose) | Database for users, projects |
| Socket.io | 4.8.3 | WebSocket server |
| JWT | 11.0.2 | Authentication |
| Passport | 0.7.0 | Auth middleware |
| Axios | 1.13.4 | HTTP client |
| Technology | Version | Purpose |
|---|---|---|
| FastAPI | 0.109.0+ | REST API framework |
| Python | 3.10+ | Runtime |
| Streamlit | 1.53.1 | Interactive UI |
| Uvicorn | 0.27.0+ | ASGI server |
| Pydantic | 2.0.0+ | Data validation |
| LangChain | Latest | LLM orchestration |
| LangGraph | Latest | Agent workflows |
| Technology | Version | Purpose |
|---|---|---|
| XQdrant | Custom Fork | Explainable vector search |
| Qdrant Client | 2.7.0+ | Vector DB client |
| Sentence Transformers | 3.3.1 | Text embeddings (384-dim) |
| ESM-2 | 2.0.0+ (fair-esm) | Protein embeddings (1280-dim) |
| CLIP | 1.0.0+ (openai-clip) | Image embeddings (512-dim) |
| PyTorch | 2.0.0+ | Deep learning backend |
| Technology | Version | Purpose |
|---|---|---|
| Biopython | Latest | Biological data parsing |
| NumPy | 2.4.1 | Numerical computing |
| Pandas | Latest | Data manipulation |
| Requests | 2.32.5 | HTTP requests |
| TQDM | 4.67.1 | Progress bars |
- Node.js 18+ and pnpm
- Python 3.10+
- MongoDB (local or Atlas)
- Rust (for XQdrant)
- Docker (optional)
git clone https://github.com/your-org/qdesign.git
cd qdesigncd backend/Core
npm install
cp .env.example .env
# Edit .env with MongoDB URI, JWT secret, service URLs
npm run start:dev # Starts on http://localhost:3000cd ui
pnpm install
cp .env.example .env.local
# Edit .env.local with API URLs
pnpm dev:all # Frontend + Socket.io servercd XQdrant
cargo build --release
./target/release/qdrant-server # Starts on http://localhost:6333Or use Docker:
docker run -p 6333:6333 -v $(pwd)/qdrant_storage:/qdrant/storage xqdrant/xqdrant:latestKnowledge Service:
cd backend/Services/knowledge_service
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --reload --port 8001Co-Scientist Service:
cd backend/Services/co_scientist_service
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
# Add OpenAI/Anthropic API keys to .env
uvicorn main:app --reload --port 8003# Backend Core
curl http://localhost:3000/health
# Frontend
open http://localhost:3000
# XQdrant
curl http://localhost:6333/collections
# Knowledge Service
curl http://localhost:8001/health
# Co-Scientist
curl http://localhost:8003/health- Navigate to
http://localhost:3000and register - Click "New Project"
- Fill in details:
- Name: "Protein Stability Analysis"
- Objective: "Identify thermostable protein variants"
- Constraints: "Temp: 60-80°C, pH: 6-8"
- Upload files:
📄 thermostability_review.pdf🧬 1ABC.pdb🔤 candidate_proteins.fasta📊 stability_curve.png
- Click "Generate Knowledge Graph"
import requests
response = requests.post(
"http://localhost:8001/knowledge-graph/generate",
json={
"project_id": "proj_12345",
"similarity_threshold": 0.75,
"max_connections": 50
}
)
graph = response.json()
print(f"📊 Generated {len(graph['nodes'])} nodes, {len(graph['edges'])} edges")
# Explore an edge
edge = graph['edges'][0]
print(f"🔗 {edge['source']} → {edge['target']}")
print(f"💯 Similarity: {edge['weight']:.2%}")
print(f"🧬 Reason: {edge['biological_explanation']}")from qdrant_client import QdrantClient
client = QdrantClient(url="http://localhost:6333")
results = client.search(
collection_name="qdesign_structures",
query_vector=[...], # ESM2 embedding
limit=10,
with_explanation=True # 🔑 Enable explainability
)
for result in results:
print(f"\n🧬 Protein: {result.id} | Score: {result.score:.3f}")
for dim in result.score_explanation.top_dimensions[:3]:
prop = dimension_to_property[dim['dimension']]
contrib = dim['contribution'] * 100
print(f" • {prop}: {contrib:.1f}% contribution")Output:
🧬 Protein: P12345 | Score: 0.952
• α-helix propensity: 87.8% contribution
• Surface accessibility: 5.9% contribution
• Charge distribution: 1.9% contribution
response = requests.post(
"http://localhost:8003/coscientist/query",
json={
"project_id": "proj_12345",
"query": "What mutations improve thermostability?",
"context": {
"include_graph": True,
"constraints": ["Temp: 60-80°C", "pH: 6-8"]
}
}
)
for chunk in response.json()['chunks']:
print(f"\n📝 {chunk['type']}")
print(chunk['content'])
print(f"📚 Evidence: {', '.join(chunk['citations'])}")const response = await fetch('/api/projects/proj_12345/export', {
method: 'POST',
body: JSON.stringify({
format: 'ieee_pdf',
include: ['abstract', 'methods', 'results', 'knowledge_graph']
})
});
const blob = await response.blob();
// Downloads formatted IEEE research paperDetailed documentation for each component:
| 📂 Component | 📄 Documentation |
|---|---|
| 🧠 Interpretability | docs/interpretability_README.md |
| 📊 Data Pipeline | docs/data_README.md |
| 🔧 Backend Core | docs/backend_core_README.md |
| 🔍 Retrieval Service | docs/backend_services_retrieval_service_README.md |
| 🤖 Co-Scientist | docs/backend_services_coscientist_server_README.md |
| 🎨 UI | docs/ui_README.md |
| ⚡ XQdrant | docs/XQdrant_README.md |
Biological similarity (shape, function, sequence) drives all logic
Every retrieval provides evidence trails and reasoning
Real-time synchronization for seamless teamwork
Unified handling of proteins, papers, sequences, and images
| Feature | Traditional Tools | QDesign |
|---|---|---|
| Data Integration | Siloed formats | Unified multimodal workspace |
| Similarity Search | "95% similar" | "Similar due to α-helix (87%)" |
| Collaboration | Email attachments | Real-time sync & comments |
| Knowledge Discovery | Manual curation | Auto-generated graphs |
| AI Assistance | Generic chatbots | Domain-specific co-scientist |
| Research Output | Manual writing | Auto-generated IEEE papers |
This project is licensed under the MIT License - see the LICENSE file for details.
- ESM-2 protein language model by Meta AI
- Qdrant vector database foundation
- Research methodology inspired by BioRxiv paper on ESM interpretability
- Open-source community for incredible tools
Open an issue or start a discussion if you have questions or want to contact us.
⭐ If you find QDesign useful, please give us a star!
Made with ❤️ by the QDesign Team
Empowering biological research through AI and explainability


