Skip to content
Rahul Jadhav
Selected work
Ecommerce platform

Titustoy

A toys, games, art, gifts, and stationery store connected to my retail business, designed and built end to end — storefront, dashboards, APIs, and payments.

Context
Independent product development
Date
July 2026 – present
My role
Product design, UI/UX, and full-stack development
Scope
Product architectureLogo & brandUI/UX designWeb storefrontAdmin & seller dashboardsBackend APIsPaymentsDeployment
Titustoy homepage with search, category navigation, a featured product, and delivery and checkout reassurances.
Homepage. Navigation is organised the way parents shop: by toy type, by age, and by occasion such as return gifts and birthdays.

The need

My retail business needed an online store that customers could browse by category, age, and occasion, pay for securely, and track — while staying structured enough to support multiple sellers later without a rewrite.

Key workflows

  1. 01Discover products through search, category browsing, age groups, and gift occasions.
  2. 02Add items to a cart that persists on the device for guests and syncs once signed in.
  3. 03Check out and pay through Razorpay, with payment confirmed on the server.
  4. 04Review orders and their payment and fulfilment status.
  5. 05Manage products, inventory, orders, and stores from admin and seller dashboards.

Web, admin, backend, and mobile

  • Web storefront

    Live at titustoy.com

    Next.js storefront covering discovery, category browsing, cart, checkout, and orders. Deployed on Vercel.

  • Admin & seller dashboards

    Internal

    Tools for managing products, inventory, orders, and stores, with seller-level data isolation and a central super-admin view.

  • Backend & data

    Running on Railway

    NestJS APIs with authentication, authorisation, input validation, and PostgreSQL through Prisma. I manage migrations, seeding, and production troubleshooting.

  • Mobile app

    Part of the monorepo

    A React Native (Expo) application that sits in the same monorepo and shares packages with the web and API projects.

Design decisions

Shop the way parents think
Alongside toy categories, the navigation offers age groups and occasions — return gifts, birthdays, gift ideas — because buyers often start from a child or an event, not a product type.
Reassurance where decisions happen
Free-delivery thresholds, secure checkout, and dispatch information sit beside the hero, catalog, and cart instead of being buried in policy pages.
Guest-first cart
Visitors can build a cart without an account. The cart explains that it is saved on the device and that signing in syncs it and reuses addresses.
Empty states that move people forward
An empty cart offers a route back into the shop and to the homepage rather than a dead end.

Engineering decisions and tradeoffs

Store-aware from day one
Products, inventory, and orders belong to a store, and queries are scoped by it. This adds work to every query now, but it means a second seller does not require a data migration or a permissions rewrite.
The server decides when an order is paid
Razorpay payments are initiated server-side, verified by signature, and reconciled through webhooks. Order status and payment status are tracked separately, so a closed browser tab or a delayed callback cannot leave an order in the wrong state.
One monorepo, several apps
Web, admin, API, and mobile apps live together with shared packages for types and logic. The tradeoff is more upfront tooling in exchange for a single source of truth when the data model changes.
Managed hosting over custom infrastructure
The frontend runs on Vercel and the backend and database on Railway. For a one-person product this keeps deployment and environment configuration manageable.

Screens

Titustoy catalog page with a category filter sidebar, sort control, and a product card showing sale price and an add-to-cart button.
Catalog. A persistent category filter, sorting, and product cards that show price, savings, and dispatch and payment cues before the click.
Titustoy cart page in its empty state, with a guest cart notice, an order summary, and buttons to continue shopping.
Cart (empty state). Guests are told their cart is saved on this device, and the order summary shows how far they are from free delivery.

Stack

  • Next.js
  • React
  • TypeScript
  • NestJS
  • React Native (Expo)
  • PostgreSQL
  • Prisma
  • Redis
  • Python / FastAPI
  • Razorpay
  • Vercel
  • Railway

Implemented capabilities

  • Public storefront with product catalog, category browsing, cart, and checkout.
  • Razorpay payment initiation, signature verification, and webhook handling.
  • Order and payment status management.
  • Admin and seller dashboards for products, inventory, orders, and stores.
  • Store-aware architecture with seller-level data isolation.
  • Authenticated, validated backend APIs on PostgreSQL via Prisma.
  • Payment workflows tested end to end; order fulfilment workflows prepared, with a Shiprocket integration planned.

Lessons

  • Treat payments as a sequence of states to reconcile, not a single success callback.
  • Deciding where data boundaries sit — per store, per seller — is far cheaper before launch than after.
  • Owning the whole product makes trade-offs concrete: every abstraction has to earn its maintenance cost.