Seventeen experiments. Every one of them is the same question in a different domain.
Portfolio — a live retrieval assistant you can interrogate →
Five divisions. Grouped by the question the work asks, not the language it happens to be written in.
Every card is a real repository. Open the notebook under it for the objective, the failure it guards against, the architecture and the stack.
Can a system diagnose a fault and act on it without a human in the loop?
Open the notebook — EXP-01 FaultSeeker
Objective. Locate the vulnerability behind an on-chain exploit by replaying the transaction that caused it.
The problem. After a smart contract is drained, the evidence is a raw trace. Reading it by hand is slow, and a wrong conclusion is worse than none.
Architecture. Trace ingestion across EVM chains, a reentrancy detection engine, and a confidence calibrator that reports how much the verdict should be trusted.
flowchart LR
S0("Trace")
S1("Replay")
S2("Detect")
S3("Calibrate")
S4("Verdict")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Python · EVM traces · Ollama · OpenAI · Gemini · Claude · Qwen · LaTeX |
| Language | Python |
| Licence | Apache-2.0 |
| Created | 13 March 2026 |
| Repository | FaultSeeker- |
| Status | Open source, no public deployment |
Carries a LaTeX survey paper alongside the code. The only repo of the seventeen with an outside fork.
Open the notebook — EXP-05 RepoMedic-Agent
Objective. Audit any GitHub repository or local codebase and return one health report.
The problem. Code review catches the diff. Nobody reviews the repository itself -- its secrets, its missing tests, its stale dependencies.
Architecture. Six skills run in sequence -- repo analysis, security scan, doc analysis, test analysis, dependency analysis, scoring -- producing a weighted score, ranked issues and quick wins as structured JSON.
flowchart LR
S0("Clone")
S1("Six skills")
S2("Score")
S3("Rank")
S4("Report")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Node.js 18+ · gitagent · GitHub API · npm registry |
| Language | JavaScript |
| Licence | MIT |
| Created | 3 April 2026 |
| Topics | ai-agent · code-quality · dev-tools · gitagent · gitclaw · hackathon · nodejs · security |
| Repository | RepoMedic-Agent |
| Status | Open source, no public deployment |
Audits itself in CI. Secrets are masked in every finding.
Open the notebook — EXP-10 neuroops
Objective. Detect a cluster incident, find the root cause, and remediate it without paging a human.
The problem. On-call exists because the diagnosis step is human. An agent that guesses the cause and acts on it is more dangerous than the outage.
Architecture. A LangGraph multi-agent root-cause pipeline over Kubernetes, instrumented with OpenTelemetry so the agent's own reasoning is observable, and benchmarked against deliberately injected chaos experiments.
flowchart LR
S0("Detect")
S1("Diagnose")
S2("Plan")
S3("Remediate")
S4("Verify")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Python · LangGraph · Kubernetes · OpenTelemetry · Chaos engineering |
| Language | Python |
| Licence | MIT |
| Created | 22 May 2026 |
| Repository | neuroops |
| Status | Open source, no public deployment |
Self-observability is the point -- the agent is measured the way it measures the cluster.
Open the notebook — EXP-16 Airgap NOC Copilot
Objective. Predict MPLS and SD-WAN fault precursors before they become an outage, and hand the operator a runbook, on a network with no internet connection.
The problem. Every network copilot assumes a cloud API. Carrier, defence and industrial networks are air-gapped, so a tool that phones home cannot be installed at all — and a tool that guesses at three in the morning is worse than no tool.
Architecture. Telemetry from a Containerlab and FRRouting testbed feeds a machine learning risk scorer that ranks fault precursors. The highest-risk incident is enriched by local FAISS retrieval over the runbook corpus, and a locally hosted LLM writes the root cause analysis. Nothing leaves the box.
flowchart LR
S0("Telemetry")
S1("Risk score")
S2("Retrieve")
S3("Diagnose")
S4("Runbook")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Python · Machine learning risk scoring · FAISS · Local LLM · RAG · Containerlab · FRRouting |
| Language | Python |
| Licence | None declared |
| Created | 13 August 2026 |
| Topics | ai-copilot · air-gapped · predictive-maintenance · rag · sd-wan · network-operations |
| Repository | Airgap-noc-Copilot |
| Status | Prototype, no public deployment |
The constraint is the design: if it cannot run offline, it cannot run here.
Open the notebook — EXP-17 RecoverOS
Objective. Recover revenue lost to failed payments, checkout drop-offs, lapsed subscriptions and overdue receivables, without letting an agent act on money unsupervised.
The problem. Dunning is usually a cron job with three email templates, and the agentic version of it is worse: an autonomous system near a payment rail needs a bound it cannot cross and a record a finance team can audit.
Architecture. A detector raises the recovery event. An adaptive agent decides the next action. A policy layer bounds what that action is allowed to be, execution is checked against verified payment proof, and every decision, attempt and outcome is written to a complete audit trail.
flowchart LR
S0("Detect")
S1("Decide")
S2("Bound")
S3("Execute")
S4("Prove")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Python · Agent decision loop · Policy engine · Bounded execution · Payment verification · Audit trail |
| Language | Python |
| Licence | MIT |
| Created | 22 August 2026 |
| Repository | RecoverOS |
| Status | Open source, no public deployment |
An agent allowed near money is only as good as the bound it cannot cross.
Can a model answer only from evidence it is able to cite?
Open the notebook — EXP-02 StudyMind
Objective. Upload PDFs, get summaries, and hold a conversation with your own notes.
The problem. A general chatbot will answer confidently about a document it has never read.
Architecture. React client, Node service, MongoDB store, JWT auth, Claude for summarisation and chat.
flowchart LR
S0("PDF")
S1("Index")
S2("Retrieve")
S3("Summarise")
S4("Chat")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | React · Node.js · MongoDB · JWT · Claude |
| Language | JavaScript |
| Licence | none declared |
| Created | March 2026 |
| Repository | StudyMind |
| Status | Prototype, no public deployment |
The earliest retrieval experiment. Everything in Division 02 is a stricter answer to the same question.
Open the notebook — EXP-09 AI-Sakhi
Objective. Teach, then measure whether the teaching worked, then adapt -- with every claim traceable to a source page.
The problem. A tutor that hallucinates does not merely fail to teach. It installs a misconception that has to be removed later.
Architecture. Next.js 16 standalone and FastAPI. Retrieval uses all-MiniLM-L6-v2 embeddings in ChromaDB with page-level attribution and a distance threshold that refuses to answer rather than guess. SM-2 spaced repetition schedules review; a mastery score combines accuracy, difficulty, recency and hint penalty; a deterministic, auditable classifier labels misconceptions. JWT, role-based access and tenant isolation across student, teacher, guardian and admin roles.
flowchart LR
S0("Diagnose")
S1("Teach")
S2("Practise")
S3("Measure")
S4("Adapt")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Next.js 16 · FastAPI · Python 3.11 · Groq · Llama · ChromaDB · all-MiniLM-L6-v2 · SQLite WAL · JWT · Docker |
| Language | TypeScript |
| Licence | none declared |
| Created | 12 May 2026 |
| Repository | AI-Sakhi |
| Status | Prototype, no public deployment |
The retrieval threshold is a refusal mechanism: below it, the system declines to answer.
Open the notebook — EXP-11 VetAid
Objective. Give a pet owner calm, step-by-step first aid during an emergency, with every step cited.
The problem. An owner searching during an emergency gets contradictory advice from strangers. A hallucinated instruction here can kill the animal.
Architecture. Streamlit interface over a LangChain and ChromaDB retrieval pipeline into Groq-hosted Llama 3.1. Species-aware filters for dog, cat and other; inline citations with expandable source evidence; conversational memory across follow-ups; indexes both the bundled manuals and user-uploaded PDFs.
flowchart LR
S0("Symptom")
S1("Filter")
S2("Retrieve")
S3("Cite")
S4("Guide")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Python · Streamlit · LangChain · ChromaDB · Groq · Llama 3.1 |
| Language | Python |
| Licence | none declared |
| Created | 2 July 2026 |
| Topics | ai-assistant · chatbot · chromadb · groq · langchain · llama3 · rag · semantic-search · streamlit |
| Repository | vetaid-rag-assistant |
| Status | Prototype, no public deployment |
Ships a warning that it is not a substitute for a veterinarian. Knowing the limit is part of the design.
Can a single camera frame become a decision?
Open the notebook — EXP-03 Pothole-Detection
Objective. Detect potholes in a live camera feed, a video file, or a still image, and log every detection.
The problem. Road defect surveys are manual. A detector is only useful if it runs on the hardware a survey team already has.
Architecture. YOLOv8 inference behind both a Flask dashboard and a CLI, with webcam, video and image inputs and CSV export.
flowchart LR
S0("Frame")
S1("YOLOv8")
S2("Detect")
S3("Log")
S4("CSV")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Python · YOLOv8 · Flask · OpenCV · CSV export |
| Language | Python |
| Licence | none declared |
| Created | March 2026 |
| Repository | Pothole-Detection |
| Status | Prototype, no public deployment |
First perception experiment. Two interfaces over one model -- a pattern that repeats later.
Open the notebook — EXP-07 ecosentinel
Objective. Watch air quality and wildfire risk on one map, and forecast where the readings are heading.
The problem. Environmental data arrives from separate feeds at separate cadences, and none of them tell you what happens next.
Architecture. Next.js 16 and React 19 front end with Three.js, Leaflet and Recharts; FastAPI backend on SQLModel and Alembic over PostgreSQL; Gemini Vision for imagery, Prophet for PM2.5, CO2 and NO2 forecasting, Whisper for speech input, NASA FIRMS for wildfire coordinates.
flowchart LR
S0("Feeds")
S1("Ingest")
S2("Prophet")
S3("Map")
S4("Forecast")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Next.js 16 · React 19 · Tailwind v4 · Three.js · Leaflet · FastAPI · SQLModel · Alembic · PostgreSQL · Gemini Vision · Prophet · Whisper · NASA FIRMS |
| Language | TypeScript |
| Licence | MIT |
| Created | 19 April 2026 |
| Topics | air-quality · climate · computer-vision · docker · environmental-monitoring · fastapi · full-stack · machine-learning · nextjs · react · typescript · wildfire-detection |
| Repository | ecosentinel |
| Status | Open source, no public deployment |
Ships its own design system rather than a component library.
Open the notebook — EXP-15 ReloopAI
Objective. Turn one photo of surplus into a matched, routed, tracked and impact-reported pickup.
The problem. Surplus is redistributed by phone calls and spreadsheets, so it expires before it reaches anyone.
Architecture. Vision, OCR and an LLM run in parallel on the uploaded photo to draft the listing. A weighted scorer ranks recipients on distance 30, urgency 25, category fit 20, storage 15 and availability 10. Three n8n workflows then orchestrate approval, dispatch and the post-pickup impact receipt. The AI layer is provider-agnostic and boots with no keys at all on a mock provider.
flowchart LR
S0("Photo")
S1("Vision + OCR")
S2("Match")
S3("Dispatch")
S4("Receipt")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | React 18 · TypeScript 5.6 · Vite 6 · Three.js r169 · Framer Motion · Node 20 · Express · MongoDB · Groq · Llama 3.2 Vision · n8n · SendGrid · Twilio · S3 |
| Language | TypeScript |
| Licence | MIT |
| Created | 13 July 2026 |
| Repository | ReloopAI |
| Status | Live — deployed and reachable |
| Live | reloop-ai-liart.vercel.app |
The only experiment with a public deployment, and the most committed-to of the seventeen.
Can we test the consequence before it reaches the world?
Open the notebook — EXP-04 Deploy-Platform
Objective. Give a single machine the deploy-a-container-and-get-a-URL workflow of a hosted PaaS.
The problem. Managed platforms are the fastest way to ship and the fastest way to lose control of your own infrastructure.
Architecture. Go 1.22 API on the standard library with zero external dependencies, React and Vite dashboard, k3s for scheduling, a local Docker Registry v2, Nginx wildcard routing, and a JSON file as the database.
flowchart LR
S0("Push")
S1("Build")
S2("Registry")
S3("k3s")
S4("URL")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Go 1.22 · React 18 · Vite · k3s · Docker Registry v2 · Nginx |
| Language | Go |
| Licence | MIT |
| Created | 30 March 2026 |
| Topics | container-registry · deployment · devops · docker · docker-compose · golang · heroku-alternative · k3s · kubernetes · nginx · paas · platform-engineering · react · self-hosted · vite · wsl2 |
| Repository | Deploy-Platform |
| Status | Open source, no public deployment |
Zero external Go dependencies. The whole API is standard library.
Open the notebook — EXP-06 LifeSim-AI
Objective. Play out a sequence of financial life decisions and see the compounded consequence.
The problem. Financial advice is abstract until you watch a choice compound against you.
Architecture. A deterministic rules engine with clamped effects and hidden traits runs the simulation locally; an optional AI mode narrates it. The rules engine is authoritative either way.
flowchart LR
S0("Choice")
S1("Rules")
S2("Clamp")
S3("Compound")
S4("Outcome")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | TypeScript · React · OpenAI · Gemini · Qwen |
| Language | TypeScript |
| Licence | none declared |
| Created | 9 April 2026 |
| Repository | LifeSim-AI |
| Status | Prototype, no public deployment |
Clearest statement of the fallback pattern -- the model narrates, the rules engine decides.
Open the notebook — EXP-08 SETRS
Objective. Hold a green corridor ahead of a moving ambulance by predicting its trajectory and preempting the signals on its path.
The problem. An ambulance loses minutes at intersections it was always going to reach. The signals only react once it arrives.
Architecture. SUMO traffic simulation driven through TraCI, a FastAPI control service, and a React operations view -- the corridor is proven in simulation before any real intersection is touched.
flowchart LR
S0("Trajectory")
S1("Predict")
S2("Preempt")
S3("SUMO")
S4("Corridor")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Python · SUMO · TraCI · FastAPI · React |
| Language | Python |
| Licence | none declared |
| Created | 26 April 2026 |
| Topics | ambulance-routing · emergency-response · fastapi · intelligent-transportation-systems · react · smart-city · sumo-simulation · traci · traffic-signal-preemption |
| Repository | SETRS-Trajectory-Preemption |
| Status | Prototype, no public deployment |
The strongest case for simulating first -- the failure mode here is measured in lives.
Can a pipeline prove it was not tampered with?
Open the notebook — EXP-12 Sentinel-FL
Objective. Detect a backdoor in a federated model, explain it, repair it, and cryptographically attest that the repair happened.
The problem. Federated learning hides the training data by design, which means it also hides the poison. Detection on its own is not a defence: the party consuming the model has no way to check that anything was actually fixed.
Architecture. Client updates arriving at the Flower aggregator are screened for the statistical signature of a backdoor. Flagged updates are explained down to the trigger, the poisoned contribution is repaired out of the global model, and the result is signed so a downstream consumer can verify the mitigation independently.
flowchart LR
S0("Aggregate")
S1("Detect")
S2("Explain")
S3("Repair")
S4("Attest")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Python · Flower · Federated learning · Backdoor defence · Adversarial machine learning · Cryptographic attestation |
| Language | Python |
| Licence | MIT |
| Created | 8 July 2026 |
| Topics | ai-security · adversarial-machine-learning · backdoor-defense · federated-learning · flower-framework |
| Repository | Sentinel-FL |
| Status | Open source, no public deployment |
A defence that cannot be verified is a claim, not a defence.
Open the notebook — EXP-13 Actionguard Autoaudit
Objective. Audit GitHub CI/CD and agentic AI workflows for security flaws, then open the pull request that fixes them.
The problem. CI is the softest target in most repositories: unpinned actions, over-scoped tokens, injectable inputs. Scanners find all of it and nobody acts, because a finding that arrives as a report is not a control.
Architecture. Workflow definitions are scanned, audited against zizmor and SAST rules, and triaged by severity and exploitability. The remediation engine then generates the patch and raises it as a pull request, so the fix lands in review rather than in a backlog.
flowchart LR
S0("Scan")
S1("Audit")
S2("Triage")
S3("Patch")
S4("Pull request")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Python · GitHub Actions · zizmor · SAST · Agentic remediation |
| Language | Python |
| Licence | MIT |
| Created | 8 July 2026 |
| Topics | agentic-ai · ci-cd-security · devsecops · github-actions · sast · security-auditing |
| Repository | Actionguard-Autoaudit |
| Status | Open source, no public deployment |
A finding that does not arrive as a diff does not get fixed.
Open the notebook — EXP-14 Actionguard CI
Objective. Score the security of a repository's CI/CD and agentic AI workflows, report it in a form somebody will actually read, and gate the build on the result.
The problem. Security output rots inside build artefacts. If the report is not readable and is not allowed to fail the pipeline, the pipeline stays insecure and everyone stays comfortable.
Architecture. Workflow definitions are ingested and analysed against action pinning, permission scope and injection rules, the findings are scored, and the run emits interactive HTML and machine-readable JSON. The gate then fails the build when the score falls below the configured threshold.
flowchart LR
S0("Ingest")
S1("Analyse")
S2("Score")
S3("Report")
S4("Gate")
S0 --> S1 --> S2 --> S3 --> S4
| Stack | Python · GitHub Actions · zizmor · HTML and JSON reporting · CI gating |
| Language | Python |
| Licence | MIT |
| Created | 8 July 2026 |
| Topics | agentic-ai · ci-cd-security · devsecops · github-actions · security-auditor · zizmor |
| Repository | Actionguard-CI |
| Status | Open source, no public deployment |
The report is only a control when it is allowed to say no.
These repositories were not planned as an ecosystem. The connections are there anyway, because the same conclusions kept getting reached. Read across a row to see who shares a decision; read down a column to see what a system is made of.
The same graph, as a graph
flowchart TB
subgraph SHARED ["Shared decisions"]
ROUTE("Multi-provider routing")
FALL("Deterministic fallback")
CITE("Grounding and citation")
SCORE("Weighted scoring")
SIM("Simulate before shipping")
ATTEST("Audit trail and attestation")
end
ROUTE --> FaultSeeker & ReloopAI & LifeSim
FALL --> ReloopAI & LifeSim & AISakhi & FaultSeeker
CITE --> AISakhi & VetAid & StudyMind & Airgap
SCORE --> ReloopAI & AISakhi & RepoMedic & Airgap & ActionguardCI
SIM --> SETRS & neuroops & LifeSim
ATTEST --> SentinelFL & ActionguardCI & Autoaudit & RecoverOS
FaultSeeker("FaultSeeker")
ReloopAI("ReloopAI")
LifeSim("LifeSim-AI")
AISakhi("AI-Sakhi")
VetAid("vetaid-rag-assistant")
StudyMind("StudyMind")
RepoMedic("RepoMedic-Agent")
SETRS("SETRS-Trajectory-Preemption")
neuroops("neuroops")
SentinelFL("Sentinel-FL")
ActionguardCI("Actionguard CI")
Autoaudit("Actionguard Autoaudit")
Airgap("Airgap NOC Copilot")
RecoverOS("RecoverOS")
01 Never depend on one model
Four repositories put two or more providers behind a single interface. ReloopAI goes furthest: it boots and stays browsable with no API key at all.
FaultSeeker · ReloopAI · LifeSim-AI · AI-Sakhi
02 Make the answer show its evidence
AI-Sakhi attributes to the page and refuses below a distance threshold. VetAid puts citations inline and lets you expand the source. FaultSeeker reports a calibrated confidence with its verdict.
AI-Sakhi · VetAid · FaultSeeker · StudyMind
03 Simulate before it reaches the world
SETRS proves an ambulance corridor in SUMO before touching an intersection. neuroops benchmarks its own agent against injected chaos. LifeSim keeps a deterministic engine authoritative over the narration.
SETRS · neuroops · LifeSim-AI
04 Prove it, or it did not happen
The newest division exists because the other three kept running into the same wall. Sentinel-FL signs the repair so the fix can be verified by whoever consumes the model. Actionguard CI is allowed to fail the build. Actionguard Autoaudit delivers its findings as a pull request rather than a report. RecoverOS will not touch money outside a policy bound, and writes what it did to an audit trail.
Sentinel-FL · Actionguard CI · Actionguard Autoaudit · RecoverOS
project-tayab.onrender.com is not a page about the work. It is the argument itself, running.
Ask it a question and the retrieval happens in front of you: dense vectors and BM25 in parallel, reciprocal rank fusion to merge the two candidate lists, then a cross-encoder reranker on top. You can toggle any stage off and watch the ranking get worse, which is the only honest way to show that a stage earns its place. Answers stay sourced, the knowledge base is scored continuously, and there is a deterministic fallback underneath so a bad retrieval degrades instead of inventing.
Every conclusion on this page is implemented in it — grounding and citation from Division 02, weighted scoring from Division 03, the evaluation gate and refusal behaviour from Division 05. It is also the fastest way to understand how I build: type help into the shell on the page.
Hybrid dense and lexical retrieval · Reciprocal rank fusion · Cross-encoder reranking · Continuous evaluation scoring · Deterministic fallback · In-browser retrieval trace
The next step is the one the log is already pointing at. The first eleven experiments taught me how to make a single system behave; what they have not yet taught me is how to prove it. AI-Sakhi has release gates, neuroops benchmarks itself against injected chaos, FaultSeeker reports a calibrated confidence, RepoMedic audits its own repository in CI. Four separate attempts at the same missing discipline: evaluation. Division 05 is what happened when I stopped treating it as a side effect: three repositories whose entire job is proving that a pipeline, a model or an agent did what it claimed.
So that is where I am going. AI engineering where the evaluation harness is built before the feature, where refusal is a designed behaviour rather than an edge case, and where a system that cannot show its evidence is not considered finished.
I am looking for AI or ML engineering work where that is the standard.
How this page is built
Every image on this page is an SVG generated by a Python script in scripts/. Nothing is hand-drawn, nothing is stock, nothing was downloaded. The facts all live in one file, scripts/repos.py, which is where every count, date, division and pipeline on this page comes from — so the words and the pictures cannot disagree.
python3 scripts/build_assets.py # regenerates every asset on this page
| Assets | 48 SVG files, light and dark pairs, roughly 3–20 KB each |
| Dependencies | none — the standard library draws the SVG by hand |
| Dark mode | <picture> with prefers-color-scheme, honoured natively by GitHub |
| Accessibility | every SVG carries <title> and <desc>; every <img> carries alt text; all body copy is real Markdown |
| JavaScript | none |
A word on honesty. This page shows no star counts, no follower counts and no streak graphics, because those numbers are currently zero and dressing them up would undermine everything else here. The counts that do appear — seventeen repositories, five divisions, six months, one live deployment — are all verifiable from the repository list; the portfolio site is counted separately because it is not one of the repositories. One repository, foundry, is a fork of the Ethereum toolchain and is deliberately excluded from the seventeen.
