The portfolio piece you are currently using.
We are a new studio, so we have fewer client stories than we would like and no interest in padding them out. Instead, here is the one project you can inspect yourself: this site. Add a package, open the checkout, read the policies. Everything described below is running while you read it.
Built, Not Assembled
Next.js App Router with React and TypeScript. Server-rendered, so pages are readable by crawlers without running JavaScript.
Tailwind CSS v4, self-hosted fonts. No page builder, no theme, nothing loading from a CDN we do not control.
Postgres on Supabase, accessed through Drizzle with a connection pooler suited to serverless.
Razorpay for India in rupees, PayPal for everywhere else in dollars. Both verified server-side.
Transactional email through Resend — receipts, payment links, renewal reminders, enquiry alerts.
Vercel, with a daily scheduled job for the renewal chase.
Five Things Worth Doing Properly
Most of a build is unremarkable. These are the parts where a shortcut costs somebody real money, and where we would want to know how a supplier had handled it.
The browser is never trusted with a price
The checkout sends package ids, not amounts. The server looks the price up in its own catalogue and charges that. A request claiming a ₹99,999 package costs ₹1 is still charged ₹99,999 — the number in the browser has no authority at all.
A payment is only real once the server says so
Razorpay returning "success" to the browser proves nothing, because a browser can post anything. The order is marked paid only after the server recomputes an HMAC signature over the order and payment ids and compares it in constant time. PayPal has no such signature, so the server calls PayPal’s capture API itself and additionally checks the captured amount matches what it recorded.
Payments that never reach the browser still get recorded
If a customer’s phone dies mid-payment, the browser never calls back. A webhook catches those server-to-server and reconciles the order. A captured payment that matches no order raises an alert rather than being silently discarded.
Renewals chase themselves
A scheduled job sends four staged reminders before a subscription lapses. Each stage is claimed in the database before the email is sent, so a retry or a double-run cannot message a client twice — the guarantee lives in a unique index rather than in hoping the job behaves.
Both currencies, one source of truth
Prices display in rupees or dollars based on where you are, and the choice is remembered. Every price on every page — catalogue, guides, this sentence’s neighbours — is read from one catalogue file, so no page can quote a figure the checkout disagrees with.
Check It Yourself in Two Minutes
Fair Questions About a Self-Authored Case Study
Why publish this instead of a client case study?+
Because we would rather show something you can check than something you have to believe. Client case studies are usually unverifiable by the reader — you cannot click into someone else’s admin panel. You can click Pay on this site and watch the whole machine work, then ask for a refund and watch that work too.
Is this the same as what I would get?+
The front end, yes — the same framework, the same attention to speed and structured data. The payment and admin machinery here is more than most sites need, and it is not in the standard packages. If you need it, say so and it is scoped and quoted like anything else.
Which package would this site be?+
The public pages map roughly to the Professional Website package. The checkout, admin panel, dual payment integration and automated reminders are custom work well beyond it, and would be quoted separately.
Can I see the code?+
Not this one — it holds live payment credentials and client data. What we can do is walk you through any part of it on a call, and everything we build for you is handed over in full with repository access in your name.
Want one built to this standard?
The prices are published, the scope is written down first, and you can have your money back before the project starts if you change your mind.