Page 1 of 23
System Requirements Document for sweet-top
1. Introduction
sweet-top is an Indonesian digital top-up arcade and payment marketplace operated by Xyz_Games. It sells game currency and passes, mobile credit and data packages, e-wallet top-ups and balances, and bill payments (PLN electricity tokens, electricity bill payment, digital game vouchers) through a fully automated 24-hour transaction engine with automatic payment across multiple methods.
The product intent is speed and reward: a buyer picks a game or service, picks a denomination, pays automatically, and receives the delivered currency or token immediately, with an automatic WhatsApp notification, a complete transaction history, and a money-back guarantee when a transaction fails. Around that core, sweet-top runs a loyalty economy â membership levels (Member, Basic, Gold, Platinum) with cheaper pricing per level, a reseller program, discount codes and promos, daily flash sales, and customer reviews and ratings â and gives the store owner real-time sales reporting and operational control over the catalogue.
The audience is young, mobile-first Indonesian gamers and resellers, mostly 16â30, buying in fast bursts on phones at night, plus the store owner/admin who operates the catalogue, promotions, membership levels, and reporting.
Page 2 of 23
2. System Overview
sweet-top is a first-party web application with an application-owned identity layer, a custom UI, background automation, and outbound WhatsApp notification to external recipients.
Actors. Three accepted human personas operate the product: Pembeli / Pelanggan (buyer/customer), Reseller / Mitra Program Reseller (reseller partner), and Pemilik / Admin Toko (store owner/admin). WhatsApp is an outbound notification channel, not a persona.
Accepted behavior. The product must provide the full catalogue of game top-ups, pulsa & paket data, e-wallet & saldo, and tagihan & lainnya; automated 24-hour transactions; automatic payment with multiple methods; automatic balance deposit; automatic WhatsApp notifications; complete transaction history; real-time sales reports; membership levels Member/Basic/Gold/Platinum; cheaper pricing by level; a reseller program; discount codes and promos; daily flash sales; customer reviews and ratings; and a money-back guarantee when a transaction fails.
Ownership. All accepted human-facing work is owned by first-party pages of the application. WhatsApp delivery is owned by the external WhatsApp channel. Automated transaction processing, balance crediting, history persistence, refund execution, report aggregation, and notification dispatch are backend system processes that support the human-facing pages.
Exclusions. This document does not add adjacent capabilities beyond the accepted catalogue and system features: no unrelated account-management modules, no additional payment products, no additional notification channels, and no capabilities beyond the accepted membership, reseller, promo, flash-sale, review, refund, and reporting scope.
Page 3 of 23
2a. Product Interpretation and Delivery Boundary
sweet-top is delivered as a first-party web application. Anonymous visitors can read the Landing page, which explains the digital product catalogue and store services before any identity or purchase. Identity is application-owned: a new customer establishes identity through self-service Sign Up, and returning customers, resellers, and admins verify through Login. Reseller and admin access to role-restricted areas is bounded by role assignment or verification before entry.
Current delivery covers the entire accepted catalogue and system-feature set listed above. There is no accepted future-horizon requirement in the authoritative thread; the only forward-looking statement is that the game catalogue ("Lainnya terus bertambah!") continues to grow, which is handled as catalogue extensibility by the admin rather than as a separate future feature. Nothing in this document authorizes work outside the accepted catalogue and system features.
Page 4 of 23
2b. Source Content Inventory
The authoritative source supplies the following verified catalogue and feature facts, preserved exactly.
đĨ TOP UP GAME
- Mobile Legends: Bang Bang â Diamond, Starlight, Weekly Pass
- Free Fire â Diamond, Membership, Token, Bundle
- PUBG Mobile â UC, Royale Pass, Item
- Valorant â Valorant Point, Battle Pass
- Genshin Impact â Genesis Crystal, Blessing
- Honkai: Star Rail â Oneiric Shard, Express Pass
- Zenless Zone Zero â Polychrome, Bangboo Pass
- Roblox â Robux
- Call of Duty Mobile â CP, Battle Pass
- Farlight 84 â Octane, Pass
- Blood Strike â Credits, Pass
- Delta Force â Credits, Pass
- Super Sus â Coins, Pass
- Higgs Domino â Koin Emas
- Ragnarok Origin â Crystal, Pass
- Tower of Fantasy â Tanium, Dark Crystal
- Cookie Run Kingdom â Crystals, Pass
- Lainnya terus bertambah!
\xf0\x9f\x93\xb1 PULSA & PAKET DATA
- Telkomsel â Pulsa & Paket Internet
- XL / Axis â Pulsa & Paket Internet
- Indosat â Pulsa & Paket Internet
- Tri (3) â Pulsa & Paket Internet
- Smartfren â Pulsa & Paket Internet
\xf0\x9f\x92\xb3 E-WALLET & SALDO
- DANA
- OVO
- GoPay
- ShopeePay
- LinkAja
- Saldo Google Play
- Saldo Apple
\xe2\x9a\xa1 TAGIHAN & LAINNYA
- Token Listrik PLN
- Pembayaran Tagihan Listrik
- Voucher Game Digital
\xe2\x9a\x99ī¸ FITUR SISTEM
- Transaksi Otomatis 24 Jam
- Pembayaran Otomatis â Beragam Metode
- Deposit Saldo Otomatis
- Notifikasi WhatsApp Otomatis
- Riwayat Transaksi Lengkap
- Laporan Penjualan Real-Time
- Level Keanggotaan: Member, Basic, Gold, Platinum
- Harga Lebih Murah Sesuai Level
- Program Reseller
- Kode Diskon & Promo
- Flash Sale Setiap Hari
- Ulasan & Rating Pelanggan
- Garansi Dana Kembali Jika Gagal
Page 5 of 23
2c. Page Content and Component Coverage
Landing
- Information/state: anonymous public entry; explains the digital product catalogue and store services before identity or purchase; presents the four catalogue families (Top Up Game, Pulsa & Paket Data, E-Wallet & Saldo, Tagihan & Lainnya) and the system-feature promises (24-hour automated transactions, automatic payment, automatic balance deposit, automatic WhatsApp notification, complete history, real-time reports, membership levels, reseller program, discount codes and promos, daily flash sales, reviews and ratings, money-back guarantee on failure).
- Primary actions: go to Sign Up; go to Login; browse into Catalog.
- Supporting actions: view flash-sale highlights; view membership level stickers (Member, Basic, Gold, Platinum).
- Domain entities: catalogue family, game title, denomination, membership level, flash-sale item.
- Component responsibilities: hero headline block with primary CTA; rotated currency-sticker cluster; flash-sale marquee ticker; colour-bar section headers per catalogue family; sticker tiles for game titles; horizontal sticker rows for telco and e-wallet families; membership loyalty stickers.
- States: loading (catalogue highlights fetching); empty (no flash-sale items currently active â show static catalogue families); success (catalogue families and flash-sale items rendered); error (catalogue fetch failed â show retry and static family list); recovery (retry restores highlights without losing the anonymous entry).
Login
- Information/state: returning verification surface for customers, resellers, and admins; anonymous access.
- Primary actions: submit credentials to verify identity; proceed to the destination the verified role is entitled to.
- Supporting actions: navigate to Sign Up; return to Landing.
- Domain entities: account identity, role (customer, reseller, admin).
- Component responsibilities: credential form; submit control; error messaging; link to Sign Up.
- States: loading (verifying); empty (blank form); success (verified â route to Catalog for customers/resellers, or to role-restricted admin areas for admins); error (invalid credentials â inline message, form preserved); recovery (re-submit without losing entered identity fields).
Sign Up
- Information/state: self-service enrollment for a new customer before first use; anonymous access; reseller and admin access remain bounded by role.
- Primary actions: create a customer account; proceed to Login or directly into the customer experience.
- Supporting actions: return to Login; return to Landing.
- Domain entities: account identity, customer role.
- Component responsibilities: enrollment form; submit control; validation messaging; link to Login.
- States: loading (creating account); empty (blank form); success (account created â customer can proceed); error (validation or duplicate identity â inline message); recovery (correct and resubmit).
Page 6 of 23
Catalog
- Information/state: role-restricted browsing of product categories, denominations, and available nominal values across Top Up Game, Pulsa & Paket Data, E-Wallet & Saldo, and Tagihan & Lainnya; prices reflect the signed-in actor's membership level.
- Primary actions: select a product and denomination; proceed to Checkout.
- Supporting actions: filter by catalogue family; view flash-sale items; view membership-level price.
- Domain entities: catalogue family, game title, denomination, nominal value, price by membership level, flash-sale item.
- Component responsibilities: family tabs/colour bars; sticker-tile grid for games; horizontal sticker rows for telco and e-wallet; denomination selector; price display with level pricing; flash-sale marquee.
- States: loading (catalogue fetching); empty (no products in a family â show family message); success (products and denominations rendered with level pricing); error (catalogue fetch failed â retry); recovery (retry restores the catalogue and preserves the selected family).
Checkout
- Information/state: role-restricted completion of a purchase with automatic payment and multiple payment methods; shows selected product, denomination, price for the actor's membership level, applied discount code or promo, and flash-sale price where applicable.
- Primary actions: choose payment method; apply discount code or promo; confirm and pay.
- Supporting actions: return to Catalog; view order summary.
- Domain entities: order, product, denomination, payment method, discount code, promo, flash-sale price, membership level price.
- Component responsibilities: order summary; payment-method selector; discount/promo input; total display with level pricing; confirm control.
- States: loading (submitting payment); empty (no product selected â return to Catalog); success (payment accepted â route to Transaction Status); error (payment failed or code invalid â inline message, order preserved); recovery (retry payment or correct the code without losing the order).
Transaction Status
- Information/state: role-restricted view of the automatic transaction result and processing status for the current order.
- Primary actions: observe processing and final result; continue to Transactions or Refunds when the transaction failed.
- Supporting actions: return to Catalog; view order detail.
- Domain entities: order, transaction, processing status, delivery result, failure reason.
- Component responsibilities: status indicator; order detail; failure notice with refund path; WhatsApp notification confirmation.
- States: loading (processing); empty (no active transaction â link to Catalog); success (delivered â show result and WhatsApp notification sent); error (transaction failed â show failure and money-back guarantee path); recovery (refund request route and re-order route).
Page 7 of 23
Deposit
- Information/state: role-restricted management of automatic balance deposit used for purchases; shows current balance and deposit history.
- Primary actions: initiate an automatic balance deposit; choose deposit amount and method.
- Supporting actions: view deposit history; return to Catalog.
- Domain entities: balance, deposit, deposit method, deposit status.
- Component responsibilities: balance display; deposit amount selector; method selector; deposit history list.
- States: loading (deposit processing); empty (no deposits yet â show deposit form); success (balance credited automatically); error (deposit failed â inline message); recovery (retry deposit without losing the amount).
Transactions
- Information/state: role-restricted complete transaction history for repeated review.
- Primary actions: review past transactions; open a transaction's detail; continue to Refunds for a failed transaction.
- Supporting actions: filter history; return to Catalog.
- Domain entities: transaction, order, product, amount, status, date, payment method.
- Component responsibilities: history list; filters; transaction detail; status badges.
- States: loading (history fetching); empty (no transactions yet â link to Catalog); success (history rendered); error (history fetch failed â retry); recovery (retry restores history).
Promotions
- Information/state: login-required surface for using and managing discount codes and daily flash sales; customers and resellers use codes and flash-sale prices, admins manage them.
- Primary actions: apply a discount code or promo; view daily flash-sale items; admins create and manage codes and flash sales.
- Supporting actions: return to Catalog; view active flash-sale countdown.
- Domain entities: discount code, promo, flash sale, validity window, discount value.
- Component responsibilities: code list/entry; flash-sale list with countdown; admin management controls for codes and flash sales.
- States: loading (promotions fetching); empty (no active promotions â show message); success (promotions rendered and applicable); error (fetch or apply failed â inline message); recovery (retry or correct the code).
Page 8 of 23
Reviews
- Information/state: role-restricted surface for giving reviews and ratings on a transaction or product.
- Primary actions: submit a rating and review for a completed transaction or product.
- Supporting actions: view existing reviews and ratings; return to Transactions.
- Domain entities: review, rating, product, transaction.
- Component responsibilities: rating control; review text input; submit control; review list.
- States: loading (submitting review); empty (no reviews yet â show review form); success (review published); error (submission failed â inline message); recovery (resubmit without losing the review text).
Refunds
- Information/state: role-restricted surface for the money-back guarantee on failed transactions; customers submit refund requests for failed transactions, admins process them.
- Primary actions: submit a refund request for a failed transaction; admins review and process the refund.
- Supporting actions: view refund status; return to Transactions.
- Domain entities: refund request, failed transaction, refund status, refund amount.
- Component responsibilities: eligible-failed-transaction list; refund request control; refund status display; admin processing controls.
- States: loading (refund processing); empty (no eligible failed transactions â show message); success (refund issued); error (refund request failed â inline message); recovery (retry the request).
Reseller
- Information/state: role-restricted surface for enrolling in and running the reseller program with pricing based on membership level; resellers run their reselling activity, admins manage the program.
- Primary actions: enroll as a reseller; perform transactions on behalf of buyers at level pricing; admins manage reseller participation.
- Supporting actions: view reseller pricing by level; continue to Sales Reports.
- Domain entities: reseller enrollment, membership level, level price, reseller transaction.
- Component responsibilities: enrollment control; level pricing display; reseller activity summary; admin management controls.
- States: loading (enrollment or activity fetching); empty (not yet enrolled â show enrollment); success (enrolled and level pricing active); error (enrollment failed â inline message); recovery (retry enrollment).
Page 9 of 23
Sales Reports
- Information/state: role-restricted real-time sales reporting for resellers and admins.
- Primary actions: view real-time sales figures; admins monitor store-wide sales.
- Supporting actions: filter by period; return to Reseller or Operations.
- Domain entities: sale, transaction, revenue, period, reseller.
- Component responsibilities: real-time sales metrics; period filters; reseller-scoped and store-wide views.
- States: loading (report fetching); empty (no sales in period â show message); success (real-time figures rendered); error (report fetch failed â retry); recovery (retry restores the report).
Memberships
- Information/state: role-restricted admin management of membership levels Member, Basic, Gold, and Platinum and their cheaper pricing.
- Primary actions: manage membership levels and their pricing; assign or adjust a member's level.
- Supporting actions: view level definitions; return to Operations.
- Domain entities: membership level (Member, Basic, Gold, Platinum), level price, member.
- Component responsibilities: level list; level pricing controls; member level assignment.
- States: loading (levels fetching); empty (no levels configured â show setup); success (levels and pricing saved); error (save failed â inline message); recovery (retry save).
Operations
- Information/state: role-restricted admin monitoring of automated transactions, automated deposits, and automated WhatsApp notifications.
- Primary actions: monitor automated transaction, deposit, and notification activity; intervene on failures.
- Supporting actions: view notification delivery status; return to Sales Reports.
- Domain entities: automated transaction, automated deposit, WhatsApp notification, delivery status.
- Component responsibilities: automation activity monitor; notification delivery list; failure indicators.
- States: loading (operations fetching); empty (no activity in window â show message); success (activity rendered); error (fetch failed â retry); recovery (retry restores the monitor).
Page 10 of 23
Catalog Management
- Information/state: role-restricted admin management of the store's product and service catalogue, including the growing game list ("Lainnya terus bertambah!").
- Primary actions: add, edit, and manage catalogue products, denominations, and nominal values across all four families.
- Supporting actions: view catalogue by family; return to Operations.
- Domain entities: catalogue family, game title, denomination, nominal value, price.
- Component responsibilities: catalogue list; product and denomination editors; family assignment.
- States: loading (catalogue fetching); empty (no products â show add control); success (catalogue changes saved); error (save failed â inline message); recovery (retry save without losing edits).
Page 11 of 23
3. Functional Requirements
Each requirement is a distinct story point with provenance and observable acceptance.
FR-01 â Game top-up catalogue (explicit). As a Pembeli / Pelanggan, I should be able to browse and buy game top-up products for Mobile Legends: Bang Bang (Diamond, Starlight, Weekly Pass), Free Fire (Diamond, Membership, Token, Bundle), PUBG Mobile (UC, Royale Pass, Item), Valorant (Valorant Point, Battle Pass), Genshin Impact (Genesis Crystal, Blessing), Honkai: Star Rail (Oneiric Shard, Express Pass), Zenless Zone Zero (Polychrome, Bangboo Pass), Roblox (Robux), Call of Duty Mobile (CP, Battle Pass), Farlight 84 (Octane, Pass), Blood Strike (Credits, Pass), Delta Force (Credits, Pass), Super Sus (Coins, Pass), Higgs Domino (Koin Emas), Ragnarok Origin (Crystal, Pass), Tower of Fantasy (Tanium, Dark Crystal), and Cookie Run Kingdom (Crystals, Pass), so that I receive the selected game currency or pass. Lifecycle: initiator = Pembeli / Pelanggan; trigger = selecting a game and denomination in Catalog; observable result = order created and routed to Checkout; access = role-restricted (signed-in customer or reseller); failure/recovery = unavailable denomination shows a message and returns to Catalog; continuation = Checkout. Owner: Catalog â Checkout.
FR-02 â Growing game catalogue (explicit). As a Pemilik / Admin Toko, I should be able to add new game titles and denominations beyond the current list ("Lainnya terus bertambah!"), so that the catalogue keeps expanding. Lifecycle: initiator = Pemilik / Admin Toko; trigger = adding a product in Catalog Management; observable result = new product appears in Catalog; access = role-restricted admin; failure/recovery = save failure shows an inline message and preserves edits; continuation = Catalog reflects the addition. Owner: Catalog Management.
FR-03 â Pulsa & paket data (explicit). As a Pembeli / Pelanggan, I should be able to buy Pulsa & Paket Internet for Telkomsel, XL / Axis, Indosat, Tri (3), and Smartfren. Lifecycle: initiator = Pembeli / Pelanggan; trigger = selecting an operator and pulsa/data package in Catalog; observable result = order created and routed to Checkout; access = role-restricted; failure/recovery = unavailable package shows a message; continuation = Checkout. Owner: Catalog â Checkout.
FR-04 â E-wallet & saldo (explicit). As a Pembeli / Pelanggan, I should be able to buy e-wallet & saldo for DANA, OVO, GoPay, ShopeePay, LinkAja, Saldo Google Play, and Saldo Apple. Lifecycle: initiator = Pembeli / Pelanggan; trigger = selecting an e-wallet and amount in Catalog; observable result = order created and routed to Checkout; access = role-restricted; failure/recovery = unavailable amount shows a message; continuation = Checkout. Owner: Catalog â Checkout.
FR-05 â Tagihan & lainnya (explicit). As a Pembeli / Pelanggan, I should be able to buy Token Listrik PLN, Pembayaran Tagihan Listrik, and Voucher Game Digital. Lifecycle: initiator = Pembeli / Pelanggan; trigger = selecting a bill/voucher product in Catalog; observable result = order created and routed to Checkout; access = role-restricted; failure/recovery = unavailable product shows a message; continuation = Checkout. Owner: Catalog â Checkout.
FR-06 â Automated 24-hour transactions (explicit). As a Pembeli / Pelanggan, I should have my transaction processed automatically 24 hours a day, so that I receive the product without waiting for manual handling. Lifecycle: initiator = Pembeli / Pelanggan; trigger = confirmed payment at Checkout; observable result = transaction processed and result shown on Transaction Status; access = role-restricted; failure/recovery = failed transaction shows failure and the money-back guarantee path; continuation = Transaction Status â Transactions. Owner: Transaction Status (backend automation supports).
FR-07 â Automatic payment with multiple methods (explicit). As a Pembeli / Pelanggan, I should be able to pay automatically using a variety of payment methods. Lifecycle: initiator = Pembeli / Pelanggan; trigger = selecting a payment method and confirming at Checkout; observable result = payment accepted and order routed to Transaction Status; access = role-restricted; failure/recovery = payment failure shows an inline message and preserves the order; continuation = retry payment or return to Catalog. Owner: Checkout.
FR-08 â Automatic balance deposit (explicit). As a Pembeli / Pelanggan, I should be able to deposit balance automatically for purchases. Lifecycle: initiator = Pembeli / Pelanggan; trigger = initiating a deposit in Deposit; observable result = balance credited automatically and shown; access = role-restricted; failure/recovery = failed deposit shows an inline message; continuation = use balance at Checkout. Owner: Deposit.
FR-09 â Automatic WhatsApp notification (explicit). As a Pembeli / Pelanggan, I should receive an automatic WhatsApp notification for my transaction. Lifecycle: initiator = Pembeli / Pelanggan; trigger = transaction state change; observable result = WhatsApp message delivered to the customer's number; access = role-restricted; failure/recovery = notification delivery failure is visible in Operations for admin follow-up; continuation = customer confirms result on Transaction Status. Owner: external WhatsApp channel (dispatched by backend automation; monitored in Operations).
FR-10 â Complete transaction history (explicit). As a Pembeli / Pelanggan, I should be able to review my complete transaction history repeatedly. Lifecycle: initiator = Pembeli / Pelanggan; trigger = opening Transactions; observable result = full history rendered with statuses; access = role-restricted; failure/recovery = fetch failure shows retry; continuation = open a transaction detail or go to Refunds. Owner: Transactions.
FR-11 â Real-time sales reports (explicit). As a Pemilik / Admin Toko, I should be able to monitor real-time sales reports. Lifecycle: initiator = Pemilik / Admin Toko; trigger = opening Sales Reports; observable result = real-time sales figures rendered; access = role-restricted admin; failure/recovery = fetch failure shows retry; continuation = adjust catalogue or promotions. Owner: Sales Reports.
FR-12 â Membership levels (explicit). As a Pemilik / Admin Toko, I should be able to manage membership levels Member, Basic, Gold, and Platinum. Lifecycle: initiator = Pemilik / Admin Toko; trigger = editing levels in Memberships; observable result = levels and their pricing saved; access = role-restricted admin; failure/recovery = save failure shows an inline message; continuation = level pricing applies in Catalog. Owner: Memberships.
FR-13 â Cheaper pricing by level (explicit). As a Pembeli / Pelanggan, I should see cheaper prices according to my membership level (Member, Basic, Gold, Platinum). Lifecycle: initiator = Pembeli / Pelanggan; trigger = viewing prices in Catalog and Checkout; observable result = price reflects the actor's level; access = role-restricted; failure/recovery = level not applied shows the standard price and a message; continuation = complete purchase at the level price. Owner: Catalog and Checkout. Constraint: cheaper pricing applies only according to membership level.
FR-14 â Reseller program (explicit). As a Reseller / Mitra Program Reseller, I should be able to enroll in and run the reseller program, transacting at prices based on my membership level. Lifecycle: initiator = Reseller / Mitra Program Reseller; trigger = enrolling in Reseller; observable result = reseller status active and level pricing applied; access = role-restricted reseller; failure/recovery = enrollment failure shows an inline message; continuation = transact on behalf of buyers and monitor Sales Reports. Owner: Reseller.
FR-15 â Discount codes & promos (explicit). As a Pembeli / Pelanggan, I should be able to use discount codes and promos. Lifecycle: initiator = Pembeli / Pelanggan; trigger = applying a code at Checkout or viewing Promotions; observable result = discount applied to the total; access = login-required for Promotions; failure/recovery = invalid code shows an inline message and preserves the order; continuation = complete payment at the discounted total. Owner: Promotions and Checkout.
FR-16 â Daily flash sale (explicit). As a Pembeli / Pelanggan, I should be able to buy daily flash-sale items. Lifecycle: initiator = Pembeli / Pelanggan; trigger = selecting a flash-sale item; observable result = flash-sale price applied at Checkout; access = login-required for Promotions; failure/recovery = expired flash sale shows the standard price and a message; continuation = complete purchase. Owner: Promotions and Catalog.
FR-17 â Reviews & ratings (explicit). As a Pembeli / Pelanggan, I should be able to give reviews and ratings on a transaction or product. Lifecycle: initiator = Pembeli / Pelanggan; trigger = submitting a review in Reviews; observable result = review and rating published; access = role-restricted; failure/recovery = submission failure shows an inline message and preserves the text; continuation = view published reviews. Owner: Reviews.
FR-18 â Money-back guarantee on failure (explicit). As a Pembeli / Pelanggan, I should receive a money-back guarantee when a transaction fails. Lifecycle: initiator = Pembeli / Pelanggan; trigger = a failed transaction; observable result = refund request submitted and processed, funds returned; access = role-restricted; failure/recovery = refund request failure shows an inline message; continuation = refund status visible in Refunds and Transactions. Owner: Refunds. Constraint: the money-back guarantee applies only when a transaction fails.
FR-19 â Self-service enrollment (required_inference). As a Pembeli / Pelanggan, I should be able to create my own account before first use. Lifecycle: initiator = Pembeli / Pelanggan; trigger = opening Sign Up; observable result = customer account created; access = anonymous; failure/recovery = validation or duplicate identity shows an inline message; continuation = proceed to Login or the customer experience. Owner: Sign Up.
FR-20 â Returning verification (required_inference). As a Pembeli / Pelanggan, Reseller / Mitra Program Reseller, or Pemilik / Admin Toko, I should be able to verify my identity on return. Lifecycle: initiator = any accepted persona; trigger = opening Login; observable result = identity verified and routed to the entitled destination; access = anonymous; failure/recovery = invalid credentials show an inline message and preserve the form; continuation = proceed to Catalog or role-restricted areas. Owner: Login.
FR-21 â Role assignment/verification (required_inference). As a Pemilik / Admin Toko, I should have reseller and admin roles assigned or verified before role-restricted areas are accessed. Lifecycle: initiator = Pemilik / Admin Toko; trigger = role assignment or verification; observable result = role-restricted areas accessible only to the correct role; access = role-restricted; failure/recovery = unverified role is denied entry with a message; continuation = access the entitled area. Owner: Login and role-restricted pages.
FR-22 â Backend automation for transactions, balance, history, refunds, reports, and WhatsApp (required_inference). As the system, I should process transactions automatically, credit balance, persist history, execute refunds, aggregate reports, and dispatch WhatsApp notifications, so that the accepted human-facing outcomes are achievable. Lifecycle: initiator = system; trigger = accepted human actions; observable result = state changes visible on Transaction Status, Deposit, Transactions, Refunds, Sales Reports, and Operations; access = not human-facing; failure/recovery = failures surface to the owning page and to Operations; continuation = human continues on the owning page. Owner: system process (supports first-party pages).
FR-23 â Automatic WhatsApp transaction notification (required_inference). As a Pembeli / Pelanggan, I should have my transaction notification sent automatically through WhatsApp. Lifecycle: initiator = Pembeli / Pelanggan; trigger = transaction state change; observable result = WhatsApp message delivered; access = role-restricted; failure/recovery = delivery failure visible in Operations; continuation = customer confirms on Transaction Status. Owner: external WhatsApp channel (monitored in Operations).
FR-24 â Refund only on failure (required_inference). As a Pembeli / Pelanggan, I should have the money-back guarantee apply only when a transaction fails. Lifecycle: initiator = Pembeli / Pelanggan; trigger = a failed transaction; observable result = refund eligibility limited to failed transactions; access = role-restricted; failure/recovery = non-failed transactions show no refund path; continuation = refund processing. Owner: Refunds. Constraint: the guarantee applies only if the transaction fails.
Page 12 of 23
4. User Personas
Page 13 of 23
Pembeli / Pelanggan (Buyer / Customer)
Product context. A young, mobile-first Indonesian gamer or digital-services buyer, typically 16â30, buying in fast bursts on a phone at night. They arrive to top up a game, buy pulsa or a data package, top up an e-wallet, or pay a PLN token or electricity bill.
Primary goal. Get the selected game currency, pulsa/data, e-wallet balance, or bill product delivered automatically and immediately, at the best available price for their membership level, with confirmation on WhatsApp.
Distinct accepted responsibilities. Browse the four catalogue families and pick a game/service and denomination; pay automatically with a chosen method; receive the automatic 24-hour transaction result; deposit balance automatically for purchases; use discount codes and promos and daily flash-sale prices; review complete transaction history; give reviews and ratings; and claim the money-back guarantee when a transaction fails.
Relevant inputs or decisions. Which game/service and denomination; which payment method; whether to apply a discount code or promo or a flash-sale price; whether to deposit balance; whether to submit a review; whether to request a refund for a failed transaction.
Interactions with other accepted participants. The customer's orders and reviews are visible to the Pemilik / Admin Toko through sales reporting and operations; the customer's transactions may be performed by a Reseller / Mitra Program Reseller on their behalf; the customer receives automatic WhatsApp notifications.
Observable success. The order is processed automatically, the product is delivered, the WhatsApp notification arrives, the transaction appears in history, and any failed transaction is refunded.
Page 14 of 23
Reseller / Mitra Program Reseller (Reseller Partner)
Product context. A partner who resells sweet-top's digital products to their own buyers, operating at prices determined by their membership level (Member, Basic, Gold, Platinum).
Primary goal. Run reselling activity with margin from level-based pricing and monitor sales in real time.
Distinct accepted responsibilities. Enroll in the reseller program; perform transactions on behalf of buyers at level pricing; use discount codes, promos, and daily flash sales; monitor their own sales activity through real-time reporting.
Relevant inputs or decisions. Whether to enroll; which products and denominations to resell; which level pricing applies; which promos or flash sales to use; how to read their sales figures.
Interactions with other accepted participants. The reseller transacts on behalf of Pembeli / Pelanggan; the reseller's activity is visible to the Pemilik / Admin Toko through real-time sales reports; the reseller's role must be assigned or verified before role-restricted access.
Observable success. Reseller status is active, level pricing applies to their transactions, and their sales figures appear in real time.
Page 15 of 23
Pemilik / Admin Toko (Store Owner / Admin)
Product context. The operator of the sweet-top store, responsible for the catalogue, membership levels, promotions, flash sales, the reseller program, and the money-back guarantee, and for monitoring automated operations.
Primary goal. Keep the store running automatically and monitor sales in real time.
Distinct accepted responsibilities. Manage the product and service catalogue (including adding new games as the list grows); manage membership levels Member, Basic, Gold, Platinum and their cheaper pricing; manage discount codes, promos, and daily flash sales; manage the reseller program; monitor automated 24-hour transactions, automated balance deposits, and automated WhatsApp notifications; monitor real-time sales reports; process refunds under the money-back guarantee for failed transactions.
Relevant inputs or decisions. Which products and denominations to add or edit; which levels and prices to set; which codes, promos, and flash sales to run; which resellers to admit; how to respond to automation failures; which refunds to process.
Interactions with other accepted participants. The admin's catalogue and pricing decisions shape what Pembeli / Pelanggan and Reseller / Mitra Program Reseller see and pay; the admin monitors the automated activity that serves both; the admin processes refunds for failed customer transactions.
Observable success. The catalogue is current, levels and promotions are live, automated operations run without intervention, sales are visible in real time, and failed transactions are refunded.
5. Core User Flows
Page 16 of 23
Flow A â New customer buys a game top-up (Pembeli / Pelanggan)
- The visitor opens Landing anonymously and reads the catalogue families and store promises.
- The visitor selects Sign Up and creates a customer account.
- The customer verifies through Login and lands in Catalog.
- In Catalog, the customer selects a game (for example Mobile Legends: Bang Bang) and a denomination (for example Diamond).
- The customer proceeds to Checkout, where the order summary shows the product, denomination, and the price for their membership level.
- The customer optionally opens Promotions to apply a discount code or a daily flash-sale price, then returns to Checkout with the discount applied.
- The customer selects a payment method and confirms payment; automatic payment is processed.
- Transaction Status shows the automatic 24-hour transaction processing and then the delivered result.
- The automatic WhatsApp notification is sent to the customer's number.
- The customer continues to Transactions to see the completed order in their complete history.
- Failure/recovery: if the transaction fails, Transaction Status shows the failure and the money-back guarantee path; the customer goes to Refunds, submits a refund request for the failed transaction, and the refund is processed. Continuation: the customer can re-order from Catalog.
Flow B â Customer buys pulsa, data, e-wallet balance, or a bill product (Pembeli / Pelanggan)
- The signed-in customer opens Catalog and selects the Pulsa & Paket Data, E-Wallet & Saldo, or Tagihan & Lainnya family.
- The customer selects the operator or provider (for example Telkomsel, DANA, or Token Listrik PLN) and the package or amount.
- The customer proceeds to Checkout, applies any discount code or flash-sale price, selects a payment method, and confirms.
- Transaction Status shows the automatic processing and the delivered result, and the automatic WhatsApp notification is sent.
- The customer reviews the order in Transactions.
- Failure/recovery: a failed transaction is refunded through Refunds under the money-back guarantee.
Flow C â Customer deposits balance (Pembeli / Pelanggan)
- The signed-in customer opens Deposit and sees the current balance and deposit history.
- The customer chooses a deposit amount and method and initiates the automatic balance deposit.
- The balance is credited automatically and shown on Deposit.
- The customer returns to Catalog and pays for a purchase using the deposited balance at Checkout.
- Failure/recovery: a failed deposit shows an inline message and the customer retries without losing the amount.
Page 17 of 23
Flow D â Customer reviews and rates (Pembeli / Pelanggan)
- The customer opens Reviews from a completed transaction or product.
- The customer submits a rating and review.
- The review and rating are published and visible to other customers.
- Failure/recovery: a failed submission shows an inline message and the review text is preserved for resubmission.
Flow E â Reseller enrolls and resells (Reseller / Mitra Program Reseller)
- The reseller verifies through Login; their reseller role is assigned or verified before role-restricted access.
- The reseller opens Reseller and enrolls in the reseller program.
- Reseller status becomes active and level pricing (Member, Basic, Gold, Platinum) applies.
- The reseller opens Catalog and performs transactions on behalf of buyers at level pricing, optionally using Promotions for discount codes and daily flash sales.
- The reseller completes payment at Checkout and observes the result on Transaction Status.
- The reseller opens Sales Reports to monitor their sales activity in real time.
- Failure/recovery: a failed transaction is refunded through Refunds; a failed enrollment shows an inline message and can be retried.
Flow F â Admin manages the catalogue (Pemilik / Admin Toko)
- The admin verifies through Login; the admin role is verified before role-restricted access.
- The admin opens Catalog Management and adds or edits products, denominations, and nominal values across the four families, including new game titles as the list grows.
- The changes are saved and appear in Catalog for customers and resellers.
- Failure/recovery: a save failure shows an inline message and the edits are preserved for retry.
Flow G â Admin manages memberships and pricing (Pemilik / Admin Toko)
- The admin opens Memberships and manages the Member, Basic, Gold, and Platinum levels and their cheaper pricing.
- The admin assigns or adjusts a member's level.
- The level pricing applies in Catalog and Checkout for that member.
- Failure/recovery: a save failure shows an inline message and can be retried.
Page 18 of 23
Flow H â Admin manages promotions and flash sales (Pemilik / Admin Toko)
- The admin opens Promotions and creates or manages discount codes, promos, and daily flash sales.
- The promotions become available to customers and resellers in Promotions, Catalog, and Checkout.
- Failure/recovery: a save or fetch failure shows an inline message and can be retried.
Flow I â Admin monitors operations and sales (Pemilik / Admin Toko)
- The admin opens Operations and monitors automated 24-hour transactions, automated balance deposits, and automated WhatsApp notifications.
- The admin opens Sales Reports and monitors real-time sales figures.
- Failure/recovery: a fetch failure shows retry; automation failures are visible in Operations for intervention.
Flow J â Admin processes a refund (Pemilik / Admin Toko)
- The admin opens Refunds and reviews refund requests submitted for failed transactions.
- The admin processes the refund under the money-back guarantee.
- The refund status is visible to the customer in Refunds and Transactions.
- Failure/recovery: a processing failure shows an inline message and can be retried.
Page 19 of 23
6. Visuals Colors and Theme
Muse and headline. Saturated pop maximalism for a top-up arcade, after Jessica Walsh. The headline idea: an arcade cabinet that pays out â the store reads as a bright, collectible poster sequence of game-currency stickers, not a spreadsheet of cards.
Colour tokens (light mode).
- Background / ground:
#FFE9DF (warm peach â never white-first)
- Surface / card:
#FFF6EE
- Text / ink:
#1A0E2E (deep plum)
- Primary:
#FF2D8A (hot pink â dominant brand field: hero blocks, badges, buttons)
- Accent / reward:
#C6FF3D (acid lime â top-up success, discount tags, flash-sale timer)
- Muted:
#7A5C7E
- Category codes (sparingly): tangerine
#FF7A1A for pulsa/telco, cobalt #2B5BFF only as a small category dot (never as page primary), lilac #B79CFF for e-wallet
- Status: success
#16A34A, warning #FACC15, critical/failure #EF4444
Proportion. 55% peach ground, 25% pink fields, 10% ink, 6% lime, 4% category hues. Body text is ink on peach or ink on #FFF6EE surface â both pass AA.
Typography.
- Headings: Unbounded at 700â900, all-caps for game names and section labels, tight tracking (-0.02em) with deliberate size jumps; display headlines set oversized and allowed to wrap onto two lines.
- Body and prices: Space Grotesk 400/500/700, tabular numerals for all currency and diamond counts.
- Scale (1.5 modular): display
clamp(44px, 9vw, 128px) / h1 clamp(32px, 5vw, 64px) / h2 clamp(24px, 3vw, 40px) / h3 22px / body 16px / label 13px caps / micro 11px caps. Mobile floor never below 14px for readable copy.
Shape language. Sticker geometry: 24â32px radii on cards, fully pill buttons, offset hard shadows (4px 4px 0 ink or pink) instead of blur, thick 2px ink outlines on interactive tiles, blob and squiggle SVG shapes as section dividers, and rotated sticker chips (diamond icon, "FLASH SALE", level badges) pinned to card corners at -6deg to +8deg.
Layout. Colour-blocked bands stacked vertically, each band a different saturated field (peach, pink, lime) so the page reads as a poster sequence rather than a card grid. Hero is an asymmetric split: oversized stacked headline on the left two-thirds over a pink block, with a cluster of rotated game-currency stickers overlapping the right edge. Game catalogue is a 2/3/4-column responsive grid of sticker-tiles with thick outlines and hard shadows; telco and e-wallet sections become horizontal scrollable sticker rows. Section headers are full-width coloured bars with caps type, not centred headings.
Imagery. No stock photography. Game-currency and payment icons redrawn as bold sticker shapes (diamond, UC coin, Genesis Crystal, PLN bolt, DANA/OVO/GoPay wordmarks as flat chips), surreal 3D props for the hero (an oversized glossy diamond, a floating phone with a top-up receipt), and hand-drawn squiggles and arrows pointing at the CTA. Category illustrations use the supporting hues as flat colour fields.
Avoid. White or near-white page ground; blue/indigo primary buttons or gradients in the #2563EBâ#7C3AED band; Inter, Roboto, Poppins, system-ui or any neutral default sans for headings or body; centred headline + subtext + single button hero or gradient-blob backgrounds; soft blurred drop shadows, glassmorphism, or identical hover-lift cards in a uniform grid; photographic stock people or generic game screenshots as hero imagery; muted, desaturated or "clean corporate" treatments of the flash-sale and reward moments.
Page 20 of 23
7. Signature Design Concept
The public entry (Landing) is a full-bleed warm peach ground split asymmetrically. The left two-thirds carries a stacked all-caps Unbounded headline in deep plum at clamp(44px, 9vw, 128px) reading "TOP UP INSTAN, DIAMOND LANGSUNG MASUK", with a hot-pink block behind the last line and the primary CTA (pill, ink text on acid lime) pinned beneath it. The right third is a floating cluster of rotated 3D stickers â a glossy diamond, a Free Fire token, a DANA chip â that overlap the pink block and bleed off the right viewport edge. A thin ink marquee ticker runs along the bottom of the hero with live flash-sale items. Nothing is centred, no gradient blob, no blue button.
Below the hero, the page becomes a poster sequence of colour-blocked bands: a pink band for game top-up with a 2/3/4-column sticker-tile grid, a tangerine band for pulsa with a horizontal sticker row, a lilac band for e-wallet with a horizontal sticker row, and a lime band for tagihan & lainnya. Section headers are full-width colour bars with caps Unbounded labels and a category dot. Membership levels (Member, Basic, Gold, Platinum) are rendered as four rotated loyalty stickers with hard shadows, not a pricing table. The money-back guarantee and the automated-transaction promises appear as sticker chips pinned to the relevant bands.
This concept only recomposes accepted content, states, and controls: the catalogue families, the flash-sale items, the membership levels, the guarantee, and the Sign Up / Login / Catalog entry actions.
Page 21 of 23
8. Interaction Model & Motion Direction
Interaction Model: Animated
Motion Tempo: expressive
Hero Dimensionality: layered_2d
Landing Hero Motion Brief.
- Focal subject: the rotated 3D currency-sticker cluster (glossy diamond, Free Fire token, DANA chip) overlapping the pink block on the right third.
- Input â transformation â outcome thesis: as the visitor scrolls or hovers, the sticker cluster floats on a slow 6s loop and the marquee ticker of live flash-sale items scrolls across the bottom of the hero; the outcome is that the visitor reads the headline and reaches the lime pill CTA, then moves into the catalogue bands.
- Motion vocabulary: staggered scale-in on sticker tiles (80ms apart, spring ease); marquee ticker of live flash-sale items; hover flips a tile's colour from pink to lime and rotates its sticker 4deg; countdown timer digits pop on each second; hero sticker cluster floats on a slow 6s loop.
- Composed first frame: peach ground, stacked all-caps Unbounded headline in deep plum on the left two-thirds, hot-pink block behind the last line, lime pill CTA pinned beneath, sticker cluster overlapping the pink block and bleeding off the right edge, ink marquee ticker along the bottom.
- Reduced-motion state: all motion disabled under
prefers-reduced-motion; tiles wrap into static rows, the ticker becomes a horizontally scrollable row where each item is fully readable, and the hero sticker cluster holds a static composed position.
9. Non-Functional Requirements
- NFR-01 â Automated 24-hour operation (explicit). Transactions must be processed automatically 24 hours a day, so that customers can buy at any hour without manual handling. Rationale: the source states "Transaksi Otomatis 24 Jam".
- NFR-02 â Automatic payment across multiple methods (explicit). Payment must be automatic and support a variety of methods. Rationale: the source states "Pembayaran Otomatis â Beragam Metode".
- NFR-03 â Automatic balance deposit (explicit). Balance deposits must be credited automatically. Rationale: the source states "Deposit Saldo Otomatis".
- NFR-04 â Automatic WhatsApp notification (explicit). Transaction notifications must be sent automatically through WhatsApp. Rationale: the source states "Notifikasi WhatsApp Otomatis".
- NFR-05 â Complete transaction history (explicit). Transaction history must be complete and reviewable repeatedly. Rationale: the source states "Riwayat Transaksi Lengkap".
- NFR-06 â Real-time sales reporting (explicit). Sales reports must be real-time. Rationale: the source states "Laporan Penjualan Real-Time".
- NFR-07 â Level-based pricing constraint (explicit). Cheaper pricing applies only according to membership level (Member, Basic, Gold, Platinum). Rationale: the source states "Harga Lebih Murah Sesuai Level".
- NFR-08 â Refund constraint (explicit). The money-back guarantee applies only when a transaction fails. Rationale: the source states "Garansi Dana Kembali Jika Gagal".
- NFR-09 â Readable text and controls (creative direction). Headlines, wordmarks, labels, numbers, cards' text and controls must stay entirely inside the viewport and their container at 375px, 768px, and 128px, wrapping or scaling (for example
font-size: clamp(...) with its mobile size) to fit, with no other element covering any part of them. Imagery, decoration, and motion may be cropped, bled, rotated, overlapped, or cut as the direction asks, as long as they cover no readable text or control.
- NFR-10 â Reduced motion (creative direction). All motion must be disabled under
prefers-reduced-motion, with tiles wrapping into static rows and the ticker becoming a horizontally scrollable row where each item is fully readable.
- NFR-11 â Mobile-first responsiveness (creative direction). The layout must work at 375px, 768px, and 1280px, with the hero split, catalogue grid, and horizontal sticker rows adapting per the direction.
Page 22 of 23
10. Tech Stack
- Frontend: React (web application, mobile-first responsive).
- Backend: Python / FastAPI, providing the automated transaction engine, automatic payment handling, automatic balance deposit, transaction history persistence, refund execution, real-time sales report aggregation, and WhatsApp notification dispatch.
- Storage: appropriate persistent storage for accounts, catalogue, orders, transactions, balances, deposits, promotions, flash sales, reviews, refunds, and reports.
- Containerization: Docker / docker-compose for local and deployment packaging.
- Deployment: Kubernetes only if deployment scale requires it.
11. Assumptions and Constraints
- A-01 (assumption). Identity is application-owned: customers self-enroll through Sign Up, and returning customers, resellers, and admins verify through Login. This is a required inference to make the accepted journeys executable.
- A-02 (assumption). Reseller and admin access to role-restricted areas is bounded by role assignment or verification before entry. This is a required inference; it does not establish differentiated permissions beyond the accepted role boundaries.
- A-03 (constraint, explicit). Cheaper pricing applies only according to membership level (Member, Basic, Gold, Platinum).
- A-04 (constraint, explicit). The money-back guarantee applies only when a transaction fails.
- A-05 (constraint, explicit). Transaction notifications are sent through WhatsApp automatically.
- A-06 (constraint, explicit). The game catalogue continues to grow ("Lainnya terus bertambah!"), handled through admin catalogue management rather than a separate future feature.
- A-07 (assumption). WhatsApp is an outbound notification channel owned externally; sweet-top dispatches notifications and monitors delivery in Operations.
- A-08 (assumption). No accepted future-horizon requirements exist beyond the growing game catalogue; nothing outside the accepted catalogue and system features is in scope.
Page 23 of 23
12. Glossary
- Top Up Game â purchase of in-game currency or passes for a game title (for example Diamond for Mobile Legends: Bang Bang).
- Pulsa & Paket Data â mobile credit and internet data packages for Telkomsel, XL / Axis, Indosat, Tri (3), and Smartfren.
- E-Wallet & Saldo â e-wallet top-ups and balances for DANA, OVO, GoPay, ShopeePay, LinkAja, Saldo Google Play, and Saldo Apple.
- Tagihan & Lainnya â bill payments and other products: Token Listrik PLN, Pembayaran Tagihan Listrik, and Voucher Game Digital.
- Transaksi Otomatis 24 Jam â automatic transaction processing available around the clock.
- Pembayaran Otomatis â automatic payment supporting a variety of methods.
- Deposit Saldo Otomatis â automatic crediting of balance deposits for purchases.
- Notifikasi WhatsApp Otomatis â automatic WhatsApp notification of transaction events.
- Riwayat Transaksi Lengkap â complete, repeatedly reviewable transaction history.
- Laporan Penjualan Real-Time â real-time sales reporting.
- Level Keanggotaan â membership levels Member, Basic, Gold, and Platinum.
- Harga Lebih Murah Sesuai Level â cheaper pricing that applies according to membership level.
- Program Reseller â the reseller partner program for reselling products at level-based pricing.
- Kode Diskon & Promo â discount codes and promotions.
- Flash Sale â daily limited-time sale pricing.
- Ulasan & Rating Pelanggan â customer reviews and ratings.
- Garansi Dana Kembali Jika Gagal â money-back guarantee that applies only when a transaction fails.
No comments yet. Be the first!