diff --git a/backend/app/models/subscription.py b/backend/app/models/subscription.py index e7f4571..80b3706 100644 --- a/backend/app/models/subscription.py +++ b/backend/app/models/subscription.py @@ -93,7 +93,7 @@ TIER_CONFIG = { "portfolio_limit": -1, # Unlimited portfolio "listing_limit": -1, # Unlimited listings "sniper_limit": 50, # Sniper alerts - "check_frequency": "realtime", # Every 10 minutes + "check_frequency": "5min", # Every 5 minutes (was 10min) "history_days": -1, # Unlimited "features": { "email_alerts": True, diff --git a/backend/scripts/sync_all_zones.py b/backend/scripts/sync_all_zones.py index 1ae9165..986b700 100644 --- a/backend/scripts/sync_all_zones.py +++ b/backend/scripts/sync_all_zones.py @@ -44,11 +44,7 @@ LOG_FILE = Path("/home/user/logs/zone_sync.log") COMPRESS_DOMAIN_LISTS = True # CZDS TLDs we have access to -# NOTE: .org and .xyz are temporarily disabled - too large for 2GB RAM server -# .org = 10M+ domains (~500MB RAM), .xyz = 8M+ domains (~400MB RAM) -# Enable when server has more RAM or we implement streaming to SQLite -CZDS_TLDS = ["app", "dev", "info", "online"] # Small/medium TLDs only -CZDS_TLDS_DISABLED = ["org", "xyz"] # Too large for current server +CZDS_TLDS = ["app", "dev", "info", "online", "org", "xyz"] # Switch.ch AXFR config SWITCH_CONFIG = { diff --git a/frontend/src/app/pricing/page.tsx b/frontend/src/app/pricing/page.tsx index 7bd372b..1a6bab2 100644 --- a/frontend/src/app/pricing/page.tsx +++ b/frontend/src/app/pricing/page.tsx @@ -65,7 +65,7 @@ const tiers = [ description: 'Full firepower. No limits.', features: [ { text: 'Market Feed', highlight: true, available: true, sublabel: 'Priority' }, - { text: 'Alert Speed', highlight: true, available: true, sublabel: '10 min' }, + { text: 'Alert Speed', highlight: true, available: true, sublabel: '5 min' }, { text: 'Unlimited Watchlist', highlight: true, available: true }, { text: 'Unlimited Portfolio', highlight: true, available: true }, { text: 'Unlimited Listings', highlight: true, available: true, sublabel: 'Featured' }, @@ -83,7 +83,7 @@ const tiers = [ const comparisonFeatures = [ { name: 'Market Feed', scout: 'Raw', trader: 'Curated', tycoon: 'Priority + Early' }, - { name: 'Alert Speed', scout: 'Daily', trader: 'Hourly', tycoon: 'Every 10 min' }, + { name: 'Alert Speed', scout: 'Daily', trader: 'Hourly', tycoon: 'Every 5 min' }, { name: 'Watchlist', scout: '10 Domains', trader: '100 Domains', tycoon: 'Unlimited' }, { name: 'Portfolio', scout: '3 Domains', trader: '50 Domains', tycoon: 'Unlimited' }, { name: 'Listings', scout: '1 (Try it)', trader: '10 (0% Fee)', tycoon: 'Unlimited + Featured' }, @@ -98,7 +98,7 @@ const comparisonFeatures = [ const faqs = [ { q: 'How fast will I know when a domain drops?', - a: 'Depends on your plan. Scout: daily. Trader: hourly. Tycoon: every 10 minutes. When it drops, you\'ll know.', + a: 'Depends on your plan. Scout: daily. Trader: hourly. Tycoon: every 5 minutes. When it drops, you\'ll know.', }, { q: 'What\'s domain valuation?', diff --git a/frontend/src/app/terminal/yield/page.tsx b/frontend/src/app/terminal/yield/page.tsx index 54490e5..3001ec4 100644 --- a/frontend/src/app/terminal/yield/page.tsx +++ b/frontend/src/app/terminal/yield/page.tsx @@ -466,21 +466,6 @@ export default function YieldPage() { - {/* FEATURE IN DEVELOPMENT BANNER */} -
-
- -
-

- Feature in Development Coming Soon -

-

- We're building an automated yield system for your parked domains. Soon you'll be able to monetize idle domains with intelligent traffic routing. Stay tuned for updates! -

-
-
-
- {/* CONTENT */}
{loading ? ( diff --git a/systemd/install-services.sh b/systemd/install-services.sh new file mode 100755 index 0000000..f0d83ad --- /dev/null +++ b/systemd/install-services.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +# ============================================================================ +# POUNCE SYSTEMD SERVICE INSTALLER +# Run this script to install auto-start services on the server +# ============================================================================ + +set -euo pipefail + +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' + +SERVER_USER="user" +SERVER_HOST="10.42.0.73" +SERVER_PASS="user" +SSH_OPTS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" + +if ! command -v sshpass >/dev/null 2>&1; then + echo "sshpass is required but not installed. Install with: brew install sshpass" + exit 1 +fi + +echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}" +echo -e "${BLUE} POUNCE SYSTEMD SERVICE INSTALLER ${NC}" +echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}" + +# Get script directory +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" + +echo -e "\n${YELLOW}[1/4] Copying service files to server...${NC}" +sshpass -p "$SERVER_PASS" scp $SSH_OPTS "$SCRIPT_DIR/pounce-backend.service" "$SERVER_USER@$SERVER_HOST:/tmp/" +sshpass -p "$SERVER_PASS" scp $SSH_OPTS "$SCRIPT_DIR/pounce-frontend.service" "$SERVER_USER@$SERVER_HOST:/tmp/" +echo " ✓ Service files copied" + +echo -e "\n${YELLOW}[2/4] Installing services (requires sudo)...${NC}" +sshpass -p "$SERVER_PASS" ssh $SSH_OPTS "$SERVER_USER@$SERVER_HOST" << 'EOF' + # Move service files to systemd directory + echo "user" | sudo -S cp /tmp/pounce-backend.service /etc/systemd/system/ + echo "user" | sudo -S cp /tmp/pounce-frontend.service /etc/systemd/system/ + + # Set correct permissions + echo "user" | sudo -S chmod 644 /etc/systemd/system/pounce-backend.service + echo "user" | sudo -S chmod 644 /etc/systemd/system/pounce-frontend.service + + echo " ✓ Service files installed" +EOF + +echo -e "\n${YELLOW}[3/4] Stopping existing processes...${NC}" +sshpass -p "$SERVER_PASS" ssh $SSH_OPTS "$SERVER_USER@$SERVER_HOST" << 'EOF' + # Kill existing nohup processes + pkill -f 'uvicorn app.main:app' 2>/dev/null || true + pkill -f 'node .next/standalone/server.js' 2>/dev/null || true + sleep 2 + echo " ✓ Existing processes stopped" +EOF + +echo -e "\n${YELLOW}[4/4] Enabling and starting services...${NC}" +sshpass -p "$SERVER_PASS" ssh $SSH_OPTS "$SERVER_USER@$SERVER_HOST" << 'EOF' + # Reload systemd daemon + echo "user" | sudo -S systemctl daemon-reload + + # Enable services (auto-start on boot) + echo "user" | sudo -S systemctl enable pounce-backend + echo "user" | sudo -S systemctl enable pounce-frontend + + # Start services + echo "user" | sudo -S systemctl start pounce-backend + sleep 3 + echo "user" | sudo -S systemctl start pounce-frontend + sleep 2 + + # Check status + echo "" + echo " Backend status:" + systemctl status pounce-backend --no-pager -l | head -15 || true + echo "" + echo " Frontend status:" + systemctl status pounce-frontend --no-pager -l | head -15 || true +EOF + +echo -e "\n${GREEN}═══════════════════════════════════════════════════════════════${NC}" +echo -e "${GREEN} ✅ SERVICES INSTALLED! ${NC}" +echo -e "${GREEN}═══════════════════════════════════════════════════════════════${NC}" +echo -e "" +echo -e " Services will now auto-start after server reboot." +echo -e "" +echo -e "${BLUE}Useful commands (run on server):${NC}" +echo -e " sudo systemctl status pounce-backend" +echo -e " sudo systemctl status pounce-frontend" +echo -e " sudo systemctl restart pounce-backend" +echo -e " sudo systemctl restart pounce-frontend" +echo -e " journalctl -u pounce-backend -f" +echo -e " journalctl -u pounce-frontend -f" + diff --git a/systemd/pounce-backend.service b/systemd/pounce-backend.service new file mode 100644 index 0000000..5245c35 --- /dev/null +++ b/systemd/pounce-backend.service @@ -0,0 +1,24 @@ +[Unit] +Description=Pounce Backend API (FastAPI/Uvicorn) +After=network.target postgresql.service +Wants=postgresql.service + +[Service] +Type=simple +User=user +Group=user +WorkingDirectory=/home/user/pounce/backend +Environment="PATH=/home/user/pounce/backend/venv/bin:/usr/local/bin:/usr/bin:/bin" +ExecStart=/home/user/pounce/backend/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000 +Restart=always +RestartSec=5 +StandardOutput=append:/home/user/pounce/backend/backend.log +StandardError=append:/home/user/pounce/backend/backend.log + +# Hardening +NoNewPrivileges=true +PrivateTmp=true + +[Install] +WantedBy=multi-user.target + diff --git a/systemd/pounce-frontend.service b/systemd/pounce-frontend.service new file mode 100644 index 0000000..9690a2b --- /dev/null +++ b/systemd/pounce-frontend.service @@ -0,0 +1,27 @@ +[Unit] +Description=Pounce Frontend (Next.js Standalone) +After=network.target pounce-backend.service +Wants=pounce-backend.service + +[Service] +Type=simple +User=user +Group=user +WorkingDirectory=/home/user/pounce/frontend +Environment="NODE_ENV=production" +Environment="HOSTNAME=0.0.0.0" +Environment="PORT=3000" +Environment="BACKEND_URL=http://127.0.0.1:8000" +ExecStart=/usr/bin/node /home/user/pounce/frontend/.next/standalone/server.js +Restart=always +RestartSec=5 +StandardOutput=append:/home/user/pounce/frontend/frontend.log +StandardError=append:/home/user/pounce/frontend/frontend.log + +# Hardening +NoNewPrivileges=true +PrivateTmp=true + +[Install] +WantedBy=multi-user.target +