USDC price alerts for Solana tokens via Jupiter and ntfy.sh push notifications (+Raspberry Pi 5)
10K+
If you found this helpful and want to support what I do, you can leave a tip here β thank you so much!
A real-time, web-enabled price alert tool for Solana tokens using the Jupiter Aggregator.
Track simulated USDC swaps with real price impact across one or many Solana tokens, then receive instant alerts via ntfy.shβ from a modern Web UI.
/shared/action-rules-history.sqlite3, separately from current readiness, configuration, alerts, and price history.JUPITER_API_KEY is used only by Action Rules for Tokens V2 data and authenticated sell quotes.429, and server errors.4xx errors stop only the current retry burst; the next scheduled refresh still tries again normally.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.-- with status context instead of a fake 0.00.quote-api.jup.ag/v6 to the new lite-api.jup.ag/swap/v1.restrictIntermediateTokens=true to reduce rare dust-pool price spikes.See the GitHub READMEβ for v2.3 and earlier release notes.
π https://github.com/Nicxx2/jupiter-usdc-price-alertsβ
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:
Once the container is running, you can view and control everything from a clean browser interface.
If you're running this locally:
If running on a remote server, replace localhost with the IP address or hostname of your server:
http://<your-server-ip>:8000
Youβll be able to:
JUPITER_API_KEY, configure independent per-coin Action Rules for holders, market cap, liquidity, 24h volume, sell pressure, volume/liquidity, and Jupiter sell-quote price impact, with pass/fail/unknown status and optional confirmed ntfy alertsSOLANATRACKER_API_KEY env var to enable the cached 14-period USD-based RSI panel and above: / below: threshold alerts. If you omit the key, RSI stays disabled and shows --.SOLANATRACKER_API_KEY and wallet addresses configured in Docker Compose or the web UI.Note
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.



Rule Trends reuse saved Action Readiness checks. Gaps remain visible instead of being plotted as zero.










ntfy.shThis 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 theNTFY_SERVERvariable in the Docker Compose file to point to your self-hosted instance (e.g.http://localhost:8080β).
π± Option 1: Mobile App
Open the app and subscribe to your topic (e.g. token-alerts).
π Option 2: Browser Alerts
https://ntfy.sh/<your-topicβ >https://ntfy.sh/token-alertsβ NTFY_TOPIC is your personal alert channel β make it uniquelinux/amd64linux/arm64 (Raspberry Pi 4/5)linux/arm/v7 (Raspberry Pi 3 and older ARM chips)/shared/action-rules-history.sqlite3 is created automatically in the existing persistent volume. No existing JSON migration is required./shared/config.json and jupiter-latest.json data remain compatible. Internal community_rules_* keys are intentionally retained so upgrades do not lose saved settings.JUPITER_API_KEY to Docker Compose and restart the container before enabling Action Rules. The key is not added to existing keyless price requests.0.5 requests/second limiter and a 120-second refresh interval. Missing or stale provider data fails safely to Unknown./shared/config.json.ntfy_topic, price check interval, and RSI check interval. Blank cadence/topic values inherit the Docker Compose / global defaults./shared as shown above so alerts, wallets, price history, and UI-edited settings survive container recreation.-- with a small status dot instead of 0.00.SOLANATRACKER_ENABLED=true is the first-run default for SolanaTracker-only features. Turning it off in the UI persists to /shared/config.json and hides RSI, wallet info, and the sell simulator without stopping Jupiter price checks.SOLANATRACKER_RATE_LIMIT_MODE=safe protects free SolanaTracker accounts with a conservative 1 request/second limit. The UI labels this separately from the RSI check interval so request pacing is not confused with RSI cadence. SolanaTracker currently lists the Data API Free plan as 2,500 requests/month and 3 req/sec, so safe mode leaves headroom for RSI and wallet calls. Use custom with SOLANATRACKER_REQUESTS_PER_SECOND, or off only when your plan/private setup can handle it. See the SolanaTracker pricing docsβ for current limits.INPUT_DECIMALS / OUTPUT_DECIMALS available as explicit overrides.python -m unittest tests.test_scheduler_rate_limit checks scheduler interval inheritance, round-robin due-token selection, and rate-limit safe/custom/off behavior without live API calls.Content type
Image
Digest
sha256:a5df66ab9β¦
Size
100.3 MB
Last updated
12 days ago
docker pull nicxx2/jupiter-usdc-price-alertsPulls:
2,961
Last week