Things built, being built, and being explored.
Newest first. Every entry is a real system with a problem, what was built, and what happened. Internal tools are described by what they do, never by their data.
- Entries
- 24
- Live / active
- 13
- Categories
- 9
- Since
- Aug 2022
- Problem
A LinkedIn profile lists jobs. It cannot show how the pieces connect — the customer work, the commerce stack, the tools, the product — or that the same person builds them.
What I builtA data-driven Next.js site: every section reads from typed content files, so it can be updated without redesigning. Command palette, terminal, simulated tracker console, system map, build log, lab notes.
OutcomeYou are looking at it. Build log entry zero, dated the day it went live.
- Stack
- Next.js 16React 19TypeScriptTailwind 4MotionVercel
- Surfaces
- Web
- Problem
A limited drop needed to feel limited: a product page only the right people could open, a way to ask for access, and a fully automated path from request to code — without anyone in the loop.
What I builtA gated product template with a scroll-scrubbed hero and access-code gate. A request form posts to a small serverless endpoint that upserts the Shopify customer with tags and a reason, which triggers a Flow workflow to email the code. Every request is also logged to a sheet for the team.
OutcomeWent live 3 September 2026. Requests flow from storefront to CRM to inbox with zero manual steps.
- Stack
- Shopify LiquidCanvasNode serverlessShopify Admin APIShopify FlowApps Script
- Surfaces
- Storefront · Serverless · CRM
- Problem
The questions the team asks all day — conversion, online vs retail sales, marketing, returns — were buried in an admin built for desktops. Nobody opens the admin on the way to a store.
What I builtStarted as a single conversion number on Android. Grew into four clients on one architecture: native Mac and iPhone apps sharing a Swift data layer, a Compose Android app with self-updating builds, and a Next.js web app gated to company Google accounts with the Shopify token kept server-side. Reports are ShopifyQL where it is fast and streamed order scans with progress bars where it is not.
OutcomeIn daily use across four platforms. Twenty-plus versions shipped since June; v5.7 is current.
- Stack
- Kotlin + ComposeSwiftUINext.jsShopifyQLShopify Admin GraphQLAuth.jsVercel
- Surfaces
- macOS · Android · iPhone · Web
- Updated
- Sept 2026
- Problem
When commerce and order-management systems disagree, the missing orders are the expensive ones — and nobody can see how long they have been missing.
What I builtA zero-dependency dashboard that diffs the two sides and lists every unmatched order with its age, so the oldest gaps get fixed first.
OutcomeThe ops team gets a ranked list instead of a hunch.
- Stack
- HTMLPythonCSV
- Surfaces
- Web
- Problem
Long drives generate a lot of small facts — fuel stops, halts, expenses, moments, issues — and no app captured them without turning the drive into data entry.
What I builtA native trip recorder with a one-tap instant start, GPS route recording, a lifetime map of places driven, GPX export, a Wrapped-style trip story, and an emergency card. Self-updating builds so the app can improve mid-trip.
OutcomeEight major versions in a month. It gets used on every drive.
- Stack
- Kotlin + ComposeRoomMapLibreSwiftUISwiftData
- Surfaces
- Android · iPhone
- Updated
- Sept 2026
- Problem
Banners looked blurry on high-DPI screens. The image snippet emitted a single srcset candidate, which browsers treat as 1×, so a 2× screen was upscaling every image on the site — across 68 call sites.
What I builtA new srcset snippet that emits real density descriptors clamped to the source's actual pixel width, including fractional descriptors when a source sits between two densities, plus a corrected hero section.
OutcomeHero upscale dropped from 2.10× to 1.58× with no asset changes; measured sharpness roughly doubled. Shipped to the live theme with byte-verified backups.
- Stack
- Shopify LiquidsrcsetPyMuPDF
- Surfaces
- Storefront
- Problem
Hiring for a creative team needed a form that felt like the brand, and the reviewers needed a place to read, filter and export applications — without a third-party tool.
What I builtA public, self-contained application form, an API that stores submissions, and an admin panel behind Google SSO with a hard reviewer allowlist. CSV export for the spreadsheet people.
OutcomeLive at careers.mokobara.com.
- Stack
- Next.jsAuth.jsPostgresCSV export
- Surfaces
- Web
- Problem
The design team's Figma had exact measurements. The theme editor did not. Getting a launch page to match the design usually meant compromise.
What I builtMeasurements extracted straight from the design export, a viewport-unit layout system so desktop and mobile both match, custom letterforms rebuilt as vector assets, and a WebGL alpha-video tail. Plus a site-wide fix for lazy-loaded videos that refused to autoplay.
OutcomeLive at mokobara.com/pages/transit-z, through two full design revisions.
- Stack
- Shopify LiquidFigmaWebGLPyMuPDF
- Surfaces
- Storefront
- Updated
- Aug 2026
- Problem
Corporate buyers were being sent an 84-page PDF. It needed to become a browsable, searchable, filterable catalogue on a real domain — and eventually not depend on any hosting outside Shopify.
What I builtA Next.js catalogue with filters, search and product modals. Then the whole thing was ported into a single Shopify theme section, all 248 assets moved to Shopify's CDN, and the external hosting decommissioned.
OutcomeLive at b2b.mokobara.com with zero external dependencies.
- Stack
- Next.jsShopify LiquidShopify Files CDNGraphQL
- Surfaces
- Web · Storefront
- Updated
- Jul 2026
- Problem
Distributing a thousand single-use codes during a sale used to mean a spreadsheet, a queue of messages, and duplicates.
What I builtA Google-SSO app where any employee claims their codes, with claims made concurrency-safe in Postgres so two people can never get the same code. An admin view for stats, and a single switch to close the sale.
OutcomeReopens each sale with a new CSV of codes and one environment flag.
- Stack
- Next.jsAuth.jsPostgresadvisory locks
- Surfaces
- Web
- Problem
Shopify tells you what changed. It is much worse at telling you who changed what, when, across a whole team and months of history.
What I builtA cron job polls the events endpoint every ten minutes, stores every event idempotently, and a password-gated dashboard lets anyone search and filter the full history by resource, action and author.
OutcomeThe answer to "who changed this?" is now a filter, not a meeting.
- Stack
- Next.jsPostgresVercel CronShopify Events API
- Surfaces
- Web
- Problem
Shopify revenue, Amazon revenue and three ad platforms each had their own dashboard. Nobody had one number for ROAS — and the one number had to be on net revenue, not gross.
What I builtNative Mac and Android apps on a shared architecture: every channel loads independently so the fast ones land in a second while the slow one is still working, with stale-while-revalidate caching and retries. Revenue is netted of GST at parse time so every ROAS is honest.
OutcomeOne screen, one ROAS definition, across D2C and marketplace.
- Stack
- SwiftUIKotlin + ComposeWindsor.aiMeta AdsGoogle AdsAmazon Ads
- Surfaces
- macOS · Android
- Problem
Prices change. Shopify does not keep a history of them, and does not say who made the change.
What I builtA scheduled snapshot of the catalogue, diffed against the last one, logging every price, compare-at and title change per product — with a best-effort hint of who was active on the product at the time.
OutcomeA per-product timeline and a store-wide change feed.
- Stack
- Next.jsPostgresVercel CronShopify Admin GraphQL
- Surfaces
- Web
- Problem
SEO work on a storefront is a loop of crawling, writing, and pasting. It is slow, and shipping straight to the live theme is scary.
What I builtA four-part audit (on-page, schema, catalogue, technical) that feeds a suggestion engine using Claude with a rule-based fallback, generates Liquid snippets and structured data, and ships only to a draft theme — the live theme is locked out of the apply menu.
OutcomeThe write pipeline verified end to end against a disposable theme. Kept as an internal prototype.
- Stack
- Next.jsAnthropic APIcheerioShopify Admin APILiquid
- Surfaces
- Web
- Problem
The funnel was known in aggregate. It was not known per product category, per period, compared to the previous period — which is where the decisions are.
What I builtA dashboard that joins ShopifyQL session and sales data with product metafields for category roll-ups, with timeline presets, compare-to-previous-period deltas, and a GA4 × Shopify merged funnel that drills from category to product.
OutcomeCategory-level funnels the merchandising team can act on.
- Stack
- Next.jsShopifyQLGA4chart.jsAuth.js
- Surfaces
- Web
- Problem
Knowing what is about to sell out — per store, per SKU — should not require a laptop.
What I builtA native Android app with inventory by location, an out-of-stock-soon list, sales run rate, returns, and background push alerts when something crosses the line.
OutcomeStock questions answered from a pocket.
- Stack
- Kotlin + ComposeWorkManagerShopify Admin GraphQL
- Surfaces
- Android
- Problem
When a customer buys some items in-store and some for home delivery, the POS needs two bills. The combined basket may qualify for a slab discount that neither bill reaches alone.
What I builtA calculator that pulls live products, works out the discount the combined basket earns, and splits it precisely across both bills down to each product. Slabs are editable in-app.
OutcomeStore teams stop doing arithmetic at the counter.
- Stack
- Next.jsShopify Admin APIVercel
- Surfaces
- Web
- Problem
Retail stores and the website were two channels with two views of the customer. True omnichannel needs one.
What I builtSix months of work with the devx AI labs team on a custom-built POS platform designed around how Mokobara's stores actually operate, integrated with the same customer and order graph as the website.
OutcomeWent live 27 May 2026. In Nikhil's words: the moment the website and retail stores began operating as one unified channel.
- Stack
- Custom POS platformShopifydevx AI labs
- Surfaces
- Retail · Commerce
- Problem
Lost luggage is the worst moment in a travel brand's customer journey. After Mokobara joined Google's Find Hub launch, the brand needed a product that made every bag findable — on both phone ecosystems.
What I builtNikhil's first physical product: one of the slimmest trackers in the world, IP68 rated, dual-network, with a five-year battery on Android and three on iOS. Design help from Vishnu Vadakkoot and Priyal S.
OutcomeLaunched 14 April 2026. "I joined Mokobara thinking I'd work around great products. Didn't quite expect to help make one."
- Stack
- Bluetooth LE 5.4Apple Find My networkGoogle Find Hub networkIP68
- Surfaces
- Hardware · iOS · Android
- Problem
A suitcase is the one product a customer most wants to locate and the one least likely to be connected.
What I builtA partnership that put Mokobara's name in Google's Find Hub announcement alongside July, as the first luggage brands with built-in finding — and set up the Moko Tracker that followed.
OutcomeAnnounced at The Android Show: I/O Edition, May 2025. Airlines including Air India now accept Find Hub locations for lost bags.
- Stack
- Google Find HubAndroidBluetooth LE
- Surfaces
- Android · Product
- Problem
The basic plan could not deliver dynamic, personalised experiences. Growth was outrunning the stack.
What I builtThe Plus migration and what it unlocked: custom checkout logic, Functions for fraud and bot mitigation, Flow automations for loyalty, B2B portals, expansion stores for the UAE and Singapore, and headless capabilities Nikhil later spoke about at a Shopify event in Bengaluru.
OutcomePer Shopify's case study: revenue doubled year over year, conversion up 30%, retention up 30%.
- Stack
- Shopify PlusCheckout ExtensibilityShopify FunctionsFlowB2Bexpansion stores
- Surfaces
- Storefront · Checkout · Retail
- Problem
The CRM had rich buyer and site data, but reaching the same person across devices on the open web — and proving it worked — was the hard part.
What I builtWith Epsilon, an identity-resolution layer that connected current, lapsed and prospective customers across devices and served brand-forward, personalised creative, measured incrementally rather than by last click.
Outcome4.1:1 incremental ROAS against a 1.6:1 target, ₹97 lakh in incremental revenue and 8.4 million personalised messages, per Epsilon's published case study.
- Stack
- First-party dataIdentity resolutionEpsilonPersonalised creative
- Surfaces
- Open web · CRM
- Problem
Repeat purchase in luggage is slow by nature. The brand needed a reason for customers to stay in the relationship between suitcases.
What I builtA paid membership with a fixed validity window and exclusive perks, with Shopify Flow tagging loyal customers and triggering their benefits automatically.
OutcomeMembers generate three times the sales of non-members; customer retention up 30% year over year, per Shopify.
- Stack
- Shopify FlowCustomer tagsLifecycle messaging
- Surfaces
- Storefront · CRM
- Problem
In 2022 Mokobara was an online-first brand growing fast, with customer data but no system around it.
What I builtJoined as CRM Lead in August 2022 and spent the first year creating, implementing and running the CRM ecosystem — the segmentation, lifecycle and retention machinery a brand needs before it can personalise anything.
OutcomeA year in, Nikhil described it publicly as a strong CRM system that had contributed to high levels of customer retention and repeat sales. Everything technical since has grown out of it.
- Stack
- CRMSegmentationRetentionRepeat purchase
- Surfaces
- CRM
- Updated
- Nov 2023
Add an entry: append to data/builds.ts. The list, the palette and the home page pick it up.