Skip to Content

Custom software for US startups

Spreadsheets that run half your operations are a good sign something should be built. I make internal tools, admin panels and integrations from Assam, with everything in your repo so you can bring in another engineer any time.

Admin Dashboards & Internal CMS (Next.js, Supabase)
Desktop Apps for Mac and Windows
Developer Tools, CLIs & Open-Source Libraries
Data Import, Cleanup & Reporting Tools
Login, Roles & Row-Level Security
Clean Handover: Your Repo, Your Accounts
Core Track Record

4+ Years

Building systems

Collaboration Mode

Remote + Onsite (Guwahati Area)

Workflow Mapping → Working Prototype → Hardened Release

Platforms Used
Next.jsTypeScriptSupabasePostgreSQL

Working with me from the US

What clients there usually need

  • An admin panel for a startup that lets support see a customer's account, issue credits and review activity in one place.
  • A Stripe-linked billing dashboard that shows plan changes, failed payments and trial conversions for the finance lead.
  • A reporting tool that pulls from your database and ad accounts into one dashboard the founders check each morning.
  • An integration that moves data between your CRM, support desk and product database so nobody retypes information.

India is 9½ hours ahead of New York in summer and 10½ in winter, because US clocks change and India's do not. So 7 pm in India is 9:30 am on the East Coast in summer, and 8:30 am in winter. Chicago is an hour behind New York, and San Francisco and Los Angeles are three behind, so West Coast teams get a narrower window. At the start we agree call times and how I send updates.

I quote in USD and you pay by Wise or international bank transfer, so you pay from a US dollar account and there is no currency conversion on your side. Invoices are in English. A contract or NDA can be signed electronically, DocuSign-style, and I am happy to sign your NDA before we talk about details. I do not give tax or legal advice, so your accountant handles that side.

I write in US English by default, in copy, interface text and documentation. I build products that work with Stripe and similar US payment tools when you need to take payments. Holidays are worth planning early: Thanksgiving, July 4 and the year-end break on your side, and Diwali and other Indian festivals on mine. Tell me your key dates at the start and we schedule around both calendars.

Optimization Summary

Most teams don't need a big platform. They need one tool that stops the same hour being wasted every day.

Common Obstacle

“Data lives in five spreadsheets and nobody trusts the totals.”

Engineering Resolution

One database with validated forms, so every entry is checked as it is made, plus reports and exports that everyone reads from.

Common Obstacle

“Every website update needs a developer.”

Engineering Resolution

An admin dashboard where your team edits content, uploads images and manages inquiries themselves, with logins and roles.

Common Obstacle

“Updating firmware on deployed devices means visiting each one with a cable.”

Engineering Resolution

Over-the-air updates: devices check GitHub Releases and install new firmware themselves, the approach behind GitReleaseOTA.

Common Obstacle

“SaaS charges per seat for features you never use.”

Engineering Resolution

A small tool that does exactly your job, hosted on your own accounts, with no per-user fees.

Is This Service Right for You?

I build small, focused tools that remove a specific daily pain, and leave you owning the code.

Teams Running on Spreadsheets

Businesses tracking orders, stock, leads or field visits across spreadsheets and WhatsApp groups, who need one place with validated data and reports.

Sites Without a Back Office

Businesses that need a developer every time a page changes. I build admin panels like JM.OS, which runs this site's projects, services, QR codes and leads.

Hardware & Developer Teams

Teams that need tooling of their own, like GitReleaseOTA, my open-source library for updating ESP32 firmware from GitHub Releases, published on the PlatformIO Registry.

People Who Want a Desktop Tool

Users who want a fast native utility rather than another browser tab, like Clipivo, my Mac clipboard manager that also searches text inside screenshots.

Typical Software Deliverables

Working software, the source, and the accounts it runs on, all in your name.

Software

Source Code Repository

TypeScript, Swift or Python project in your own Git repository, typed and organised so another developer can work on it.

Package

Deployed Tool or Signed App

A web tool deployed to your hosting (e.g. Vercel and Supabase), or a signed desktop build ready to install.

Database

Database Schema & Migrations

Versioned migrations, row-level security policies and seed data, so the database can be rebuilt from the repository.

Security

Admin Accounts & Access Roles

Logins for your team with the right permissions, and a short note on how to add or remove people.

Documentation

Handover Guide

How to run it locally, deploy changes, back up data and where every credential lives.

Specialized Building Areas

Three kinds of tools I build, each with a working example.

Admin Dashboards & Internal CMS

Back offices for websites and teams: content editors, inquiry inboxes, QR codes with visit logs and settings, like JM.OS behind this site (Next.js server actions, Supabase auth and row-level security).

Desktop Apps

Fast, private desktop apps that work offline. Clipivo (Mac) keeps a searchable history of everything you copy, including text inside screenshots. Retrova (Mac and Windows) gets files off drives that won't open without writing to them, then verifies every copy.

Developer Tools & Libraries

Libraries, CLIs and scripts that remove repetitive engineering work, like GitReleaseOTA for ESP32 updates and the CLI that drafts and publishes the notes on this site.

Technical Stack & Platform Coverage

The tools I reach for, chosen so you can host and maintain the result cheaply.

Web Tools

Next.js (App Router)TypeScriptReactTailwind CSS

Data & Access

Supabase / PostgreSQLRow-Level SecurityServer ActionsZod validation

Desktop

Swift 6, SwiftUI & AppKitPython (Mac and Windows)SQLite FTS5CryptoKit

Dev Tooling

Node.js CLIsPython scriptsPlatformIO librariesGitHub Releases API
Related Technologies:Next.jsTypeScriptSupabaseSwiftSwiftUIPlatformIO
Deep Technical Documentation

Engineering Notes & Tradeoffs

Detailed Technical Deep Dive: Custom Software & Tools

How I build small tools that teams rely on every day: admin dashboards locked down on the server, desktop apps with instant local search, and developer tools that remove manual release work.

1. Admin Dashboards: Two Locks on Every Write

An admin dashboard is the most attractive target on a small business's site: it can edit content, read enquiries and often bypass the database's normal rules. Hiding buttons in the UI is not security. In JM.OS, the dashboard behind this site, every change goes through two independent checks.

Middleware Is the First Lock, Not the Only One

Middleware keeps signed-out visitors away from /jmos pages, but server actions can be called directly. So every action that writes data re-checks the session and the admin allow-list on the server before it touches the privileged database client.

The pattern each server action follows:

"use server";

import { revalidatePath } from "next/cache";
import { requireAdmin } from "@/lib/auth/admin";
import { createAdminClient } from "@/utils/supabase/server";

export async function updateSettings(settings: Record<string, string>) {
  // Second lock: verify the signed-in user is on the admin allow-list
  await requireAdmin();

  // Only now create the client that bypasses row-level security
  const admin = createAdminClient();
  const rows = Object.entries(settings).map(([key, value]) => ({ key, value }));
  const { error } = await admin.from("settings").upsert(rows, { onConflict: "key" });
  if (error) throw new Error(`Failed to update settings: ${error.message}`);

  // Refresh the cached public pages that read these settings
  revalidatePath("/");
}

Row-Level Security for Everything Public

Public pages should read through a client limited by Postgres row-level security policies, so even a bug in a page can only see published rows. Keep the unrestricted client on the server, behind checks like the one above.


2. Desktop Utilities: Instant Search with SQLite FTS5

A desktop tool earns its place by being instant. Clipivo keeps a history of everything you copy, including text recognised inside screenshots, and search has to stay fast as that history grows into tens of thousands of entries. A plain LIKE '%term%' query scans every row; SQLite's FTS5 full-text index does not.

-- Full-text index that mirrors the clips table
CREATE VIRTUAL TABLE clips_fts USING fts5(
  content,
  content='clips',
  content_rowid='id',
  tokenize='unicode61 remove_diacritics 2'
);

-- Keep the index in sync on insert
CREATE TRIGGER clips_ai AFTER INSERT ON clips BEGIN
  INSERT INTO clips_fts(rowid, content) VALUES (new.id, new.content);
END;

-- Prefix search, best matches first
SELECT clips.*
FROM clips_fts
JOIN clips ON clips.id = clips_fts.rowid
WHERE clips_fts MATCH 'invoice*'
ORDER BY bm25(clips_fts)
LIMIT 50;

Storing Private Data in Plain Text

Clipboard history contains passwords, addresses and messages. Anything a desktop tool stores locally should be treated as sensitive: keep it on the machine, encrypt what is sensitive (Clipivo uses CryptoKit), and give the user an easy way to exclude apps and clear history.


3. Developer Tools: Firmware Updates from GitHub Releases

Updating devices in the field by plugging in a cable does not scale past a handful of units. GitReleaseOTA, my open-source PlatformIO library, lets an ESP32 update itself from a project's GitHub Releases, so publishing a release is the whole deployment process.

The update flow on the device:

  1. Check: Ask the GitHub Releases API for the latest release and compare its tag with the running firmware version.
  2. Download: If it is newer, fetch the firmware binary attached to the release.
  3. Flash: Write the image to the ESP32's inactive OTA partition while the current firmware keeps running.
  4. Switch: Mark the new partition as the boot target and restart.

Why GitHub Releases Instead of an Update Server

A custom update server is one more thing to host, secure and pay for. GitHub Releases already gives versioned, downloadable binaries and an API, so small hardware teams get over-the-air updates without running any infrastructure of their own.

The same idea runs through all the tooling I build, including the CLI that drafts and publishes the engineering notes on this site: find the step people repeat by hand, and make it one command.

My Custom Software Process

Start from the workflow, ship a usable version early, then harden it.

01. Workflow Mapping

Seeing how the work happens today

Phase 1 of 6

We walk through the current process: who enters what, where it goes, and where time is lost. That becomes a short list of what the tool must do.

Featured Project Deliverables

Dynamic projects fetched from the portfolio database demonstrating execution.

Fyra AI Portfolio Assistant Interface - Clean Full Mockup
AI
Custom knowledge basePrompt engineering

Fyra — AI Portfolio Assistant

Custom knowledge base assistant that qualifies visitors, recommends projects, and captures leads in real-time.

Next.jsTypeScriptGemini APISupabase

AI & Full-Stack Engineer

View Details →
Searching “weekly review” finds a screenshot containing those words
macOS
Native macOSSearch inside screenshots

Clipivo

A native macOS clipboard manager that remembers everything you copy, even the text inside screenshots.

Swift 6SwiftUIAppKitSQLite FTS5

Design & Engineering

View Details →
Retrova's Rescue screen: drive health, APFS snapshot browser, recovery stats and verification
Desktop
Strictly read-onlyByte-for-byte verification

Retrova

A free, open-source desktop app that gets your files off drives that won't open, without writing a byte to them.

PythonJavaScriptCSQLite FTS5

Design & Engineering

View Details →

Why Build a Custom Tool?

Off-the-shelf software is great until your process doesn't match it. A focused custom tool fits your process and costs nothing per seat.

What MattersCustom Tool (My Approach)Typical Off-the-Shelf SaaS
Fit to Your Process✓ Built around how your team already works.⚠️ Your team adapts to the product's workflow.
Ongoing Cost✓ Hosting only; no per-seat fees.⚠️ Monthly fee per user, rising with headcount.
Data Ownership✓ Your database, exportable at any time.⚠️ Data lives in the vendor's system and format.
Changes When You Need Them✓ Add the feature you need, when you need it.❌ Wait for the vendor's roadmap, or work around it.

Coverage Area & Physical Location

My evening in India is your morning on the East Coast, so we have a window for calls. For West Coast teams we agree call times and update rhythm in the first conversation. Quotes are in USD and paid by Wise or international bank transfer. Code lives in your GitHub from day one, and you get a staging link to try at every step.

On-site Delivery Areas

Guwahati
Jorhat
Dibrugarh
Silchar
Nagaon
Tezpur
Tinsukia
Sivasagar
Golaghat
Barpeta
North Lakhimpur
Bongaigaon
Dhubri
Kokrajhar
Hailakandi
Karimganj

Remote Collaboration

For clients elsewhere in India (Bengaluru, Hyderabad, Pune, Mumbai, Delhi NCR) and abroad, I work remotely through GitHub, with a live staging link you can try at every step.

Base: Guwahati, Assam, India

Frequently Asked Questions

Answers to what clients ask me most.

Yes. I can add to what you have in Postgres, MySQL or Supabase and keep the code in your repository.
I ask for the least access needed, usually a staging environment and read-only credentials first, and everything lives in accounts you control.
Yes. We list your holidays, such as Thanksgiving and July 4, and mine, such as Diwali, at the start and plan reviews and releases around them.
Yes. East Coast teams get the easiest overlap, and for Central or Pacific teams we choose call times that suit most people and keep the rest in writing, in a shared channel or tracker.
Yes. Quotes are in USD, so you pay in dollars by Wise or an international bank transfer, and I receive it in India. You get an English invoice for your records.
Internal tools and admin dashboards on the web, native Mac apps, and developer tools such as libraries, CLIs and update pipelines. Mobile apps are covered under Mobile App Development.
Yes. The repository, database and hosting accounts are in your name from the start.
Usually, yes. If a service has an API (payments, email, spreadsheets, CRMs), the tool can read from and write to it.
I offer ongoing support on request, but the code is documented so any developer can maintain it.

Let's Build the Tool Your Team Is Missing

Tell me what eats your team's time. I'll suggest the smallest tool that fixes it, with an estimate after a first call.