Domain: bitmine.id Tagline: "Tambang Bitcoin & Staking Ethereum — Tanpa Ribet, Bayar Pakai QRIS" Model: Hash power aggregator + ETH staking pool proxy + simulation mode (paper trading) Stack: 100% Cloudflare (Worker + D1 + R2 + KV + DO + AI) Payments: Midtrans Snap (QRIS, GoPay, OVO, DANA, bank transfer) Language: Bahasa Indonesia (primary), English (toggle)
| Competitor | Language | Payment | Problem |
|---|---|---|---|
| NiceHash | English | Crypto only | Too technical, no IDR |
| Genesis Mining | English | Card/Crypto | Expensive, no local payment |
| ECOS | English | Card/Crypto | No Indonesian presence |
| StormGain | English | Crypto | Confusing UX |
| bitmine.id | Bahasa | QRIS/GoPay/OVO/Bank | Solves all of the above |
Users purchase hash power contracts. We aggregate through mining pools (Foundry/Antpool/ViaBTC). Daily BTC rewards deposited to user balance.
Basis: BTC ~$77K, difficulty 135.59T, block reward 3.125 BTC. 1 TH/s ≈ $0.0036/day ≈ IDR 57/day gross. Net after 15% fee ≈ IDR 48/day. Yields are estimates only and fluctuate with difficulty, price, and fees.
| Tier | Name | Hash Power | Duration | Price (IDR) | Est. Daily Yield (net) |
|---|---|---|---|---|---|
| Starter | Coba Dulu | 10 TH/s | 30 days | 150,000 | ~IDR 485/day |
| Basic | Penambang Pemula | 50 TH/s | 90 days | 700,000 | ~IDR 2,425/day |
| Pro | Penambang Pro | 200 TH/s | 180 days | 2,500,000 | ~IDR 9,700/day |
| Elite | Penambang Elite | 1,000 TH/s | 365 days | 11,000,000 | ~IDR 48,500/day |
| Custom | Kustom | 2,000+ TH/s | 365 days | Negotiated | Variable |
Fee structure:
Economics (transparent):
Users pool ETH for validator staking. We operate validators via Lido/RocketPool or direct staking. ~3.5-5% APY.
| Plan | Min Stake | Lock Period | Est. APY | Fee |
|---|---|---|---|---|
| Flexible | IDR 100,000 | None (withdraw anytime) | 2.0% | 10% of rewards |
| 30 Hari | IDR 100,000 | 30 days | 2.5% | 8% of rewards |
| 90 Hari | IDR 500,000 | 90 days | 3.0% | 6% of rewards |
| 365 Hari | IDR 2,000,000 | 365 days | 3.5-4.0% | 5% of rewards |
Note: APYs based on current ETH staking yield of 2-3% base + MEV boost. Actual yields fluctuate. "5%+ APY" is no longer realistic in 2026.
How it works:
HYIP-style multi-tier affiliate program. Commissions paid from platform's 15% maintenance fee — not from new deposits (sustainable, legal).
You (Sponsor)
├── Level 1: Direct referrals → 8% of platform fee
├── Level 2: Referrals of L1 → 3% of platform fee
└── Level 3: Referrals of L2 → 1% of platform fee
What "% of platform fee" means:
Example: 10 direct referrals, each with IDR 2M contract
| Level | People | Your Daily Commission |
|---|---|---|
| L1 (direct) | 10 | ~IDR 2,400/day |
| L2 (their refs) | 30 | ~IDR 2,700/day |
| L3 (L2's refs) | 90 | ~IDR 2,700/day |
| Total | 130 | ~IDR 7,800/day = IDR 234,000/month |
| Rank | Requirement | L1 | L2 | L3 | Bonus |
|---|---|---|---|---|---|
| Member | Sign up | 5% | 1% | — | — |
| Miner | 3+ active L1 referrals | 8% | 3% | 1% | — |
| Foreman (Mandor) | 10+ L1, total network ≥ IDR 10M | 8% | 3% | 1% | +1% L1 bonus |
| Supervisor | 30+ L1, network ≥ IDR 50M | 10% | 4% | 2% | Monthly hash power bonus |
| Director | 100+ L1, network ≥ IDR 200M | 12% | 5% | 2% | VIP support + exclusive plans |
| Ambassador (Duta) | 300+ L1, network ≥ IDR 1B | 15% | 6% | 3% | Revenue share + custom contracts |
Rank names use mining metaphors — feels organic, not MLM-ish.
| Commission | Trigger | Rate | Frequency |
|---|---|---|---|
| Mining commission | L1/L2/L3 mines BTC | 5-15% of platform fee | Daily (with rewards) |
| Staking commission | L1/L2/L3 earns staking | 5-15% of platform fee | Daily |
| Purchase bonus | L1 buys new contract | 3% of contract price (one-time) | Instant |
| Simulation convert bonus | L1 converts sim→real | IDR 5,000 flat | Instant |
| Rank-up bonus | You reach new rank | IDR 50K–500K (one-time) | On promotion |
bitmine.id/ref/{username} # Personal referral link
bitmine.id/ref/{username}?plan=pro # Deep link to specific plan
Auto-generated shareable content:
Total affiliate payout budget = 12% of gross maintenance fee (worst case, Ambassador level all 3 tiers)
Maintenance fee: 15% of mined BTC
Max affiliate payout: L1 15% + L2 6% + L3 3% = 24% of maintenance fee
= 24% × 15% = 3.6% of gross mining output
Platform keeps: 15% - 3.6% = 11.4% of gross mining
Electricity/pool cost: ~10% of gross mining
Net margin: ~1.4% of gross mining (at max affiliate load)
At average rank (Miner, not Ambassador): affiliate load is ~12% of maintenance fee = 1.8% of gross. Platform keeps 13.2% - 10% cost = 3.2% net margin. Sustainable as long as user base grows.
Safety rails:
Free cloud mining simulation using real market data. Users experience the full mining/staking lifecycle with virtual money before committing real IDR. This is the primary trust-building and onboarding funnel.
Day 0: Sign up → auto-start 1 TH/s simulation (free)
Day 1: WA message: "Selamat! Hari pertama kamu menghasilkan ~IDR 1,200 (simulasi)"
Day 3: Push notification: "Kamu sudah 'menambang' IDR 3,600. Mau coba yang asli?"
Day 7: Email/WA: "7 hari simulasi = IDR 8,400. Kontrak nyata mulai IDR 50,000"
Day 14: "Simulasi kamu berakhir dalam 16 hari. Upgrade sekarang, bonus 5% hash power!"
Day 25: "5 hari lagi simulasi berakhir. Jangan kehilangan momentum!"
Day 30: Simulation expires → "Mulai kontrak nyata" CTA
is_simulation BOOLEAN DEFAULT 0 columnFree content to build trust and SEO:
| Revenue Stream | Rate | Notes |
|---|---|---|
| Mining maintenance fee | 15% of mined BTC | Primary revenue |
| Staking commission | 5-10% of staking rewards | Secondary |
| IDR conversion spread | 1-2% on buy/sell | On deposits & withdrawals |
| Premium features | Fixed fee | Priority support, API access, advanced analytics |
| Partner ads | Variable | Crypto exchange referrals, hardware partners |
Cost breakdown (per $100 mining contract):
| Item | % of gross mining | Notes |
|---|---|---|
| User receives | 85% | After maintenance fee |
| Electricity + pool | 10% | Partner facility |
| Affiliate payout (avg) | 1.8% | 12% of maintenance fee at avg rank |
| Platform net | 3.2% | Pure margin |
Note: Midtrans fees (~0.7% QRIS, ~2% eWallet, IDR 4K flat for VA) apply to the initial contract purchase as a one-time cost, NOT to the ongoing mining revenue split above. At avg IDR 500K contract, Midtrans fee ≈ IDR 3,500-10,000 (absorbed into platform net or passed to user as "payment processing fee").
Unit economics at scale:
bitmine.id
├── CF Worker (bitmine-id-web) # Main app: SSR pages + API
├── D1 (bitmine_id_db) # Users, contracts, balances, transactions
├── R2 (bitmine-id-assets) # Static assets, KYC docs, receipts
├── KV (bitmine-id-sessions) # Auth sessions, rate limiting
├── KV (bitmine-id-cache) # Price cache, pool stats, market data
├── KV (bitmine-id-config) # Feature flags, plan configs
├── Durable Objects (MiningCoordinator) # Real-time hashrate, live dashboard
├── Queue (bitmine-id-payouts) # Payout processing queue
├── Queue (bitmine-id-rewards) # Daily reward distribution
├── Cron Triggers # Reward calc, price sync, pool sync
└── Workers AI # AI chat support, content gen
web/bitmine.id/worker-cf/
├── wrangler.toml
├── schema.sql # D1 schema
├── seed.sql # Initial data (plans, config)
├── src/
│ ├── index.js # Worker entry + route dispatcher
│ ├── lib/
│ │ ├── auth.js # Phone OTP + JWT sessions
│ │ ├── midtrans.js # Payment: Snap token, notification handler, Iris payout
│ │ ├── mining-pool.js # Pool API integration (hashrate, rewards)
│ │ ├── staking.js # ETH staking pool integration
│ │ ├── pricing.js # Dynamic pricing engine (BTC difficulty, FX)
│ │ ├── rewards.js # Daily reward calculation + distribution
│ │ ├── crypto-rates.js # BTC/ETH price feeds (CoinGecko free API)
│ │ ├── wa-otp.js # WhatsApp OTP via WA Business API
│ │ └── cache.js # KV cache helpers
│ ├── routes/
│ │ ├── auth.js # Login, register, OTP verify, profile
│ │ ├── mining.js # Browse plans, purchase, manage contracts
│ │ ├── staking.js # Stake, unstake, view rewards
│ │ ├── dashboard.js # User dashboard (SSR)
│ │ ├── wallet.js # Balance, deposit, withdraw, history
│ │ ├── payments.js # Midtrans Snap create/notification handlers
│ │ ├── simulation.js # Simulation: start, dashboard, leaderboard, convert
│ │ ├── affiliate.js # 3-tier affiliate: network tree, commissions, ranks, withdraw
│ │ ├── education.js # Articles, calculator, glossary (SSR for SEO)
│ │ ├── admin.js # Admin panel: users, contracts, payouts
│ │ └── api.js # Public API (rates, plans, stats)
│ ├── pages/ # HTML templates (SSR)
│ │ ├── landing.js # Homepage
│ │ ├── mining-plans.js # Plan listing + purchase flow
│ │ ├── staking.js # Staking interface
│ │ ├── dashboard.js # User dashboard
│ │ ├── wallet.js # Wallet & transactions
│ │ ├── article.js # Education articles
│ │ └── components/ # Shared: header, footer, nav, cards
│ └── cron/
│ ├── distribute-rewards.js # Daily: calculate + credit mining rewards
│ ├── sync-pool-stats.js # Hourly: fetch pool hashrate + blocks
│ ├── update-prices.js # Every 5min: BTC/ETH/IDR rates
│ ├── process-payouts.js # Every 6h: batch Midtrans Iris payouts
│ ├── expire-contracts.js # Daily: mark expired contracts
│ └── difficulty-adjust.js # Daily: recalculate plan pricing
└── web/ # Static frontend assets
├── css/
├── js/
└── images/
-- Users
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
phone TEXT UNIQUE NOT NULL,
phone_verified INTEGER DEFAULT 0,
email TEXT,
name TEXT,
password_hash TEXT,
affiliate_code TEXT UNIQUE, -- e.g. 'BUDI2026', auto-generated or custom
sponsor_id INTEGER REFERENCES users(id), -- who referred this user
kyc_status TEXT DEFAULT 'none', -- none, pending, verified, rejected
kyc_doc_r2_key TEXT,
btc_wallet_address TEXT,
eth_wallet_address TEXT,
role TEXT DEFAULT 'user', -- user, admin
created_at TEXT DEFAULT (datetime('now')),
last_login TEXT
);
-- Mining Plans (configurable)
CREATE TABLE mining_plans (
id INTEGER PRIMARY KEY AUTOINCREMENT,
slug TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
name_id TEXT NOT NULL, -- Bahasa Indonesia name
hash_power_ths REAL NOT NULL, -- TH/s
duration_days INTEGER NOT NULL,
price_idr INTEGER NOT NULL,
maintenance_fee_pct REAL DEFAULT 15.0,
is_active INTEGER DEFAULT 1,
sort_order INTEGER DEFAULT 0,
created_at TEXT DEFAULT (datetime('now'))
);
-- User Mining Contracts
CREATE TABLE mining_contracts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL REFERENCES users(id),
plan_id INTEGER NOT NULL REFERENCES mining_plans(id),
hash_power_ths REAL NOT NULL,
status TEXT DEFAULT 'pending', -- pending, active, expired, cancelled
start_date TEXT,
end_date TEXT,
total_mined_btc REAL DEFAULT 0,
total_mined_idr REAL DEFAULT 0,
is_simulation INTEGER DEFAULT 0, -- 1 = paper trading, 0 = real
payment_id INTEGER REFERENCES payments(id),
created_at TEXT DEFAULT (datetime('now'))
);
-- Simulation Leaderboard (materialized weekly)
CREATE TABLE simulation_leaderboard (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL REFERENCES users(id),
period TEXT NOT NULL, -- '2026-05' (monthly)
total_virtual_btc REAL DEFAULT 0,
total_virtual_idr INTEGER DEFAULT 0,
rank INTEGER,
badge TEXT, -- 'gold', 'silver', 'bronze'
converted_to_real INTEGER DEFAULT 0, -- tracked for funnel analytics
UNIQUE(user_id, period)
);
-- Staking Plans
CREATE TABLE staking_plans (
id INTEGER PRIMARY KEY AUTOINCREMENT,
slug TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
name_id TEXT NOT NULL,
lock_days INTEGER NOT NULL, -- 0 = flexible
min_amount_idr INTEGER NOT NULL,
apy_pct REAL NOT NULL,
commission_pct REAL NOT NULL, -- platform commission on rewards
is_active INTEGER DEFAULT 1,
sort_order INTEGER DEFAULT 0
);
-- User Staking Positions
CREATE TABLE staking_positions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL REFERENCES users(id),
plan_id INTEGER NOT NULL REFERENCES staking_plans(id),
amount_idr INTEGER NOT NULL,
amount_eth REAL NOT NULL,
eth_price_at_entry REAL NOT NULL,
is_simulation INTEGER DEFAULT 0,
status TEXT DEFAULT 'active', -- active, unstaking, completed
start_date TEXT DEFAULT (datetime('now')),
unlock_date TEXT, -- NULL for flexible
total_rewards_eth REAL DEFAULT 0,
total_rewards_idr REAL DEFAULT 0,
payment_id INTEGER REFERENCES payments(id)
);
-- Wallet Balances
CREATE TABLE wallets (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER UNIQUE NOT NULL REFERENCES users(id),
btc_balance REAL DEFAULT 0, -- from mining rewards
eth_balance REAL DEFAULT 0, -- from staking rewards
idr_balance INTEGER DEFAULT 0, -- pending withdrawal
sim_btc_balance REAL DEFAULT 0, -- simulation BTC
sim_eth_balance REAL DEFAULT 0, -- simulation ETH
sim_idr_balance INTEGER DEFAULT 1000000, -- starts with IDR 1M virtual
total_deposited_idr INTEGER DEFAULT 0,
total_withdrawn_idr INTEGER DEFAULT 0,
updated_at TEXT DEFAULT (datetime('now'))
);
-- Daily Mining Rewards
CREATE TABLE mining_rewards (
id INTEGER PRIMARY KEY AUTOINCREMENT,
contract_id INTEGER NOT NULL REFERENCES mining_contracts(id),
user_id INTEGER NOT NULL REFERENCES users(id),
date TEXT NOT NULL, -- YYYY-MM-DD
gross_btc REAL NOT NULL,
maintenance_fee_btc REAL NOT NULL,
net_btc REAL NOT NULL,
btc_price_usd REAL,
idr_equivalent INTEGER,
pool_block_height INTEGER,
created_at TEXT DEFAULT (datetime('now')),
UNIQUE(contract_id, date)
);
-- Daily Staking Rewards
CREATE TABLE staking_rewards (
id INTEGER PRIMARY KEY AUTOINCREMENT,
position_id INTEGER NOT NULL REFERENCES staking_positions(id),
user_id INTEGER NOT NULL REFERENCES users(id),
date TEXT NOT NULL,
reward_eth REAL NOT NULL,
commission_eth REAL NOT NULL,
net_eth REAL NOT NULL,
eth_price_usd REAL,
idr_equivalent INTEGER,
created_at TEXT DEFAULT (datetime('now')),
UNIQUE(position_id, date)
);
-- Payments (Midtrans Snap)
CREATE TABLE payments (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL REFERENCES users(id),
type TEXT NOT NULL, -- mining_purchase, staking_deposit, withdrawal
amount_idr INTEGER NOT NULL,
status TEXT DEFAULT 'pending', -- pending, paid, failed, refunded
payment_method TEXT, -- qris, gopay, ovo, dana, va_bca, va_bni, etc.
midtrans_order_id TEXT,
midtrans_snap_token TEXT,
midtrans_transaction_id TEXT,
reference_id TEXT, -- contract_id or position_id
created_at TEXT DEFAULT (datetime('now')),
paid_at TEXT
);
-- Withdrawals
CREATE TABLE withdrawals (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL REFERENCES users(id),
amount_idr INTEGER NOT NULL,
destination_type TEXT NOT NULL, -- bank, btc_wallet, eth_wallet
destination_detail TEXT NOT NULL, -- bank acc number or wallet address
bank_code TEXT,
status TEXT DEFAULT 'pending', -- pending, processing, completed, failed
midtrans_iris_id TEXT,
admin_note TEXT,
created_at TEXT DEFAULT (datetime('now')),
processed_at TEXT
);
-- Affiliate Network (3-tier tree)
CREATE TABLE affiliate_tree (
user_id INTEGER PRIMARY KEY REFERENCES users(id),
sponsor_id INTEGER REFERENCES users(id), -- L1 (direct upline)
sponsor_l2_id INTEGER REFERENCES users(id), -- L2 (sponsor's sponsor)
sponsor_l3_id INTEGER REFERENCES users(id), -- L3 (sponsor's sponsor's sponsor)
rank TEXT DEFAULT 'member', -- member, miner, foreman, supervisor, director, ambassador
total_l1_count INTEGER DEFAULT 0,
total_l2_count INTEGER DEFAULT 0,
total_l3_count INTEGER DEFAULT 0,
active_l1_count INTEGER DEFAULT 0, -- with active contracts
network_total_idr INTEGER DEFAULT 0, -- total network contract value
total_earned_idr INTEGER DEFAULT 0,
joined_at TEXT DEFAULT (datetime('now'))
);
-- Affiliate Commissions (daily, per-reward)
CREATE TABLE affiliate_commissions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
affiliate_id INTEGER NOT NULL REFERENCES users(id), -- who earns
source_user_id INTEGER NOT NULL REFERENCES users(id), -- whose activity generated it
level INTEGER NOT NULL, -- 1, 2, or 3
commission_type TEXT NOT NULL, -- mining_daily, staking_daily, purchase_bonus, convert_bonus, rank_bonus
source_id INTEGER, -- mining_rewards.id, staking_rewards.id, or payments.id
gross_fee_btc REAL, -- platform fee that commission is based on
commission_pct REAL NOT NULL, -- 5-15%
amount_btc REAL DEFAULT 0,
amount_idr INTEGER DEFAULT 0,
status TEXT DEFAULT 'pending', -- pending, credited, withdrawn
created_at TEXT DEFAULT (datetime('now'))
);
CREATE INDEX idx_aff_comm_affiliate ON affiliate_commissions(affiliate_id, status);
CREATE INDEX idx_aff_comm_date ON affiliate_commissions(created_at);
-- Affiliate Withdrawals
CREATE TABLE affiliate_withdrawals (
id INTEGER PRIMARY KEY AUTOINCREMENT,
affiliate_id INTEGER NOT NULL REFERENCES users(id),
amount_idr INTEGER NOT NULL,
destination_type TEXT NOT NULL, -- bank, ewallet
destination_detail TEXT NOT NULL,
bank_code TEXT,
status TEXT DEFAULT 'pending', -- pending, processing, completed, failed
midtrans_iris_id TEXT,
created_at TEXT DEFAULT (datetime('now')),
processed_at TEXT
);
-- Affiliate Rank History
CREATE TABLE affiliate_rank_history (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL REFERENCES users(id),
old_rank TEXT,
new_rank TEXT NOT NULL,
bonus_idr INTEGER DEFAULT 0, -- rank-up bonus
promoted_at TEXT DEFAULT (datetime('now'))
);
-- Education Articles (SEO)
CREATE TABLE articles (
id INTEGER PRIMARY KEY AUTOINCREMENT,
slug TEXT UNIQUE NOT NULL,
title TEXT NOT NULL,
title_en TEXT,
excerpt TEXT,
content TEXT NOT NULL, -- markdown
category TEXT, -- mining, staking, beginner, market, tutorial
cover_image TEXT,
meta_description TEXT,
published INTEGER DEFAULT 0,
view_count INTEGER DEFAULT 0,
created_at TEXT DEFAULT (datetime('now')),
updated_at TEXT
);
-- Price History (for charts)
CREATE TABLE price_history (
id INTEGER PRIMARY KEY AUTOINCREMENT,
asset TEXT NOT NULL, -- btc, eth
price_usd REAL NOT NULL,
price_idr REAL NOT NULL,
timestamp TEXT DEFAULT (datetime('now'))
);
-- Pool Stats (for transparency dashboard)
CREATE TABLE pool_stats (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pool_name TEXT NOT NULL,
total_hashrate_ths REAL,
blocks_found_24h INTEGER,
avg_block_reward_btc REAL,
timestamp TEXT DEFAULT (datetime('now'))
);
-- Audit Log
CREATE TABLE audit_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
action TEXT NOT NULL,
details TEXT,
ip_address TEXT,
created_at TEXT DEFAULT (datetime('now'))
);
-- Config (dynamic settings)
CREATE TABLE config (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
updated_at TEXT DEFAULT (datetime('now'))
);
| Trigger | Frequency | Job |
|---|---|---|
*/5 * * * * |
Every 5 min | update-prices — fetch BTC/ETH/IDR from CoinGecko |
0 * * * * |
Hourly | sync-pool-stats — fetch hashrate, blocks from pool API |
0 1 * * * |
Daily 01:00 UTC | distribute-rewards — calculate + credit mining/staking rewards |
0 7 * * * |
Daily 07:00 UTC | expire-contracts — mark expired mining contracts |
0 */6 * * * |
Every 6 hours | process-payouts — batch Midtrans Iris payouts for withdrawals |
0 2 * * 1 |
Weekly Monday | difficulty-adjust — recalculate plan pricing based on new difficulty |
0 2 * * * |
Daily 02:00 UTC | calc-affiliate-commissions — calculate L1/L2/L3 commissions from yesterday's rewards |
0 3 * * 1 |
Weekly Monday | check-rank-promotions — evaluate affiliate ranks, process rank-up bonuses |
0 */6 * * * |
Every 6 hours | process-affiliate-payouts — batch Midtrans Iris payouts for affiliate withdrawals |
User selects plan → POST /api/payments/create
├─ Creates payment record (status: pending)
├─ Calls Midtrans Snap API → createTransaction(order_id, amount, item_details)
├─ Returns snap_token → frontend opens Snap.js payment popup
│ (Snap handles all payment methods: QRIS, GoPay, OVO, DANA, BCA VA, etc.)
│
├─ User pays via QRIS / GoPay / OVO / Bank Transfer
│
└─ Midtrans notification → POST /webhooks/midtrans
├─ Verify SHA-512 signature (order_id + status_code + gross_amount + server_key)
├─ Check transaction_status: 'capture'/'settlement' = paid
├─ Update payment status → 'paid'
├─ If mining: activate contract, start hashrate
├─ If staking: create position, convert IDR→ETH at market rate
├─ Credit referral bonus (if referred)
└─ Send WA notification to user
Midtrans Snap advantage: One integration handles ALL payment methods. No separate code paths for QRIS, eWallet, VA. The Snap popup auto-detects available methods based on user's device and shows the best options first.
User requests withdrawal → POST /api/wallet/withdraw
├─ Validate: balance >= amount, min IDR 50,000
├─ KYC check: must be verified for > IDR 1,000,000
├─ Create withdrawal record (status: pending)
├─ Queue: bitmine-id-payouts
│
└─ Cron processes queue every 6h:
├─ Batch payouts via Midtrans Iris API (createPayout)
├─ Update status → 'completed' / 'failed'
└─ WA notification to user
bitmine.id/
├── / # Landing page (hero + plans + trust signals + CTA)
├── /tambang # BTC Mining plans listing
├── /tambang/:slug # Plan detail + purchase flow
├── /staking # ETH Staking plans listing
├── /staking/:slug # Staking plan detail + deposit flow
├── /kalkulator # Mining profitability calculator (SEO magnet)
├── /harga # Live BTC/ETH prices + charts
│
├── /simulasi # Simulation landing (explain + start free)
├── /simulasi/leaderboard # Simulation leaderboard (monthly)
│
├── /dashboard # User dashboard (overview of all contracts + rewards)
├── /dashboard/tambang # My mining contracts (real + simulation tabs)
├── /dashboard/staking # My staking positions (real + simulation tabs)
├── /dashboard/dompet # Wallet: balance, deposit, withdraw, history
├── /dashboard/afiliasi # Affiliate: network tree, commissions, ranks
├── /dashboard/afiliasi/tarik # Affiliate commission withdrawal
├── /ref/:code # Affiliate landing page (personalized)
├── /dashboard/profil # Profile, KYC upload, security settings
│
├── /akademi # Education hub (article listing)
├── /akademi/:slug # Article detail (SSR for SEO)
├── /glossary # Crypto glossary A-Z
├── /faq # FAQ page (with FAQPage schema)
│
├── /tentang # About us + team + transparency report
├── /transparansi # Live pool stats, hashrate proof, block explorer links
├── /syarat # Terms of service
├── /privasi # Privacy policy
├── /kontak # Contact + WA link
│
├── /api/v1/ # Public API (rates, plans, stats)
├── /llms.txt # AI agent discovery
├── /sitemap.xml # Dynamic sitemap
└── /admin # Admin panel (CF Access protected)
This is the #1 differentiator. Indonesian crypto users have been burned by scams.
/tambang-bitcoin-{city} — "Tambang Bitcoin di Jakarta/Surabaya/Bandung/..." (514 cities)/berapa-hasil-tambang-{x}-thash — "Berapa Hasil Tambang {X} TH/s?" (dynamic calculator)/perbandingan/{a}-vs-{b} — "Bitcoin vs Ethereum Mining" comparisons/harga-bitcoin-hari-ini — Daily updated price page (huge search volume)| Keyword | Search Vol (est) | Difficulty |
|---|---|---|
| "cloud mining bitcoin" | 5,400/mo | Medium |
| "tambang bitcoin" | 3,600/mo | Low |
| "staking ethereum" | 2,900/mo | Medium |
| "mining bitcoin gratis" | 8,100/mo | High |
| "cara menambang bitcoin" | 6,600/mo | Medium |
| "penghasilan mining bitcoin" | 1,900/mo | Low |
| "cloud mining terpercaya" | 1,300/mo | Low |
| "harga bitcoin hari ini" | 40,500/mo | High |
WhatsApp Communities — "Komunitas Penambang Indonesia" groups, max 1024 members each
TikTok / Reels — Short-form content
Simulation viral loop (the killer growth hack)
Referral viral loop
Telegram group — For crypto-native audience
IndexNow — Instant indexing for new articles/price pages
Cross-site via flio.net — Interlink with other portfolio sites
/llms.txt — Site purpose, product descriptions, FAQ answersPeringatan Risiko: Cloud mining dan staking cryptocurrency memiliki risiko tinggi
termasuk kehilangan seluruh modal. Hasil di masa lalu tidak menjamin hasil di masa
depan. bitmine.id bukan penasihat investasi. Lakukan riset sendiri sebelum berinvestasi.
| Metric | Month 1 | Month 3 | Month 6 | Month 12 |
|---|---|---|---|---|
| Registered users (simulation) | 2,000 | 15,000 | 50,000 | 150,000 |
| Simulation → Real conversion | 2.5% | 3% | 4% | 5% |
| Paying users | 50 | 450 | 2,000 | 7,500 |
| Avg contract value | IDR 200K | IDR 300K | IDR 400K | IDR 500K |
| Monthly revenue | IDR 10M | IDR 135M | IDR 800M | IDR 3.75B |
| Maintenance fee income | IDR 1.5M | IDR 20M | IDR 120M | IDR 562M |
| Staking commission | IDR 200K | IDR 5M | IDR 35M | IDR 150M |
| Monthly profit | IDR 1.7M | IDR 25M | IDR 155M | IDR 712M |
Simulation economics: Simulation users cost almost nothing to serve (same cron calculates rewards for real + virtual using real market data, no pool fees on virtual). The only cost is D1 storage (~$0.001/user/month). At 5% conversion, each simulation user is worth ~IDR 25,000 in LTV — far cheaper than paid acquisition.
| Item | Monthly Cost |
|---|---|
| Cloudflare (Workers Paid) | $5 |
| Mining pool partnership | Revenue share (included in maintenance fee) |
| Midtrans transaction fees | ~2.9% of GMV (QRIS 0.7%, eWallet 2%, VA IDR 4K flat) |
| WA Business API | IDR 500K |
| Content creation | IDR 2M |
| Customer support (1 person) | IDR 5M |
| Legal/compliance | IDR 3M (amortized) |
| Total fixed cost | ~IDR 11M/mo |
Goal: Launch simulation mode (free) + BTC cloud mining with Midtrans payments
/llms.txt, sitemap.xml, robots.txtNote: Simulation uses real BTC difficulty + price data to calculate virtual rewards. Real contracts also use pool averages initially while partner integration is finalized (clearly labeled as "estimated").
Goal: Connect to mining pools, distribute real rewards
Goal: Add staking product
Goal: 3-tier member-get-member affiliate system + programmatic SEO
/ref/:code)| Resource | Name | Purpose |
|---|---|---|
| Worker | bitmine-id-web |
Main app (SSR + API) |
| D1 | bitmine_id_db |
All relational data |
| R2 | bitmine-id-assets |
Images, KYC docs, receipts |
| KV | bitmine-id-sessions |
Auth sessions |
| KV | bitmine-id-cache |
Price feeds, pool stats |
| KV | bitmine-id-config |
Feature flags, plan configs |
| Queue | bitmine-id-payouts |
Withdrawal processing |
| Queue | bitmine-id-rewards |
Daily reward distribution |
| DO | MiningCoordinator |
Live counters, rate limiting |
| Cron | 7 triggers | See cron schedule above |
| Custom domain | bitmine.id, www.bitmine.id |
MIDTRANS_SERVER_KEY # Midtrans Server Key (sandbox/production)
MIDTRANS_CLIENT_KEY # Midtrans Client Key (for Snap.js frontend)
MIDTRANS_IRIS_KEY # Midtrans Iris API Key (payouts/disbursements)
WA_BUSINESS_TOKEN # WhatsApp Business API
COINGECKO_API_KEY # Price feeds (free tier OK)
MINING_POOL_API_KEY # Pool API access
ADMIN_PASSWORD # Admin panel auth
JWT_SECRET # Session signing
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| BTC price crash | Medium | High | Dynamic pricing, transparent disclaimers, staking as hedge |
| Mining difficulty spike | Medium | Medium | Weekly price recalculation, transparent fee display |
| Pool downtime | Low | High | Multi-pool failover, clear SLA communication |
| Regulatory crackdown | Medium | High | PSE registration, legal counsel, compliance-first design |
| Midtrans account suspension | Low | Critical | Keep reserve funds, comply with Midtrans TOS, backup payment provider (DOKU, Flip) |
| Scam reputation | High | Critical | Transparency dashboard, block explorer proofs, KYC, WA support |
| Competition | Medium | Medium | Indonesian language moat, local payments, education content |
Same native-app architecture as inihari.com (auto-hide header, bottom nav, glass cards, blur blobs, skeleton loading, pull-to-refresh), but with a crypto/mining identity: dark-default, amber/gold for BTC, indigo/purple for ETH.
:root, html.dark {
/* Backgrounds — near-black, subtle warm tint */
--bg-base: #0a0a0c;
--bg-card: #111114;
--bg-card-hover: #17171b;
--bg-elevated: #1c1c21;
--bg-input: #0d0d10;
--bg-sidebar: #0e0e11;
/* Borders */
--border: #222228;
--border-hover: #333340;
--border-accent: rgba(245, 158, 11, 0.3);
/* Text */
--text-primary: #fafafa;
--text-secondary: #a0a0ab;
--text-muted: #666675;
--text-inverse: #0a0a0c;
color-scheme: dark;
}
html.light {
--bg-base: #f9f9fb;
--bg-card: #ffffff;
--bg-card-hover: #f2f2f5;
--bg-elevated: #eaeaef;
--bg-input: #ffffff;
--bg-sidebar: #f2f2f5;
--border: #dde0e6;
--border-hover: #ccd0d8;
--border-accent: rgba(217, 119, 6, 0.2);
--text-primary: #1a1a2e;
--text-secondary: #4a5060;
--text-muted: #888898;
--text-inverse: #fafafa;
color-scheme: light;
}
:root {
/* Primary: Amber/Gold — Bitcoin identity, wealth, trust */
--accent: #f59e0b;
--accent-light: #fbbf24;
--accent-dark: #d97706;
--accent-glow: rgba(245, 158, 11, 0.15);
--accent-glow-strong: rgba(245, 158, 11, 0.3);
/* Secondary: Indigo — ETH staking, technology, depth */
--secondary: #6366f1;
--secondary-light: #818cf8;
--secondary-dark: #4f46e5;
--secondary-glow: rgba(99, 102, 241, 0.15);
/* Financial indicators */
--profit: #22c55e; /* Green — gains, active, success */
--profit-glow: rgba(34, 197, 94, 0.15);
--loss: #ef4444; /* Red — losses, errors, warnings */
--loss-glow: rgba(239, 68, 68, 0.15);
--neutral: #eab308; /* Yellow — pending, caution */
/* Product-specific */
--btc: #f7931a; /* Official Bitcoin orange */
--btc-glow: rgba(247, 147, 26, 0.15);
--eth: #627eea; /* Official Ethereum blue */
--eth-glow: rgba(98, 126, 234, 0.15);
/* Simulation mode */
--sim: #f97316; /* Orange — clearly different from real */
--sim-glow: rgba(249, 115, 22, 0.15);
/* Affiliate ranks */
--rank-member: #64748b;
--rank-miner: #f59e0b;
--rank-foreman: #f97316;
--rank-supervisor: #ef4444;
--rank-director: #a855f7;
--rank-ambassador: #fbbf24;
/* Gradients */
--gradient-start: #f59e0b; /* Gold */
--gradient-mid: #f97316; /* Orange */
--gradient-end: #ef4444; /* Red — energy/power */
/* ETH gradient */
--gradient-eth-start: #627eea;
--gradient-eth-mid: #6366f1;
--gradient-eth-end: #818cf8;
}
@theme inline {
--font-sans: "Inter", system-ui, -apple-system, sans-serif;
--font-mono: "JetBrains Mono", ui-monospace, monospace;
}
html { font-size: 14px; }
| Element | Size | Weight | Color |
|---|---|---|---|
| Page title | 20px | 700 | --text-primary |
| Section header | 15px | 700 | --text-primary |
| Card title | 14px | 600 | --text-primary |
| Body text | 14px | 400 | --text-secondary |
| Label/caption | 12px | 500 | --text-muted |
| Badge text | 11px | 600 | varies |
| Data number (large) | 24-32px | 700 | --accent / --profit |
| Monospace data | 13px | 400 | --font-mono |
.glass-card {
background: var(--bg-card);
border: 1px solid var(--border);
border-radius: 12px; /* slightly more rounded than inihari's 8px — more app-like */
transition: border-color 0.2s ease;
}
.glass-card:hover { border-color: var(--border-hover); }
/* Active mining contract card — subtle gold border glow */
.mining-card-active {
background: var(--bg-card);
border: 1px solid rgba(247, 147, 26, 0.3);
border-radius: 12px;
box-shadow: 0 0 20px rgba(247, 147, 26, 0.05);
}
/* Staking position card — subtle ETH blue glow */
.staking-card-active {
background: var(--bg-card);
border: 1px solid rgba(98, 126, 234, 0.3);
border-radius: 12px;
box-shadow: 0 0 20px rgba(98, 126, 234, 0.05);
}
/* Simulation card — orange dashed border */
.sim-card {
background: var(--bg-card);
border: 2px dashed rgba(249, 115, 22, 0.4);
border-radius: 12px;
position: relative;
}
.sim-card::after {
content: "SIMULASI";
position: absolute;
top: 8px;
right: 8px;
font-size: 9px;
font-weight: 700;
letter-spacing: 0.1em;
padding: 2px 6px;
border-radius: 4px;
background: var(--sim-glow);
color: var(--sim);
}
┌──────────────────────────┐
│ ⛏ Hashrate │
│ ████████████░░░ 78.3% │
│ 50 TH/s aktif │
└──────────────────────────┘
--btc fill color.num-profit { color: var(--profit); font-family: var(--font-mono); }
.num-loss { color: var(--loss); font-family: var(--font-mono); }
.num-btc { color: var(--btc); font-family: var(--font-mono); }
.num-eth { color: var(--eth); font-family: var(--font-mono); }
┌─────────────────────────────────┐
│ ⛏ Tambang │ 📊 Dashboard │ 👥 Afiliasi │ 👤 Profil │
└─────────────────────────────────┘
/* Mining pulse — subtle gold glow on active contracts */
@keyframes mining-pulse {
0%, 100% { box-shadow: 0 0 0 0 rgba(247, 147, 26, 0.2); }
50% { box-shadow: 0 0 12px 4px rgba(247, 147, 26, 0.1); }
}
/* Staking spin — slow rotate on staking icon */
@keyframes staking-spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
/* Reward credited — green flash on balance update */
@keyframes reward-flash {
0% { background: transparent; }
20% { background: var(--profit-glow); }
100% { background: transparent; }
}
/* Background blobs — same as inihari, gold/orange tint */
.blob-1 {
width: 600px; height: 600px;
background: var(--accent);
opacity: 0.06;
filter: blur(120px);
}
.blob-2 {
width: 500px; height: 500px;
background: var(--secondary);
opacity: 0.04;
filter: blur(120px);
}
.skeleton {
background: linear-gradient(90deg,
var(--bg-elevated) 25%,
var(--bg-card-hover) 50%,
var(--bg-elevated) 75%);
background-size: 200% 100%;
animation: shimmer 1.5s infinite;
border-radius: 8px;
}
overscroll-behavior-y: contain — prevent pull-to-refresh on Chrome Android-webkit-tap-highlight-color: transparent — no blue flash on tapscroll-snap-type: x mandatory — carousel snapenv(safe-area-inset-*) — notch safetyfont-size: 16px on inputs — prevent iOS zoomAuto-generate thousands of long-tail pages to capture Indonesian crypto search traffic. Each page template is SEO-optimized with structured data, internal linking, and AI-generated content.
URL pattern: /kalkulator/bitcoin/{hashrate}-ths and /kalkulator/bitcoin/{budget}-rupiah
Examples:
/kalkulator/bitcoin/10-ths → "Berapa Penghasilan Mining 10 TH/s Bitcoin?"/kalkulator/bitcoin/500000-rupiah → "Hasil Mining Bitcoin dengan Modal IDR 500.000"/kalkulator/ethereum/staking-1000000-rupiah → "Hasil Staking Ethereum Modal IDR 1 Juta"Variations: 50+ hashrate values × 2 (BTC + ETH) = 100+ pages
Content structure:
Schema: FAQPage + HowTo + Product
URL pattern: /harga/{coin}/hari-ini and /harga/{coin}/prediksi-{period}
Examples:
/harga/bitcoin/hari-ini → "Harga Bitcoin Hari Ini dalam Rupiah" (40K+ searches/mo)/harga/ethereum/hari-ini → "Harga Ethereum Hari Ini dalam Rupiah"/harga/bitcoin/prediksi-2026 → "Prediksi Harga Bitcoin 2026"Variations: 10 coins × 5 periods = 50+ pages
Content:
Schema: Product + FAQ
URL pattern: /tambang-bitcoin/{city}
Examples:
/tambang-bitcoin/jakarta → "Cloud Mining Bitcoin di Jakarta — Mulai dari IDR 50.000"/tambang-bitcoin/surabaya → "Tambang Bitcoin Online di Surabaya"/tambang-bitcoin/bandung → "Staking & Mining Crypto di Bandung"Variations: Top 100 Indonesian cities = 100 pages
Content:
Schema: LocalBusiness + FAQPage + Product
URL pattern: /perbandingan/{a}-vs-{b}
Examples:
/perbandingan/mining-vs-staking → "Mining vs Staking: Mana yang Lebih Menguntungkan?"/perbandingan/bitcoin-vs-ethereum → "Mining Bitcoin vs Staking Ethereum 2026"/perbandingan/bitmine-vs-nicehash → "bitmine.id vs NiceHash: Perbandingan Lengkap"/perbandingan/cloud-mining-vs-beli-asic → "Cloud Mining vs Beli ASIC: Mana Lebih Untung?"Variations: 20-30 comparison pairs = 30 pages
Content:
Schema: FAQ + ComparisonTable (custom)
URL pattern: /akademi/{slug}
Categories: mining, staking, beginner, advanced, market, security, tax
Pillar content (manually curated, AI-assisted):
Supporting articles (AI-generated, human-reviewed):
Total: 100+ education pages
URL pattern: /tanya/{slug}
Examples:
/tanya/berapa-minimal-investasi-mining-bitcoin → community Q&A/tanya/apakah-cloud-mining-aman → expert + community answers/tanya/cara-tarik-hasil-mining-ke-bank-bca → practical Q&AHow it works:
Content per page:
Schema: QAPage
Total: 200+ seed Q&A pages, growing organically
1. Keyword Research (monthly)
├── Google Autocomplete API → "mining bitcoin" suggestions
├── Ahrefs/SEMrush free data → volume estimates
└── Competitor content gap analysis
2. Content Generation (via cron)
├── Dynamic pages: calculator, price, city → auto-generated from data
├── Articles: Llama 3.3 70B via Workers AI → draft in Bahasa
├── Human review queue → admin panel approval
└── Published → IndexNow ping
3. Content Refresh (weekly cron)
├── Update all price pages with latest data
├── Recalculate all calculator outputs
├── Refresh "hari ini" date-sensitive content
└── Check for stale articles → flag for update
Every page links to 5-7 related pages:
Calculator page → Related calculators + relevant article + Q&A + plans page
Article page → Related articles + calculator + Q&A + plans page
Q&A page → Related Q&As + relevant article + calculator
City page → Plans + calculator + relevant article + Q&A
Price page → Calculator + plans + related articles
Plans page → Calculator + relevant articles + Q&A + city pages
Cross-site via flio.net: Link to/from other portfolio sites:
| Page Type | Schema |
|---|---|
| Homepage | Organization + WebSite + Product (plans) |
| Mining plans | Product + AggregateOffer |
| Calculator | HowTo + FAQPage |
| Article | Article + FAQPage + BreadcrumbList |
| Q&A | QAPage + BreadcrumbList |
| Price | Product + FAQPage |
| City | LocalBusiness + FAQPage + Product |
| Comparison | FAQPage + BreadcrumbList |
| Template | Count | Growth |
|---|---|---|
| Calculator | 100+ | Static (update data) |
| Price tracking | 50+ | Add coins over time |
| City landing | 100+ | Add cities |
| Comparison | 30+ | Add pairs |
| Education articles | 100+ | +10/month |
| Q&A community | 200+ | +50/month organic |
| Total | 580+ | Growing |
| Month | Action | Expected Impact |
|---|---|---|
| 1 | Launch 100 calculator + 50 price + 10 pillar articles | Index 160 pages |
| 2 | Add 100 city pages + 30 comparisons + 50 Q&A seeds | Index 340 more |
| 3 | Add 50 glossary articles + 100 Q&A seeds + IndexNow all | 500+ indexed |
| 4 | First organic Q&A submissions, refresh all content | 600+ pages |
| 5 | Backlink campaign (GitHub, npm, Archive.org) | DA growth |
| 6 | "harga bitcoin hari ini" ranking attempt + TikTok content | Traffic inflection |
| 9 | Featured snippets for "apa itu mining" queries | Authority established |
| 12 | 1,000+ pages, 50+ organic Q&As/month | Sustainable SEO moat |
/llms.txt — bitmine.id is Indonesia's BTC cloud mining + ETH staking platform.
Products: cloud mining contracts, ETH staking, simulation mode.
Key pages: /tambang, /staking, /simulasi, /kalkulator, /akademi, /tanya
API: /api/v1/ (rates, plans, stats)
/llms-full.txt — Auto-generated dump of all plans, pricing, FAQ answers,
education articles, Q&A content. Updated daily by cron.
PFAK (Pedagang Fisik Aset Kripto) — Crypto Physical Trader License:
PSE (Penyelenggara Sistem Elektronik):
SIUPL (Direct Selling License) for Affiliate Program:
VERDICT: No PFAK needed (not an exchange). PSE required (easy). SIUPL possibly required for affiliate (consult lawyer). Cloud mining itself = gray zone.
| Tax | Rate | Applies To |
|---|---|---|
| PPh (Income Tax) | Standard rates (5-35%) | Mining income, platform revenue |
| PPN (VAT) | NOT applicable (PMK 50/2025) | Crypto asset transfers treated like securities, exempt from VAT |
| PPh 22 on crypto transactions | 0.1% | Of transaction value (previously applied, may change under OJK) |
Key change: PMK 50/2025 eliminates VAT on crypto transfers — this is GOOD for bitmine.id (lower user costs).
Sources:
| Metric | Value | Source |
|---|---|---|
| Registered crypto users | 20+ million (end 2025) | OJK/Bappebti |
| Q1 2025 transaction volume | IDR 109.29 trillion (~$6.9B) | ICN |
| Licensed platforms | 19 PAKD-licensed | OJK |
| Permitted tokens | 1,444 | OJK |
| Crypto tax revenue (to Feb 2025) | IDR 126.4 billion | DJP |
| User citizenship | 99.7% Indonesian | Bappebti |
| YoY growth (users) | ~35% from 2023→2024 | Bappebti |
| 72% of exchanges | Still unprofitable despite 20M users | BitcoinEthereumNews |
Market insight: 20M users but 72% of exchanges are unprofitable = the market is crowded for exchanges but EMPTY for value-add services like cloud mining. This is the gap.
Sources:
| Parameter | Current Value |
|---|---|
| Bitcoin Price | ~$77,220 USD |
| Mining Difficulty | 135.59 T |
| Block Reward | 3.125 BTC (post-halving April 2024) |
| Revenue per TH/s per day | ~$0.0036 USD = ~IDR 57 |
| Revenue per 10 TH/s per day | ~$0.036 USD = ~IDR 570 |
| Revenue per 50 TH/s per day | ~$0.18 USD = ~IDR 2,850 |
| Revenue per 390 TH/s per day (top ASIC) | $13.96 USD (before electricity) |
| Electricity cost at $0.05/kWh | ~$8.66/day for 390 TH/s |
| Net profit (390 TH/s) | $5.30/day (37.99% margin) |
Our plan says: 1 TH/s for 30 days = IDR 50,000, est. daily yield ~IDR 1,200/day Reality: 1 TH/s produces ~IDR 57/day gross, ~IDR 48/day after 15% fee
THE PLAN'S YIELD ESTIMATES ARE OFF BY 20x. At current difficulty, 1 TH/s cannot possibly yield IDR 1,200/day. The real yield is IDR 48-57/day.
To earn IDR 1,200/day, you'd need ~21 TH/s — which at current ASIC costs would require an IDR 50K contract to have a much lower hash rate, OR the pricing must be adjusted to reflect reality.
| Tier | Hash Power | Duration | Realistic Price | Real Daily Yield (net) |
|---|---|---|---|---|
| Starter | 10 TH/s | 30 days | IDR 150,000 | ~IDR 485/day |
| Basic | 50 TH/s | 90 days | IDR 700,000 | ~IDR 2,425/day |
| Pro | 200 TH/s | 180 days | IDR 2,500,000 | ~IDR 9,700/day |
| Elite | 1,000 TH/s | 365 days | IDR 11,000,000 | ~IDR 48,500/day |
Note: These yields fluctuate daily with difficulty, BTC price, and fees. Must be clearly labeled "estimasi, bukan jaminan."
| Parameter | Current Value |
|---|---|
| Base staking APY | 2-3% APY |
| With MEV-Boost | 4-5.69% APY |
| Lido fee | 10% of rewards |
| RocketPool fee | 14% of rewards |
Our plan says: 3.0-5.0% APY — This is realistic for 2026 staking yields. Staking economics check out.
Key risk: ETH staking yield has been declining (was 4-5% in 2024, now 2-3% base). Our "5% APY for 365-day lock" may be aggressive. Recommend capping at 4% APY for long-term plans.
Sources:
Sources:
| Criterion | Pyramid Scheme | bitmine.id Affiliate | Status |
|---|---|---|---|
| Income source | New member deposits | Platform maintenance fees | SAFE |
| No product = no commission? | Commission even without product | Zero commission if no mining activity | SAFE |
| Focus | Recruitment above all | Product (mining/staking) primary | SAFE |
| Tiers | Unlimited depth | Max 3 levels | SAFE |
| Commission cap | None (exponential) | Max IDR 10M/month | SAFE |
| SIUPL required? | N/A (illegal) | Possibly — consult APLI | CHECK |
VERDICT: Our 3-tier affiliate is legally defensible because commissions derive from platform revenue (maintenance fees on actual mining), not from new member deposits. However:
Sources:
Xendit was initially planned but EXPLICITLY PROHIBITS cryptocurrency businesses ("Bitcoin and other cryptocurrencies" is listed as prohibited). Switched to Midtrans instead.
Midtrans crypto policy: Midtrans does NOT explicitly list cryptocurrency in its prohibited business categories. Their prohibited list covers: illegal drugs, pornography, gambling, counterfeit products, government-prohibited items, dangerous goods, swipe-for-cash, and Ponzi schemes. Cryptocurrency is absent from this list.
Key distinction: bitmine.id is NOT a crypto exchange. Users pay IDR for cloud mining contracts (a service). The Midtrans transaction is a standard IDR service purchase. BTC rewards come from mining pools on the backend, not from Midtrans. This positions the platform as a SaaS vendor, not a crypto business.
Midtrans products used:
Risk: The catch-all clause "Products or services that are prohibited by the Indonesian Government" could theoretically apply if OJK classifies cloud mining as an illegal financial product. Mitigation: get written confirmation from Midtrans merchant onboarding team before launch, describing the business model clearly.
Backup payment processors (if Midtrans declines):
Sources:
| Risk | Severity | Likelihood | Mitigation | Residual Risk |
|---|---|---|---|---|
| Yield estimates were 20x too high | CRITICAL | CONFIRMED | Corrected in plan. Use real calculator data. | LOW (fixed) |
| Regulatory gray zone | HIGH | MEDIUM | PSE registration, legal counsel, OJK consultation | MEDIUM |
| Scam perception | HIGH | HIGH | Transparency dashboard, team identity, pool proofs, risk disclaimers | MEDIUM |
| Midtrans crypto policy | LOW | LOW | Get written confirmation from Midtrans onboarding | LOW (resolved — crypto not in prohibited list) |
| SIUPL requirement for affiliate | MEDIUM | MEDIUM | Consult APLI, get legal opinion | MEDIUM |
| BTC difficulty spike | MEDIUM | MEDIUM | Weekly repricing, transparent communication | LOW |
| ETH APY decline | MEDIUM | HIGH | Cap at 4%, adjust plans quarterly | LOW |
| Competition from licensed exchanges | MEDIUM | LOW | Different product (mining, not trading) | LOW |
| Mining pool partner risk | HIGH | LOW | Multi-pool setup, SLA agreements | MEDIUM |
| Factor | Assessment | Decision |
|---|---|---|
| Market size | 20M+ crypto users, #3 globally, 335% YoY growth | GO |
| Competition | Near-zero in cloud mining for Indonesia | GO |
| Regulatory | No KBLI code, no licensing path, OJK sandbox likely required | BLOCKER |
| Capital requirement | IDR 100 billion (~$6.2M) if classified as PAKD | BLOCKER |
| Mining economics | 1 TH/s = $0.036/day — micro-contracts not viable | REDESIGN NEEDED |
| Staking economics | 2-3% APY realistic but razor-thin margins | MARGINAL |
| Trust environment | Cloud mining = #1 scam category. PT SAI shut down Q4 2024 | HIGH RISK |
| Payment rails | Midtrans does NOT prohibit crypto — resolved | GO |
| Affiliate legality | 3-tier on financial products = close to pyramid territory | HIGH RISK |
| Technical feasibility | 100% CF stack proven across portfolio | GO |
The original business model (selling cloud mining contracts directly to Indonesian consumers) faces 4 remaining regulatory blockers (payment rail blocker resolved via Midtrans). Proceeding as planned risks:
bitmine.id as crypto mining/staking education hub + affiliate to licensed platforms
Phase 1 (Immediate, 0 risk): Launch bitmine.id as Indonesia's #1 crypto mining/staking education platform with programmatic SEO, calculators, Q&A community, and affiliate links to licensed exchanges. This captures the market, builds brand authority, and generates revenue from day 1 with ZERO regulatory risk.
Phase 2 (6-12 months): Once brand authority is established and regulatory landscape clarifies, pursue Option C (licensed exchange partnership) to offer actual mining/staking products through a compliant partner.
Phase 3 (If regulations evolve): If OJK creates a specific framework for mining services, apply for own license leveraging established brand and user base.
This approach builds the entire SEO moat, brand recognition, and user base NOW while avoiding all regulatory blockers. The programmatic SEO engine (580+ pages), education content, and community become the sustainable competitive advantage — even if the mining product model changes.
CRITICAL ACTION: Fix the pricing/yield estimates before any public-facing content goes live. The original estimates were off by 20x and publishing them would be misleading and potentially illegal under consumer protection law.
This domain MUST operate within these constraints — no exceptions:
If the plan above describes any flow that violates these constraints, treat the plan as ASPIRATIONAL only and rework before building. The constraint trifecta wins.
Ask AI to research, improve, or generate content.
Try: "Research competitors for this niche"