Add systemd auto-start services + realistic feature updates
Some checks failed
CI / Frontend Lint & Type Check (push) Has been cancelled
CI / Frontend Build (push) Has been cancelled
CI / Backend Lint (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Docker Build (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
Deploy / Build & Push Images (push) Has been cancelled
Deploy / Deploy to Server (push) Has been cancelled
Deploy / Notify (push) Has been cancelled

This commit is contained in:
2025-12-17 09:36:59 +01:00
parent 7f3846934c
commit 6e9c5a1394
7 changed files with 152 additions and 24 deletions

View File

@ -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,

View File

@ -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 = {

View File

@ -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?',

View File

@ -466,21 +466,6 @@ export default function YieldPage() {
</button>
</section>
{/* FEATURE IN DEVELOPMENT BANNER */}
<section className="px-4 lg:px-10 pt-4">
<div className="bg-amber-400/10 border border-amber-400/20 p-4 text-amber-400 flex items-center gap-3">
<Sparkles className="w-5 h-5 shrink-0" />
<div>
<h2 className="text-sm font-bold uppercase tracking-wider flex items-center gap-2">
Feature in Development <span className="px-2 py-0.5 text-[8px] font-mono bg-amber-400/20 text-amber-400 border border-amber-400/30">Coming Soon</span>
</h2>
<p className="text-xs font-mono mt-1 text-amber-400/80">
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!
</p>
</div>
</div>
</section>
{/* CONTENT */}
<section className="px-4 lg:px-10 py-4 pb-28 lg:pb-10">
{loading ? (

96
systemd/install-services.sh Executable file
View File

@ -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"

View File

@ -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

View File

@ -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