# 👻 Ghost Node — Progress Log > **Read this alongside CLAUDE.md at the start of every new session.** > Full session history (all sessions, including Q&A decisions) → **ARCHIVE.md** — do NOT load at session start. > > ### ⚠️ MD Update Rule — DYNAMIC, NOT STATIC > Only update the MD file whose content was actually touched this session. Not all files — only the relevant ones. > - **PROGRESS.md** → update when any code file changed. Add a brief session entry here, move it to ARCHIVE.md when it's no longer active context. > - **CLAUDE.md** → update only if API endpoints, DB schema, config keys, or architecture changed. > - **MEMORY.md** → update only if a new reusable gotcha, pattern, or architecture decision was discovered. > - **ARCHIVE.md** → move old PROGRESS.md session entries here. Also log Q&A sessions that produced lasting decisions. > - If nothing changed in a session (pure Q&A, no files edited, no decisions made) → update nothing. --- ## Current State - **Version:** v2.7 - **Status:** ✅ Fully operational — 21/21 tests passing - **Last session:** 31 (2026-03-13) — Fixed Framer Motion SSR opacity:0 bug across all components (LandingPage hero, dashboard, StatsGrid, RecentListings, EngineConsole, ActivityLog, ListingRow, ListingsTable, ListingDetailPanel, 4 page routes). All above-the-fold elements now render visible in static HTML (opacity:1, only transforms animate). Below-fold scroll-triggered sections intentionally keep opacity:0 for scroll animations. 21/21 tests passing. - **Previous session:** 30 (2026-03-13) — Full marketing landing page built from AI_WEB_BRIEF.md (Hero, Platform Strip, 6-feature grid, How It Works 4-step flow, Who It's For personas, FAQ accordion, Footer CTA + site footer). Light/dark theme toggle added (ThemeToggle.tsx, localStorage-persistent, vivid lavender-ivory light palette via data-theme attribute). globals.css extended with complete [data-theme="light"] overrides for all g-* classes. 21/21 tests passing. - **Previous session:** 29 (2026-03-13) — Master dashboard "Mission Control" rebuilt: RecentListings (polls /api/listings every 10s), EngineConsole (status orb + controls + site health, polls /api/sites every 25s), enhanced ActivityLog (tracks engine state transitions), StatsGrid updated (keywords prop replaces engine card), utils.ts extended (formatUptime, formatMins, formatPrice, timeAgo). 21/21 tests passing. - **worker.py:** 5,000+ lines (definitive — ahead of all exports) - **frontend/:** Next.js 16 + React 19 + TypeScript + Tailwind v4 — static build in `frontend/out/` (1.8MB). `node_modules/` is 553MB build tooling — safe to delete, run `npm install` to restore. - **models.py:** ~420 lines - **Serving:** `http://localhost:8000` (React UI) | `http://localhost:8000/legacy` (HTML fallback) --- ## 🟡 Pending Features — Priority Queue ### Priority 1 — Redis Cache Layer Replace in-memory Python dicts with Redis. Survives restarts. Enables pub/sub for live dashboard. Price cache, rate limits, job queue. ### Priority 2 — Docker Compose `docker-compose.yml` with worker.py + PostgreSQL + Redis. One-command startup anywhere. ### Priority 3 — Lot Description Extraction AI currently only sees lot **title**. Detail pages have full descriptions. Extends AI-first accuracy dramatically. **How:** `JS_DETAIL_TEXT` extractor on detail pages + new `description (Text)` column on `Listing` + pass to `_ai_analyze()` ### Priority 4 — Frontend Visual Polish Session 27: Full premium redesign — ambient animated gradient background (3 floating orbs + dot grid), glassmorphism shell (backdrop-blur + saturate), gradient glow cards (`g-card-glow` with animated border), Framer Motion staggered card/row/page animations, gradient text headings, badge system (green/amber/red/blue/purple/neutral), gradient underline active nav with glow, status pill with live pulse dot + aura shadow. New CSS prefix: `g-*` (e.g. `bg-g-base`, `text-g-green`). All 21 tests + build passing. Session 28: Added a dedicated marketing landing page (`frontend/components/landing/LandingPage.tsx`) and switched `frontend/app/page.tsx` from `redirect('/dashboard')` to render the landing component. Root route now serves landing content in fresh static export. --- ## 🔵 Known Improvements (Lower Priority) | Item | Description | |---|---| | Edit Site modal | No way to edit login fields on existing sites after creation | | Cloudflare Turnstile | Current solver handles reCAPTCHA/hCaptcha only — Turnstile needs `cf-clearance-scraper` | | Mobile dashboard | Desktop-only — needs responsive grid breakpoints | | Sort by USD price | Listings table sorts by raw price — should optionally sort by `price_usd` | | N18: Site Discovery | Skipped — AI-powered discovery of new auction sites from web | *Last updated: 2026-03-13 — Session 28*