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.

- 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.

- 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)