π Watch here:
https://github.com/user-attachments/assets/31a28a69-9774-4c3c-a59a-b0d6bbb1d4c2
This short demo shows:
- User login and initial empty dashboard state
- No existing public or private reports at first launch
- Creating both public and private encrypted reports
- Dashboard counters updating in real time
- Searching reports and observing visibility-based filtering
- Viewing public and private reports in the viewer
- Editing a private report and changing its visibility to public
- Verifying that newly public reports become searchable
- Demonstrating that Supabase stores only encrypted (non-plaintext) data
- User logout flow
π Watch here:( Fetch through cyborgdb takes time so that part is skipped) https://github.com/user-attachments/assets/854ac275-f2ac-4210-9cb6-0f97a25d88f5
Encrypted Whistleblower System for Healthcare
SilentReport enables secure, zero-trust whistleblowing where sensitive reports remain encrypted end-to-end β even database administrators cannot read the data.
- Node.js:
v22.21.1 - Package Manager:
npm - Framework: Next.js
- Database: Supabase (PostgreSQL)
- Encryption Layer: CyborgDB SDK + Cyborg Service
- Node.js
22.21.1 - npm
- Supabase PostgreSQL project
- CyborgDB API key
- CyborgDB service installed and available in PATH
- clone the repo
git clone git@github.com:Anxhul10/SilentReport.git
cd SilentReport
- install dependencies
npm install
-
Create a Supabase project Create a Supabase project and get the project name and database password. Go to Connect β Connection string Copy the Postgres connection parameters
-
setup cyborgdb-service ( important )
export CYBORGDB_DB_TYPE=postgres
export CYBORGDB_CONNECTION_STRING="host=db.<your-project>.supabase.co port=5432 dbname=postgres user=postgres password=<YOUR_PASSWORD> sslmode=require"
export CYBORGDB_API_KEY="your api key"
-
cyborgdb-service -
set the env
baseURL=http://localhost:8000
CYBORGDB_API_KEY=API_KEY
// On the first run, CyborgDB generates an `indexKeyBase64`
supabaseUrl=YOUR_SUPABASE_URL
supabaseKey=YOUR_SUPABASE_KEY- Run this to create index( It will log
indexKeyBase64which is needed in .env )
npm run g-index
set env
indexKeyBase64=YOUR_KEY_HERE
- Install and run the local LLM (Ollama)
SilentReport uses Ollama with qwen2.5:1.5b locally for:
- summarizing reports
- improving grammar
- generating readable responses
Install Ollama from: https://ollama.com/download
After installation, pull and run the model:
ollama run qwen2.5:1.5b- build the application
npm run build
- start the app in production
npm run start
Note
Ensure the steps 3, 4, 5 are running to run the whole application
- A practical reference project for developers using JS/TS SDKs with CyborgDB
- Demonstrates how to integrate CyborgDB with Supabase PostgreSQL
- Developers can visually inspect encrypted (ciphertext) data directly in Supabase
- Protects whistleblower identity using strong cryptographic guarantees
- Even in the event of a database breach, stored data remains unusable
The system follows an encrypted data lifecycle where plaintext never reaches persistent storage.
User Query
β
Encrypted Vector Search
β
Relevant Documents
β
Ollama LLM
β
Answer / Summary
ββββββββββββββββββββββββββ
β Your Application β
β β
β βββββββββββββββββββ β
β β CyborgDB SDK β β
β β (Py / JS / TS / β β
β β Go) β β
β βββββββββββ¬ββββββββ β
ββββββββββββββΌββββββββββ
β
βΌ
ββββββββββββββββββ
β REST API β
βββββββββββ¬βββββββ
β
βΌ
ββββββββββββββββββββ
β CyborgDB Serviceβ
βββββββββββ¬βββββββββ
β
βββββββββββββββββββββββββΌββββββββββββββββββββββββ
β β β
ββββββββββββββ ββββββββββββββ ββββββββββββββ
β PostgreSQL β β Redis β β Memory β
ββββββββββββββ ββββββββββββββ ββββββββββββββ
β²
β
βββββββββββββ
β Supabase β
βββββββββββββ
Encrypted Storage β Secure Fetch β Decode β Context Builder β Local LLM
Load testing shows that CyborgDB-backed operations exhibit higher latency under sustained load. This behavior is expected on the Free tier, where requests are queued and processed sequentially.
Measured latencies ranged from ~40 seconds for early requests up to ~10 minutes under sustained load. Despite increased latency, the system remained stable and processed requests without crashes, demonstrating correct backpressure behavior.
We evaluated system performance using Artillery under three scenarios to understand latency behavior when interacting with CyborgDB-backed APIs.
| Test Type | Users | Avg Latency | p95 Latency | Result |
|---|---|---|---|---|
| Single request | 1 | ~45s | ~60s | Success |
| Low concurrency | 1 every 30s | ~90β200s | ~250s | Stable |
| Saturation | β₯1/sec | 5β10 min | ~9β10 min | Queue saturation |
- Latency increases due to CyborgDBβs queued execution model.
- Requests are processed sequentially on the Free tier.
- Under sustained load, requests wait in queue rather than failing immediately.
- This demonstrates controlled backpressure rather than instability.
- Users submit sensitive healthcare data
- Data is encrypted via CyborgDB
- Encrypted, semantically meaningless data is stored in Supabase PostgreSQL
- Only authorized queries using
indexKeyBase64can retrieve meaningful results
Even database administrators cannot read the stored data.
- No plaintext sensitive data
- Human-incomprehensible encrypted storage
- Index-based secure querying
- Designed for whistleblower safety
Healthcare whistleblowers face serious risks if their identity or reports are exposed. SilentReport demonstrates how modern cryptography and encrypted vector search can:
- Protect sensitive disclosures
- Prevent insider data access
- Enable safe querying without revealing plaintext
- Serve as a reference architecture for privacy-first systems