01Why it's different 02Modules & functionality 03Complete feature list 04Animated UI demo 05Quality & delivery 06What needs adding 07Competition comparison
Product demonstration · v1.3 · built & tested

Smart Billing.
Smarter Inventory.
RFID-Powered Jewellery Management.

A complete retail system for Indian jewellers — counter billing, metal-rate-aware pricing, RFID stock control, GST reporting, multi-branch accounting and a full audit trail. Running on ordinary shared hosting, with no servers to manage.

13 modules 203 endpoints RFID scan < 500 ms Bill < 300 ms 10+ users per branch 732 tests passing GST invoicing Zero external requests
0
Modules
0
Endpoints
0
Tests passing
0
Spec sections built
Contents

Everything, in one place

What the system does, how each module works, the complete feature list, a working walkthrough of the interface, the quality evidence behind it, and an honest list of what is still to come.

01 — Why it's different

Not another billing app with jewellery colours

Most jewellery software is a generic POS with a product field for "weight". This system was written the other way round — the jewellery comes first: metal rate, purity, wastage, making charges, RFID tag and GST rule are first-class data, and everything else is built on top of them.

01

◈RFID-native stock

Every piece can carry a UHF tag. Batch printing, binding to a SKU, scan sessions with a manifest, and a lifecycle of active → lost → retired → reissue — with the full history kept. Stock verification becomes a walk-past, not a weekend of counting.

02

₹Rate-aware to the paise

Metal rates are effective-dated and append-only — the rate is locked at the moment a bill is created, so a rate change mid-transaction can never rewrite an invoice. Valuation runs in paise with purity-adjusted fineness, not rounded rupees.

03

⌂Runs on shared hosting

No Redis, no queue workers, no Node SSR, no Docker, no WebSockets. Cron plus a PHP app plus MariaDB — deployable on cPanel, the way Indian retail sites are actually hosted. Zero external CDN requests, enforced by a test.

04

⛨Guards, not just forms

33 permissions across five fixed roles, enforced in middleware before the controller runs. The last owner can't be deleted, a super-admin flag is never accepted from a form, and no UI can grant a capability the code doesn't already have.

05

≡An honest audit trail

An append-only audit table — rows physically throw on update or delete. Every bill, adjustment, rate change and login is attributable to a person and a branch. Nightly zipped backups of database and files, restorable from the settings screen.

06

⚖GST built in, not bolted on

Statutory invoice fields, HSN-bucketed GSTR-1 and GSTR-3B working sheets as CSV and PDF, gapless financial-year numbering, credit notes that put stock back and correct the account. Reports a CA can actually file from.

Success criteria we design against. Counter bill under 300 ms, RFID scan-to-verify under 500 ms, 10+ concurrent users per branch, 100% of statutory GST fields present, and reload-safe billing — the cart lives on the server, so a browser refresh loses nothing.
02 — Modules & functionality

Thirteen modules, 52 sections, all delivered

The system is specified section by section and every section is built. Each module below lists what it does at the counter and in the back office — this is the functionality a jewellery business gets on day one.

1 · Dashboard

§1.1–1.3

A role-aware home screen: what each user sees depends on their job, and every figure reads live from the tables the rest of the system writes — no stale summaries.

  • Today's sales, stock on hand, bound tags, party dues
  • Five alert types incl. low stock & flagged scans
  • Shortcuts that check permission before showing

2 · Products & Catalogue

§2.1–2.5

Product master with variants and images, hierarchical categories that refuse to become cyclic, metal and purity as closed enums with fineness as data, and two pricing modes.

  • Multi-image upload, per-variant SKU/barcode/price
  • HSN codes, making %, wastage, purity (22K/18K…)
  • Category reorder & drag-order maintenance

3 · Inventory & Stock

§3.1–3.5

An append-only stock ledger — nothing is ever overwritten — plus per-location transfers, physical counts with variance reason codes and purity-adjusted valuation.

  • Stock register by branch/location/cut
  • Manual adjust with reason codes
  • Count sheets: create → add lines → post/cancel

4 · RFID Tagging

§4.1–4.5

The module other jewellery software doesn't have: tag batches, EPC binding, scan sessions with manifests, printable label sheets and a full tag lifecycle.

  • Batch create/close/print, bind & unbind
  • Scan session: reads → complete/abort
  • Found / lost / retire / reissue with history

5 · Billing / POS

§5.1–5.6

The counter. Open a shift with a float, build a cart on the server, hold and resume bills, split payments, run exchanges, then print statutory or thermal output.

  • Counter open/close with counted-cash variance
  • Hold/resume, quick customer, barcode & RFID search
  • Exchange & return against the original bill

6 · Sales & Invoices

§6.1–6.4

Every invoice numbered gaplessly per financial year per branch, rendered to PDF, with registers cut by day, counter and shift — and credit notes for returns.

  • GST PDF, 80 mm thermal and A5 print
  • Day book / counter / shift registers
  • Credit note with reason codes & withdrawal

7 · Customers

§7.1–7.4

Customer profiles with GSTIN-derived party type, purchase history read from actual bills, advances and dues, printable statements and a loyalty scheme.

  • Ledger entries & closing-balance statement
  • Earn / redeem loyalty points at the till
  • Party past 30 days surfaces on the dashboard

8 · Suppliers

§8.1–8.3

Supplier profiles and a payable ledger where advances are kept as their own entry type — so ageing can never count the same rupee twice.

  • Payable ageing without double-counting
  • Period-based printable statements
  • Manual entries with audit attribution

9 · Purchases

§9.1–9.4

Procurement as a state machine: draft → approved → placed → received. Goods receipts are the only place inbound stock moves, and metal bookings lock a rate for a period.

  • PO line editing, approval and placement
  • GRN with over/short variance explanation
  • Metal bookings create/settle/cancel

10 · Metal Rates

§10.1–10.3

Effective-dated, append-only rates — no retroactive overwrite ever. Live screen, history, audited manual override and an all-or-nothing CSV import.

  • Per metal / purity, effective from a date
  • History with no retroactive edits
  • CSV import: template, validate, all-or-nothing

11 · Reports

§11.1–11.3

Sales, stock, purchases and party ageing as CSV, plus GSTR-1 and GSTR-3B working sheets bucketed by HSN and rate — exportable and printable.

  • 4 report families, CSV export each
  • GSTR-1 & GSTR-3B as CSV and PDF
  • HSN + rate bucketing for filing

12 · Analytics

§12.1–12.2

Period-over-period comparison with a least-squares seven-day projection labelled as a projection, plus fast/slow/dead stock and margin against lifetime cost.

  • Sales trend vs previous window
  • Fast / slow / dead stock classification
  • Margin on lifetime weighted-average cost

13 · Settings & Admin

§13.1–13.5

Business profile and GST, branches and counters, users with a read-only role matrix, tenancy scoping, a filterable audit log and tenant backups with restore.

  • Branch CRUD with own invoice prefixes
  • Users: create/edit/disable, last-owner guard
  • Backup create / download / restore
Delivered, not planned. Milestones M0–M9 are complete: the full suite — 732 tests, 3,103 assertions — passes, Pint style checks are clean, and the production build compiles. Section arithmetic: 3+5+5+5+6+4+4+3+4+3+3+2+5 = 52.
03 — Complete feature list

Every feature, plainly listed

203 endpoints in total — 184 web across 13 modules, 13 authentication endpoints and 6 REST API endpoints. Below is what a user actually meets on screen, grouped the way they experience it.

AreaRoutesWhat you can do
Dashboard2Role-aware cards (today's sales, stock on hand, bound tags, party dues); alerts for low stock, flagged RFID scans, bindable tags, parties not seen in 30 days and bookings expiring within a week; shortcuts that check both permission and route existence.
Catalogue21Create/edit/delete products; multi-image upload; variant rows each with own SKU, barcode and price; category create, edit, delete and reorder; metal rate create, CSV import with template download, and effective-dated history.
Inventory13Stock screen with location cut; movement register; manual adjustment and branch-transfer forms; full count workflow — create sheet, add lines, post or cancel — with independent piece and weight tallies.
RFID22Tag batches: create, close, print, label sheet; per-tag bind, unbind, mark found, mark lost, reissue; scan sessions: start, add reads, complete, abort, view reads; bindable-tag picker for the counter.
Billing / POS18Counter open with opening float and close with counted cash and variance; till with line add/remove; barcode & RFID search; quick customer create; hold, resume and clear; exchange panel; post bill and reprint.
Sales & returns13Invoice register with day/counter/shift cuts; invoice detail; PDF download; 80 mm thermal and A5 print; return creation against a specific bill; credit note detail, print and cancel.
Parties18Customer and supplier CRUD; manual ledger entries; printable statement with closing balance; purchase history read straight from posted bills; customer picker live on the till.
Purchases33Purchase orders draft → approve → place → cancel with line-level editing; goods receipts with over/short variance explanation; metal bookings create/settle/cancel; purchase invoices post, settle and cancel with per-line returns.
Reports15Sales, stock, purchases and parties — each with CSV export — plus GSTR-1 and GSTR-3B as CSV and PDF, bucketed by HSN and tax rate.
Analytics2Sales trend with previous-window comparison and a labelled seven-day projection; inventory fast/slow/dead classification; margin against lifetime weighted-average cost.
Settings24Business profile and GST details; branch CRUD with own invoice prefixes; user CRUD with last-owner and last-branch guards; read-only role matrix; filterable audit log; personal access API tokens; backup create, download, restore and delete.
Profile3Name, email and password change for the signed-in user.
Authentication13Login, logout, forgot password, reset password, email verification, password confirmation, registration.
REST API6Sanctum-token endpoints for products, stock, bills and rates — for integrations, handhelds and future mobile clients.

Business rules the system enforces for you

⏱State machines

  • Counter session must be open before a bill exists — one shift per till
  • Closing shows counted cash against expected and records the variance
  • Purchase order: draft → approved → placed → received
  • Goods receipt posts only with an explained variance
  • Credit note is withdrawable: stock returns, account corrected
  • RFID batch closes for good; a closed batch refuses a reprint
  • Scan session accepts no reads once closed

⚑Guards you can't bypass

  • The last active owner can't be deactivated
  • Nobody deletes or demotes their own account
  • The last branch can't be deleted
  • Super-admin status is never accepted from a form
  • Payments beyond a supplier's payable are refused
  • Advances are a separate entry type, never mixed into ageing
  • Rate history cannot be edited retroactively

⇩Outputs you get

  • GST invoice PDF with every statutory field
  • 80 mm thermal receipt via the browser print dialog
  • A5 invoice print
  • GSTR-1 and GSTR-3B CSV + PDF
  • Sales / stock / purchase / party CSV exports
  • Customer & supplier statements with balance
  • RFID label sheets and count sheets
  • Nightly zipped backup: database + files

Feature checklist

A flat, scannable list of what is in the box today.

✓Counter billing in under 300 msServer-held cart, reload-safe
✓Metal rate lock at billingEffective-dated, append-only
✓Purity & fineness pricing22K/18K and gram-based maths
✓Wastage & making chargesPer line, per product, per rule
✓RFID batch printingBind tags to SKUs in bulk
✓RFID scan sessionsManifest, reads, pass/fail
✓Tag lifecycleActive, found, lost, retired, reissued
✓Barcode search at tillScan or type, instant match
✓Hold & resume billsQueue a customer, keep theirs
✓Exchange & returnAgainst the original bill only
✓Credit notesStock back out, account corrected
✓Split paymentsCash, card, UPI, part advance
✓Counter sessionsOpening float, closing variance
✓GST invoicingAll statutory fields, HSN aware
✓GSTR-1 & GSTR-3BCSV and PDF working sheets
✓Gapless invoice numbersPer branch, per financial year
✓Thermal printing80 mm via browser, no driver
✓Stock ledgerAppend-only, every movement
✓Branch transfersMove stock with full trace
✓Stock countsPiece and weight tallies, variance
✓Reorder adviceLow stock surfaces on dashboard
✓Adjustment reasonsEvery change explained
✓Purchase ordersFour-stage approval workflow
✓Goods receiptsVariance explained, stock moves once
✓Metal bookingsRate-locked supply agreements
✓Purchase invoicesPost, settle, per-line returns
✓Supplier ageingAdvances kept separate
✓Customer statementsPrintable with closing balance
✓Loyalty earn & redeemPoints at the till
✓Party ledgersManual entries, full audit
✓Metal rate importCSV, all-or-nothing validation
✓Rate historyNever overwritten retroactively
✓Category treeCycle-safe, reorderable
✓Product variantsOwn SKU, barcode, price each
✓Multi-image galleryUpload and remove per product
✓Multi-branchOwn prefixes, own counters
✓Multi-tenantPath or domain scoped data
✓Five fixed rolesOwner, Manager, Cashier, Accountant, Stockroom
✓33 permissionsChecked in middleware, not the view
✓Append-only audit logRows throw on update/delete
✓Nightly backupsZip of DB + files, restorable
✓Sanctum API tokensCreate and revoke per user
✓6 REST endpointsFor integrations & handhelds
✓Sales analyticsTrend vs previous window
✓Stock analyticsFast, slow and dead stock
✓Margin reportingLifetime weighted-average cost
✓Day bookBy day, counter and shift
✓Dashboard alertsFive types, role aware
✓Zero external requestsSelf-hosted fonts, enforced by test
04 — Animated UI demo

The interface, demonstrated

Four working demonstrations of the real screen layouts — the dashboard a manager opens, the till a cashier lives in, the RFID scan a stockroom runs and the report an accountant files. Switch tabs; the animations replay.

magetech.local/dashboard

Good morning, Priya

Owner · Jaipur — Bapu Bazaar · 02 Oct 2026

Shift open · Till 1
Today's sales
₹0
▲ 12.4% vs yesterday
Stock on hand
0 pcs
▲ 34 received today
Bound RFID tags
0
93% of stock tagged
Party dues
₹0
6 parties past 30 days
Sales — last 7 days today highlighted
SAT
SUN
MON
TUE
WED
THU
TODAY
Alerts
▲Low stock — 14 itemsReorder level hit in Gold Chains and Jhumka categories.
⌁3 RFID scans need reviewTag reads that didn't match the batch manifest.
✓Nightly backup completed02:00 · 412 MB zip · database + files.
magetech.local/billing/pos
🔒 Gold rate locked at bill start — ₹7,245/g · 22K · effective 02 Oct 2026
Temple Necklace Set
SKU GLD-NEC-0242 · RFID E280…4A1
42.350 g
₹3,42,180
Daily Wear Chain 22K
SKU GLD-CHN-118 · RFID E280…9C7
8.120 g
₹65,740
Diamond Stud Earrings
SKU DIA-EAR-071 · 0.50 ct · I1
1 pcs
₹48,900
Silver Payal Pair
SKU SLV-ANK-009
2 pcs
₹4,180

Bill · Till 1

Customer: Meera Sharma · 98290… · Loyalty 2,140 pts

Gold 42.350 g × ₹7,245₹3,06,825
Making 8% + wastage 2%₹35,355
Diamond & silver items₹53,080
CGST 3% + SGST 3%₹21,617
Loyalty redeemed (400 pts)− ₹1,200
Payable₹4,15,677
CASHCARDUPI
magetech.local/rfid/sessions/18
UHF Reader connected · Session #18 · Aisle 2
Manifest: 8 expected 0 / 8 verified
E280-1170-B1C4-0000-0242
Temple Necklace
FOUND
E280-1170-B1C4-0000-0118
Daily Wear Chain
FOUND
E280-1170-B1C4-0000-0071
Diamond Studs
SCANNING
E280-1170-B1C4-0000-0305
Kundan Ring
SCANNING
E280-1170-B1C4-0000-0412
Jhumka Pair
SCANNING
E280-1170-B1C4-0000-0556
Mangalsutra
SCANNING
E280-1170-B1C4-0000-0663
Bangle Set
MISSING
E280-1170-B1C4-0000-0701
Payal Pair
SCANNING

Scan-to-verify target: < 500 ms per tag. Each read is matched against the batch manifest; anything not expected is flagged for review rather than silently accepted.

magetech.local/reports/gst/gstr1

GSTR-1 · September 2026

B2B + B2C summary · HSN bucketed · GSTIN 08ABCDE1234F1Z5

Ready to file
⬇ Export CSV⎙ Print PDF✓ Validate
HSNDescriptionTaxable valueRateCGSTSGSTTotal
7113Gold jewellery, 22K₹18,42,5003%₹55,275₹55,275₹19,53,050
7113Silver articles₹1,86,4003%₹5,592₹5,592₹1,97,584
7114Gold jewellery, 18K₹4,12,9003%₹12,387₹12,387₹4,37,674
7102Diamonds, unstudded₹6,75,0000.1%+0.1%₹675₹675₹6,76,350
9988Making charges (labour)₹2,41,6005%₹12,080₹12,080₹2,65,760
Reconciliation
Invoicesgapless FY numbering418
Total taxCGST + SGST₹1,62,686
Credit notes3 returns, stock restored− ₹48,200
These are live HTML demonstrations built from the real screen structure — the same layout, fields, guards and numbers the application renders. No screenshots, so they scale to any screen and replay on every switch.
05 — Quality & delivery

Proven by tests, not promises

Every milestone from M0 to M9 is built and runnable. The evidence sits in the repository: a PHPUnit suite that covers the state machines, guards and permissions, style checks that stay clean, and a production build that compiles.

0
Tests
0
Assertions
0
Migrations
0
Blade views

M0 Foundation done

Laravel 13 scaffold, toolchain, brand design system, self-hosted fonts, test harness.

M1 Auth & tenancy done

Breeze re-skinned, tenant resolution chain, global scope, role permissions in code.

M2 Catalogue done

Products, variants, images, categories, metal & purity enums, HSN, pricing modes.

M3 Inventory done

Append-only ledger, transfers, adjustments with reasons, count sheets and valuation.

M4 Parties done

Customers and suppliers, ledgers, statements, advances, purchase history, loyalty.

M5 Purchases done

Orders, goods receipts with variance, metal bookings, purchase invoices and settlement.

M6 Rates done

Effective-dated append-only rates, live/history screens, audited overrides, CSV import.

M7 Billing done

Counter sessions, server-held cart, holds, exchange, split payment, thermal & statutory output.

M8 Sales & reports done

Registers, PDF invoices, credit notes, CSV reports, GSTR-1 and GSTR-3B.

M9 Dashboard, backups, hardening done

Role-aware dashboard, five alert types, nightly backups with restore, middleware ordering pinned by tests.

⛨Security posture

  • Sanctum API auth; hashed passwords; session hardening
  • Content-Security-Policy, HSTS, nosniff on every response
  • Permission checked in middleware — before the controller
  • Tenant scope is a global query scope, not a request filter
  • Backups stored where the web root cannot serve them
  • No default credentials: first owner via artisan command

⚙Runs anywhere cheap

  • PHP 8.3 + Laravel 13 + MariaDB — nothing exotic
  • Blade + Livewire + Alpine + Tailwind, compiled at deploy
  • No Redis / queue worker / Node SSR / Docker / WebSockets
  • Cron only — no schedule:work process
  • File cache & session drivers, database queue
  • Self-hosted fonts: zero third-party requests

✓Definition of done

  • Full suite green — 732 tests, 3,103 assertions
  • Laravel Pint style check clean
  • npm run build succeeds, assets committed
  • No external network request in devtools
  • Statutory GST fields verified present
  • Middleware order asserted by an automated test
06 — What needs adding

What's next, honestly listed

Nothing below is broken — it is scope that has not been opened yet. These are the capabilities a live jewellery shop will ask for next, ranked by how soon it will be asked for.

High value Loyalty configuration screen

Loyalty is built and working — earn and redeem already run at the till — but the four settings that control it have no screen yet, so switching it on for a shop needs a developer today.

High value Barcode label printing

Products carry barcodes and the till searches on them, but only RFID label sheets can be printed. A jeweller not using RFID still needs adhesive barcode labels at the counter.

High value Offline billing

Billing is refresh-safe — the cart lives on the server — but a dead connection stops sales. A queue that replays transactions when the line returns is the largest remaining engineering item.

Medium Notifications & reminders

Low stock, flagged scans and overdue parties appear as dashboard alerts only. Email/SMS/WhatsApp delivery, birthday and anniversary reminders and due-payment nudges are not wired up yet.

Medium Estimates & quotations

A per-branch estimate prefix is already stored in the schema, but no screen writes it. Quotation-to-bill conversion, expiry and customer acceptance are unimplemented.

Medium GSTR filing integration

GSTR-1 and GSTR-3B are working sheets — CSV and PDF a human files in the portal. Direct IRN e-invoicing and e-way bills are an external integration, not an app feature.

Medium Custom roles

Roles are deliberately fixed in code so no screen can grant a privilege the code doesn't have. A shop wanting "senior cashier — discounts but no reports" would need a permissions editor and a security decision.

Low Languages (Hindi/regional)

Every string in the UI is already wrapped for translation — 2,094 call sites — but no language files exist yet, so everything falls back to English. Adding copy is a content job, not a code job.

Low Repairs & karigar tracking

Present in the original outline, then dropped because no section owned it. Reopening it is a genuine module with its own lifecycle — it needs a spec revision, not a finishing touch.

How to read this list. The three high value items are what a live shop hits first: loyalty can't be switched on without a developer, barcode labels can't be printed, and billing stops when the internet does. The rest are either a decision with a trade-off (custom roles, e-invoicing, repairs) or plumbing that is already half-laid.
07 — How we compare

Different from other jewellery software

Against the two things a jeweller usually evaluates: a generic retail POS with a weight field bolted on, and legacy desktop jewellery packages that need a dedicated machine in the back office.

CapabilityMageTech Jewellery SmartTypical POS / legacy jewellery software
RFID stock controlNative — batches, scan sessions, tag lifecycle, label sheetsNot available, or a third-party add-on
Metal rate handlingEffective-dated, append-only, locked at bill time, CSV importA price list you overwrite; no history guarantee
Purity & fineness mathsPurity is an enum with fineness as data; valuation in paiseWeight × a single rate, rounded
Stock ledgerAppend-only with reason codes; nothing overwrittenCurrent quantity only, edited in place
GST outputGSTR-1 & 3B CSV + PDF, HSN bucketed, gapless numberingInvoice print; reports someone retypes
DeploymentOrdinary shared hosting / cPanel — no server to runDesktop install, or a server you host yourself
Multi-branch & multi-tenantBuilt in — per-branch prefixes, per-branch counters, scoped dataSeparate databases per shop, or one flat file
Access control33 permissions × 5 roles, enforced in middlewareAdmin/user split, or rights editable in the UI
Audit trailAppend-only table — rows throw on update/deleteA log screen that can be cleared
BackupsNightly zipped DB + files, restorable from the UIManual file copy, if remembered
Test evidence732 automated tests, 3,103 assertions, CI-greenUnquantified; release notes say "improved"
IntegrationSanctum REST API + API token screenProprietary, or none
Ongoing costYour hosting, your database, your codePer-seat / per-branch licence or SaaS rent
Offline billingNot yet — named as an open gapDesktop packages work with no line
Where we are weaker, we say so. Desktop software bills during an internet outage; we don't yet (see 06 — What needs adding). Everything else in that table is a design decision with a test behind it, not a claim.
08 — Built with

The stack, chosen for constraints

Every dependency was selected against one requirement: it has to run reliably on shared hosting with no long-running processes, be maintainable by a small team, and cost nothing at the infrastructure layer.

▣Backend

  • Laravel 13 on PHP 8.3
  • MariaDB / MySQL · utf8mb4 · paise-as-integer money
  • Laravel Breeze auth, fully re-skinned
  • Sanctum for REST API tokens
  • Dompdf for statutory & report PDFs
  • Database queue, file cache and session drivers
  • Hand-written tenancy, permissions, audit, backup

◈Frontend

  • Blade templates + Livewire 3.8 for interactivity
  • Alpine.js for small client behaviours
  • Tailwind CSS 4 with brand colour namespaces
  • Chart.js for analytics charts
  • Figtree + Playfair Display, self-hosted
  • Vite build, committed assets — no build at deploy
  • Zero external CDN or font requests

⚒Engineering

  • PHPUnit 12 — 732 tests, 3,103 assertions
  • Laravel Pint for style, Collision for readable failures
  • 48 migrations, 39 models, 47 controllers
  • 143 Blade views, 184 web routes
  • Middleware order pinned by a dedicated test
  • Explicitly out of scope: Redis, Docker, JVM, PostgreSQL, WebSockets
  • Spec: docs/REQUIREMENTS.md v1.3
MageTech Jewellery Smart architecture diagram: client interfaces, application platform modules and external integrations.