Corporate training platform

From clickable prototype to a live corporate training platform

How Amity Training Solutions got a secure platform where companies book training against a credit wallet, and pay GST-ready invoices online.

Visit the live platform ↗
Problem

A polished prototype, but nothing was saved, the login was fake, and it could not bill a single client.

Solution

Filari built the backend, security, billing and reporting, keeping the approved design.

Result

Credit wallets, GST-ready invoices and online payments, live in about two weeks. Confirm timeline

Company credit wallet
1,200credits
AvailableReserved
Training catalogue
Leadership lab2 days · 120 credits
Excel for finance1 day · 250 credits
+ Book
POSH complianceHalf day · 80 credits
Excel for finance
Tax invoiceINV · 0417
Excel for finance · 1 day₹ 25,000
CGST 9%₹ 2,250
SGST 9%₹ 2,250
Total₹ 29,500
Paid
PickReserveInvoicePay
Illustration · sample amounts, not live data
41Screens with their own web address
173Server API endpoints
125 + 16Automated tests + acceptance suites
~2 weeksPrototype to live Confirm
In short

What Filari did for Amity

Amity Training Solutions sells corporate training to Indian companies through prepaid training credits. Filari took Amity's front-end prototype, which lost all data on refresh, and turned it into a secure, live platform where companies book training against a real credit wallet, Amity approves and delivers it, and the platform raises GST-compliant invoices and collects payment online.

Meet the client

Amity Training Solutions is an Indian corporate training provider running leadership, behavioural, functional and technical programmes through a network of more than 100 expert trainers. Its clients are HR and L&D teams who need to plan training, stay within budget and prove results.

Key takeaways

  • Filari turned Amity's clickable prototype into a live B2B training platform in about two weeks. Confirm
  • Every credit movement is recorded, so a company's balance can always be traced to the booking that changed it.
  • Prices are calculated on the server, so a client cannot change what they are charged from their browser.
  • Invoices split GST into CGST, SGST or IGST, and clients can pay online through Razorpay.
  • The platform ships with 125 automated tests and 16 acceptance suites run before every release.
The problem

A prototype that looked finished, with nothing behind it

A design team had built a polished prototype of Amity's training-credit idea. Sales demos went well. When our team opened the code, we found only the front of a building: no database, no real login and no way to bill. Almost the whole app lived in one 10,000-line file, so a small change on one screen kept breaking another.

01

Nothing was saved: a booking disappeared on page refresh.

02

Anyone could be an admin: two fixed demo passwords and a browser-side admin switch.

03

It could not bill: flat 18% GST, no invoice, email or payment.

What Amity wanted

Goal 1

A platform real clients can log in to, with data kept safe and separate.

Goal 2

Pricing and billing that are correct to the paisa.

Goal 3

Proof of results: assessments, certificates, manager feedback.

Goal 4

Keep the design clients had already seen in demos.

Inside the live platform

Six screens, two workspaces, one system

Companies work in their own workspace: dashboard, catalogue, requests, assessments, certificates and billing. Amity runs everything from the provider console. Hover over a screen to scroll through it.

amitytrainingsolutions.com/atos
Company dashboard: credits available, reserved and used, business impact, learning outcomes and what is coming up
Credits, outcomes and upcoming training on one screen for each company.
amitytrainingsolutions.com/atos
New training request form: business outcome, schedule, seniority, programme, participants, delivery mode and credit breakdown
A six-step request that starts with the business outcome and prices the credits live.
amitytrainingsolutions.com/atos
Provider console client portfolio with companies, credit usage, bookings and pending approvals
Amity sees every client company, its credit usage and what is waiting for approval.
amitytrainingsolutions.com/atos
Certificates page issuing one certificate per participant from the assessment file
One certificate per participant, generated from the assessment file and downloadable as a zip.
amitytrainingsolutions.com/atos
ATOS sign-in with separate company and provider admin workspaces
Separate company and provider workspaces behind a real, secure login.
amitytrainingsolutions.com/atos
Email manager: welcome and login email template with variables and live preview
Amity edits every system email itself, with variables, required login blocks and a live desktop or phone preview.

Screens from the live platform. Contact names and emails are blurred.

How we worked

Six steps, each one safe to undo

We audited first, kept the approved design, and shipped in small releases with a backup and a one-minute rollback every time.

  1. 01

    Understand

    Duration: confirm

    Audited every line of the prototype in plain English.

    Amity got: an honest picture before building.

  2. 02

    Design the foundation

    Duration: confirm

    Designed the database, credit ledger and security model around the existing screens.

    Amity got: a plan that kept the approved design.

  3. 03

    Build

    Duration: confirm

    Built the server, wired every screen to real data, added invoices, emails, payments and reports.

    Amity got: a working product, not a demo.

  4. 04

    Test

    Ongoing

    Automated tests for pricing and money maths plus acceptance checks per business rule.

    Amity got: a quote always equals the charge.

  5. 05

    Launch

    Duration: confirm

    Test server, then production, with backup and one-minute rollback per release.

    Amity got: a live platform without disturbing other sites on the server.

  6. 06

    Grow

    Ongoing

    Small reversible releases: discounts, company lifecycle, email editor, invoice and payment manager.

    Amity got: new features every few days, each safe to undo.

Where AI helped, and where people led

Tools to confirm

Human-led, AI-accelerated. Our team made every design and architecture decision and reviewed every line. The AI tools used and what they sped up will be listed here once confirmed.

Plan AI draft Human review Ship
What we built

Eight capabilities that make the credit model real

Company dashboard showing training credit wallet balance

Every credit granted, reserved, used, refunded or expired is its own entry, and the balance is their sum. Credits are held the moment a company books.

Helps: HR/L&D teams, Amity finance

New training request form with live credit breakdown

Pick programme, mode, audience, headcount and dates and see the credit price live. The final price always comes from the server. Book several programmes in one cart.

Helps: company L&D teams

Pending approvals across client companies

One approval queue, up to two reschedules per training, and discounts with a reason the client can see. Every step is logged.

Helps: Amity operations

Monthly invoices for delivered training only, CGST/SGST or IGST split, PDF by email, and payment via Razorpay or recorded bank transfer.

Helps: client procurement, Amity finance

Learning outcomes with before and after training scores

Pre/post assessment uploads become score improvement, bands and coverage. Blank is never zero, and every figure traces to a file.

Helps: HR leaders

100+ trainer profiles tagged by audience level and category power a recommendation list on each booking.

Helps: L&D teams

Provider console portfolio of client companies and credit usage

Clients, registrations, programmes, price book, credit grants, billing runs, email templates and a tamper-evident audit log in five menus.

Helps: Amity staff

Email template editor with variables, login details box and live preview

All emails share one layout, edited in a rich-text editor, with required parts like login links protected.

Helps: Amity ops

The results

The credit model is now a system, not a slide

The credit model is no longer a sales slide. It is a system Amity's clients log in to, book against and pay through, with an audit trail and reports they can show their leadership.

Client companies onboardedMetric pending
Bookings / credits processedMetric pending
Hours saved on invoicing and approvalsMetric pending

Prototype vs live platform

Build metrics, counted from the code on 30 Sep 2026

Prototype Live
API endpoints0 → 173
Tests and acceptance suites1 → 141
Screens with their own URL1 → 41
Source: repository count. Business results will be added once Amity shares them.
For tech teams

Under the hood

Stack, architecture, engineering decisions and build metrics

Stack by layer

Frontend

React 19 + TypeScript + Vite
Kept the approved UI

TanStack Query
Typed hooks and caching for every endpoint

API

Node.js 22 + Fastify 5
Fast, schema-first

Zod
Every request validated before logic

Data

PostgreSQL 17
Transactions and row locks for money

Drizzle ORM
Typed, SQL-first, additive migrations

Security

Argon2id
Current password-hashing best practice (OWASP password storage guidance)

JWT + rotating refresh tokens
Stolen tokens detected and revoked

Billing

PDFKit
Server-generated GST invoices and certificates

Razorpay (gateway registry)
Webhooks + 10-minute reconciliation; more gateways pluggable

Infra & testing

Docker Compose + Nginx
Isolated DB network, headers, rate limits, one-minute rollback

Node test runner, Playwright, Python acceptance suites
Money maths and business rules verified before release

Architecture

The browser talks only to Nginx, which serves the React app and forwards /api to Fastify. Fastify owns pricing, wallet, billing and permissions and talks to PostgreSQL on a private network. Partner content, email and Razorpay are called only from the server.

HTTPS /api proxy Browsercompany & admin users Nginxweb tier Fastify APIpricing · wallet · billing PostgreSQL 17 · private Amity content API · 10-min cache Email (SMTP) · background Razorpay · orders + webhooks

Engineering decisions

DecisionWhyImpact
Credits stored as a ledgerA stored balance can drift; a summed history cannotEvery credit traceable to its booking
Money in integer paiseFloating point breaks reconciliationInvoices correct to the paisa
Row locks on spendsConcurrent bookings could double-spendNo credit spent twice
Hash-chained audit logHistory must be tamper-evidentEdits to the past are detectable
Server-side proxy for partner APIKeys in a JS bundle are publicKey never shipped; 10-min cache roughly halves payloads
Additive migrations + per-release backup and rollbackShared production serverAbout one-minute rollback, no data loss

Build metrics · counted from the repository

173
API endpoints
44
Database tables
17
Database migrations
41
Screens (routes)
13
Frontend business domains
12
Server route modules
125
Automated tests
16
Acceptance suites
8
Playwright smoke specs
12
Email templates
109
Trainer profiles managed
What's next

Automated backups and monitoring, CI running every test on every change, credit-expiry reminders and per-client pricing. Confirm

FAQ

Questions buyers ask us

It depends on what is missing. For Amity, the screens were ready but the backend, security and billing were not, and Filari had a first version live in about two weeks Confirm. A prototype with no clear specification usually takes two to four months.

Yes. Filari kept Amity's approved screens and flows and built the database, server and security behind them. Clients saw the same product they had been shown in demos, now with real data. Screens were redesigned only where the prototype blocked real use.

A company buys a pool of training credits. Each booking reserves credits based on headcount, duration, delivery mode and seniority. Credits become used when the training is delivered, and used credits are invoiced monthly. Declined bookings return their credits straight away.

Prices are calculated only on the server, so nothing typed in the browser can change them. Money is stored in paise to avoid rounding errors, each training can appear on only one invoice, and pricing rules are covered by automated tests run before every release.

Yes. Invoices split GST into CGST and SGST for clients in the same state, or IGST for clients elsewhere, and carry the SAC code and GSTIN. They are generated as PDFs, emailed to the billing contact, and can be paid online.

Amity's platform uses Razorpay today, in test or live mode. The payment module is built so Stripe, PayU, Paytm, CCAvenue or PayPal can be added without changing the rest of the system.

The platform compares pre- and post-training assessment scores for each learner, shows average improvement and score bands, and adds manager feedback on whether skills are used at work. Every figure comes from an uploaded file, so it can always be checked.