Web platform 64 automated tests

A website with payments and a member account

A backend-and-frontend web project: a landing page that does the selling itself, with a payment flow, automatic access delivery, a member dashboard, and an admin panel — a complete commerce loop, not just a page describing a product.

Role: backend, frontend, payments, account system Stack: TypeScript · Express · node:sqlite · Lava.top Status: delivered to the client

No live demo is linked here — the client and the product are kept unnamed in this write-up, so we don't link to a page that would identify them.

Homepage of the product website built for this project
Task

Task

The client needed more than a page describing a product — they needed a site that does the selling itself: takes payment, opens access immediately, and gives the buyer somewhere to manage their account afterward.

That meant building three things that had to work together without gaps: a payment flow that can't double-charge or double-deliver, a member area the buyer actually uses after paying, and an admin view for handling accounts without touching the database by hand.

Solution

Solution

An Express/TypeScript backend behind a marketing landing page, backed by node:sqlite, with payments running through the Lava.top payment gateway. A webhook re-verifies the transaction status with the provider before doing anything, then hands off to an idempotent fulfillment step that grants access — so a retried or duplicated webhook call can't issue a second license or double-charge the buyer.

Sign-in runs through OAuth with region-based provider routing — Yandex for Russia, Google everywhere else — so users authenticate through the provider that fits local requirements. On top of that sits a small pricing system — 5 paid plans plus 2 free tiers — alongside an admin panel for support and account management.

Payments and fulfillment

A payment flow built to survive retries, webhook replays, and partial failures without charging twice or losing access grants.

A webhook handler that re-verifies payment status with the provider before granting anything, instead of trusting the webhook payload alone
Idempotent fulfillment: a retried or duplicated webhook call can't issue a second license or double-deliver access
An internal Bearer-token API separates the public-facing payment flow from the licensing and account logic behind it

Accounts and admin

Everything a buyer and a support person need once the payment clears.

A member dashboard where a customer can see and manage their own access after paying
An admin panel for handling accounts and support without touching the database directly
OAuth sign-in with region-based provider routing, so users authenticate through the provider appropriate to their region

Backend and testing

An Express/TypeScript backend on node:sqlite, with a pricing structure and a real automated test suite behind it.

5 paid plans plus 2 free tiers, managed from a single pricing configuration
node:sqlite as the database — no separate database server to run alongside the app
64 automated tests (node:test) covering the payment, fulfillment, and account flows
Result

Result

The site ships as a complete commerce loop: a visitor can land on the page, pay, and get access without anyone manually flipping a switch. Fulfillment is idempotent by design, so a flaky network or a retried webhook doesn't create duplicate licenses or double charges.

64
automated tests (node:test) covering payment, fulfillment, and account flows
5 + 2
pricing tiers — 5 paid plans and 2 free levels
2
OAuth providers, routed by the user's region

To respect the client's privacy, this write-up doesn't name the product or link to a live demo — only the web engineering behind it is described here.

Another case

1 more project
Catalog website Krasnodar, Russia

Yuzhnye Portaly — a catalog website for an installation company

Before The client needed a catalog website for an installation company: three levels of categories, dozens of product pages, no site builder. After A three-level catalog, 576 of 576 images with alt text, and a custom-built accessible lightbox — no third-party libraries.
82 HTML pages, hand-built to a single template
Similar task?
Need a site that sells, not just informs — tell us the details, we'll suggest an approach.
Start a project