voice-room-coin

byRian Riswani

Buatkan apk voice room chat call gift dengan harga mahal coin ampou login dengan google id pengguna top up coin penarikan buatkan akun leseler coin unlimited coin admin coin leseler akun saya bikin unlimited coin

No preview

Comments (0)

No comments yet. Be the first!

System Requirements

Page 1 of 22

System Requirements Document for voice-room-coin

Page 2 of 22

1. Introduction

voice-room-coin is a mobile-first social live-audio application where users join voice rooms, chat by voice, place calls, and send expensive gifts purchased with coins. The product's core drama is the price tag: gifts have high prices ("harga mahal"), coin balances function as public status, and unlimited-coin accounts read as insider privilege. The coin economy is the visual identity, not a hidden ledger.

The application is delivered as a directly downloadable APK named TAUCHAT. The downloadable APK is the primary delivery artifact: users install TAUCHAT directly on their device without going through an app-store listing.

The audience is a young Southeast-Asian mobile audience that treats coin spending as public status — hype, swagger, transactional glamour, and drop-culture competition. The app is delivered as a first-party application with custom UI, application-owned identity established through Google ID login, and a persistent coin balance and withdrawal state.

The product intent derived from the authoritative requirement thread is:

  • A voice room application with voice chat, calls, and gifts.
  • Gifts are expensive and can only be sent using coins.
  • Login uses the user's Google ID.
  • Users can top up coins and request coin withdrawals.
  • Users have an "akun saya" (my account) destination for viewing and managing their account and coin balance.
  • Admins can manage user coins, including granting coins and assigning unlimited coin to designated accounts.
  • Reseller coin accounts can be created, and resellers manage reseller coin, including unlimited coin.
  • Ampou (envelope) rewards range from 1.000 coin up to 50.000 and 100.000 coin, with the 50.000 and 100.000 coin ampou floating in the air (melayang di udara).
  • A Lucky JP (jackpot) feature runs in the room, styled like other apps with a good JP presentation.
  • The application is delivered as a directly downloadable APK named TAUCHAT.
Page 3 of 22

2. System Overview

voice-room-coin is a custom-UI application with application-owned identity. All protected work requires Google ID authentication. The current delivery includes nine pages: Landing, Login, Voice Room, Top Up, Withdraw, akun saya, Admin Coin, Reseller Accounts, and Reseller Coin. The application is packaged and distributed as a directly downloadable APK named TAUCHAT.

Actors:

  • Pengguna Voice Room — joins voice rooms for voice chat and calls, and sends expensive gifts using coins.
  • Pengguna Pengelola Coin — tops up coins, views coin balance, and submits coin withdrawal requests through akun saya.
  • Admin — manages user coins, including granting coins and assigning unlimited coin to designated user accounts.
  • Reseller Coin — creates reseller accounts and manages reseller coin, including unlimited coin, to serve users.

Accepted behavior:

  • Voice rooms with voice chat and calls.
  • Gifts with high prices, purchasable only with coins.
  • Google ID login for all users, admins, and resellers.
  • Coin top-up and coin withdrawal.
  • akun saya for account and coin balance management.
  • Admin coin management, including unlimited coin assignment.
  • Reseller account creation and reseller coin management, including unlimited coin.
  • Ampou (envelope) rewards from 1.000 coin up to 50.000 and 100.000 coin, with the 50.000 and 100.000 coin ampou floating in the air.
  • A Lucky JP (jackpot) feature in the room, styled like other apps with a good JP presentation.
  • A directly downloadable APK named TAUCHAT.

Narrow exclusions:

  • No adjacent account-management capabilities beyond Google ID login and the accepted coin workflows.
  • No payment provider integration is specified; top-up and withdrawal are coin-ledger workflows owned by the application.
  • No RBAC beyond the role-restricted access to Admin Coin, Reseller Accounts, and Reseller Coin.
Page 4 of 22

2a. Product Interpretation and Delivery Boundary

voice-room-coin is delivered as a first-party application with custom UI. Identity is application-owned and established through Google ID login. The Landing page is anonymously reachable and explains the product before authentication. The Login page is the shared Google ID access surface for first-use account establishment and returning verification across users, admins, and resellers. All other pages are role-restricted and require authentication.

The current delivery horizon includes all nine pages, the accepted coin workflows, and a directly downloadable APK named TAUCHAT. No future-horizon requirements are specified in the authoritative source. Provider-owned or external-only delivery is not specified; the application owns all accepted behavior. The downloadable APK is the delivery artifact for the accepted behavior; no app-store distribution channel is specified.

2b. Source Content Inventory

No reference directive explicitly contains content_source. This section is omitted.

2c. Page Content and Component Coverage

Page 5 of 22

Landing

  • Information/state: Anonymous first impression explaining the voice room, chat, call, gift, and coin product before authentication. Full-bleed black frame split asymmetrically: left 7 columns carry a huge stacked all-caps headline 'SUARA / BAYAR / STATUS' at clamp(40px, 9vw, 112px) in Archivo Black, each word on its own line with a hazard-stripe band between lines; right 5 columns hold a single hard-flash concrete photograph of a chrome gift object, cropped and bled off the right edge. A rotated tag reading 'GIFT MAHAL' in acid yellow is pinned over the photo corner. A live marquee ticker of the most expensive gifts sent today runs along the bottom edge of the hero.
  • Primary actions: One solid #FF4D00 rectangular Google-login button with a 4px offset shadow and the label 'MASUK PAKAI GOOGLE ID'. No secondary button, no centred stack, no gradient anywhere.
  • Supporting actions: None.
  • Domain entities: Gift, coin, voice room.
  • Component responsibilities: Hero headline, hero photograph, rotated tag, Google-login button, marquee ticker.
  • States: Loading (hero photograph and ticker load), empty (no gifts sent today — ticker shows a static placeholder), success (hero renders with live ticker), error (photograph or ticker fails to load — static fallback), recovery (retry load).

Login

  • Information/state: Shared Google ID access surface for first-use account establishment and returning verification across users, admins, and reseller actors. Anonymous access.
  • Primary actions: Sign in with Google ID.
  • Supporting actions: None.
  • Domain entities: Google ID, user account.
  • Component responsibilities: Google ID sign-in control, error messaging.
  • States: Loading (sign-in in progress), empty (no prior session), success (authenticated and redirected to the appropriate role-restricted page), error (Google ID authentication fails — retry), recovery (retry sign-in).

Voice Room

  • Information/state: Room context for joining voice chat and calls, with gift sending embedded in the room interaction. Voice rooms are listed as full-width hairline-ruled rows with a 2px orange left edge on the currently live room, a square avatar, room name in caps, and live listener count in acid yellow on the right. A marquee ticker of live expensive-gift events ('@user sent CHROME CROWN — 250,000 COIN') scrolls across the voice room header. Gift shelf is a horizontal scrollable strip of concrete-shot product tiles with the price tag as the dominant element and a tag-flip hover that rotates the label and turns the price orange. Ampou (envelope) rewards are sent in the room at tiers from 1.000 coin up to 50.000 and 100.000 coin; the 50.000 and 100.000 coin ampou float in the air (melayang di udara) as they are sent. A Lucky JP (jackpot) feature runs in the room with a good JP presentation styled like other apps.
  • Primary actions: Join a voice room, participate in voice chat, place a call, send a gift using coins, send an ampou (envelope) reward, trigger the Lucky JP (jackpot).
  • Supporting actions: Browse the gift shelf, view live listener count, view live gift ticker, view ampou tiers and floating ampou, view Lucky JP presentation.
  • Domain entities: Voice room, voice chat, call, gift, coin balance, gift price, ampou (envelope) reward, ampou tier, Lucky JP (jackpot).
  • Component responsibilities: Room list rows, live room indicator, voice chat controls, call controls, gift shelf, gift price tags, gift send control, live gift ticker, ampou send control, ampou tier selection, floating ampou animation layer, Lucky JP presentation.
  • States: Loading (room list and gift shelf load), empty (no live rooms — empty state message), success (joined room, voice chat active, gift sent, ampou sent, Lucky JP triggered), error (room join fails, call fails, gift send fails due to insufficient coin balance, ampou send fails due to insufficient coin balance, Lucky JP fails — error message with recovery), recovery (retry join, retry call, top up coin to send gift or ampou, retry Lucky JP).
Page 6 of 22

Top Up

  • Information/state: Focused workflow for adding coin to a user balance. Role-restricted to Pengguna Pengelola Coin.
  • Primary actions: Select a top-up amount, confirm top-up.
  • Supporting actions: View current coin balance.
  • Domain entities: Coin, coin balance, top-up transaction.
  • Component responsibilities: Amount selection, current balance display, confirm control, transaction result.
  • States: Loading (balance and options load), empty (no top-up options — message), success (coin balance increases, confirmation shown), error (top-up fails — error message with retry), recovery (retry top-up).

Withdraw

  • Information/state: Focused workflow for submitting a coin withdrawal request. Role-restricted to Pengguna Pengelola Coin.
  • Primary actions: Enter withdrawal amount, submit withdrawal request.
  • Supporting actions: View current coin balance.
  • Domain entities: Coin, coin balance, withdrawal request.
  • Component responsibilities: Amount input, current balance display, submit control, request result.
  • States: Loading (balance loads), empty (no withdrawal history — message), success (withdrawal request submitted, confirmation shown), error (withdrawal fails due to insufficient balance or invalid amount — error message with retry), recovery (retry withdrawal).

akun saya

  • Information/state: Source-named account destination for viewing and managing the user account and coin balance. Role-restricted to Pengguna Pengelola Coin. Coin numerals in acid-yellow Space Mono on black, tabular-aligned. An 'UNLIMITED' hazard-tape badge replaces the number for unlimited accounts.
  • Primary actions: View account details, view coin balance, view transaction history.
  • Supporting actions: Navigate to Top Up, navigate to Withdraw.
  • Domain entities: User account, coin balance, transaction history, unlimited coin status.
  • Component responsibilities: Account details display, coin balance display, unlimited badge, transaction history list, navigation controls.
  • States: Loading (account and balance load), empty (no transaction history — message), success (account and balance displayed), error (account or balance fails to load — error message with retry), recovery (retry load).
Page 7 of 22

Admin Coin

  • Information/state: Admin workspace for granting user coin and assigning unlimited coin to designated accounts. Role-restricted to Admin. Admin coin tables reuse the same ruled rows as the rest of the app.
  • Primary actions: Grant coin to a user, assign unlimited coin to a designated user account.
  • Supporting actions: View user coin balances, view user list.
  • Domain entities: User account, coin balance, unlimited coin status, admin action.
  • Component responsibilities: User list, coin grant control, unlimited coin assignment control, confirmation and result display.
  • States: Loading (user list loads), empty (no users — message), success (coin granted or unlimited coin assigned, confirmation shown), error (action fails — error message with retry), recovery (retry action).

Reseller Accounts

  • Information/state: Owns reseller account creation and the revisitable reseller account context. Role-restricted to Reseller Coin.
  • Primary actions: Create a reseller account.
  • Supporting actions: View existing reseller accounts.
  • Domain entities: Reseller account, reseller coin.
  • Component responsibilities: Reseller account creation form, reseller account list, confirmation and result display.
  • States: Loading (reseller account list loads), empty (no reseller accounts — message), success (reseller account created, confirmation shown), error (creation fails — error message with retry), recovery (retry creation).

Reseller Coin

  • Information/state: Owns reseller coin management, including reseller balance use or distribution and unlimited coin settings. Role-restricted to Reseller Coin. Coin numerals in acid-yellow Space Mono on black, tabular-aligned. An 'UNLIMITED' hazard-tape badge replaces the number for unlimited reseller accounts.
  • Primary actions: Use or distribute reseller coin, set unlimited coin for a reseller account.
  • Supporting actions: View reseller coin balance, view reseller account list.
  • Domain entities: Reseller coin, reseller balance, unlimited coin status, reseller account.
  • Component responsibilities: Reseller coin balance display, unlimited badge, distribution control, unlimited coin setting control, confirmation and result display.
  • States: Loading (reseller coin data loads), empty (no reseller coin — message), success (coin distributed or unlimited coin set, confirmation shown), error (action fails — error message with retry), recovery (retry action).
Page 8 of 22

3. Functional Requirements

FR-1: Voice room chat and call As a Pengguna Voice Room, I should join voice rooms for voice chat and place calls, so that I can interact with other users in real time.

  • Provenance: explicit
  • Lifecycle: Initiator — Pengguna Voice Room. Indispensable participant — other users in the room. Observable result — voice chat active, call connected. Failure/recovery — room join or call fails, retry. Continuation — remain in room or leave.
  • Acceptance: User joins a voice room, voice chat is active, and calls connect.

FR-2: Expensive gifts purchased with coins As a Pengguna Voice Room, I should send expensive gifts using coins, so that I can express status and appreciation in the room.

  • Provenance: explicit
  • Lifecycle: Initiator — Pengguna Voice Room. Indispensable participant — gift recipient. Observable result — gift sent, coin balance decreases. Failure/recovery — insufficient coin balance, top up coin and retry. Continuation — send another gift or remain in room.
  • Acceptance: Gift is sent only when the user has sufficient coin balance; gift price is high.

FR-3: Google ID login As a user, I should log in using my Google ID, so that I can access protected application work.

  • Provenance: explicit
  • Lifecycle: Initiator — user. Indispensable participant — Google ID provider. Observable result — authenticated session. Failure/recovery — authentication fails, retry. Continuation — proceed to role-appropriate page.
  • Acceptance: Login uses the user's Google ID.

FR-4: Coin top-up As a Pengguna Pengelola Coin, I should top up coins, so that I can increase my coin balance.

  • Provenance: explicit
  • Lifecycle: Initiator — Pengguna Pengelola Coin. Indispensable participant — none beyond initiator. Observable result — coin balance increases. Failure/recovery — top-up fails, retry. Continuation — view balance in akun saya.
  • Acceptance: Coin balance increases after top-up.

FR-5: Coin withdrawal As a Pengguna Pengelola Coin, I should submit a coin withdrawal request, so that I can withdraw coins.

  • Provenance: explicit
  • Lifecycle: Initiator — Pengguna Pengelola Coin. Indispensable participant — none beyond initiator. Observable result — withdrawal request submitted. Failure/recovery — insufficient balance or invalid amount, retry. Continuation — view request in akun saya.
  • Acceptance: Withdrawal request is submitted.

FR-6: akun saya As a Pengguna Pengelola Coin, I should view and manage my account and coin balance in akun saya, so that I can track my coin activity.

  • Provenance: explicit
  • Lifecycle: Initiator — Pengguna Pengelola Coin. Indispensable participant — none beyond initiator. Observable result — account details and coin balance displayed. Failure/recovery — load fails, retry. Continuation — navigate to Top Up or Withdraw.
  • Acceptance: Account details and coin balance are visible.

FR-7: Admin coin management As an Admin, I should manage user coins, including granting coins and assigning unlimited coin to designated user accounts, so that user balances reflect administrative decisions.

  • Provenance: explicit
  • Lifecycle: Initiator — Admin. Indispensable participant — affected user. Observable result — user coin balance updated, unlimited coin status assigned. Failure/recovery — action fails, retry. Continuation — view updated user balance.
  • Acceptance: User coin balance changes are saved and reflected in the user's account.

FR-8: Reseller account creation As a Reseller Coin, I should create reseller accounts, so that I can serve users.

  • Provenance: explicit
  • Lifecycle: Initiator — Reseller Coin. Indispensable participant — none beyond initiator. Observable result — reseller account created. Failure/recovery — creation fails, retry. Continuation — manage reseller coin.
  • Acceptance: Reseller account is created and active.

FR-9: Reseller coin management As a Reseller Coin, I should manage reseller coin, including unlimited coin, so that I can use or distribute coin according to my role.

  • Provenance: explicit
  • Lifecycle: Initiator — Reseller Coin. Indispensable participant — none beyond initiator. Observable result — reseller coin balance updated, unlimited coin set. Failure/recovery — action fails, retry. Continuation — view updated reseller coin balance.
  • Acceptance: Reseller coin balance can be used or distributed; unlimited coin can be set.

FR-10: Google ID authentication required before protected work As a user, I should authenticate with Google ID before accessing protected application work, so that my account and coin state remain bound to me.

  • Provenance: required_inference
  • Lifecycle: Initiator — user. Indispensable participant — Google ID provider. Observable result — authenticated session. Failure/recovery — authentication fails, retry. Continuation — proceed to role-appropriate page.
  • Acceptance: Protected pages are inaccessible without Google ID authentication.

FR-11: Returning user verification As a returning user, I should verify through the shared Google login surface, so that I can resume my account and coin state.

  • Provenance: required_inference
  • Lifecycle: Initiator — returning user. Indispensable participant — Google ID provider. Observable result — authenticated session restored. Failure/recovery — verification fails, retry. Continuation — proceed to role-appropriate page.
  • Acceptance: Returning user can verify through Google login.

FR-12: Role-restricted coin workflows As an Admin or Reseller Coin, I should have administrative and reseller permissions assigned before my role-restricted coin workflows are available, so that only authorized actors access those workflows.

  • Provenance: required_inference
  • Lifecycle: Initiator — Admin or Reseller Coin. Indispensable participant — none beyond initiator. Observable result — role-restricted pages accessible. Failure/recovery — permission not assigned, access denied. Continuation — proceed to role-restricted page.
  • Acceptance: Admin Coin, Reseller Accounts, and Reseller Coin are accessible only to their respective roles.

FR-13: Coin balance and withdrawal state persistence As a Pengguna Pengelola Coin, I should have my coin balance and withdrawal state persist, so that I can perform later product actions.

  • Provenance: required_inference
  • Lifecycle: Initiator — Pengguna Pengelola Coin. Indispensable participant — none beyond initiator. Observable result — coin balance and withdrawal state persist across sessions. Failure/recovery — persistence fails, retry. Continuation — perform later product actions.
  • Acceptance: Coin balance and withdrawal state persist for later product actions.

FR-14: Unlimited coin status assignment As an Admin or Reseller Coin, I should explicitly assign unlimited coin status to a designated user or reseller account, so that the designated account has unlimited coin.

  • Provenance: required_inference
  • Lifecycle: Initiator — Admin or Reseller Coin. Indispensable participant — designated account holder. Observable result — unlimited coin status assigned. Failure/recovery — assignment fails, retry. Continuation — view unlimited badge in akun saya or Reseller Coin.
  • Acceptance: Unlimited coin status is explicitly assigned to the designated user or reseller account.

FR-15: Ampou (envelope) rewards with floating high tiers As a Pengguna Voice Room, I should send ampou (envelope) rewards in the room at tiers from 1.000 coin up to 50.000 and 100.000 coin, so that I can drop coin rewards into the room as public status.

  • Provenance: explicit
  • Lifecycle: Initiator — Pengguna Voice Room. Indispensable participant — ampou recipient(s) in the room. Observable result — ampou sent, coin balance decreases, the 50.000 and 100.000 coin ampou float in the air (melayang di udara). Failure/recovery — insufficient coin balance, top up coin and retry. Continuation — send another ampou or remain in room.
  • Acceptance: Ampou tiers run from 1.000 coin up to 50.000 and 100.000 coin; the 50.000 and 100.000 coin ampou float in the air when sent.

FR-16: Lucky JP (jackpot) in the room As a Pengguna Voice Room, I should trigger the Lucky JP (jackpot) in the room, so that I can participate in a jackpot moment styled like other apps with a good JP presentation.

  • Provenance: explicit
  • Lifecycle: Initiator — Pengguna Voice Room. Indispensable participant — other users in the room. Observable result — Lucky JP triggered with a good JP presentation. Failure/recovery — Lucky JP fails, retry. Continuation — remain in room or trigger again.
  • Acceptance: Lucky JP runs in the room with a good JP presentation styled like other apps.

FR-17: Directly downloadable APK named TAUCHAT As a user, I should download and install the application directly as an APK named TAUCHAT, so that I can use the app on my device without an app-store listing.

  • Provenance: explicit
  • Lifecycle: Initiator — user. Indispensable participant — none beyond initiator. Observable result — the TAUCHAT APK is downloaded and installed on the device. Failure/recovery — download or installation fails, retry the download. Continuation — open TAUCHAT and proceed to the Landing page.
  • Acceptance: The application is available as a directly downloadable APK named TAUCHAT.
Page 9 of 22

4. User Personas

Pengguna Voice Room

  • Product context: Joins voice rooms for voice chat and calls, and sends expensive gifts using coins. The product's core drama is the price tag: gifts with high prices and coin balances as public status. Also sends ampou (envelope) rewards from 1.000 coin up to 50.000 and 100.000 coin, with the 50.000 and 100.000 coin ampou floating in the air, and triggers the Lucky JP (jackpot) in the room.
  • Primary goal: Interact in voice rooms, send expensive gifts and ampou rewards, and trigger the Lucky JP to express status and appreciation.
  • Distinct accepted responsibilities: Joining voice rooms, participating in voice chat, placing calls, sending expensive gifts using coins, sending ampou (envelope) rewards at tiers from 1.000 coin up to 50.000 and 100.000 coin, triggering the Lucky JP (jackpot).
  • Relevant inputs or decisions: Which room to join, whether to place a call, which gift to send, which ampou tier to send, whether to trigger the Lucky JP, whether coin balance is sufficient.
  • Interactions with other accepted participants: Interacts with other users in the room; gift recipient receives the gift; ampou recipients receive the ampou reward.
  • Observable success: User joins a voice room, voice chat is active, calls connect, gifts are sent with sufficient coin balance, ampou rewards are sent with the 50.000 and 100.000 coin ampou floating in the air, and the Lucky JP is triggered with a good JP presentation.

Pengguna Pengelola Coin

  • Product context: Tops up coins, views coin balance, and submits coin withdrawal requests through akun saya. Coin balances function as public status.
  • Primary goal: Manage coin balance through top-up and withdrawal, and track coin activity in akun saya.
  • Distinct accepted responsibilities: Topping up coins, viewing coin balance, submitting coin withdrawal requests, viewing transaction history in akun saya.
  • Relevant inputs or decisions: Top-up amount, withdrawal amount, whether balance is sufficient.
  • Interactions with other accepted participants: None beyond initiator for coin management; may interact with Admin for coin grants.
  • Observable success: Coin balance increases after top-up, withdrawal request is submitted, and transaction history is visible in akun saya.
Page 10 of 22

Admin

  • Product context: Manages user coins, including granting coins and assigning unlimited coin to designated user accounts. Admin coin tables reuse the same ruled rows as the rest of the app.
  • Primary goal: Manage user coin balances and assign unlimited coin to designated accounts.
  • Distinct accepted responsibilities: Granting coins to users, assigning unlimited coin to designated user accounts, viewing user coin balances.
  • Relevant inputs or decisions: Which user to grant coins to, how many coins to grant, which account to designate for unlimited coin.
  • Interactions with other accepted participants: Affected user receives coin grant or unlimited coin status.
  • Observable success: User coin balance changes are saved and reflected in the user's account.

Reseller Coin

  • Product context: Creates reseller accounts and manages reseller coin, including unlimited coin, to serve users. Reseller coin tables reuse the same ruled rows as the rest of the app.
  • Primary goal: Create reseller accounts and manage reseller coin, including unlimited coin.
  • Distinct accepted responsibilities: Creating reseller accounts, using or distributing reseller coin, setting unlimited coin for reseller accounts.
  • Relevant inputs or decisions: Reseller account details, reseller coin distribution amount, which reseller account to set unlimited coin for.
  • Interactions with other accepted participants: Serves users through reseller coin.
  • Observable success: Reseller account is active and reseller coin balance can be used or distributed according to role.

5. Core User Flows

Page 11 of 22

Flow 1: Pengguna Voice Room joins a voice room and sends a gift

  1. Pengguna Voice Room opens the app and lands on the Landing page.
  2. Pengguna Voice Room taps the 'MASUK PAKAI GOOGLE ID' button.
  3. Pengguna Voice Room authenticates with Google ID on the Login page.
  4. Pengguna Voice Room is redirected to the Voice Room page.
  5. Pengguna Voice Room browses the full-width hairline-ruled room rows and selects a live room (marked with a 2px orange left edge).
  6. Pengguna Voice Room joins the room; voice chat becomes active.
  7. Pengguna Voice Room browses the horizontal gift shelf and selects an expensive gift.
  8. Pengguna Voice Room confirms the gift send; the gift is sent only if the coin balance is sufficient.
  9. Observable result: Gift is sent, coin balance decreases, and the live gift ticker updates.
  10. Failure/recovery: If the coin balance is insufficient, Pengguna Voice Room navigates to Top Up, adds coin, and retries the gift send.
  11. Continuation: Pengguna Voice Room remains in the room or sends another gift.

Flow 2: Pengguna Voice Room places a call

  1. Pengguna Voice Room is in a voice room.
  2. Pengguna Voice Room initiates a call.
  3. Observable result: Call connects.
  4. Failure/recovery: If the call fails, Pengguna Voice Room retries.
  5. Continuation: Pengguna Voice Room continues the call or returns to the room.
Page 12 of 22

Flow 2a: Pengguna Voice Room sends an ampou (envelope) reward

  1. Pengguna Voice Room is in a voice room.
  2. Pengguna Voice Room opens the ampou (envelope) send control.
  3. Pengguna Voice Room selects an ampou tier from 1.000 coin up to 50.000 and 100.000 coin.
  4. Pengguna Voice Room confirms the ampou send; the ampou is sent only if the coin balance is sufficient.
  5. Observable result: Ampou is sent, coin balance decreases, and the 50.000 and 100.000 coin ampou float in the air (melayang di udara).
  6. Failure/recovery: If the coin balance is insufficient, Pengguna Voice Room navigates to Top Up, adds coin, and retries the ampou send.
  7. Continuation: Pengguna Voice Room remains in the room or sends another ampou.

Flow 2b: Pengguna Voice Room triggers the Lucky JP (jackpot)

  1. Pengguna Voice Room is in a voice room.
  2. Pengguna Voice Room triggers the Lucky JP (jackpot).
  3. Observable result: Lucky JP runs with a good JP presentation styled like other apps.
  4. Failure/recovery: If the Lucky JP fails, Pengguna Voice Room retries.
  5. Continuation: Pengguna Voice Room remains in the room or triggers the Lucky JP again.

Flow 3: Pengguna Pengelola Coin tops up coins

  1. Pengguna Pengelola Coin logs in with Google ID.
  2. Pengguna Pengelola Coin navigates to the Top Up page.
  3. Pengguna Pengelola Coin selects a top-up amount.
  4. Pengguna Pengelola Coin confirms the top-up.
  5. Observable result: Coin balance increases and confirmation is shown.
  6. Failure/recovery: If the top-up fails, Pengguna Pengelola Coin retries.
  7. Continuation: Pengguna Pengelola Coin views the updated balance in akun saya.
Page 13 of 22

Flow 4: Pengguna Pengelola Coin submits a withdrawal request

  1. Pengguna Pengelola Coin logs in with Google ID.
  2. Pengguna Pengelola Coin navigates to the Withdraw page.
  3. Pengguna Pengelola Coin enters a withdrawal amount.
  4. Pengguna Pengelola Coin submits the withdrawal request.
  5. Observable result: Withdrawal request is submitted and confirmation is shown.
  6. Failure/recovery: If the withdrawal fails due to insufficient balance or invalid amount, Pengguna Pengelola Coin corrects the amount and retries.
  7. Continuation: Pengguna Pengelola Coin views the request in akun saya.

Flow 5: Pengguna Pengelola Coin views account and coin balance

  1. Pengguna Pengelola Coin logs in with Google ID.
  2. Pengguna Pengelola Coin navigates to akun saya.
  3. Observable result: Account details and coin balance are displayed; transaction history is visible.
  4. Failure/recovery: If the account or balance fails to load, Pengguna Pengelola Coin retries.
  5. Continuation: Pengguna Pengelola Coin navigates to Top Up or Withdraw.

Flow 6: Admin grants coins to a user

  1. Admin logs in with Google ID.
  2. Admin navigates to the Admin Coin page.
  3. Admin selects a user from the user list.
  4. Admin enters the coin amount to grant.
  5. Admin confirms the grant.
  6. Observable result: User coin balance is updated and confirmation is shown.
  7. Failure/recovery: If the action fails, Admin retries.
  8. Continuation: Admin views the updated user balance.
Page 14 of 22

Flow 7: Admin assigns unlimited coin to a designated user account

  1. Admin logs in with Google ID.
  2. Admin navigates to the Admin Coin page.
  3. Admin selects a user account to designate.
  4. Admin assigns unlimited coin status.
  5. Observable result: Unlimited coin status is assigned and confirmation is shown.
  6. Failure/recovery: If the assignment fails, Admin retries.
  7. Continuation: The designated user sees the 'UNLIMITED' hazard-tape badge in akun saya.

Flow 8: Reseller Coin creates a reseller account

  1. Reseller Coin logs in with Google ID.
  2. Reseller Coin navigates to the Reseller Accounts page.
  3. Reseller Coin enters reseller account details.
  4. Reseller Coin confirms creation.
  5. Observable result: Reseller account is created and confirmation is shown.
  6. Failure/recovery: If creation fails, Reseller Coin retries.
  7. Continuation: Reseller Coin manages reseller coin on the Reseller Coin page.
Page 15 of 22

Flow 9: Reseller Coin manages reseller coin and unlimited coin

  1. Reseller Coin logs in with Google ID.
  2. Reseller Coin navigates to the Reseller Coin page.
  3. Reseller Coin views the reseller coin balance.
  4. Reseller Coin uses or distributes reseller coin.
  5. Reseller Coin sets unlimited coin for a reseller account.
  6. Observable result: Reseller coin balance is updated, unlimited coin is set, and confirmation is shown.
  7. Failure/recovery: If the action fails, Reseller Coin retries.
  8. Continuation: Reseller Coin views the updated reseller coin balance.
Page 16 of 22

6. Visuals Colors and Theme

The creative direction is authoritative for this section. The muse is Virgil Abloh, and the headline is Quoted luxury: voice-room status as industrial streetwear.

Palette (dark mode):

  • Background: #0B0B0B
  • Surface: #171717
  • Text: #F2F2F0
  • Primary: #FF4D00
  • Accent: #E8FF3A
  • Muted: #8A8A85

Industrial black ground with a slightly warm off-white text so long coin tables stay readable. Safety orange #FF4D00 is the action colour (send gift, top up, go live) used on under 10% of any screen — one hot button per view. Acid yellow #E8FF3A is reserved exclusively for coin numbers, balances and unlimited-coin badges, so money literally glows in the layout. Concrete grey #8A8A85 carries metadata, timestamps and disabled states. Hazard-tape stripes (alternating #0B0B0B / #E8FF3A) are the only decorative fill, used as 8px rules between sections.

Typography:

  • Headings: Archivo Black — all-caps at huge sizes with tight -0.02em tracking, set as if stencilled on a shipping crate; headings frequently wrapped in literal quotation marks ('ROOMS', 'GIFTS', 'COIN') as a quoted-label gesture.
  • Sub-labels: Archivo 500, uppercase, 0.18em letterspacing, 12–13px, used like industrial tag text.
  • Coin figures: Space Mono at 700 so digits align in tables and tickers.
  • Body: Archivo.
  • Scale: 1.333 modular — mobile 40 / 28 / 20 / 15 / 13px, desktop 96 / 56 / 32 / 18 / 14px; display headline clamp(40px, 9vw, 112px); coin numerals clamp(20px, 4vw, 34px) tabular.

Shape language:

  • Hard 0px corners everywhere.
  • 1px #2A2A2A hairlines as exposed grid lines.
  • 2px solid orange outlines on the single primary action.
  • Label/tag motifs as small rotated rectangles pinned to card corners.
  • Hazard-stripe bands as 8px separators.
  • Buttons are rectangles with a 4px offset solid shadow (no blur), giving a printed-sticker feel.

Layout:

  • A visible 12-column industrial grid with hairline rules printed over the content.
  • Flush-left ragged-right type.
  • A persistent bottom tab bar on mobile (ROOMS / GIFTS / COIN / SAYA) that becomes a left rail at 1280px.
  • Voice rooms are listed as full-width ruled rows with a square avatar, room name in caps, live listener count in acid yellow on the right — not a card grid.
  • Gift catalogue is a scrollable horizontal shelf of product-on-concrete tiles with the price tag as the largest element.
  • Admin/reseller coin tables reuse the same ruled rows so operations screens share the identity.

Imagery:

  • Product-on-concrete photography: gifts shot as physical objects (a chrome crown, a gold-plated mic, a neon sign) on raw grey concrete with hard flash and visible shadow, slightly over-exposed.
  • Room avatars get a duotone black/orange treatment.
  • Texture overlays: halftone grain at 6% opacity, hazard tape, and quotation-mark stickers used as graphic punctuation rather than illustration.
  • No 3D renders, no soft gradient blobs, no stock smiling people.
Page 17 of 22

7. Signature Design Concept

The Landing hero is a full-bleed black frame split asymmetrically. The left 7 columns carry a huge stacked all-caps headline 'SUARA / BAYAR / STATUS' at clamp(40px, 9vw, 112px) in Archivo Black, each word on its own line with a hazard-stripe band between lines. The right 5 columns hold a single hard-flash concrete photograph of a chrome gift object, cropped and bled off the right edge. A rotated tag reading 'GIFT MAHAL' in acid yellow is pinned over the photo corner. Below the headline, one solid #FF4D00 rectangular Google-login button with a 4px offset shadow and the label 'MASUK PAKAI GOOGLE ID' — no secondary button, no centred stack, no gradient anywhere. A live marquee ticker of the most expensive gifts sent today runs along the bottom edge of the hero.

Signature moves:

  • Quoted labels everywhere: section titles, nav items and price tags are rendered inside literal quotation marks ('GIFTS', 'TOP UP'), so the UI reads as a remixed, self-aware product.
  • Coin numerals in acid-yellow Space Mono on black, tabular-aligned in every table and ticker, with an 'UNLIMITED' hazard-tape badge replacing the number for unlimited accounts and resellers.
  • A bottom-edge marquee ticker of live expensive-gift events ('@user sent CHROME CROWN — 250,000 COIN') that scrolls across the landing hero and the voice room header.
  • Voice rooms as full-width hairline-ruled rows with a 2px orange left edge on the currently live room, instead of a grid of hover-lift cards.
  • Gift shelf as a horizontal scrollable strip of concrete-shot product tiles with the price tag as the dominant element and a tag-flip hover that rotates the label and turns the price orange.
  • Ampou (envelope) rewards as industrial envelope objects with the coin tier as the dominant element, tiers running from 1.000 coin up to 50.000 and 100.000 coin, with the 50.000 and 100.000 coin ampou floating in the air (melayang di udara) as they are sent.
  • A Lucky JP (jackpot) presentation in the room, styled like other apps with a good JP presentation.
Page 18 of 22

8. Interaction Model & Motion Direction

Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: flat

Landing Hero Motion Brief:

  • Focal subject: The chrome gift object photographed on raw grey concrete, cropped and bled off the right edge, with the rotated 'GIFT MAHAL' tag pinned over the photo corner.
  • Input→transformation→outcome thesis: As the user scrolls or the page loads, the marquee ticker of the most expensive gifts sent today scrolls across the bottom edge of the hero, the hazard-stripe bands between headline lines hold static, and the Google-login button stamps down on press — the hero communicates that expensive gifts are live and happening now, without adding any behavior beyond the accepted gift and coin economy.
  • Motion vocabulary: Snappy and mechanical: 120–180ms cubic-bezier(0.2, 0.9, 0.1, 1) transitions, tag-flip hovers that rotate the label 2deg and swap the price to orange, a marquee ticker of latest expensive gifts scrolling across the top of the room list, and a stamp-down scale(0.98) press on every button. No bounce, no float, no gradient drift. The 50.000 and 100.000 coin ampou float in the air (melayang di udara) as they are sent, and the Lucky JP (jackpot) runs with a good JP presentation styled like other apps.
  • Composed first frame: Full-bleed black frame, left 7 columns with 'SUARA / BAYAR / STATUS' stacked in Archivo Black with hazard-stripe bands between lines, right 5 columns with the concrete-shot chrome gift object bled off the right edge, rotated 'GIFT MAHAL' tag in acid yellow pinned over the photo corner, solid #FF4D00 Google-login button with 4px offset shadow below the headline, and the marquee ticker running along the bottom edge.
  • Reduced-motion state: The ticker becomes a wrapped static list and all transitions collapse to instant state changes; the floating 50.000 and 100.000 coin ampou and the Lucky JP presentation resolve to static states.
Page 19 of 22

9. Non-Functional Requirements

NFR-1: Google ID authentication Login must use the user's Google ID. Provenance: explicit. Rationale: Explicit hard constraint in the authoritative user evidence.

NFR-2: Gift price constraint Gift prices must be high ("harga mahal"). Provenance: explicit. Rationale: Explicit hard constraint in the authoritative user evidence.

NFR-3: Gift payment constraint Gifts can only be sent using coins. Provenance: explicit. Rationale: Explicit hard constraint in the authoritative user evidence.

NFR-4: Unlimited coin constraint Unlimited coin is only for designated user accounts. Provenance: explicit. Rationale: Explicit hard constraint in the authoritative user evidence.

NFR-5: Reseller account creation constraint Reseller coin accounts are created through the reseller account creation process. Provenance: explicit. Rationale: Explicit hard constraint in the authoritative user evidence.

NFR-6: Coin balance and withdrawal state persistence Coin balance and withdrawal state must persist for later product actions. Provenance: required_inference. Rationale: Required to make accepted coin workflows executable.

NFR-7: Role-restricted access Admin Coin, Reseller Accounts, and Reseller Coin must be accessible only to their respective roles. Provenance: required_inference. Rationale: Required to make accepted role-restricted coin workflows executable.

NFR-8: Readable text and controls Headlines, wordmarks, labels, numbers, cards' text and controls stay entirely inside the viewport and their container at 375px, 768px and 1280px, wrapping or scaling (for example font-size: clamp(...) with its mobile size) to fit, and no other element covers any part of them. Provenance: explicit (creative direction). Rationale: Creative direction requirement.

NFR-9: Reduced-motion support With prefers-reduced-motion, the ticker becomes a wrapped static list and all transitions collapse to instant state changes. Provenance: explicit (creative direction). Rationale: Creative direction requirement.

NFR-10: Ampou tier constraint Ampou (envelope) rewards range from 1.000 coin up to 50.000 and 100.000 coin, and the 50.000 and 100.000 coin ampou float in the air (melayang di udara). Provenance: explicit. Rationale: Explicit hard constraint in the authoritative user evidence.

NFR-11: Lucky JP presentation constraint The Lucky JP (jackpot) runs in the room with a good JP presentation styled like other apps. Provenance: explicit. Rationale: Explicit hard constraint in the authoritative user evidence.

NFR-12: Directly downloadable APK named TAUCHAT The application must be delivered as a directly downloadable APK named TAUCHAT. Provenance: explicit. Rationale: Explicit hard constraint in the authoritative user evidence.

Page 20 of 22

10. Tech Stack

  • Frontend: React (custom UI, mobile-first, responsive to 1280px).
  • Backend: Python / FastAPI.
  • Storage: Appropriate storage for user accounts, coin balances, transaction history, reseller accounts, and unlimited coin status.
  • Deployment: Docker / docker-compose. Kubernetes only when deployment requires it.
  • Distribution: Directly downloadable APK named TAUCHAT (no app-store listing specified).

Source-specified technology choices are preserved. No source-specified technology conflicts with these choices.

Page 21 of 22

11. Assumptions and Constraints

Assumptions:

  • Google ID authentication is the sole identity mechanism; no other login method is specified.
  • Coin top-up and withdrawal are coin-ledger workflows owned by the application; no external payment provider is specified.
  • Admin and Reseller Coin roles are assigned before their role-restricted workflows are available.
  • Unlimited coin status is explicitly assigned to designated user or reseller accounts.
  • Coin balance and withdrawal state persist across sessions.
  • Ampou (envelope) rewards range from 1.000 coin up to 50.000 and 100.000 coin, with the 50.000 and 100.000 coin ampou floating in the air (melayang di udara).
  • The Lucky JP (jackpot) runs in the room with a good JP presentation styled like other apps.
  • The application is delivered as a directly downloadable APK named TAUCHAT.

Constraints:

  • Gifts can only be sent using coins.
  • Gift prices are high ("harga mahal").
  • Login uses the user's Google ID.
  • Unlimited coin is only for designated user accounts.
  • Reseller coin accounts are created through the reseller account creation process.
  • Ampou (envelope) rewards range from 1.000 coin up to 50.000 and 100.000 coin, and the 50.000 and 100.000 coin ampou float in the air (melayang di udara).
  • The Lucky JP (jackpot) runs in the room with a good JP presentation styled like other apps.
  • The application is delivered as a directly downloadable APK named TAUCHAT.
  • No adjacent account-management capabilities beyond Google ID login and the accepted coin workflows.
  • No RBAC beyond the role-restricted access to Admin Coin, Reseller Accounts, and Reseller Coin.
Page 22 of 22

12. Glossary

  • Voice Room: A live audio space where users join for voice chat and calls.
  • Gift: A virtual item with a high price, purchasable only with coins, sent within a voice room.
  • Ampou (Envelope): A coin reward sent in a voice room at tiers from 1.000 coin up to 50.000 and 100.000 coin, with the 50.000 and 100.000 coin ampou floating in the air (melayang di udara) when sent.
  • Lucky JP (Jackpot): A jackpot feature that runs in the room, styled like other apps with a good JP presentation.
  • Coin: The in-app currency used to purchase gifts and managed through top-up and withdrawal.
  • Unlimited Coin: A status explicitly assigned to a designated user or reseller account, replacing the coin number with an 'UNLIMITED' hazard-tape badge.
  • Top Up: The workflow for adding coin to a user balance.
  • Withdraw: The workflow for submitting a coin withdrawal request.
  • akun saya: The source-named account destination for viewing and managing the user account and coin balance.
  • Admin Coin: The admin workspace for granting user coin and assigning unlimited coin to designated accounts.
  • Reseller Accounts: The destination for reseller account creation and the revisitable reseller account context.
  • Reseller Coin: The destination for reseller coin management, including reseller balance use or distribution and unlimited coin settings.
  • Google ID: The identity provider used for login and returning user verification.
  • TAUCHAT: The name of the directly downloadable APK through which the application is delivered to users.

No completed page designs yet.

Completed design pages will appear here when they are ready to preview.

Landing: View product and live gift ticker
Landing: Tap 'MASUK PAKAI GOOGLE ID'
Login: 1. Sign in with Google ID
Login: 2. Retry sign-in after failure
Admin Coin: View user list and balances
Admin Coin: Select user and enter grant amount
Admin Coin: 1. Confirm coin grant
Admin Coin: 2. Retry grant after failure
Admin Coin: Select account for unlimited coin
Admin Coin: 1. Assign unlimited coin status
Admin Coin: 2. Retry unlimited assignment
Admin Coin: View updated user balance

No completed page designs yet.

Completed design pages will appear here when they are ready to preview.

Landing: View product and live gift ticker
Landing: Tap 'MASUK PAKAI GOOGLE ID'
Login: 1. Sign in with Google ID
Login: 2. Retry sign-in after failure
Admin Coin: View user list and balances
Admin Coin: Select user and enter grant amount
Admin Coin: 1. Confirm coin grant
Admin Coin: 2. Retry grant after failure
Admin Coin: Select account for unlimited coin
Admin Coin: 1. Assign unlimited coin status
Admin Coin: 2. Retry unlimited assignment
Admin Coin: View updated user balance