# Arjun Bharti — Complete Site > Software generalist building products from idea to launch. This single document is the entire site in plain markdown — about, experience, projects, and writing — for AI agents and LLMs. - **Status:** Available for new projects · working globally - **Now:** Senior Software Engineer @ OnArrival (previously Dukaan) - **Stack:** TypeScript, React, Node, Postgres, AWS - **GitHub:** https://github.com/arjunbharti - **LinkedIn:** https://www.linkedin.com/in/arjunbharti774/ - **X:** https://x.com/iarjunbharti ## Contents 1. About 2. Experience 3. Projects 4. Writing 5. Contact --- ## About I'm a software generalist. That means I work across the stack: frontend, backend, infrastructure, whatever the project needs. I've spent years building products for startups and working with founders who need to move fast. Most of my work involves taking an idea and turning it into something real. I enjoy the zero-to-one phase: figuring out what to build, making technical decisions that won't slow you down later, and getting to launch. I work with a small team of talented designers, developers, and ops people. We have built products together for years and know how to move fast without cutting corners. Small enough to be nimble, experienced enough to deliver. --- ## Experience ### Engineering Team Lead — [OnArrival](https://onarrival.com) (2022–present) *India · Remote* - Leading the engineering team of the Clients Integration Pod — owning delivery, technical direction, and partner-facing integrations. - Built an embedded travel SDK for cross-platform applications (Flutter), letting partners drop the full booking experience into their apps. - Driving a native-first overhaul of the web SDK — closing the gap between the embedded web experience and a truly native feel. - Leading the flights integration for OneCard, UniCard, and CheQ across partner fintech apps. - Driving migration of the flights repo to a new theme architecture, unifying styling across brands. - Prototyping a Temporal-based orchestration layer for the flights booking flow to make long-running transactions reliable and resumable. - Building a shared components package to deliver a native-like experience inside the PWA. - Architected and built the embedded flights booking experience for partner fintech apps (Niyo Global, Zolve), now processing $12M+ in annualized booking volume. - Cut the CRA bundle by 25% by removing heavy dependencies and replacing MUI with a lighter set of reusable in-house components. - Tightened team DX: introduced ESLint, Prettier, and Husky pre-commit hooks for consistent quality and faster reviews. - Shipped seats, meals, baggage, aircraft layout, and the bookings page in the flights PWA, end to end. A real zero-to-one product journey. ### Software Engineer (Frontend) — [Dukaan](https://mydukaan.io/) (2022–2022) *Bengaluru, Karnataka, India* - Developed an opinionated UI toolkit boosting developer efficiency 10x - enabling 4 themes built in a week - Initiated and led experimental projects around design systems, contributing to the product's aesthetic and functional framework - Built new theme engine with vanilla JS for fast checkout and reduced waiting time - Migrated store themes from Next.js to vanilla HTML, CSS, and JS - Built store pages and seller dashboard features ground up to improve user experience --- ## Projects ### BillSlip (2026) URL: https://www.arjunbharti.com/projects/billslip Type: personal Tags: SaaS, Invoicing, Payments, Web App Live: https://billslip.com A minimal SaaS workspace to create branded invoices, manage clients, and track payments ## Overview BillSlip is a minimal SaaS workspace for creating branded invoices, organizing clients, and keeping payment follow-up clear. It's built for freelancers, consultants, studios, and small service teams who invoice regularly and want a dedicated billing workspace — without monthly-subscription complexity.   ## Features - **Invoice creation**: line items, tax, discounts, notes, and terms - **Client database**: reusable billing details across invoices - **Payment tracking**: a dashboard with due dates, status, and recent activity - **PDF-ready records**: downloadable invoice artifacts - **Multi-currency**: support for international billing - **Revenue overview**: invoice volume and payment status at a glance - **Account-scoped data**: each user only sees their own invoices and clients   ## Pricing One flat plan — **$18/year** (about $1.50/month) — with unlimited invoices and every feature included. No monthly subscription, no per-invoice fees. ### VibeHire (2026) URL: https://www.arjunbharti.com/projects/vibehire Type: personal Tags: SaaS, Marketplace, AI, Web App Live: https://vibehire.com A marketplace that matches AI-built ("vibe-coded") products with engineers who fix the bugs and ship them to production ## Overview VibeHire is the finishing layer for AI-built software. Built something with AI that almost works but got stuck? Post the project, set a budget, and get matched with engineers who specialize in cleaning up and shipping AI-generated products — turning vibe-coded prototypes into production-ready software. It's a two-sided marketplace: founders and builders post gigs to get their AI-generated code fixed and shipped, and engineers browse and apply to real projects with real budgets to get paid for the work AI can't finish.   ## For people who built with AI - Describe what's broken, set a budget, and receive applications from engineers ready to ship - Get stubborn AI bugs squashed and the features AI forgot added - Take a project from "almost works" to deployed in production   ## For engineers - Browse gigs that match your skills and get paid to ship production-ready code - Real projects with real budgets, scoped by difficulty   ## What gets fixed - **Bug Fixes** — squash stubborn AI bugs - **Feature Development** — add the features AI forgot - **Code Refactoring** — turn spaghetti code into clean architecture - **AI Code Review** — expert review of AI-generated code - **Testing & QA** — from 0% coverage to production-ready - **DevOps & Deployment** — get it deployed and running properly - **Documentation** — proper docs for AI-generated code - **Performance** — make AI-built apps actually fast ### Medycin (2024) URL: https://www.arjunbharti.com/projects/medycin Type: personal Tags: React.js, Node.js, Startup 10 minutes medicine delivery at your doorsteps ## Overview Medycin was a hyperlocal medicine delivery startup focused on delivering medicines within 10 minutes. As the founder, I built and launched this service in Jammu & Kashmir, India.   I documented the four-week pilot in detail -> 58 orders, one bike, no app. [**Read the full story →**](/blog/building-medycin)   ## Features - **10-Minute Delivery**: Ultra-fast medicine delivery to customers' doorsteps - **Real-time Tracking**: Live order tracking for customers - **Prescription Upload**: Easy prescription management for users - **Local Pharmacy Network**: Partnered with local pharmacies for quick fulfillment   ## My Role - Founded and led the product from concept to launch - Built the tech stack and delivery operations - Managed partnerships with local pharmacies - Ran the venture for 3 months (Oct - Dec 2024) ### uiVibe (2026) URL: https://www.arjunbharti.com/projects/ui-vibe Type: personal Tags: HTML, CSS, JavaScript Live: https://uivibe.netlify.app A lightweight component library to build clean, beautiful UIs quickly ## Overview uiVibe is a framework-agnostic component library designed to accelerate UI development. It provides a collection of pre-built, customizable components that help you build clean and beautiful interfaces quickly.   ## Features - **Alerts**: Success, info, warning, and error variants for user feedback - **Buttons**: Standard, link, icon, and floating action button styles - **Modals & Toasts**: Interactive dialogs and notification components - **Cards & Avatars**: Display components for content and user profiles - **Grid System**: Flexible layout utilities for responsive design - **Navigation**: Pre-built navbar components - **Form Inputs**: Styled input fields and form elements   ## Technical Highlights - Built with vanilla HTML, CSS, and JavaScript for maximum compatibility - Framework-agnostic design works with any tech stack - Lightweight with no external dependencies - Easy to customize and extend --- ## Writing ### Medycin: 58 orders, 4 km, one bike (2026-05-14) URL: https://www.arjunbharti.com/blog/building-medycin Tags: startup, medycin, quick-commerce, healthcare, building-in-public Notes from a four-week pilot in Channi Himmat, Jammu. What I learned running a 15-minute medicine delivery service by myself, with one pharmacy and no app. Medycin is what I'm calling my attempt at 15-minute medicine delivery. The thesis is simple: medicines should reach your door faster than pizza, at a price you don't have to negotiate at the counter, with the option to refill predictably and store your prescriptions somewhere that isn't a kitchen drawer. This post is the story of the pilot. Four weeks. One pharmacy. One bike. Me.   ## The pilot I ran the pilot in Channi Himmat, Jammu, J&K. A small 4 km service radius around the area I grew up in. No app, no fancy onboarding. Just three pieces: - A WhatsApp number people could message. - One local pharmacy I had partnered with for inventory. - A bike. Mine. With me on it. I gave a flat 15% discount on every order and charged nothing extra for delivery or packaging. I wanted to see if the *experience* would land, not whether I could price it well.   ## How it worked I'd spend weekday evenings and weekends inside the pharmacy. Take orders on WhatsApp. Pack them. Hop on the bike. Deliver. Average delivery time was 9 minutes. Marketing was as local as the operation: - 6 standees in the area: ₹12,000 (₹2,000 each) - 4,000 pamphlets distributed door-to-door: ₹6,000 (₹1.5 each) - Bike petrol for 4 weeks: ₹800 Total cash burn for the pilot: about ₹19,000. The rest of the leverage came from people, not money. Friends put it on their WhatsApp status and Instagram stories. [Dilshad Khan](https://dilshadkhan.framer.website/), my go-to person and my always co-founder, handled anything visual. It was not possible without having him by my side.   ## The numbers After four weeks of operating: - **58 orders fulfilled.** - **19% of incoming requests went unfulfilled**, mostly due to no stock at the partner pharmacy, operations constraints on my end, or addresses outside the service radius. - **₹190 average order value.** - **Over 90% of orders were COD.** Category split: - 70% over-the-counter - 22% pharma cosmetics - 8% prescription-based   ## What I actually learned The interesting stuff doesn't show up on a metrics dashboard. It shows up in WhatsApp threads and doorstep small talk. **People want subscriptions.** More than 15 customers asked about monthly refill subscriptions for chronic medications. Once a household has a fixed list, the manual reorder loop is friction they're happy to pay to remove. **Late nights and early mornings are gold.** Customers were openly willing to pay a premium for medicines outside pharmacy hours, after 10 PM or before 8 AM. The child with a 2 AM fever. The grandparent who ran out of BP medication on a Sunday morning. The market has almost no answer for this slot today. **Nobody knows where their prescriptions are.** Several customers asked if Medycin could just store their prescriptions for them, so they wouldn't have to keep reprinting or hunting through drawers. **Reminders matter more than I expected.** People wanted nudges to take their medicines on time. Adherence is a real problem and an obvious one to solve. **Late delivery is sometimes fine.** For prescription medicines that aren't easy to find at every pharmacy, customers were happy with a few hours of wait or even next-day, as long as someone actually fulfilled the order instead of sending them on a wild goose chase. The honest takeaway: customers don't think of "buying medicine" as one job. It's at least four. Speed when they need it now. Predictability for chronic conditions. Knowledge of what to take and when. And *certainty* that the thing they need will actually show up.   ## What I planned next: HSR Layout, Bangalore A pilot in Jammu was a strong signal but a small data set. To know if this scaled, I wanted to repeat it somewhere with denser demand, sharper competition, and a faster feedback loop. That meant Bangalore. The action plan I sketched out for HSR Layout looked like this: 1. Tie up with at least 3 local pharmacy stores. 2. Hire 6 delivery partners, more if demand called for it. 3. Hire 2 people for operations. 4. Spend on marketing across online and offline channels, with whatever moved the needle. 5. Build a proper web app so ordering didn't depend on me being awake. Rough annual cost to run HSR Layout with this setup: about ₹80,00,000. Salaries, marketing, packaging, miscellaneous. I was cutting the build cost where I could. The web app I planned to build myself, with help from friends who had engineering chops and design taste. A friend had agreed to sublet me his flat. That was the plan: my bedroom by night and Medycin HQ by day. Board meetings, samosa parties, and code reviews, all in one room. The reference points were encouraging. Swish (10-minute food delivery) was doing 300+ orders/day in HSR Layout. Pincode by PhonePe had crossed 10 lakh app downloads. Farmako had a pharma store running in Delhi. There was a real market.   ## Why I'm not worried about Swiggy or Zomato Someone on X asked me a fair question: this is one product launch away from Swiggy or Zomato eating you alive. What's the plan? My answer: **The incumbents aren't built for this.** Pharmeasy and Tata 1mg were not designed as quick-commerce platforms. Their distribution centers, inventory mix, and unit economics all assume a 1 to 3 day delivery window. Retrofitting that for 15 minutes is not a feature toggle. **Pivot time is real.** Swiggy and Pharmeasy already announced a strategic partnership for this exact reason. Building the right infrastructure takes longer than spinning up a feature flag. **The market is opening up, not closing.** Amazon Tez is entering. There have been public talks about Amazon and Swiggy Instamart. The space is fragmenting before it consolidates, which is exactly the moment to enter. But the deeper answer is that I don't think of medicine delivery as a single feature. The plan is to use quick commerce as a wedge into something much larger.   ## The bigger picture If quick-commerce distribution works, Medycin becomes infrastructure, not a product. 1. **Quick-commerce distribution.** Collaborations with local pharmacies, wholesalers, and eventually dark stores for the categories that lend themselves to it. 2. **Franchise model.** Think of it as OYO for pharmacies. Bring existing neighbourhood stores onto a shared software and operations stack. There is a famous Y Combinator request-for-startups for the clinic version of this same idea. 3. **Strategic acquisitions.** Roll up smaller players to expand the network without rebuilding from scratch every time. 4. **Deep-tech R&D.** Modern healthcare problems leveraging AI: diagnostics, manufacturing, supply chain. 5. **Collaboration over competition.** I'd rather partner with someone solving an adjacent problem than try to do everything alone. I met the Blinkit team about this last month. A useful analogy: China has more than 100 EV manufacturers. The Volkswagen Group alone owns Audi, Bentley, Porsche, and Skoda, each pointed at a different segment of the same industry. Healthcare is at least that large. Selling medicines is not the prize. It's the door.   ## The honest part My biggest constraint right now is money. I have a full-time job and I'm building Medycin on evenings and weekends. That's enough to run a pilot. It is nowhere near enough to run HSR Layout the way it deserves. I don't believe in doing two things at 50%. Half-effort never produces a real outcome. If Medycin is going to work, it needs full attention, not the leftover hours. So I'm looking to raise enough capital to run Medycin properly for at least two years. This is, in the most literal sense, a hustle acquisition. I have put in the unglamorous work to prove the model in a small market on a tiny budget. If you're an early-stage investor who likes founders who ship before they pitch, I'd like to talk. Schedule a call: [cal.com/arjunbharti/medycin-quick-chat](https://cal.com/arjunbharti/medycin-quick-chat).   ## Useful links - [Pilot summary thread on X](https://x.com/iarjunbharti/status/1852760761392906571) - [Customer insights thread](https://x.com/iarjunbharti/status/1854911205439156397) - [On competing with Swiggy/Zomato](https://x.com/iarjunbharti/status/1868555670578225508) - [Rahul Mathur's kind shoutout](https://x.com/Rahul_J_Mathur/status/1864167514407882938) - [My Twitter](https://www.x.com/iarjunbharti) / [LinkedIn](https://www.linkedin.com/in/arjunbharti774/) If you've read this far and any of it resonates, my DMs are open. Some of the best Medycin conversations I've had started with a stranger asking, "wait, how do the unit economics actually work?" I'm happy to be that stranger for someone else. ### 10 Tailwind CSS Tips for Better Productivity (2026-01-15) URL: https://www.arjunbharti.com/blog/tailwind-css-tips Tags: tailwind-css, css, web-development, tips Boost your Tailwind CSS workflow with these practical tips and tricks that will help you write cleaner, more maintainable styles. Tailwind CSS has revolutionized how we write styles. Here are 10 tips to help you get the most out of it.   ## 1. Use the @apply Directive Sparingly While `@apply` is useful, overusing it defeats the purpose of utility-first CSS: ```css /* Good - for commonly repeated patterns */ .btn-primary { @apply px-4 py-2 bg-blue-500 text-white rounded-lg; } /* Better - just use utilities in HTML */ ```   ## 10. Organize with Prettier Plugin Keep your classes organized automatically with the official Prettier plugin: ```bash npm install -D prettier-plugin-tailwindcss ``` This sorts your classes in a consistent order, making code reviews easier and reducing merge conflicts.   ## Conclusion These tips will help you write more efficient Tailwind CSS and improve your development workflow. The key is to embrace the utility-first approach while knowing when to extract components for better maintainability. ### Why TypeScript Makes You a Better Developer (2026-01-04) URL: https://www.arjunbharti.com/blog/building-with-typescript Tags: typescript, javascript, programming, best-practices Discover how TypeScript can improve your code quality, catch bugs early, and make refactoring a breeze. TypeScript has become an essential tool in modern web development. Here's why you should consider adopting it for your next project.   ## Type Safety Prevents Bugs The most obvious benefit of TypeScript is catching errors at compile time: ```typescript interface User { id: number; name: string; email: string; } function greetUser(user: User) { // TypeScript knows user.name exists console.log(`Hello, ${user.name}!`); } // This will error at compile time greetUser({ id: 1, name: "John" }); // Missing 'email' ```   ## Better IDE Support TypeScript enables powerful IDE features: - **Autocomplete** - Know exactly what properties are available - **Go to Definition** - Navigate your codebase effortlessly - **Refactoring** - Rename symbols safely across your project - **Inline Documentation** - See types and docs as you code   ## Easier Refactoring When you need to change a data structure, TypeScript tells you everywhere that needs updating: ```typescript // Before: User has 'name' // After: User has 'firstName' and 'lastName' interface User { id: number; firstName: string; lastName: string; email: string; } // TypeScript immediately shows all places where 'name' was used // No more runtime errors from missed updates ```   ## Self-Documenting Code Types serve as living documentation that never goes stale: ```typescript interface ApiResponse { data: T; status: number; message: string; timestamp: Date; } async function fetchUsers(): Promise> { // The return type tells you exactly what to expect } ```   ## Gradual Adoption You don't have to convert everything at once. TypeScript allows gradual migration: ```typescript // Start with 'any' and gradually add types function legacyFunction(data: any): any { // Existing code works as-is } // Then improve over time function typedFunction(data: UserInput): UserOutput { // Now fully typed } ```   ## Generics for Reusable Code Write flexible, type-safe utilities: ```typescript function getFirstItem(array: T[]): T | undefined { return array[0]; } const firstUser = getFirstItem(users); // Type: User | undefined const firstNumber = getFirstItem([1, 2, 3]); // Type: number | undefined ```   ## Conclusion The initial investment in learning TypeScript pays dividends in code quality and developer experience. Start small, add types gradually, and watch your codebase become more maintainable and bug-resistant. --- ## Contact Good fit for: - building a new product from zero - reshaping an existing codebase - short, focused engagements (2–8 weeks) - a quick second opinion or technical chat - **Email:** mearjunbharti@gmail.com - **Schedule a call:** https://cal.com/arjunbharti/15min - **Location:** India // available worldwide - **Response time:** usually within 24 hours