otp-smsplog (product name: SMSPLOG) is Nigeria's #1 virtual number store for verifications. It is a mobile-first SaaS where users buy temporary and rent virtual numbers to receive OTP (one-time password) SMS codes for apps, reselling numbers sourced from external API providers.
The product's core intent is a trustworthy, compliance-first, naira-denominated utility: a 16+ verified user funds a wallet via a mocked Paystack deposit, filters available numbers by service and country, buys a number, watches a 15-minute "waiting for SMS" countdown, reads and copies the received OTP with one tap, and reviews their order and wallet history. Every purchase deducts from the wallet, and no negative balance is ever allowed. All orders are logged, and accounts are banned for illegal use.
The audience is mobile-first Nigerian consumers aged 16 and over who need a foreign or local number to receive a verification code, plus the SMSPLOG operator (Admin) who manages pricing, orders, users, provider configuration, and wallet transaction logs.
The product is delivered as a first-party web application with application-owned identity, a mocked SMS provider API (structured so a real API key can be added later via an env file), and a mocked Paystack deposit flow.
SMSPLOG is delivered as a React + Tailwind frontend backed by a FastAPI + Postgres backend. The current delivery includes:
Actors: the accepted active-human personas are User and Admin (closed set). The mock SMS provider (POST https://api.provider.com/getnumber) and the mock Paystack deposit service are typed non-persona external actors.
Narrow exclusions and boundaries: the SMS provider API is mocked (not live); the Paystack deposit is mocked; no real money movement occurs. Real provider API keys are added later via an env file. Admin access is admin-only. Purchases never create a negative wallet balance. Cancellation refunds are 70% and only when no SMS was received.
SMSPLOG is a first-party web application. Identity is application-owned: a User establishes an account with phone, email, and password, verifies their phone number, and must be 16 or older before buying. The Landing and Terms pages are anonymously reachable; Auth is the anonymous entry boundary that establishes access to the protected marketplace. The protected destinations (Home / buy number, Active Number, My Orders, Wallet) require an authenticated User session; the Admin panel requires an admin-provisioned role.
The current delivery horizon covers everything described in this document: the full buy flow, wallet, orders, admin console, mocked provider integration, mocked Paystack deposit, seed data, and wallet-deduction behavior. Future work is limited to swapping the mocked provider API for a real provider using an env-file API key; no other future capabilities are accepted.
Not applicable — no reference directive declares content_source.
Each requirement is a distinct story point with provenance, lifecycle facts, and observable acceptance.
FR-1 — Signup with phone, email, and password (explicit) As a User, I should sign up with my phone number, email, and password so that I can create an SMSPLOG account.
FR-2 — Login (explicit) As a User, I should log in so that I can access my protected SMSPLOG surfaces.
FR-3 — 16+ age requirement (explicit) As a User, I should confirm I am 16 or older so that I meet SMSPLOG's compliance requirement.
FR-4 — Phone number verification before buying (explicit) As a User, I should verify my phone number so that I am permitted to buy numbers.
FR-5 — Signup compliance warning (explicit) As a User, I should see the warning "numbers must not be used for fraud, spam or impersonation. ALL orders are logged. Account will be banned for illegal use." on signup so that I understand the compliance rules.
FR-6 — Terms page (explicit) As a User, I should read the Terms page so that I understand the rules of using SMSPLOG.
FR-7 — Wallet balance and deposit button on Home (explicit) As a User, I should see my wallet balance at the top of Home with a Deposit button so that I can add funds.
FR-8 — Mock Paystack deposit (explicit) As a User, I should deposit funds via a mocked Paystack flow so that my wallet is credited.
FR-9 — Service filter chips (explicit) As a User, I should filter numbers by service icons (WhatsApp, Telegram, Facebook, Signal, Instagram, Google/Gmail, TikTok, Twitter/X, Discord, Uber/Bolt, Amazon) so that I see only relevant numbers.
FR-10 — Country selector (explicit) As a User, I should select a country (USA, UK, Nigeria, Canada, Poland, Netherlands, Indonesia) so that I see numbers for that country.
FR-11 — Number list with naira prices and Buy button (explicit) As a User, I should see available numbers with prices in naira (e.g. "USA whatsapp -\x20\xe2\x82\xa6850", "UK telegram -\x20\xe2\x82\xa6600", "USA facebook -\x20\xe2\x82\xa61200") and a Buy button so that I can purchase.
FR-12 — Wallet deduction on purchase (explicit) As a User, I should have the purchase price deducted from my wallet when I buy so that payment is settled.
FR-13 — Active Number screen after buy (explicit) As a User, I should see a screen after buying with the phone number, service name, status "waiting for SMS", a 15-minute timer, an area to show the OTP, "cancel number (refund 70% if no SMS)", and "BUY another" so that I can receive and use the OTP.
FR-14 — OTP display (explicit) As a User, I should see the received OTP in the OTP area so that I can use it for verification.
FR-15 — Cancel number with 70% refund if no SMS (explicit) As a User, I should cancel a number and receive a 70% refund if no SMS was received so that I am not charged for a failed number.
FR-16 — Buy another (explicit) As a User, I should buy another number from the Active Number screen so that I can continue without leaving the flow.
FR-17 — My Orders with Active/Completed/Cancelled tabs (explicit) As a User, I should view My Orders with Active, Completed, and Cancelled tabs showing number, service, country, OTP received, time, and price so that I can review my history.
FR-18 — Wallet screen (explicit) As a User, I should view my Wallet with balance, deposit via Paystack, withdraw, and transaction history so that I can manage funds.
FR-19 — No negative balance (explicit) As a User, I should never have a negative wallet balance so that purchases are always funded.
FR-20 — Providers table and pricing logic (explicit) As an Admin, I should have a providers table (5sim.net / SMS-activate API mock) and set Base Cost + profit Margin (e.g. Base $0.50, sell for\x20\xe2\x82\xa61000) so that the system auto-calculates profit.
FR-21 — Mock provider getnumber call (explicit)
As the system, I should call the mock external API POST https://api.provider.com/getnumber (service, country) on purchase so that a number is returned.
FR-22 — SMS polling (explicit) As the system, I should poll for SMS after the number is returned so that the OTP is delivered to the user.
FR-23 — Admin Dashboard (explicit) As an Admin, I should see total users, total orders today, and profit today so that I can monitor the business.
FR-24 — Admin User Management (explicit) As an Admin, I should list users and ban a user so that I can enforce compliance.
FR-25 — Admin Number Management (explicit) As an Admin, I should add/edit services (WhatsApp, Signal, Telegram, Facebook, etc.) and set price per service per country so that the catalog is accurate.
FR-26 — Admin Orders Management (explicit) As an Admin, I should view all orders, manually input an OTP if needed, and refund so that I can resolve order issues.
FR-27 — Admin Provider Settings (explicit) As an Admin, I should set the API key for 5SIM and set markup % so that provider integration and pricing are configured.
FR-28 — Admin Transaction Logs (explicit) As an Admin, I should view all wallet activity so that I can audit transactions.
FR-29 — Admin-only access (explicit) As an Admin, I should have the Admin panel restricted to admins so that users cannot access it.
FR-30 — Seed data (explicit) As the system, I should seed 20 numbers for WhatsApp, Telegram, Facebook, and Signal so that the marketplace is populated on first run.
FR-31 — Mock provider with env-file API key (explicit) As the system, I should mock the SMS provider API but structure the code so a real API key can be added later in an env file so that the integration can go live without code changes.
FR-32 — Wallet deduction test (explicit) As the system, I should have a test for wallet deduction so that purchase settlement is verified.
FR-33 — One-tap copy (explicit) As a User, I should copy a number with one tap so that I can paste it into the target app.
FR-34 — Service logos as filter chips (explicit) As a User, I should see WhatsApp, Telegram, Facebook, and Signal logos as filter chips so that I can identify services quickly.
Product context: A 16+ verified customer in Nigeria who needs a virtual number to receive an OTP for an app. They are mobile-first, pay in naira, and expect a fast, honest flow: fund a wallet, pick a number, watch a countdown, copy the code.
Primary goal: Receive the OTP in time with a wallet balance that never goes negative.
Distinct accepted responsibilities: Sign up with phone, email, and password; confirm 16+; verify phone number; acknowledge the fraud/spam/impersonation warning and Terms; deposit funds via mocked Paystack; filter numbers by service and country; buy a number; watch the 15-minute waiting-for-SMS timer; read the received OTP; copy the number with one tap; cancel a number for a 70% refund when no SMS arrives; buy another number; review active/completed/cancelled orders and wallet transaction history.
Relevant inputs or decisions: Which service and country to filter by; whether to deposit more funds; whether to cancel or wait when no SMS arrives; whether to buy another number.
Interactions with other accepted participants: The User interacts with the mock SMS provider indirectly (the provider returns the number and the SMS); the User interacts with the mock Paystack deposit flow; the User's orders and wallet activity are visible to the Admin.
Observable success: OTP received within the 15-minute window; wallet balance never negative; order appears in the correct My Orders tab.
Product context: The SMSPLOG operator who runs the marketplace: pricing, orders, users, provider configuration, and wallet audit. They work from the same grid and dark-blue chrome as the customer app, with orange data accents.
Primary goal: Profitable, compliant order fulfillment with accurate pricing and provider configuration.
Distinct accepted responsibilities: View dashboard totals for users, orders today, and profit today; list and ban users; add/edit services and set price per service per country; view all orders; manually input an OTP when needed; issue refunds; configure provider API keys and markup percentage; review all wallet transaction logs.
Relevant inputs or decisions: Base cost and profit margin per provider; markup %; which users to ban; which orders need a manual OTP or refund.
Interactions with other accepted participants: The Admin acts on User accounts, orders, and wallet transactions; the Admin configures the provider integration that the system uses on the User's behalf.
Observable success: Accurate pricing, resolved orders, banned bad actors, and a clean transaction log.
POST https://api.provider.com/getnumber (service, country).The CREATIVE DIRECTION is authoritative for this section. Muse: Adham Dannaway. Headline: "Buy a number. Get the OTP. Move on."
Palette (light mode):
#FFFFFF#F4F6FA#0B1B3A#F26522#0B1B3A#5B6B85#E2E7F0Ratio roughly 60% white, 25% dark blue, 10% orange, 5% tint. Never orange text on dark blue below 18px — use white on #0B1B3A, and #0B1B3A on #F26522.
Typography:
Shape language: Precise 8-pt craft with a hard split. Cards and inputs use 12px radius, buttons 10px, filter chips full-pill. One hairline 1px #E2E7F0 border everywhere instead of shadows; the only shadow is 0 1px 0 rgba(11,27,58,0.06) under sticky bars. The signature shape is the split: a vertical seam (2px #0B1B3A) dividing hero, order-detail, and receipt panels into a white "surface" half and a dark-blue "engine" half, mirrored left/right on alternating sections.
Spacing rhythm: 8-pt base; mobile-first single column to 768px; at 1280px a 12-column grid with a 720px max reading measure.
Imagery style: The interface is the imagery. No stock photography, no 3D blobs. The dark half of each split carries a live "request panel" with monospace lines like POST /getnumber {service: "whatsapp", country: "USA"} → 200 {number: "+1 415 ••• 8842"} typed at 28ms/char, plus a small schematic of the poll loop. Service chips use real brand marks rendered as monochrome SVG silhouettes that take the accent colour when active. The OTP slot is a six-cell mono grid; empty cells are dashed hairlines, filled cells are solid dark blue with white digits.
The public entry (Landing) is a full-bleed split hero, not a centred SaaS block.
#0B1B3A, 45%): the request panel described above, with a real-looking number resolving into a phone-shaped card that bleeds off the right edge, and a 15:00 timer ring in orange at its base.This concept recomposes only accepted content, states, and controls: the headline, the wallet strip, the Deposit button, the provider request panel, the number card, and the timer ring.
Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: layered_2d
Landing Hero Motion Brief:
POST /getnumber) that transforms into a returned number and a 15:00 timer ring, ending in an OTP landing in the six-cell slot. The motion uses only accepted behaviour: the request panel types in, the number resolves, the timer ring pulses, and the OTP slot fills.#F26522 background for 220ms and swaps the icon to a check. No bounce, no parallax, no gradient drift.POST https://api.provider.com/getnumber (service, country).[Default — not specified by user].POST https://api.provider.com/getnumber (service, country).
PREVIEW ONLY — no provider request is runniPREVIEWFilters apply on the buy screen — availability and naira pricing are set per service and country.
Compliance
numbers must not be used for fraud, spam or impersonation. ALL orders are logged. Account will be banned for illegal use.
Read the compliance warning before you buy. Every order, request and OTP is recorded against your account.

PREVIEW ONLY — no provider request is runniPREVIEWFilters apply on the buy screen — availability and naira pricing are set per service and country.
Compliance
numbers must not be used for fraud, spam or impersonation. ALL orders are logged. Account will be banned for illegal use.
Read the compliance warning before you buy. Every order, request and OTP is recorded against your account.
No comments yet. Be the first!