Skip to work

Projects

Five things I designed, built and shipped on my own. Each one starts with the problem it solves. Press / to ask about any of them.

2026SoloReleased for Linux

Kotha

Offline Bengali-English dictation, running a Whisper model I fine-tuned.

Standup notes

Tuesday

F9
Press F9 to dictate
English stays in Latin scriptRecreated demo
Problem
Bengali speech recognisers spell English words in Bengali letters, so "meeting" comes out as "মিটিং". That text can't be searched, pasted into code or read quickly.
Approach
I fine-tuned Whisper-medium on about 28 hours of casual Bangladeshi speech so English stays in Latin script, then built a Rust desktop app that runs it on the CPU and pastes text at the cursor while you are still talking.
Result
v0.1.0 ships for Linux on the AUR and as a .deb. It runs at about 1.5x real time on a laptop CPU and works fully offline after one model download.

What it does

  • Press F9 in any app and speak; every pause closes a chunk that is decoded while you keep talking.
  • A 50,000-word spelling corrector fixes the model's English and never touches a Bengali token.
  • Runs the int8 CTranslate2 model natively from Rust, the exact weights that were benchmarked, with no Python bundle.
  • Three text-output modes, including the XDG desktop portal so paste works in every Wayland window.
  • First run asks before downloading the 778 MB model and shows progress; after that it never needs the network.

By the numbers

1.5x
Real time on a laptop CPU
+5.2
English F1 from the corrector
99.3%
Character match with faster-whisper

Built with

  • Rust
  • Tauri 2
  • CTranslate2
  • Whisper
  • cpal
  • earshot
  • GitHub Actions
2026SoloOpen source, on PyPI

Agens

One agent core behind a web app, a terminal UI, a CLI and a Telegram bot.

Agens web app answering a question with tools enabled
Problem
Four interfaces usually means four copies of the same agent logic, and four places for the same bug to hide.
Approach
I wrote one core that owns the agent loop, tools and memory, and made every interface a thin transport around it. When a free API key hits its rate limit, it switches to a backup key or a fallback model mid-conversation.
Result
Published on PyPI as v0.1.1: four interfaces, one brain, with one-line installs for Windows, macOS and Linux.

What it does

  • Smart local memory: Saves user details and facts locally, with the ability to dynamically learn or forget information on request.
  • Handles rate limits automatically: Instantly switches to backup keys or fallback models if a free key hits a limit, so the conversation never gets cut off.
  • Works on multiple interfaces: You can interact with agens via web, terminal, command line, or a Telegram bot.
  • Free real-time web search: Searches the web and reads website links directly to get current facts without needing paid search API subscriptions.
  • Built-in safety and security: Encrypts all API keys locally and automatically blocks dangerous system commands to keep the host machine safe.
  • Simple installation: Published on PyPI with one-line scripts to install and run the app quickly on Windows, Mac, or Linux.

By the numbers

v0.1.1
PyPI Package
4
Supported Interfaces
100%
Free & Open Source

Built with

  • Python
  • Svelte 5
  • Vite
  • FastAPI
  • SQLAlchemy
  • Alembic
  • SQLite
  • Textual
  • OpenAI SDK
  • Cryptography
  • python-telegram-bot
  • Typer

Terminal recording

Screens

2026SoloOpen source

Ambrew

Local-first RAG that highlights the exact region of the source PDF.

Problem
Chatting with documents only helps if you can check the answer, and most tools point you at a file name at best.
Approach
Hybrid dense and sparse search in Qdrant, fused with Reciprocal Rank Fusion, then strict post-processing so every citation maps to a real chunk. Clicking a citation opens the PDF on the right page with the cited region boxed.
Result
Runs fully local on Ollama, so documents never leave the machine, and every claim can be traced back to its source.

What it does

  • Exact-region visual grounding using canvas-based bounding-box overlays in a custom PDF viewer
  • Hybrid dense-sparse retrieval using Qdrant vector search and FastEmbed BM25 combined via Reciprocal Rank Fusion
  • Strict citation integrity enforcement using post-processing filters to renumber, remap, and validate cited chunks
  • Academic extraction mode utilizing local vision-language models to describe formulas, figures, and visual content
  • Secure URL-based document ingestion with multi-hop redirect verification and SSRF protection guards
  • Document-scoped querying to isolate context retrieval to specific target files or search across the entire library

By the numbers

100%
Local & Offline-First
12
Supported Formats

Built with

  • FastAPI
  • Python
  • React
  • TypeScript
  • Tailwind CSS
  • Qdrant
  • SQLite
  • Ollama
  • Vite
  • react-pdf
  • FastEmbed
  • Docling

Screens

2025SoloOpen source, live preview

LearnSync

Turns study material into chat, mind maps, quizzes and a schedule.

LearnSync dashboard with today's classes and routines
Problem
Students juggle notes, slides and deadlines across separate tools, and generic chatbots lose the structure of a document.
Approach
A layout-aware RAG pipeline on IBM Docling with hybrid search in Qdrant, and LangGraph agents that route each request to chat, quizzes, mind maps or calendar tools.
Result
A full-stack Next.js and FastAPI platform with two-way Google Calendar sync and schedule extraction from a photo of a routine.

What it does

  • Custom layout-aware RAG pipeline using IBM Docling and structure-preserving hybrid chunking
  • Dense + Sparse hybrid vector search using Qdrant with Reciprocal Rank Fusion (RRF) scoring
  • Multi-agent orchestration system powered by LangGraph for intelligent tool selection and routing
  • Context-enriched embeddings using recursive breadcrumb extraction to resolve mid-document context loss
  • Conversational query expansion using dedicated LLM rewriting of historical conversation turns
  • Two-way Google Calendar synchronization and automatic schedule extraction from images
  • Interactive course workspaces with automated quiz generation and visual mind maps using React Flow

By the numbers

LangGraph
Agent Orchestration
Qdrant
Hybrid Vector DB
IBM Docling
Layout Parsing

Built with

  • Next.js
  • TypeScript
  • FastAPI
  • Python
  • LangGraph
  • LangChain
  • Qdrant
  • PostgreSQL
  • Cloudflare R2
  • Microsoft Azure
  • Zustand
  • IBM Docling
  • Google Gemini
  • Groq
  • React Flow
  • SQLAlchemy

Screens

2026SoloOpen source, on PyPI

CVAlchemix

Reads a LinkedIn job post, rewrites your CV for it, renders the PDF.

Problem
Tailoring a CV for every application is slow, so most people send the same one everywhere.
Approach
A CLI that scrapes the job post with Playwright, has Gemini rewrite the CV against its requirements, and fills a LaTeX template compiled with Tectonic.
Result
Published on PyPI as an open-source CLI: one command from a job link to a tailored PDF.

What it does

  • Scrapes LinkedIn job data and extracts full job descriptions automatically
  • Uses AI to rewrite CVs based on job-specific requirements
  • Generates structured LaTeX and compiles directly to polished PDF resumes

By the numbers

Open Source
Project Type
CLI Tool
Interface
Python 3.10+
Runtime

Built with

  • Python
  • Playwright
  • Google Gemini API
  • Jinja2
  • LaTeX (Tectonic)