Market values in the BONK, WIF, and JUP screenshots below are clearly labelled illustrative demo data. They are not live market data or financial advice.
Added cached Token Safety reports using one SolanaTracker token-information request per check, enabled by default when SolanaTracker is available, with persistent global and per-token controls, manual or scheduled refreshes, retained trusted results after failures, and no safety notifications.
Improved Token Overview with full aligned Buy and Sell prices, a responsive mobile layout, and compact safety shields that open a detailed report without changing the active token.
Improved SolanaTracker RSI reliability with standard Wilder calculations over genuine traded candles, stable no-trade values, safer source validation, and correct persistence across restarts, token switches, and interval changes.
Added safer confirmation for unusually large Jupiter price moves before updating charts, shared quote caches, or firing alerts.
Improved multi-token monitoring with live Token Overview updates, a clear active-token marker, accurate overdue scheduling, independent background alerts, safer notification retries, and cleaner fired-alert timing details.
Improved Action Readiness trends across 24h, 7d, 30d, and 90d so representative real readings remain visible while genuine provider gaps and rule or scenario changes stay clearly separated.
The optional JUPITER_API_KEY is used only by Action Rules for Tokens V2 data and authenticated sell quotes.
Without that key, Action Rules remain unavailable while the existing keyless Jupiter price monitor and price alerts continue unchanged.
Action Rules use a separate conservative limiter, batch metadata for up to 100 mints, and retry only transient failures such as timeouts, 429, and server errors.
Permanent 4xx errors stop only the current retry burst; the next scheduled refresh still tries again normally.
Signed Swap V2 price impact is normalized into adverse percentage points so a negative signed value cannot incorrectly pass a maximum-impact rule.
Action Readiness starts as a compact, expandable status bar, remembers each coin's browser expand/collapse preference, and stays responsive on desktop and mobile.
When JUPITER_API_KEY is blank or Action Rules are globally disabled, Action Readiness and Rules indicators stay hidden from the main dashboard; Settings clearly explains the inactive state. A global visibility change only takes effect after Settings is saved.
Settings displays the effective Action Rules refresh interval and isolated limiter from Docker/ENV configuration.
Global/per-coin transitions, restarts, stale gaps, unrelated token edits, and alert state persistence are handled without false-ready alerts.
Re-enabling RSI now shows a waiting state immediately instead of briefly reporting that RSI is still disabled.
Quickly model a partial exit from your position and see an estimated breakdown of proceeds:
Adjust 0โ100% via slider, numeric input, or quick chips
Shows:
Estimated current token price
Tokens to sell
Expected proceeds
Split into principal vs unrealized profit/loss
Works with the selected wallet or All (aggregate)
Hidden when no wallets are configured or when the selected source has no holdings
Uses the latest values from the Wallet Info card (PnL): price โ current_value / holding, with proceeds split using the current cost basis and unrealized PnL
Note: This is an estimate; execution may vary due to price impact and slippage
The example below uses the public Docker Hub image nicxx2/jupiter-usdc-price-alerts:latest, so no local image build is required. You only need Docker with Compose support; the SolanaTracker and Jupiter API keys enable optional features.
Paste the following into a docker-compose.yml file.
โ Update the OUTPUT_MINT to the token you want to monitor (e.g. BONK, JIM, PEPE).
๐ Make sure to change the TZ (timezone) to match your region โ this helps timestamps and cooldown logic align properly.
services:
jupiter-usdc-price-alert:
image: nicxx2/jupiter-usdc-price-alerts:latest
container_name: jupiter-usdc-price-alerts
restart: unless-stopped
# Expose the FastAPI backend for the Web UI
ports:
- "8000:8000"
environment:
# --- Token Configuration ---
# Input mint (must be USDC for accurate USD-based alerts)
INPUT_MINT: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
# Output token mint (token you want to monitor, e.g. JIM)
OUTPUT_MINT: <YOUR_OUTPUT_TOKEN_MINT>
# Solanatracker.io API key (required for RSI, Token Safety, wallet info, and sell simulator)
# If omitted, SolanaTracker-only panels will be disabled in the UI
SOLANATRACKER_API_KEY: ""
# Master SolanaTracker feature switch. Docker is the first-run default;
# saved app settings in /shared/config.json take priority after you edit them in the UI.
SOLANATRACKER_ENABLED: "true"
# SolanaTracker limiter: safe, custom, or off.
# Safe mode is conservative for free accounts and leaves room for RSI/wallet calls.
# Use custom/off only if your plan allows it.
SOLANATRACKER_RATE_LIMIT_MODE: safe
SOLANATRACKER_REQUESTS_PER_SECOND: 1
# Cached Token Safety reports. Enabled when SolanaTracker is available;
# disabling it in Settings is persisted across restarts and container updates.
TOKEN_SAFETY_ENABLED: "true"
TOKEN_SAFETY_INTERVAL_HOURS: 24
# Optional and used only by Action Rules. Existing prices remain keyless.
# Leave blank to keep Action Rules unavailable; create one at https://portal.jup.ag.
JUPITER_API_KEY: ""
# Existing keyless price-monitor limiter (unchanged by Action Rules).
JUPITER_REQUESTS_PER_SECOND: 0.5
# Separate authenticated limiter used only by Action Rules.
COMMUNITY_RULES_JUPITER_REQUESTS_PER_SECOND: 0.5
# This is forced off automatically while JUPITER_API_KEY is blank.
COMMUNITY_RULES_ENABLED: "true"
COMMUNITY_RULES_CHECK_INTERVAL: 120
COMMUNITY_RULES_STALE_SECONDS: 360
COMMUNITY_RULES_QUOTE_MAX_AGE_SECONDS: 90
COMMUNITY_RULES_SOURCE_MAX_AGE_SECONDS: 3600
# Rule Trends reuse Action Readiness results and add no Jupiter calls.
COMMUNITY_RULES_HISTORY_PATH: /shared/action-rules-history.sqlite3
COMMUNITY_RULES_HISTORY_RETENTION_DAYS: 90
COMMUNITY_RULES_HISTORY_MAX_POINTS: 480
# --- Simulated Swap Settings ---
# Amount of USDC to simulate swapping
USD_AMOUNT: 100
# Optional token decimals override. Leave blank for auto-detect/fallback.
# USDC is 6 decimals; output token decimals vary by mint.
INPUT_DECIMALS: ""
OUTPUT_DECIMALS: ""
# How often to check prices (in seconds)
CHECK_INTERVAL: 60
# --- Alert Triggers ---
# Trigger buy alert if price is less than or equal to one of these
BUY_ALERTS: "0.00138, 0.00135, 0.00136"
# Trigger sell alert if price is greater than or equal to one of these
SELL_ALERTS: "0.00140, 0.00145"
# --- RSI Configuration ---
# Per-token RSI can also be switched off in the UI
RSI_ENABLED: "true"
# How often (in minutes) to refresh RSI checks
# Note: Free solanatracker.io API keys are limited to 2,500 requests per month
RSI_CHECK_INTERVAL: 5
# RSI alert thresholds (e.g. "above:30", "below:70")
RSI_ALERTS: "below:30"
# Candle interval used for RSI calculation (e.g. 1s, 1m, 5m)
RSI_INTERVAL: "5m"
# If false, RSI alerts trigger only once per session
RSI_RESET_ENABLED: "false"
# Persisted, wallet tracking config
# Comma-separated list of Solana wallet addresses to track
# Note: Free solanatracker.io API keys are limited to 2,500 requests per month
WALLET_ADDRESSES: ""
# --- Push Notifications (via ntfy) ---
# Unique topic name to receive notifications
NTFY_TOPIC: token-alerts
# Ntfy server URL (default: https://ntfy.sh)
NTFY_SERVER: https://ntfy.sh
# --- Alert Reset Cooldown ---
# Minutes before the same buy/sell alert can trigger again (set to 0 to disable)
ALERT_RESET_MINUTES: 0
# --- Timezone ---
# Local timezone for timestamps and scheduling
TZ: Europe/London
# Persist UI-edited settings, alert state, and price history
volumes:
- jupiter-alert-data:/shared
# --- Log Rotation ---
logging:
driver: "json-file"
options:
max-size: "2m"
max-file: "5"
volumes:
jupiter-alert-data:
Start the container:
docker compose up -d
To pull a newer image later and recreate the container:
This project uses ntfy.shโ to send free push notifications to your browser or mobile device.
โ No signup required
โ Works on Android, iOS, browsers, and terminals
โ ๏ธ Free Tier Note: ntfy.sh allows up to 250 messages per IP address per day.
If needed, you can self-host your own ntfy server and change the NTFY_SERVER variable in the Docker Compose file to point to your self-hosted instance (e.g. http://localhost:8080).