Download the Markdown source

PoolScout v0.4.0 PRD

Field Value
Version Draft 1.5
Date 12 November 2026 (UTC+7)
Owner King (Fomo), product owner
Author LP Hunter
Status Draft for review. Build starts only on King’s explicit go-ahead.
Baseline Backend v0.3 (Node 22, TypeScript, Hono, SQLite) on King’s Windows PC; Chrome MV3 side-panel extension v0.3.1 (React, TypeScript, Vite), deployed.
Scope Meteora only: DLMM and DAMM v2 on Solana. PumpSwap stays disabled.

1. Summary, goals and non-goals

PoolScout v0.4.0 turns the v0.3 radar and copy tool into a complete, self-custodial LP workstation for Meteora DLMM and DAMM v2. It closes the feature gap with LP Agent (Discover, token safety, create pool, a full open-positions view, portfolio stats, copy-quality controls, share cards) and doubles down on what LP Agent does not offer: keys that never leave the user’s PC, Telegram and WhatsApp alerts, a demo mode with virtual SOL, a named wallet tracker and new-pool alerts. It also adds a web app that pairs with the installed extension, and a mobile app (Expo, Android and iOS) that pairs with the user’s backend, so all signing stays local and the key never lives on a phone or a hosted server.

Goals

  1. Reach parity with LP Agent on the core LP loop: find a safe token, pick or create its pool, open, manage and close a position, and share the result.
  2. Make self-custody the visible product promise: private-key-only onboarding, key encrypted on the user’s PC, no hosted signer, explicit arming of copy.
  3. Raise copy quality: fee-checked leaders, Meme Protection, fund-loss pause, per-wallet limits and Copy Logs that explain every skip.
  4. Give a full open-positions view: range, composition, fees, PnL breakdown, bins, activity, and claim, add and close actions.
  5. Lower the learning cost with demo mode (virtual SOL, real prices) and keep safe defaults (copy master OFF, dry run ON).
  6. Ship Telegram and WhatsApp alerts for position, copy and new-pool events.
  7. Offer a web app that pairs with the extension, plus public no-login pages, without moving keys or signing to a server.
  8. Offer a mobile app (Expo, Android and iOS from one codebase) that is UI only: it pairs with the user’s local backend or self-hosted VPS, reuses the approved compact design system, and never holds a private key.

Non-goals

2. Positioning vs competitors

Capability PoolScout v0.4.0 LP Agent Krystal / OnlyFarm
Custody Key encrypted on the user’s PC, never sent to a server Turnkey agent wallet in the cloud; restricted automation key OnlyFarm: a vault per agent (vault program) plus an operator key that can trade but cannot withdraw; only the user’s wallet withdraws. Krystal: wallet-connect plus EIP-712 orders executed by a Krystal Operator
Runs when the PC is off PC mode: no. Self-hosted always-on mode (planned, P0): yes, on the user’s own VPS Yes. Copy, TP/SL, rebalance and compound run 24/7 Yes. Operator and agents run in the cloud; OnlyFarm checks exit rules every 30 s
Copy landing speed About 1 s detection via Helius stream; Jito bundles with dynamic priority fees planned (P0), normal RPC fallback Claims 90% of copies land within 3.5 s via Jito bundles No latency claim found. OnlyFarm agents act on a heartbeat (10 or 30 min) plus a 30 s exit loop; Krystal Solana zaps use Jito by default
Venues Meteora DLMM and DAMM v2 Meteora DLMM and DAMM v2; Uniswap v3/v4 on Robinhood Chain OnlyFarm: Solana, Meteora DLMM and DAMM v2 only (PumpSwap listed for research). Main Krystal app: 10 EVM chains; current marketing no longer lists Solana
Notifications Telegram and WhatsApp (WAHA) Browser/PWA push and in-app chimes; no Telegram or WhatsApp documented Krystal Telegram bot and community groups; possible web push; no WhatsApp found
Demo / paper mode Yes, virtual SOL with real prices (planned) Not found in docs OnlyFarm dry run (one heartbeat, nothing sent) and 7-day rule backtest; no virtual-balance mode
Named wallet tracker Yes, custom names with separate notify and copy toggles (planned) Partial: any-wallet lookup and copy labels Not found. Krystal Top Wallets lookup; OnlyFarm Smart Follow uses up to 3 wallets as signals
New-pool alerts Yes, filtered, to Telegram and WhatsApp (planned) Partial: New and No Pool lists; no new-pool notifications Partial: agents can screen new pools; no new-pool push channel documented
Safe defaults Copy master OFF, dry run ON Meme Protection and fund protection on by default OnlyFarm: missing data never passes screening; copied agents start paused; non-refundable bin-array rent off by default
Discover, safety, create pool Planned in v0.4.0 Shipped Hot Pools with filters, fee and IL simulation, 2 to 4 pool compare; OnlyFarm safety from Jupiter, RugCheck and DexScreener with rugged-token auto-exit; create pool not found
Fee-checked Smart LP Planned in v0.4.0 Shipped (fees under 10% of profit are hidden) Top Wallets and strategy leaderboard; OnlyFarm Smart LP list with a 30-day record; no fee-checked filter documented
Pricing Free today; fee model open (King’s decision) 8% of LP fees on automated close/claim; 0.1% on manual add/remove; no subscription OnlyFarm: 10% of claimed fees and rewards (9% with a referral code), no deposit, withdrawal or swap cut, pays agent network fees. Krystal: 10% of vault rewards, 2% auto-compound/harvest, 0.01 to 0.25% action fees, 0.1% swap
API / MCP No Paid API ($20 lifetime, $40 and $80 per 30 days), CLI and MCP Krystal Cloud API (paid units), CLI and MCP; OnlyFarm agent API

Krystal / OnlyFarm: OnlyFarm is the Krystal team’s Solana product for Meteora DLMM and DAMM v2 (public beta since 10 Nov 2026) and is the direct peer. The main Krystal app no longer lists Solana.

Competitor facts come from /workspace/lpagent-research/report.md, /workspace/lpagent-research/krystal-report.md and the screenshots in /workspace/lpagent-research/screens/ (research date 12 November 2026). Competitor figures are company claims.

2a. Competitive strategy

Approved by King. Sequencing: items 1, 2 and 7 first to reach parity (M1), then items 5 and 6 to win (M2). Item 3 follows in M3; item 4 stays King’s decision.

Strategy Priority Phase
1. Close the 24/7 gap without giving up self-custody P0 Parity (M1)
2. Landing speed P0 Parity (M1)
3. Self-custody messaging and trust P1 Depth (M3)
4. Pricing strategy Decision Launch, then Gated
5. Ship-first differentiators P0 Win (M2)
6. Go-to-market: own the Indonesian Meteora community first P1 Win (M2)
7. Copy-quality parity P0 Parity (M1)

1. Close the 24/7 gap without giving up self-custody

Wired into: Feature spec Self-hosted always-on mode (P0, M1); NFR Reliability and Security; Risks.

2. Landing speed

Wired into: Feature spec Jito landing and priority fees (P0, M1); Success metrics.

3. Self-custody messaging and trust

Wired into: Feature spec Trust: security page and open-source decision (P1, M3); Open questions.

4. Pricing strategy

Wired into: Section 5 Monetization; Open questions; Gated milestone.

5. Ship-first differentiators

Wired into: Demo mode, Wallet Tracker, Create pool and PnL card v2 move to M2 as P0; New pool alerts in M2.

6. Go-to-market: own the Indonesian Meteora community first

Wired into: Feature spec Indonesian locale and community (P1, M2); Referral (P2, M4).

7. Copy-quality parity

Wired into: Copy quality (P0, M1); fee-checked filter and rugged-token exit ship in M1.

3. Personas and key journeys

Personas

Persona Context Needs
King, the operator Runs the backend on a Windows PC in Indonesia (UTC+7). Farms Meteora DLMM daily, follows top LPs, wants fast alerts on his phone and full control of his key. Reliable copy with clear skip reasons, positions at a glance, Telegram and WhatsApp alerts, share cards for his community.
The learner New to DLMM bins, strategies and Auto Range. Afraid of losing SOL while learning. Demo mode with virtual SOL, plain-language safety checks, dry run before anything real.
The follower Wants to copy proven LPs with small size and strict limits. Fee-checked leaderboard, named tracker, per-wallet limits, Meme Protection, fund-loss pause.
The early LP Hunts new tokens with volume but no Meteora pool yet. New-pool and No Pool alerts, safety check, one-tap Create pool with clear rent costs.

Key journeys

First run to first live position

  1. Install extension and start backend (one-click pairing)
  2. Try demo mode with virtual SOL, or import a private key
  3. Quick setup: Telegram/WhatsApp, dry run ON, SOL per position
  4. Fund a small amount via the Deposit sheet (QR)
  5. Open a position in dry run, review the result
  6. Turn dry run OFF in Risk settings and open live

New token to own pool

  1. New-pool or No Pool alert arrives on Telegram
  2. Open the token in Discover and read the safety sheet
  3. No Meteora pool yet: tap Create pool
  4. Choose DLMM or DAMM v2, fee and bin step, review rent
  5. Create with optional seed liquidity, signed locally
  6. Turn on Auto range and share a PnL card later

Leader to copy

  1. Open Smart LP with the fee-checked filter on
  2. Compare win rate, EV, average age and monthly PnL
  3. Track the wallet with a custom name, notify ON
  4. Enable copy for that wallet in dry run with per-wallet limits
  5. Read Copy Logs for would-copy and skip reasons
  6. Arm live copy when satisfied

Position out of range

  1. Out-of-range alert arrives
  2. Open the position: range view, composition and PnL breakdown
  3. Let Auto range rebalance, or claim fees and close
  4. Share the closed result as a Landscape or Square card

Web app with the extension

  1. Open the PoolScout web app and browse public pages without login
  2. Tap Connect extension; a pairing code and QR appear
  3. Approve the code in the extension; the extension signs the challenge with the hot wallet
  4. Use portfolio and position screens on the web; every action is confirmed in the extension
  5. Unpair from either side, or let the session expire

Mobile app with the user’s backend

  1. Install PoolScout from the store or an EAS build
  2. Scan the pairing QR shown in the extension or on the backend (VPS HTTPS or a secure tunnel)
  3. Browse positions and portfolio on the phone; the key stays on the PC or VPS
  4. Receive a push when a position is out of range, hits TP/SL or is flagged rugged
  5. Confirm a claim or close in the app; the backend signs; unpair from Paired devices

4. Feature specifications

Feature Priority Milestone
Create pool (DLMM and DAMM v2) P0 M2
Discover upgrade P1 M3
Pools filters P1 M3
Token safety check P0 M1
New pool alerts P1 M2
Wallet Tracker P0 M2
Smart LP leaderboard upgrade P1 M3 (fee-checked filter in M1)
Portfolio stats, PnL/Fee chart and calendar P1 M3
Open positions UI P0 M1
Copy quality P0 M1
Auto Range and TP/SL (refine) P1 M3 (rugged-token exit in M1)
Demo mode P0 M2
PnL card v2 editor and share P0 M2
Referral (UI and tracking only) P2 M4
Self-hosted always-on mode (VPS) P0 M1
Jito landing and priority fees P0 M1
Trust: security page and open-source decision P1 M3
Indonesian locale and community P1 M2
Pre-open simulation P1 M2
Daily recap via Telegram and WhatsApp P1 M2
Token watchlist P1 M2
Copy backtest P1 M2
Web app paired with the extension P1 M4
Mobile app (Expo, Android and iOS) P1 M5

API gaps for the positions UI (found earlier): Composition split (SOL and token amounts and percentages) per position. IL breakdown (fees vs price change vs network and rent). Bin distribution with the active bin (DLMM). Activity timeline (opened, claimed, rebalanced, added, closed) with tx links. All four are covered by the new GET /positions/:id/detail endpoint (see 4.9).

4.1 Create pool (DLMM and DAMM v2) (P0, M2)

Create a Meteora DLMM or DAMM v2 pool for any token pair, with optional seed liquidity, signed locally with the hot wallet.

Mockups: /workspace/poolscout-mockup/create-pool/ (0-entry-pools, a-type, b0-no-pool, b0b-invalid-mint, b-pair, c-dlmm-settings, d-damm-settings, e-liquidity, f-review, g-success)

User stories

Functional requirements and UI

  1. Entry points: Pools tab button, Discover No Pool row, token page empty state (b0-no-pool).
  2. Pair step: paste or search base mint; quote SOL or USDC; validate mint (b0b-invalid-mint); run the token safety check inline.
  3. DLMM: preset list from @meteora-ag/dlmm (bin step + base fee); create with createLbPair2 or createCustomizablePermissionlessLbPair2; optional activation time; dynamic fee flag.
  4. DAMM v2: fee tiers 0.25, 0.3, 1, 2, 4 and 6%; optional fee scheduler (linear over 24 h or exponential over 2 h); create with createPool or createCustomPool.
  5. Initial price defaults to the market price (Jupiter); warn when more than 5% away, block when more than 20% away.
  6. Duplicate check: derive the pool address; if it exists, show Open existing pool instead of Create.
  7. Seed liquidity (optional): SOL only, token only or both; strategy Spot, Curve or Bid-Ask; range presets ±5/10/20%; max 69 bins per position.
  8. Review shows cost lines: pool accounts (non-refundable), bin arrays (non-refundable), position rent (refundable), network and priority fee, total, and the number of transactions.
  9. Rent preview: every new bin array the seed position needs is listed with its cost and marked non-refundable before signing; refundable and non-refundable totals are shown separately.
  10. Dry run simulates every transaction and shows the would-be pool address; demo mode creates a virtual pool.
  11. Success screen with pool address, Solscan and Meteora links, Add liquidity, Turn on Auto range.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.2 Discover upgrade (P1, M3)

A token-first Discover view with preset tabs, safety, and Open pool or Create pool on every row.

Mockups: /workspace/poolscout-mockup/copy/radar.png (current Radar, v0.3); /workspace/poolscout-mockup/create-pool/b0-no-pool.png (No Pool state); New mockup needed for the tab strip and token rows

User stories

Functional requirements and UI

  1. Tabs: Trending, New, Graduated, Top Fee/TVL, Rising fees, Smart money in, No Pool.
  2. Time window: 5M, 1H, 6H, 24H.
  3. Row: circular token logo, symbol, age, price and 24h change, market cap, holders, volume, liquidity, Fee/TVL, safety badge, pool count.
  4. Row action: Open pool (best pool by Fee/TVL) or Create pool when the token has no Meteora pool.
  5. Hide risky toggle (32x18) hides Risky and Unknown-safety tokens.
  6. Smart money in uses PoolScout’s own watched and tracked wallets (holdings, events).
  7. Data cached in SQLite and refreshed every 60 s; the list shows Updated N s ago.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.3 Pools filters (P1, M3)

Filter the Pools table by protocol, base fee, bin step, TVL, Fee/TVL, volume and organic score.

Mockups: /workspace/poolscout-mockup/copy/pools-open.png (current Pools); /workspace/poolscout-mockup/safety/s1-pools-safety-chip.png; New mockup needed for the filter sheet

User stories

Functional requirements and UI

  1. Filter sheet: protocol (DLMM, DAMM v2), quote (SOL, USDC), base fee range, bin step list, min TVL, min Fee/TVL by window, min 24h volume, min Jupiter organic score, safety level.
  2. Sort: Fee/TVL (default), volume, TVL, age.
  3. Active filters shown as soft chips; Reset clears all.
  4. Filters persist per device.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.4 Token safety check (P0, M1)

A three-level safety result (Safe, Caution, Risky, plus Unknown) on every token, used in Pools, Discover, open, create pool and copy filters.

Mockups: /workspace/poolscout-mockup/safety/ (s1-pools-safety-chip, s2-open-position-safe, s3-safety-sheet-safe, s4-safety-sheet-risky, s5-open-position-risky, s6-copy-settings-skip-risky)

User stories

Functional requirements and UI

  1. Checks: mint authority, freeze authority, Token-2022 extensions (transfer fee, permanent delegate, transfer hook), top-10 holders excluding pools and burn, liquidity depth, RugCheck report, Jupiter verified and organic tags.
  2. Level rules: any critical flag gives Risky; any warning gives Caution; Safe only when every source answered and no flag fired.
  3. Unknown is its own state and is never shown as Safe; a source that is down shows as unknown in the sheet.
  4. Missing data never passes: any safety check, pool filter or copy token filter whose data is missing or stale counts as not passed (the token or pool is skipped and the reason is logged).
  5. Rugged-token monitor: tokens held in open positions are re-checked on RugCheck every 5 min (proposal); a rugged result triggers the auto-exit rule in Auto Range and TP/SL.
  6. Sheet lists each check with its value, the sources and the check age; View on RugCheck link.
  7. Open and create pool on a Risky token need an extra confirm; copy settings has Skip Risky (default ON) and Skip Caution (default OFF).
  8. Results cached 10 min; mint and freeze authority re-checked before every live open.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.5 New pool alerts (P1, M2)

Filtered alerts for new Meteora pools, volume spikes and high Fee/TVL, in a Radar list and on Telegram and WhatsApp.

Mockups: /workspace/poolscout-mockup/alerts/ (a1-radar-new, a2-alert-filters, a3-telegram-alert)

User stories

Functional requirements and UI

  1. Sources: Meteora pool creation for DLMM and DAMM v2 (Helius logs subscription on program IDs, with an API poll fallback).
  2. Filters: min TVL, min Fee/TVL over the last hour, pool types, quote token, exclude Risky (default ON), exclude Caution.
  3. Also alert on: 1h volume at least 5x the 6h average; existing pools above 2%/h Fee/TVL.
  4. Delivery: max alerts per hour, extra alerts grouped into one summary; channels Telegram and WhatsApp; quiet hours in UTC+7; Send test alert.
  5. Message: pair, protocol, fee and bin step, TVL, Fee/TVL, safety level, links to Meteora and PoolScout.
  6. The same detection pipeline powers the Token watchlist (kind watchlist), which bypasses these filters for watched mints.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.6 Wallet Tracker (P0, M2)

Paste any wallet, give it a custom name, and choose to be notified and/or to copy it; rename or remove anytime.

Mockups: /workspace/poolscout-mockup/wallet-tracker/ (h-tracked-list, h2-leaderboard-star, i-add-wallet, i2-add-duplicate, i3-add-invalid, j-edit-wallet, k-tracked-profile)

User stories

Functional requirements and UI

  1. Wallets tab segments: Leaderboard and Tracked.
  2. Add: paste address, validate, show Meteora positions in the last 30 days, name up to 24 characters, Notify toggle, Copy toggle (uses Risk settings and dry run).
  3. Edit: rename, toggles, remove with confirm; removing stops copy of new positions but does not close open copies.
  4. Tracked list: initials avatar, name, short address, tier if ranked, open count, 24h PnL, copying tag.
  5. Live activity feed limited to tracked wallets.
  6. Profile page reuses the wallet profile with calendar.
  7. Simulate copy (Copy backtest) is offered on add, edit and the first time Copy is turned on.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.7 Smart LP leaderboard upgrade (P1, M3 (fee-checked filter in M1))

Add a fee-checked filter and richer stats so leaders are chosen for LP skill, not token pumps.

Mockups: /workspace/poolscout-mockup/wallet-tracker/h2-leaderboard-star.png; /workspace/poolscout-mockup/copy/wallet-profile.png; New mockup needed for the stat columns and filter sheet

User stories

Functional requirements and UI

  1. Fee-checked filter (default ON): hide wallets whose LP fees are under 10% of profit (threshold editable). Ships early in M1 as part of copy-quality parity; the copy engine also refuses leaders that fail it unless the user overrides.
  2. Columns: PnL, win rate, EV per position, average age, average invested, monthly PnL, fees, last active; period switch 7D, 30D, ALL.
  3. Warning badge when the average hold is under 18 minutes.
  4. Default filters: active in the last 7 days, minimum positions, minimum win rate (editable).
  5. Keep existing tiers S, A, B and the score; show the score breakdown.
  6. Star to track (Wallet Tracker).
  7. Simulate copy on each card opens the Copy backtest for 7D or 30D.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.8 Portfolio stats, PnL/Fee chart and calendar (P1, M3)

Headline stats, a PnL or Fee chart by day, week or month, and the calendar, for the user’s wallet and any tracked wallet.

Mockups: /workspace/poolscout-mockup/copy/pnl-calendar.png; /workspace/poolscout-mockup/demo/d4-demo-portfolio.png; /workspace/poolscout-mockup/pnl-card/e3-entry-my-pnl-month.png

User stories

Functional requirements and UI

  1. Stats: net worth, closed positions, win rate, average invested, fees, total profit, average monthly profit, EV.
  2. Chart: PnL or Fee; Daily, Weekly, Monthly; SOL or USD.
  3. Calendar: green and red days; tap a day for its positions and a share entry.
  4. Filters: protocol, Manual vs Copy vs Auto, Hide small PnL.
  5. CSV export of closed positions.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.9 Open positions UI (P0, M1)

A full list and detail view for open positions with range, composition, fees, PnL breakdown, bins, automation and activity, plus claim, add and close.

Mockups: /workspace/poolscout-mockup/positions/ (p1-positions-list, p2-detail-in-range, p3-detail-out-of-range, p4-close-sheet, p5-add-liquidity-sheet, p6a-claim-confirm, p6b-claim-success-toast, p7-empty)

User stories

Functional requirements and UI

  1. List: pair with circular logos, plain-text type label (DLMM or DAMM v2), source (Manual, Copy of name, Auto), value, PnL in green or red, in-range state, age.
  2. Range view modes: Price, Percent to edges, and 24h chart with the range band.
  3. Liquidity view: bin distribution with the active bin marked (DLMM).
  4. Composition: SOL and token amounts with the percentage split.
  5. Fees: Fee/TVL rate, unclaimed, claimed, total earned; daily percentage rate (DPR) estimate.
  6. PnL breakdown: fees, price change (IL), network and rent, net; labelled Estimated.
  7. Automation summary with Edit (Auto range, TP, SL, claim interval).
  8. Activity timeline: opened, fees claimed, rebalanced, added, closed, with tx links.
  9. Actions: Claim fees (confirm and success toast), Add liquidity sheet, Close sheet (claim fees, swap back to SOL option).
  10. Rent preview on open, add and rebalance: refundable position rent and any new non-refundable bin arrays are shown before signing, with the bins that need them.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.10 Copy quality (P0, M1)

Controls that stop bad copies: Meme Protection, fund-loss pause, per-wallet limits, token filters and Copy Logs with skip reasons.

Mockups: /workspace/poolscout-mockup/copy/copy-settings.png (v0.3 settings); /workspace/poolscout-mockup/safety/s6-copy-settings-skip-risky.png; /workspace/poolscout-mockup/copy/copy-feed.png; New mockup needed for Copy Logs and per-wallet limits

User stories

Functional requirements and UI

  1. Meme Protection (default ON): skip when more than 95% of the deposit would sit in the non-SOL token.
  2. Fund-loss pause (default ON, 20% of starting copy capital, editable): pause new opens and adds when closed-copy losses from peak hit the limit; exits still follow the leader; notify.
  3. Per-wallet limits: copy %, max SOL per position, max open positions, daily SOL cap, strategy filter (Spot, Curve, Bid-Ask, DAMM v2).
  4. Token filters: min organic score, min market cap, min 24h volume, min holders, skip Risky, blacklist; missing data never passes a filter.
  5. Min leader hold-time warning (under 18 minutes average).
  6. Copy Logs (7 days): every detected leader action with result Copied, Would copy (dry run), Skipped or Failed, the reason, latency, and a fix button (e.g. Raise limit, Allow strategy).
  7. Low balance pause: pause opens when the balance is below the next position plus reserve.
  8. Copy-quality parity bundle for M1 (Competitive strategy item 7): this spec plus the fee-checked filter (Smart LP leaderboard upgrade), rugged-token exit (Auto Range and TP/SL) and Jito landing.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.11 Auto Range and TP/SL (refine) (P1, M3 (rugged-token exit in M1))

Refine the shipped automation: clearer editor, USD or SOL targets, per-position overrides and a visible rebalance history.

Mockups: /workspace/poolscout-mockup/positions/p2-detail-in-range.png (Automation block); /workspace/poolscout-mockup/copy/open-position-advanced.png

User stories

Functional requirements and UI

  1. Keep the 15 s monitor; Auto range after N minutes out of range (default 10), direction up, down or both, max 8 rebalances per day, min gap 30 min.
  2. Fee-coverage gate for DLMM Auto range (default ON, 100%): rebalance only when fees earned over the recent window cover the estimated swap cost plus any new non-refundable bin-array rent; otherwise hold and log Not covered.
  3. Rugged-token auto-exit (default ON): when the rugged-token monitor flags a token in an open position, close the position, claim fees and swap back to SOL, then notify; exit wins over rebalance when both fire. Ships early in M1 as part of copy-quality parity.
  4. TP and SL in percent, SOL or USD, measured on value plus fees against entry.
  5. Defaults for new manual positions (off by default) and for copies.
  6. Rebalance and exit events appear in the activity timeline and in notifications.
  7. Show a banner when the backend was offline and automation could not run.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.12 Demo mode (P0, M2)

A separate practice account with virtual SOL and real prices. Nothing is signed or sent.

Mockups: /workspace/poolscout-mockup/demo/ (d1-welcome-try-demo, d2-demo-settings, d3-copy-demo, d4-demo-portfolio, d5-reset-demo)

User stories

Functional requirements and UI

  1. Entry from onboarding (Try demo) and More.
  2. Persistent DEMO badge in the header; all actions route to the simulator.
  3. Virtual starting balance set by the user (default 10 SOL, a proposal).
  4. Simulated: open and close, auto-copy, create pool, Auto range, TP/SL; fees and PnL estimated from live pool data, the same way as dry run.
  5. Separate positions, PnL and calendar; Reset closes every demo position and restores the balance.
  6. Real wallet and dry-run history are never touched.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.13 PnL card v2 editor and share (P0, M2)

Terminal-style share cards in Landscape 1600x900 and Square 1080x1080, customizable, shared via clipboard and X or Telegram intents.

Mockups: /workspace/poolscout-mockup/pnl-card-v2/ (v1-share-sheet-landscape, v2-customize-background, v3-customize-columns-details, v4-customize-loss-square, v5-share-to-x-with-referral, cards/)

User stories

Functional requirements and UI

  1. Formats: Landscape 1600x900 and Square 1080x1080 only.
  2. Layout: black background, brand lockup top left, referral top right, big token name, large SOL profit (green for profit, red for loss), Invested / Position / PnL columns with USD in brackets, light-streak art.
  3. Customize: background, columns (deposited, withdrawn, current value, PnL %, fees), details (pool line, date and time in UTC+7, wallet address), referral link; choices saved as the default.
  4. Sources: open position, closed position, day, month.
  5. Share: copy PNG to clipboard, save PNG, open X or Telegram intent with prefilled text (intents cannot carry images).
  6. Unverifiable token logos render as a letter badge.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.14 Referral (UI and tracking only) (P2, M4)

Referral code, link, friends list and history. Rewards stay disabled until a fee model exists.

Mockups: /workspace/poolscout-mockup/referral/ (r1-referral-home, r2-referral-friends, r3-reward-history, r4-claim-sheet, r5a-enter-code-applied, r5b-enter-code-own-code). Rates in the mockups are sample terms only.

User stories

Functional requirements and UI

  1. Code identity bound to a wallet signature; one code per wallet; one applied code per wallet within 7 days of install.
  2. Link format <domain>/r/<CODE> (domain to be decided).
  3. Friends list with joined and active counts; history list.
  4. Claim UI hidden or disabled with a note until rewards launch.
  5. Self-referral blocked (r5b-enter-code-own-code).
  6. Optional referral line on PnL cards.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.15 Self-hosted always-on mode (VPS) (P0, M1)

Run the same PoolScout backend 24/7 on the user’s own VPS, installed in one step. The key stays encrypted on the user’s server; PoolScout runs no servers for it. PC mode stays supported.

Mockups: New mockups needed: Backend mode chooser (PC or Server), server pairing screen, backend health card, offline banner

User stories

Functional requirements and UI

  1. Installer: one command on a fresh Ubuntu 22.04 or 24.04 VPS (about $5 per month, 1 vCPU and 1 GB RAM, an estimate) that installs Docker (or a Node 22 systemd service), the backend, a reverse proxy and the watchdog.
  2. Keystore: the private key is generated on the server or imported in the server terminal (poolscout key import, read from stdin, never echoed); it is encrypted with the server’s master key exactly as on the PC. Extension key import is disabled for remote backends by default.
  3. Transport: HTTPS with an automatic TLS certificate on the user’s own (sub)domain, or a secure tunnel; the backend binds to localhost behind the proxy.
  4. Auth: the installer prints a pairing token and QR once; the extension and web app pair with it (X-PoolScout-Token), and the token can be rotated with poolscout token rotate.
  5. Firewall: only 443 open (plus SSH with key-only login); fail2ban or equivalent recommended; automatic security updates on.
  6. Health: GET /health with uptime, RPC status, stream status, last copy, version; the extension shows a Backend health card.
  7. Heartbeat and down alerts: Docker or systemd restart policy; a watchdog sends Telegram and WhatsApp alerts on crash or restart; the extension alerts when /health misses 3 checks; an optional user-owned external uptime monitor can poll /health.
  8. Mode chooser in More › Backend: PC (localhost) or Server (URL plus token); one active backend per wallet so two backends never sign for the same key.
  9. Updates: poolscout update pulls a signed release and restarts with a health check and rollback on failure.
  10. Restart reconciliation as in NFR Reliability: missed exits first, then automation, then a summary alert.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.16 Jito landing and priority fees (P0, M1)

Land copy opens, closes and claims faster with Jito bundles and dynamic priority fees, with a normal RPC fallback and user-set tip caps.

Mockups: /workspace/poolscout-mockup/copy/copy-settings.png (settings home; new Landing rows needed); New mockup needed for the latency breakdown in Copy Logs

User stories

Functional requirements and UI

  1. Send copy open, close and claim as Jito bundles (transaction plus tip) through a Jito block engine; manual actions can opt in.
  2. Dynamic priority fee from recent prioritization fees (Helius priority-fee estimate), clamped by a max priority fee setting.
  3. Settings: Landing mode (Jito with RPC fallback, RPC only), tip per bundle cap (default 0.0001 SOL, a proposal), daily tip budget, max priority fee.
  4. Fallback: when a bundle has not landed within a few slots or the block engine errors, resend through normal RPC once; never double-execute (same blockhash and idempotency check).
  5. Record each stage in Copy Logs: leader slot and time, detected, built, sent, landed, path (Jito or RPC), tip and priority fee.
  6. Target p50 from leader tx to our landed tx: 2 s or less (an estimate to validate in M1 on real data).

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.17 Trust: security page and open-source decision (P1, M3)

Make the self-custody promise visible and checkable: a plain-language security page, the tagline, and a decision on open-sourcing the backend.

Mockups: New mockups needed: More › Security page, onboarding trust line, web security page

User stories

Functional requirements and UI

  1. Tagline idea: Your key never leaves your machine. No vault, no operator key.
  2. Security page (extension More › Security and a public web page): where the key lives (PC or own VPS), encryption, what the backend can and cannot do, what data leaves the machine, safe defaults, how to remove the wallet.
  3. Onboarding shows the tagline and links the page.
  4. Open-source decision (King): options are fully open source, source-available (read-only license), or closed with a published security note.
  5. Trade-offs, pro: users and auditors can verify no key leaves the machine; stronger trust than vault and operator-key competitors; community fixes.
  6. Trade-offs, con: easier forks and clones; fee logic can be stripped from forks if a fee model ships; more support load; secrets hygiene in the repo.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.18 Indonesian locale and community (P1, M2)

Win the Indonesian Meteora community first: an Indonesian UI option, Indonesian guides and a Telegram group. English stays the default.

Mockups: New mockup needed: language setting in More

User stories

Functional requirements and UI

  1. i18n layer in the extension and web app; English is the default and source locale; Indonesian is an added locale chosen in More › Language.
  2. All strings, error messages and notifications externalised; Telegram and WhatsApp messages follow the chosen locale.
  3. Guides in Indonesian: setup (PC and VPS), demo mode, copy safety, create pool; English versions remain canonical.
  4. An Indonesian PoolScout Telegram group linked from More.
  5. Referral launches here once the fee model exists.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.19 Pre-open simulation (P1, M2)

Before opening, estimate daily fees and IL risk for the chosen pool, amount, range and strategy from pool volume and volatility. Every figure is labelled Estimate.

Mockups: Basis: /workspace/poolscout-mockup/copy/open-position.png, copy/open-position-advanced.png, copy/calculator-open.png; new mockup needed for the simulation panel

User stories

Functional requirements and UI

  1. Inputs: pool, amount, strategy (Spot, Curve, Bid-Ask), range (bins or price); DAMM v2 uses its own price range or full range.
  2. Data: 24h and 7d volume, base and dynamic fee, liquidity per bin around the active bin (DLMM), TVL, and realised volatility from 24h and 7d price history.
  3. Outputs: estimated fees per day (low, mid, high), daily percentage rate, probability of staying in range over 24 h, estimated IL at each range edge and at a one-sigma move, break-even days, and rent (refundable and non-refundable).
  4. Every output carries an Estimate label and a one-line method note; nothing is shown as a promise.
  5. Updates live as the user drags the range or changes the amount; a narrow vs wide comparison row.
  6. Shown in Open position, Add liquidity, Create pool seed step and Demo mode.
  7. Confidence level Low when the pool has under 24 h of data or volume is concentrated in a few trades.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.20 Daily recap via Telegram and WhatsApp (P1, M2)

A daily summary message: the day’s PnL, fees claimed, positions out of range and automation actions, sent at a time the user chooses, in the user’s language.

Mockups: Basis: /workspace/poolscout-mockup/alerts/a3-telegram-alert.png (message style); new mockups needed for recap settings and the recap message preview

User stories

Functional requirements and UI

  1. Content: realised PnL and change in unrealised PnL for the day (SOL and USD), fees claimed, open positions and which are out of range, automation actions (rebalances, TP and SL hits, rug exits, copies opened, closed and skipped), wallet balance, and a link to share the day as a PnL card.
  2. Settings: on or off, send time (default 21:00 UTC+7, a proposal), channels (Telegram, WhatsApp), sections to include, skip when there was no activity.
  3. Language follows the locale setting (English default, Indonesian optional).
  4. Demo mode and dry run get their own clearly labelled recap when active.
  5. Preview in Settings and Send test.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.21 Token watchlist (P1, M2)

Add a token mint and get notified as soon as a new Meteora DLMM or DAMM v2 pool appears for it, with a safety summary. Uses the New pool alerts pipeline.

Mockups: New mockups needed: watchlist list, add token sheet, watchlist alert message

User stories

Functional requirements and UI

  1. Add by pasting a mint or from Discover and token pages (star); optional label; per-token notify toggle and channels.
  2. Detection reuses New pool alerts (pool creation logs for DLMM and DAMM v2, poll fallback); watchlist matches bypass the global TVL and Fee/TVL filters because the user asked for this token.
  3. Alert content: pair, protocol, bin step and fee, TVL, creator if known, safety level with the top flags, links to Open pool and Meteora.
  4. Safety summary follows the safety rules: Unknown is never shown as Safe; missing data never passes.
  5. List shows each token with its current Meteora pool count and last alert time; if pools already exist, they are listed and new ones still alert.
  6. Burst protection: several pools for the same token within 10 min are grouped into one alert.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.22 Copy backtest (P1, M2)

Before enabling copy, simulate what would have happened if you had copied a wallet for the last 7 or 30 days with your sizing and filters. Clearly marked as a simulation.

Mockups: New mockups needed: Simulate copy entry on wallet cards and profile, backtest result screen

User stories

Functional requirements and UI

  1. Entry points: Smart LP cards, wallet profile, Wallet Tracker add and edit sheets, and the first time the Copy toggle is turned on for a wallet.
  2. Period 7D or 30D; uses the leader’s historical positions (open and close times, pool, range, strategy) from Meteora data.
  3. Applies the user’s current settings: copy % and max per position, total cap, max open positions, token filters, safety rules, Meme Protection, fund-loss pause, min TVL; editable what-if overrides.
  4. Model: fees scaled from the leader’s fees by size share; entry and exit priced with a latency assumption from Copy Logs (or a default); rent and network fees included.
  5. Results: positions copied and skipped (with the same reason codes as Copy Logs), simulated PnL in SOL and USD, fees, win rate, max drawdown, peak capital needed, rent, and a daily PnL chart.
  6. A persistent Simulation label and a note that past results do not predict future results.
  7. Historical safety is approximated with current safety data and flagged.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.23 Web app paired with the extension (P1, M4)

A PoolScout web app with public no-login pages, plus a paired mode where the installed extension is the signer and bridge to the local backend. Decided by King.

Mockups: New mockups needed: public pages, Connect extension screen, pairing code and QR, extension approval sheet, per-action confirm sheet

User stories

Functional requirements and UI

  1. Public pages (no login): Discover, pool pages, Smart LP leaderboard, public wallet portfolio by address, shared PnL card landing, referral landing.
  2. Paired pages: my portfolio, positions, copy settings and logs, tracker, alerts; read through the extension.
  3. The web app holds no keys and runs no signer; the server only serves public data and the referral service.
  4. Pairing: web shows a short pairing code and QR; the user approves it in the extension, which shows the requesting origin; the extension asks the backend to sign a challenge (nonce, origin, expiry) with the hot wallet; web verifies the signature and gets a session.
  5. Session: opaque session ID on the web, session key in the extension; idle expiry 12 h and absolute expiry 7 days (proposal); re-pair after expiry.
  6. Unpair: from the web (Disconnect) or the extension (Paired sites list, Revoke); revoking kills the session at once.
  7. Offline behaviour: when the extension, backend or PC is off, public pages work and paired pages show read-only cached or public data with actions disabled and a clear status.
  8. Every state-changing action (open, add, close, claim, create pool, copy toggles, settings) is confirmed in the extension with full details; reads need no confirm.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4.24 Mobile app (Expo, Android and iOS) (P1, M5)

A PoolScout mobile app, built with Expo (React Native and TypeScript), Android and iOS from one codebase. Decided by King: the app is UI only and pairs with the user’s local backend or self-hosted VPS, under the same custody model as the web app (PRD 4a). The private key never lives on the phone. All signing and automation stay on the backend.

Mockups: New mockups needed: mobile pairing (scan QR), paired home and positions, per-action confirm, push permission, paired-devices and unpair, offline and backend-unreachable, optional later MWA connect

User stories

Functional requirements and UI

  1. Stack: Expo (React Native and TypeScript); one codebase for Android and iOS; EAS Build for store binaries; OTA JavaScript updates with expo-updates (native changes need a new binary).
  2. Monorepo: pnpm workspaces with Turborepo (a suggestion). Shared packages for types, the API client, Meteora math and formatting, and design tokens. Apps: extension, web, mobile, backend. Introduce the monorepo when M4 (web) starts so M5 can reuse the packages. Do not restructure the repo in M1 unless the owner asks.
  3. Custody, decided: same as PRD 4a. The mobile app holds no keys, runs no signer and has no hosted signer. It pairs with the user’s local backend (through a secure tunnel or HTTPS) or self-hosted VPS. All signing and automation stay there. The private key never lives on the phone, not even in the secure enclave or a Keychain item.
  4. Pairing: the extension or backend shows a short code and QR (backend URL plus a 2 min code); the user scans it in the app; the backend signs a challenge (nonce, origin, device, expiry) with the hot wallet; the app verifies the signature and stores an opaque session. TLS is required. First-pair is trust on first use, pinned to that host.
  5. Session: idle and absolute expiry follow the web proposal (12 h idle, 7 days absolute) unless the owner chooses otherwise; re-pair after expiry. Unpair from the app, or from a Paired devices list in the extension or backend, which kills the session at once.
  6. Every state-changing action is confirmed in the mobile app with full details (pool, amount, fees, dry run). The request carries a session ID, nonce and timestamp, signed with the session key, and is rejected if replayed or older than 60 s. Reads need no confirm.
  7. Least privilege: the phone cannot export the private key, remove the wallet, rotate the backend token, or change the keystore. Arming copy and turning dry run off from the phone still need the same confirmations as on the web, and may also notify the extension.
  8. Offline: when the backend, tunnel or VPS is unreachable, the app shows cached or public data as read-only, with actions disabled and a clear status. Automation keeps running only if the backend itself is up (for example on the VPS).
  9. Push notifications with expo-notifications for position, take-profit, stop-loss, rugged-token and out-of-range alerts (and optionally copy events). Delivery needs the backend to be running. Payloads must not include secrets; prefer a data push that the app uses to fetch details from the paired backend. Telegram and WhatsApp alerts stay available.
  10. UI: reuse the approved compact design system (title 17 px, body 13 px, numbers 15 px, meta 11 px, tabs 10 px, max weight 600, one accent, green and red only for PnL, bottom tab bar, 32x18 toggles, circular logos, plain-text pool types).
  11. Optional future, not in M5 unless the owner approves: direct signing with the user’s external wallet through Solana Mobile Wallet Adapter. That requires an Expo development build, not Expo Go, and is Android-first. Still no key storage in the app. Scope is an open question.
  12. Expo Go may be used for UI development only. Any native module (MWA, some push or update behaviour, background tasks) is verified on a development or EAS build.

Backend API

Data model (SQLite)

Edge and error states

Acceptance criteria

4a. Decided: web app pairs with the extension

Decided. Decided by King: the web app pairs with the user’s installed PoolScout extension. The extension is the signer and bridge to the local backend on the user’s PC. All signing and automation stay in the extension and local backend. The server holds no keys and runs no hosted signer. Public no-login pages stay.

Architecture: Web app (UI only, no keys) → Extension (bridge and confirm, via externally_connectable) → Local backend (keystore, signing, automation; localhost + X-PoolScout-Token) → Solana RPC. Public pages read from a read-only public data server.

Pairing flow

  1. Request: Web shows Connect extension; it generates a pairing code (6 characters, 2 min expiry) and a QR.
  2. Approve: The extension receives the request via externally_connectable, shows the origin and code; the user confirms the code matches.
  3. Sign: The backend signs a challenge (nonce, origin, wallet, expiry) with the hot wallet; the key never leaves the backend.
  4. Session: Web verifies the signature against the wallet address and stores an opaque session ID; the extension keeps the session key.
  5. Use: Reads pass through; every write opens a confirm sheet in the extension before the backend acts.
  6. End: Unpair from either side, idle expiry 12 h, absolute expiry 7 days (proposal), or wallet removal ends every session.

Security considerations

What works when the extension or PC is offline

Capability Paired and online Extension or PC offline
Public pages (Discover, pools, leaderboard, public wallets) Work Work
Own portfolio and positions Live via extension Public on-chain view only
Open, add, close, claim, create pool Work, with extension confirm Disabled
Copy and automation Run in the local backend Stopped until the PC and backend are back
Alerts (Telegram, WhatsApp) Sent by the local backend Not sent

4b. Design coverage

Mockup paths are relative to /workspace/poolscout-mockup/; compact/ is /workspace/poolscout/extension/screens/compact/. Status as of 12 Nov 2026.

Screen or state Milestone Mockup Status
Token safety (chip, sheet Safe and Risky, open warnings, copy skip) M1 safety/s1 to s6 Covered
Open positions list, detail, close, add, claim, empty M1 positions/p1 to p7; bin-step/bs07, bs08, bs08b Covered
Range view modes (Price, Percent, 24h chart) and bin chart toggle M1 positions/p2 shows price range only Partial
Rent preview on open and add (non-refundable bin arrays) M1 create-pool/f-review only Partial
Backend mode chooser (PC or Server) and server pairing M1 extension compact/backend.png (localhost only) Partial
VPS backend health card and heartbeat status M1 None Missing
Backend offline banner and down alert message M1 None Missing
VPS setup guide flow (install, key import, pair) M1 None Missing
Jito landing settings (mode, tip cap, daily budget, max priority fee) M1 None Missing
Copy Logs list with skip reasons, fix buttons and latency breakdown M1 copy/copy-feed.png shows Copied and Would copy only Partial
Meme Protection and fund-loss pause settings M1 copy/copy-settings.png has risk limits only Missing
Fund-loss paused state and Resume M1 None Missing
Per-wallet copy limits sheet M1 wallet-tracker/j-edit-wallet.png has the copy toggle only Partial
Copy token filters (organic score, mcap, volume, holders) M1 safety/s6-copy-settings-skip-risky.png Partial
Fee-checked filter on the leaderboard M1 wallet-tracker/h2-leaderboard-star.png has no filter Missing
Rugged-token exit setting and alert M1 None Missing
Onboarding (private key only, no PIN, no seed) M1 extension compact/onb-welcome, onb-import, onb-prefs; copy/onboarding set-pin and create-seed are outdated Covered
Demo mode M2 demo/d1 to d5 Covered
Wallet Tracker M2 wallet-tracker/h to k Covered
Create pool M2 create-pool/0 to g Covered
PnL card v2 editor and share M2 pnl-card-v2/v1 to v5 Covered
New pool alerts (radar list, filters, Telegram message) M2 alerts/a1 to a3 Covered
Pre-open simulation panel M2 copy/calculator-open.png and compact/calculator.png are the basis Missing
Daily recap settings M2 None Missing
Daily recap message preview (Telegram and WhatsApp) M2 alerts/a3-telegram-alert.png sets the style Missing
Token watchlist list, add sheet and alert M2 None Missing
Copy backtest entry and result M2 None Missing
Notifications settings with new events (recap, watchlist, rug exit, backend down) M2 copy/notifications.png; compact/notifications.png Partial
Language setting and Indonesian screens M2 None Missing
Discover tabs and token rows with Open or Create pool M3 copy/radar.png and bin-step/bs11 are Radar; create-pool/b0-no-pool covers one row state Missing
Pools filter sheet M3 bin-step/bs02 to bs03 (type, bin step, base fee, TVL) Partial
Smart LP cards and filter sheet (EV, avg age, avg invested, monthly PnL, ALL) M3 wallet-tracker/h2 and copy/wallet-profile.png show 7D/30D, PnL and win rate Partial
Portfolio stats header, PnL/Fee chart (D/W/M) and calendar M3 copy/wallet-profile.png, bin-step/bs09, copy/pnl-calendar.png, compact/my-pnl-calendar.png Partial
Automation editor (fee-coverage gate, TP/SL in SOL or USD) M3 copy/open-position-advanced.png; positions/p2 automation block Partial
Settings hub with new entries (Backend mode, Landing, Language, Security, Recap) M3 copy/more.png; compact/more.png, settings-toggles.png Partial
Security page and onboarding trust line M3 None Missing
Web public pages (Discover, pools, leaderboard, wallet, card landing) M4 None Missing
Web Connect extension with pairing code and QR M4 None Missing
Extension pairing approval sheet M4 None Missing
Extension per-action confirm sheet M4 None Missing
Paired sites list and Revoke M4 None Missing
Web offline and read-only states M4 None Missing
Referral M4 referral/r1 to r5b Covered
Mobile pairing (scan QR, code, approve) M5 None Missing
Mobile home, positions and portfolio M5 Extension and positions mockups are the visual basis Missing
Mobile per-action confirm sheet M5 None Missing
Mobile push permission and notification settings M5 None Missing
Mobile paired-devices list and unpair M5 None Missing
Mobile offline and backend-unreachable states M5 None Missing
Optional Mobile Wallet Adapter connect (future) M5 None Missing

5. Monetization (open decision)

King’s decision. PoolScout is free today. Referral rewards cannot be real until a fee model is chosen.

Option Mechanism Pros Cons
A. Stay free No fee Simplest; strongest growth story; no referral rewards possible No revenue; referral stays cosmetic
B. Share of automation fees For example 3 to 5% of LP fees on automated close or claim (under LP Agent’s 8%) Directly comparable and cheaper than LP Agent; funds referrals Charged even on losing positions; needs a fee transfer in locally signed transactions
C. Share of realized profit For example 5 to 10% of profit on automated exits, only when profitable Fair; easy to market Harder to compute exactly; disputes on PnL basis
D. Flat fee per automated open For example 0.001 SOL per copy or auto open Predictable; easy to implement Hurts small positions; does not scale with value
E. Optional Pro tier Monthly subscription for Pro features, core stays free No fee on trades Payments, licensing and enforcement in a self-hosted app

6. Non-functional requirements

Security

Performance

RPC and data

Reliability when the PC is off

Privacy

UI rules

7. Release plan

Milestone Scope Exit criteria Duration
M0 Prerequisites Fresh Helius key; small live smoke test of open, claim and close with dry run OFF; backup and keystore check. One live position opened and closed cleanly. 2 to 3 days (estimate)
M1 Parity (P0) Strategy items 1, 2 and 7: Self-hosted always-on mode, Jito landing and priority fees, Copy quality with the fee-checked filter and rugged-token exit, Token safety, Open positions UI with the detail endpoint. P0 parity acceptance criteria pass; 72 h always-on soak test in dry run; p50 latency measured. 3 to 4 weeks (estimate)
M2 Win (P0/P1) Strategy items 5 and 6: Demo mode, Wallet Tracker, Create pool, PnL card v2, New pool alerts on Telegram and WhatsApp, Indonesian locale, guides and Telegram group; plus Pre-open simulation, Daily recap, Token watchlist and Copy backtest. Acceptance criteria pass; King signs off on screenshots; launch free. 2 to 3 weeks (estimate)
M3 Depth (P1) Discover upgrade, Pools filters, Smart LP upgrade (rest), Portfolio stats and chart, Auto Range/TP-SL refine (rest), Trust: security page and open-source decision. P1 acceptance criteria pass. 2 to 3 weeks (estimate)
M4 Reach (P1/P2) Web app paired with the extension and public pages; Referral UI and tracking. Introduce the pnpm and Turborepo monorepo so web, extension and backend share packages. Pairing security tests pass; referral codes work end to end without rewards. 2 weeks (estimate), needs a domain
M5 Mobile (P1) Expo mobile app (Android and iOS): pairing with the user’s backend or VPS, positions and portfolio UI, per-action confirm, expo-notifications for TP/SL, rug and out-of-range, EAS Build and OTA. Optional Mobile Wallet Adapter is out of scope until the owner approves it. Custody tests pass (no key on device); pairing, unpair and replay protection pass on a development build; push delivered in a dry-run test; King signs off on screenshots. 3 to 4 weeks (estimate); starts only after King approves M5, and needs store accounts
Gated Referral rewards and any fee collection after the free launch; open-source release if King chooses it. King decides the fee model, terms and open-source option. Blocked

Durations are estimates. Build starts only after King says build; nothing ships without his screenshot sign-off.

8. Risks and open questions

Risk Impact Mitigation
Fee model undecided Referral rewards and revenue blocked Decision section in this PRD; ship referral as UI and tracking only
No domain No referral links or web app Pick and register a domain before M3
No fresh Helius key Slow copies, no discovery, slow alerts Get a key in M0; polling fallback with visible status
Live trading untested Real losses from bugs M0 smoke test with small size; dry run default ON
WhatsApp (WAHA) ban Linked number could be banned for automated messages Use a secondary number; rate limits; Telegram as the primary channel
PC off or sleeping Missed exits and TP/SL Restart reconciliation, offline summary, clear docs
Upstream API changes or limits Broken lists or stale data Caching, health checks, friendly fallbacks
Web pairing attack surface Unauthorized actions Origin allowlist, per-action confirm, replay protection, revocation
Competitor pace LP Agent and OnlyFarm already ship much of v0.4.0 Parity first (M1), then differentiators (M2): self-custody, chat alerts, demo mode, tracker, create pool, share cards
VPS misconfiguration Exposed backend or stolen keystore on the user’s server Installer hardens by default (TLS, firewall, key-only SSH, localhost bind); security page; token rotation
Jito tip cost and failures Tips eat small positions; bundles fail to land Tip cap and daily budget; RPC fallback; latency and cost in Copy Logs
Open-sourcing Forks strip any future fee King’s decision with trade-offs in the Trust spec
App Store or Play review Delay or rejection of the mobile app Start accounts and review notes before M5; follow store rules; no key handling in the app
Push through a third party Device tokens or alert metadata leave the user’s machines Open question on the provider; minimal payloads; fetch details from the paired backend

Open questions

  1. Fee model (options A to E) and the referral rates and terms.
  2. Domain for referral links and the web app.
  3. Who hosts the web app and the referral service, and where.
  4. Demo default starting balance (proposal: 10 SOL).
  5. Fee-checked threshold default (proposal: 10%, as LP Agent).
  6. Pricing after the free launch: about 3 to 5% of claimed fees on automation only, or a flat Pro subscription, and when the free launch ends.
  7. Open-source the backend: fully open, source-available, or closed with a security note, and which license.
  8. Default Jito tip cap and daily tip budget (proposal: 0.0001 SOL per bundle).
  9. Which VPS providers and setup (Docker or Node service, domain or tunnel) to document first.
  10. Who runs and moderates the Indonesian Telegram group.
  11. Daily recap default send time (proposal: 21:00 UTC+7).
  12. Web session expiry values (proposal: 12 h idle, 7 days absolute).
  13. Apple Developer and Google Play accounts, and who submits the app for review.
  14. Push provider for the mobile app (Expo Push Service or another) and the privacy of device tokens.
  15. Scope and timing of optional Solana Mobile Wallet Adapter signing (Android-first, development build only, not Expo Go).
  16. iOS signing: certificates, provisioning, and whether a personal or organization Apple Developer account is used.

9. Success metrics

Metric Target Source
Copy decision coverage 100% of leader actions have a Copy Log row with a reason Copy Logs
Copy latency p50 from leader tx to our landed tx of 2 s or less with Jito (an estimate to validate in M1) Copy Logs stage timings
Always-on uptime At least 99% backend uptime in self-hosted mode (target) backend_heartbeats
Down alert speed Telegram or WhatsApp alert within 2 min of a backend stop backend_events and notify_log
Simulation accuracy Median error of estimated fees per day reported for closed positions (no target until measured) simulations vs copy_positions
Recap delivery Daily recap sent within 2 min of the set time on running days recap_log
Indonesian community Telegram group members and Indonesian-locale users after M2 Group count; local counters, opt-in
Safety correctness 0 tokens shown Safe with an unanswered source Tests and audit of token_safety
Live action success At least 98% of live opens, claims and closes confirm (target) copy_trades
Alert speed New-pool alert within 10 s on Helius pool_alerts timestamps
Uptime awareness Every restart sends an offline summary notify_log
Demo to live Share of demo users who later fund a wallet (once distributed) Local counters, opt-in
Sharing Cards shared per week Local counters
Web pairing safety 0 actions executed without an extension confirm web_sessions and action log
Mobile pairing safety 0 private keys or backend tokens on the device; 0 actions without an in-app confirm device_sessions and action log