Skip to content
Live product Progress report · August 2026

iSell Back Startup progress report

iSell Back is a device recommerce platform for India. People sell their MacBook or iPad from home: they get a price in seconds, an agent collects the device at their door, and the payout is transferred after inspection.

This page is the engineering and product record behind it. Every number below is countable in the source repository — it is not a pitch deck estimate. The Android app is still listed on Google Play as BuyBack Elite: that listing and the package id com.buybackelite.app are deliberately preserved so existing installs keep updating, while the product name moved to iSell Back.

Summary in one paragraph

iSell Back started as a single-business prototype with one Android app and a basic sell flow. It was rebuilt through AI-assisted, spec-driven development, and the system is now six shipped surfaces — three web applications and three Android applications — on a backend of 47 database migrations, ~77 tables, 119 Postgres functions and 139 row-level-security policies, with 116 hand-written test files and a 6-job CI pipeline that gates every push. Pricing became fully server-authoritative, the schema became multi-tenant, and the customer bundle dropped from 297 KB to 134.8 KB gzipped. The current focus is launch infrastructure for the India rollout.

01 What changed since the first grant

The most useful way to read this project is as a delta. Here is the state of the system at the end of the prototype phase, against the state of the system today.

Comparison of the iSell Back system at the time of the first credit grant versus today
Dimension Prototype phase Today
Shipped surfaces 1 Android app + prototype web 3 web apps + 3 Android apps + 1 shared package
Tenancy model Single business, hard-coded Multi-tenant, business_id + additive RLS
Who decides the price Device could compute and display its own price Server only — 14 canonical_* RPCs
Database Base schema 47 migrations, ~77 tables, 119 functions
Access control Partial RLS 139 policies, RLS enabled on 87 tables
Automated tests None in CI 116 test files, 6-job pipeline on every push
Customer first-load JS 297 KB gz, one chunk, 0 split points 134.8 KB gz, budget-gated at 250 KB
Product scope Sell your device to us + multi-store discovery, offer comparison, refurb marketplace
Payouts Manual Razorpay, fail-closed webhook, idempotent reservation

02 By the numbers

Every figure here is a direct count from the repository — migration files, SQL statements, route declarations, test files. They are reproducible, not rounded up.

6
Shipped apps
47
DB migrations
~77
Database tables
119
Postgres functions
139
RLS policies
116
Hand-written test files
160
DB indexes
194
Spec tasks completed

Backend surface

  • 62 database triggers
  • 13 serverless API handlers
  • 1 Supabase Edge Function
  • 14 server-authoritative pricing RPCs

Test breakdown

  • 68 JavaScript / JSX (Vitest)
  • 43 Dart (flutter test)
  • 5 Deno (Edge Function)
  • Plus a separate generated end-to-end suite

Device catalog

  • 35 seeded models
  • 21 MacBook · 14 iPad
  • 56 condition-deduction rules
  • ~70 model spec entries on mobile

03 The six surfaces

Three sides of the business each need their own interface: the customer selling a device, the field agent collecting it, and the operator running pricing and payouts. Each exists on both web and Android.

Customer

isellback.com · Android

About 30 routes on web. A 7-step sell wizard, store discovery by pincode, offer comparison across stores, refurbished listings and per-request lifecycle tracking.

  • Guests finish the whole quote before any login wall
  • Android com.buybackelite.app v1.0.4
  • 100 Dart files · 26 screens

Field agent

agent.isellback.com · Android

8 pages for the person at the customer's door: assigned pickups, on-site condition verification, photo capture, customer signature and history.

  • Offline queue for patchy field connectivity
  • Android com.buyback.agent v1.0.1
  • Agents have no payout-initiation path by design

Operator

control.isellback.com · Android

22 pages of back office: the price engine and its governance, condition deductions, competitor price sync, agent management, fraud alerts, payout administration and store verification.

  • Super-admin guard on platform-wide screens
  • Android com.buyback.app v1.0.1
  • Hosts the 13 serverless API handlers

How one sale moves through the system

  1. Quote

    The customer picks a model, storage and condition. The server — never the device — calculates the price through canonical_calculate_pricing and issues a quote.

  2. Compare and choose a store

    A pincode resolves which stores actually serve that area, and each returns a fresh server-issued offer. Customers never see a pre-deduction headline number that later shrinks.

  3. Doorstep pickup

    An agent self-assigns the pickup, verifies the device on site, captures photos and a signature, and the inspection result produces a revised quote the customer accepts or declines.

  4. Payout

    Payout is reserved in SQL with an idempotency key, executed via Razorpay, and confirmed by a fail-closed webhook that re-fetches the authoritative record from the provider.

04 How the credits were spent

The credits funded AI-assisted development in Kiro, and specifically its spec workflow: requirements first, then a design, then a task list that gets worked through and checked off. Six specs live in the repository under .kiro/specs/, each with a requirements document, a design document and a tracked task list. That is where the money went, and the artifacts are auditable.

Kiro specs and their task completion counts
Spec Scope Tasks done Progress
ui-overhaul Presentation and delivery only. Forbidden from touching pricing, RLS or payments. 54 / 54
multi-tenant-marketplace Turn a single-business system into a marketplace, purely additively. 52 / 75
production-hardening Server-owned command boundaries, private media lifecycle, authoritative pricing. 61 / 92
india-launch-audit Drive every finding from the internal audit to closure. 27 / 37
store-discovery-launch The five items standing between the product and marketing spend. In progress
mobile-launch-readiness Android release readiness across all three apps. Scoped
194 / 258

Spec tasks closed across the four specs that carry task lists.

Requirements-first

Every spec was written before its implementation, not reverse-engineered afterwards.

Audited

A full internal audit in July 2026 reviewed the code against those specs and logged 11 findings.

05 The parts that are hard to fake

Anyone can ship screens. These are the invariants underneath, which is where a money-handling product either holds up or does not.

The server owns every price

14 canonical_* database functions are the only thing allowed to produce a number. The audit found one Flutter screen still recomputing a price locally and that code was deleted. Clients display prices; they never derive them.

Tenant isolation, proven in CI

Every push spins up a throwaway PostgreSQL 16, applies all 47 migrations in order, verifies checksums and ordering, then runs a two-tenant harness that asserts one business cannot read another's rows.

Payments fail closed

The Razorpay webhook verifies a timing-safe HMAC over the raw body, de-duplicates events with payload-hash conflict detection, re-fetches the authoritative record from the provider, cross-checks amount, currency and fund account, and only permits monotonic status transitions.

No secret in any client bundle

Both web source trees were swept: no service-role key and no webhook secret is exposed through a browser-visible variable. Privileged work happens in serverless handlers, not the client.

Identity documents get their own path

ID proofs, verification photos and signatures move to a receipt-based private pipeline: an insert-only capability scoped to the uploader's own user id, with retention rules and an access audit trail. It ships behind a flag, currently off, ahead of the data cutover.

Lifecycle as independent domains

Request, pickup, inspection and inventory each own their state, coordinating through an outbox/inbox with idempotent command middleware. The customer lifecycle screen adds no authority of its own — labels and permitted actions come from a versioned server contract.

Performance is a build gate, not a wish

The customer site went from a single 1,112 KB bundle with zero code-split points to a route-split app at 134.8 KB gzipped on first load. CI fails the build if first-load JavaScript crosses 250 KB gzipped, so it cannot quietly regress.

This matters commercially: the audience is on Indian mobile networks, and the database currently sits in Seoul at roughly 150–250 ms per round trip.

Before — 297 KB gz 1 chunk
Now — 134.8 KB gz route-split
CI budget ceiling 250 KB gz

06 Current stack

Stated plainly, with no aspirational entries. This is what the system runs on today.

Data & auth

  • Supabase — PostgreSQL
  • Supabase Auth + Google OAuth
  • Supabase Storage
  • 1 Deno Edge Function

Web

  • React 18 + Vite 5
  • TailwindCSS 3
  • Zustand, React Router 6
  • Leaflet maps

Mobile

  • Flutter, Dart 3.10
  • 3 Android apps
  • 1 shared internal package
  • Firebase Cloud Messaging

Ops

  • Vercel hosting + serverless
  • Razorpay payouts
  • GitHub Actions — 6 jobs
  • Kiro spec-driven development

07 How the work is governed

A platform that holds someone's device and their payout details cannot ship on optimism. Two habits keep this system honest with itself: nothing sensitive goes live until it has been reviewed, and anything not yet verified stays switched off rather than switched on and hoped for.

Staged rollout by default

  • New subsystems ship behind environment flags and are enabled only after their data path has been verified end to end.
  • Notifications are complete and tested, and stay dormant until delivery credentials are provisioned in the target environment.
  • Schema changes are additive: with one business present, every screen, query result and price is identical to before the change.

Reviewed, then merged

  • A full internal audit in July 2026 reviewed the codebase against its own specs and logged every finding with an owner and a fix status.
  • Changes touching pricing, access control or payments are drafted as written proposals and reviewed before they enter the migration chain.
  • Each finding is tracked to closure in a dedicated spec rather than in someone's head.

On the July 2026 audit: it was a static code review. The sandbox it ran in failed to start, so no build, linter or test runner was executed during that pass. It is cited here as a review, not as a green test run.

08 What the next phase needs

The build phase is largely done. The remaining distance to a marketed launch in India is mostly infrastructure and verification rather than new features, and here is exactly what that consists of, in priority order.

  1. 1

    Move the data layer into an India region

    The single largest user-facing problem. Every request from an Indian customer currently crosses to Seoul and back at 150–250 ms. The designs already minimise round trips to compensate, but the real fix is regional. This means standing up a parallel environment, replaying all 47 migrations, migrating storage objects and cutting over.

  2. 2

    Execute the launch gate against live infrastructure

    The canonical-pricing and two-tenant isolation harnesses run green on ephemeral Postgres in CI on every push. Re-running them against the provisioned India environment is the sign-off step for the regional cutover.

  3. 3

    Turn on notifications and complete the media cutover

    Both are finished code sitting behind flags. Enabling them requires provisioned credentials, a storage migration for existing objects, and a reconciliation pass to confirm nothing was orphaned.

  4. 4

    Finish the Android release track

    Route the eleven built marketplace screens, close out the mobile launch readiness spec, and get all three apps onto a repeatable release process rather than manual builds.

  5. 5

    Onboard real partner stores

    The multi-tenant schema, store verification flow and offer-comparison engine are built and currently exercised by fixtures. The next phase replaces fixtures with actual merchants, which is what turns this from a buyback shop into a marketplace.

Infrastructure, not features

Every item above is infrastructure and verification work. The product surface is built; what remains is putting it on the right regional footing, signing off the cutover, and replacing fixture data with real partner stores. That is the whole distance to a marketed launch in India.

09 Founders

Anwar Rao

Anwar Rao

Co-Founder & CEO

Business roadmap, store partnerships, pricing strategy and operations.

Abdul Mannan

Abdul Mannan

Co-Founder & CTO

System architecture, the web and Flutter applications, database schema and row-level security, payments integration and the CI pipeline.

See it running

The fastest way to check any claim on this page is to use the product. Get a quote on a MacBook or iPad without creating an account.