jaeswift-website/api/data/changelog.json
jae e73b74cfa2 feat(agent): agentic chat with wallet auth and tiered model routing
- New /api/agent/chat endpoint with Venice tool-calling loop (max 8 iter)
- Tiered models: glm-4.7-flash default, kimi-k2-thinking for Elite+
- Wallet auth: /api/auth/{nonce,verify,whoami,logout} with Ed25519 + JWT
- 10 tools registered: site search, crypto prices, SITREP, .sol lookup,
  wallet xray, contraband/awesomelist search, changelog, trigger_effect
- Per-tool rate limits, 30s timeout, \$30/mo budget guard
- Frontend: tier badge, tool call cards, wallet sign-in handshake
- Changelog v1.40.0
2026-04-20 10:40:27 +00:00

741 lines
No EOL
48 KiB
JSON

{
"site": "jaeswift.xyz",
"entries": [
{
"version": "1.40.0",
"date": "20/04/2026",
"category": "FEATURE",
"title": "Agentic JAE-AI Chat \u2014 wallet auth + 10 tools + tiered model routing",
"changes": [
"JAE-AI homepage chat is now fully agentic \u2014 frontend routes to new POST /api/agent/chat which runs a Venice tool-calling loop (max 8 iterations) with tiered model selection",
"Tiered model routing: anonymous/operator visitors get zai-org-glm-4.7-flash ($0.125/$0.50 per M); Elite tier (\u22651 SOL held or $JAE holder) + admin get kimi-k2-thinking ($0.75/$3.20 per M) with deeper reasoning budget",
"Wallet-based auth: new POST /api/auth/nonce \u2192 POST /api/auth/verify flow using Ed25519 signatures (PyNaCl + base58) over a per-session 16-byte hex nonce with 5-min TTL; success issues HS256 JWT in HttpOnly Secure SameSite=Lax cookie (jae_session, 24h)",
"GET /api/auth/whoami returns {authenticated, address, tier, balance_sol, holdings}; POST /api/auth/logout clears cookie; JAE_JWT_SECRET auto-generated via secrets.token_hex(32) into apikeys.json on first start",
"Tier ladder: anonymous \u2192 operator (authenticated) \u2192 elite (\u22651 SOL) \u2192 admin (hardcoded wallet allowlist); tier computed live at /whoami using Helius RPC balance query",
"10 tools wired into the registry (api/agent_tools.py): search_site, get_sol_price, get_crypto_price, search_contraband, search_awesomelist, get_sitrep, lookup_sol_domain (Bonfida SNS), wallet_xray (Helius RPC), get_changelog, trigger_effect (frontend action)",
"Per-tool rate limits (token-bucket in-memory) keyed by (wallet_or_IP, tool) \u2014 e.g. 10/min for wallet_xray, 60/min for price fetches, 20/min for searches; 30s exec timeout per tool; 30s TTL cache on crypto prices",
"Hard $30/month output-token budget guard tracked in api/data/agent_budget.json \u2014 refuses with 'Monthly agent budget exceeded' once ceiling hit",
"Frontend chat (js/chat.js, 564 lines) rewritten: tier badge in chat header (ANONYMOUS / OPERATOR \ud83c\udf96\ufe0f / ELITE \u2b50 / ADMIN \ud83d\udee0\ufe0f, Elite has gold pulse animation), tool call cards with \u2705/\u274c status + expandable JSON details, typewriter animation on final reply, hooks window.__jaeEffects.toggle() on trigger_effect results",
"Wallet sign-in handshake: on wallet-connected event, chat.js fetches nonce, calls provider.signMessage (supports legacy + Wallet Standard), base58-encodes signature, posts /verify; all in-browser with zero extra deps (minimal bs58 encoder inlined)",
"Existing POST /api/chat (Shiro bot + CLI casual chat) left fully intact \u2014 agentic path is additive",
"New files: api/auth_routes.py (~250 lines), api/agent_tiers.py (~50 lines), api/agent_tools.py (539 lines), api/agent_routes.py (321 lines), css/agent-chat.css (145 lines); MOD api/app.py (+15 blueprint registration), api/requirements.txt (+PyJWT, PyNaCl, base58), index.html (+1 stylesheet link), js/chat.js (410\u2192564 lines)"
]
},
{
"version": "1.39.0",
"date": "20/04/2026",
"category": "FEATURE",
"title": "Sitewide Effects Suite \u2014 25 CLI-triggered visual modes",
"changes": [
"New /js/sitewide-effects.js (~1100 lines) + /css/sitewide-effects.css (~330 lines) \u2014 single central module, exposes window.__jaeEffects (toggle/enable/disable/active/disableAll)",
"Injected into 12 pages: index, hq/{telemetry,leaderboards,logs,briefing,profile,index}, depot/{contraband,recon}, recon, armoury/lab, transmissions/radar",
"VISUAL DISTORTION (7): /crt CRT scanlines + phosphor flicker + vignette; /vhs chromatic shift + roll bar + noise + glitch blocks; /glitch periodic text corruption + chroma shake; /redalert (/red alias) sepia-red filter + pulsing inset + Web Audio two-tone klaxon + DEFCON 1 banner; /invert; /blueprint hue-shift + grid overlay; /typewriter retype all text with click beeps",
"PHYSICS & MOTION (5): /gravity \u2014 panels + headings become fixed, fall with bounce physics; /earthquake \u2014 10s viewport shake; /lowgravity \u2014 1.2s transitions + floating bob; /melt \u2014 progressive vertical drip over 15s; /shuffle \u2014 scramble word order across visible text",
"ENVIRONMENTAL (5): /rain 200 drops + thunder flash + filtered-noise ambient; /snow 150 drifting flakes with sine sway; /fog dark overlay + torchlight circle around cursor; /night body dim + cursor spotlight via CSS vars; /underwater hue-rotate + wave overlay + bubble particles + lowpass noise",
"MIND-BENDING (3): /dimensions 3D perspective tilt tracking mouse; /portal \u2014 150px circular iframe lens following cursor showing random other page; /retro <1995|2005|2015|now> applies themed HTML classes (Comic Sans/yellow, Web 2.0 glossy, Material flat)",
"BONUS (5): /partymode disco hue-rotate + confetti + panel flashes + 120 BPM kick drum; /ghostmode invisible cursor + text fade until hover; /quantum panels teleport every 3s; /sneak replace all a/button labels with CLASSIFIED/REDACTED/etc; /hacker full-viewport scrolling fake code",
"Meta command /effects \u2014 shows ASCII status table of active effects; /effects off disables all; /effects all enables everything (chaos mode)",
"/matrix and /cmatrix migrated out of chat-cli.js into the sitewide-effects.js registry \u2014 commands stay identical but share the same single-source-of-truth module; dead toggleMatrix/toggleCMatrix code removed",
"Mobile + prefers-reduced-motion gating: all effects downgrade particle counts / disable audio gracefully on small screens or reduced-motion preference",
"Boss key (Escape / Ctrl+Shift+B) now calls window.__jaeEffects.disableAll() for a universal panic exit",
"Z-index ladder: 9000-9500 for overlays, 9600-9700 for loud UI (banners), leaves 9999+ for modals/toasts",
"CSS classes prefixed fx-* applied to <html> when active; each effect self-contained with enable/disable lifecycle, proper cleanup of RAF / intervals / AudioContext nodes / canvases",
"/help output extended with new EFFECTS category listing all 25 commands + /effects meta",
"Files: NEW js/sitewide-effects.js (1143 lines), NEW css/sitewide-effects.css (331 lines); MOD js/chat-cli.js (1142 \u2192 ~1129 lines \u2014 stripped 110 lines of matrix/cmatrix internals, added ~90 lines of thin command wrappers + EFFECTS help category); MOD 12 HTML files (+2 lines each for <link> + <script>)"
]
},
{
"version": "1.38.1",
"date": "20/04/2026",
"category": "FEATURE",
"title": "CLI Extensions: SSH, Adventure, Fortunes, Figlet, Achievements, Leaderboard, Boss Key",
"changes": [
"JAE-AI terminal (/) now has 7 new commands and 3 meta-features \u2014 type /help to see the categorised menu (SYSTEM / FUN / MODES / STATS)",
"/ssh <user>@<host> \u2014 fake SSH session with ED25519 handshake, MOTD, nested shell (ls/cat/cd/pwd/whoami/hostname/uname/date); exit via /exit-ssh or 'exit'",
"/adventure \u2014 short cyberpunk text adventure (DARK ALLEY \u2192 NEON ARCADE \u2192 HACKER DEN \u2192 LOW ROOFTOP \u2192 NEON ROOFTOP boss fight) with inventory, drone HP, /exit-adventure",
"/ttyper \u2014 typing-speed test with random programming quote, timer, WPM + accuracy calc, all-time best persisted in localStorage (jae-cli-ttyper-best-v1)",
"/cowsay <msg> \u2014 classic ASCII cow with auto-sized speech bubble",
"/figlet <text> \u2014 block-font ASCII banner (5-row UNICODE \u2588 glyphs, full A-Z/0-9/punctuation, truncated to 20 chars)",
"/fortune -o \u2014 offensive mode with 30 crude operator-themed quips; /fortune alone returns 20 tame SITREP entries",
"/cmatrix \u2014 enhanced matrix rain: dual-colour green+cyan, denser (14px), speed ramps over 30s cycles, optional square-wave AudioContext ticks for typing-sound effect",
"/achievements \u2014 progress tracker showing X/24 commands discovered with ASCII progress bar [\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591], list of unlocked commands, persists via localStorage (jae-cli-achievements-v1); toast pops for each new unlock",
"/leaderboard \u2014 session + all-time stats for this browser: command counts, unlocks, most-used command, top-5 session & all-time, military rank (recruit \u2192 general based on 20/50/100/200/500/1000/2000 thresholds)",
"Boss key \u2014 press Escape (while anything is 'hot') or Ctrl+Shift+B to instantly hide matrix rains, dev-mode badge, toasts, and clear chat input; shows 'NORMAL MODE' tooltip for ~2s",
"Nested mode routing \u2014 when inside /ssh, /adventure, /ttyper, plain (non-slash) chat input is routed to the nested handler instead of JAE-AI; chat.js updated with isInMode() check",
"Stats tracked in localStorage (jae-cli-stats-v1) and in-memory session counter; commands object grown from 17 \u2192 24",
"Files: js/chat-cli.js (+632 lines \u2192 1142 total), css/chat-cli.css (+21 lines), js/chat.js (+1 line \u2014 mode-aware CLI interception)"
]
},
{
"version": "1.38.0",
"date": "20/04/2026",
"category": "FEATURE",
"title": "Globe \u2014 Live Traffic Arcs from Real Visitors",
"changes": [
"Homepage 3D globe (globe.gl) now draws glowing arcs from real visitor country centroids into Manchester HQ (53.48\u00b0N, -2.24\u00b0W) instead of random fake cities",
"Data sourced live from /api/visitor/recent-arcs \u2014 tails last 20k lines of nginx access.log, GeoIPs unique IPs, maps country_code \u2192 centroid (130+ countries in api/data/country_centroids.json)",
"Frontend polls endpoint every 30s; tactical green arcs (rgba(0,255,60,.85)) fade to turquoise Solana (#14F195) tail for depth, 2.2s dash animation, 0.38 altitude auto-scale",
"Per-arc interactive labels on hover: \"COUNTRY \u2192 MCR \u00b7 Xm ago \u00b7 /page_path\"",
"New ARCS LIVE counter badge added to globe overlay HUD (turquoise accent), updates with each refresh",
"Sub-degree lat/lon jitter applied so multiple visitors from same country no longer stack on a single line",
"Graceful fallback: if endpoint returns empty/errors, shows 8 demo city arcs (New York/Tokyo/Paris/Sydney/Moscow/Singapore/Berlin/LA) so the globe is never bare",
"Timestamp parser handles nginx common-log format (DD/Mon/YYYY:HH:MM:SS \u00b1ZZZZ) for accurate relative times",
"Backend endpoint cache: 5-min TTL, deduped by IP, capped at 50 most-recent unique visitors"
]
},
{
"version": "1.37.2",
"date": "20/04/2026",
"category": "FEATURE",
"title": "LEADERBOARDS \u2014 Live Operational Rankings",
"changes": [
"New page /hq/leaderboards with 6-panel grid showing real-time traffic intelligence pulled from nginx access logs",
"TOP COUNTRIES (24h): GeoIP-resolved top 15 origins with auto-generated flag emojis and animated ranked bars",
"TOP PAGES (24h): most-hit routes (API/CSS/JS/favicons filtered out), top 20 with green-code path display",
"TOP REFERRERS (7d): inbound link sources filtered for own domain \u2014 graceful empty state for direct-traffic sites",
"PEAK HOURS (24h UTC): 24-bar hourly chart with amber-highlighted peak column, hover tooltips, auto-summary showing peak hour + total req/24h",
"BROWSER BREAKDOWN (24h): top 10 UA families with per-browser emoji (\ud83d\udfe2 Chrome / \ud83e\udd8a Firefox / \ud83e\udded Safari / \ud83c\udf00 Edge / \ud83e\udd16 Bot)",
"OPERATOR LEADERBOARD (7d): top 10 most-active IPs (privacy-masked first/last octet), request counts, last-seen relative timestamps \u2014 self-IP highlighted with amber (YOU) badge",
"Gold/silver/bronze rank styling for top-3 rows across all panels; #01\u2013#NN zero-padded ranks elsewhere",
"60s auto-refresh + manual refresh button + live LAST UPDATED counter (ticks per second)",
"Backend /api/leaderboards endpoint returns JSON aggregating countries, pages, referrers, peak_hours, browsers, top_operators \u2014 60s in-memory cache",
"New files: hq/leaderboards.html \u00b7 css/leaderboards.css \u00b7 js/leaderboards.js",
"Nav updated: HQ menu now includes LEADERBOARDS link with description \"Live traffic rankings & operator stats\"",
"Fully mobile responsive (768px stack / 420px compact) with scanlines + grid-bg matching site theme"
]
},
{
"version": "1.37.1",
"date": "20/04/2026",
"category": "FEATURE",
"title": "JAE-AI CLI Easter Egg \u2014 Local Pseudo-Shell",
"changes": [
"JAE-AI chat now detects messages starting with / and handles them locally as a fake CLI shell \u2014 never hits the Venice API, all 100% client-side JavaScript",
"New js/chat-cli.js + css/chat-cli.css \u2014 17 built-in commands: /help /ls /cat <file> /whoami /uptime /uname -a /date /ping <host> /sudo <cmd> /rm -rf / /hack <target> /matrix /clear /exit /fortune /history /neofetch",
"Virtual filesystem: /cat about.md|projects.json|skills.md|secrets.enc|mascot.txt|whoami.txt \u2014 with glitchy ASCII art ACCESS DENIED screen on secrets.enc",
"/whoami pulls real data from /api/visitor/scan; /uptime pulls from /api/telemetry/overview; /neofetch shows ASCII dragon with browser/OS/screen data",
"/matrix toggles a full-screen green Katakana matrix-rain canvas overlay (opacity 18%, 16px JetBrains Mono, var(--status-green))",
"/hack runs hollywood-style fake progress bars with payload injection drama before revealing it was all fake",
"/rm -rf / shows an ASCII destruction sequence then restores from backup with a cheeky message",
"Unknown commands route to: command not found: /<cmd>. Type /help for available commands.",
"Persistent /history ring-buffer (50 entries) stored in localStorage.jaeCliHist",
"BONUS: Konami code (\u2191\u2191\u2193\u2193\u2190\u2192\u2190\u2192BA) unlocks DEVELOPER MODE \u2014 amber badge top-right + extra commands: /api (list real endpoints), /curl <url> (actually fetch public URLs, 2KB truncated), /geo (pull live 24h country breakdown from telemetry)",
"chat.js sendMessage() patched to intercept /-prefix messages before hitting /api/chat \u2014 user bubble gets $ shell prompt, response styled in terminal-green monospace"
]
},
{
"version": "1.37.0",
"date": "20/04/2026",
"category": "FEATURE",
"title": "SCAN THE VISITOR \u2014 Typewriter Operator Recon Overlay",
"changes": [
"New homepage overlay greets every visitor with a dramatic typewriter-animated recon scan (~22ms/char): geolocation via GeoLite2, reverse-DNS-derived ISP, user-agent parsing (browser/OS/device) via user-agents pip package, masked IP (X.***.***.Y), screen/language/timezone/connection fingerprinting, plus GREEN/AMBER/RED threat-level status bar",
"Backend: new api/visitor_routes.py Flask blueprint with /api/visitor/scan endpoint \u2014 in-memory per-IP rate limiting (1 req / 10s), lazy GeoIP reader (country + city when available), 1s-timeout reverse DNS hostname lookup with ISP dictionary (BT/Virgin/Sky/AWS/Cloudflare/Hetzner etc.), country-flag emoji auto-generation, TOR exit-node heuristic",
"Frontend: js/scan-visitor.js + css/scan-visitor.css \u2014 720px CRT-scanline overlay with blur backdrop, monospace green typewriter output, blink cursor, three action buttons (CLOSE / DISMISS 7D / ACKNOWLEDGE), ESC-to-close, collapses into a persistent bottom-right OPERATOR ID badge on close, click badge to re-run scan",
"localStorage persistence: scanDismissed (7-day auto-expiry so returning operators only see the badge), scanBadgeHidden (\u00d7 on badge hides it permanently)",
"Fully mobile responsive: panel narrows to 96vw at <600px, reduces typography, adjusts badge position above bottom HUD bar",
"Bundled api/data/country_centroids.json (130+ ISO-3166 country lat/lon centroids) to power upcoming 3D globe traffic-arc feature",
"Exposed window.__jaeScan.run() / window.__jaeScan.reset() for debug re-triggering"
]
},
{
"version": "1.36.2",
"date": "20/04/2026",
"category": "FIX",
"title": "Telemetry Polish \u2014 GeoIP Live, Service Watchlist Cleanup, Git Hygiene",
"changes": [
"GEO INTEL panel now LIVE \u2014 installed DB-IP Country Lite mmdb (8.4MB, April 2026) at /usr/share/GeoIP/GeoLite2-Country.mmdb on VPS plus geoip2==5.2.0 Python package; telemetry dashboard now shows per-country traffic bars (US/GB/RU/CN/SG/DE/AD/UA currently top)",
"Monthly GeoIP auto-refresh: new /usr/local/bin/update-geoip.sh bash script + cron '0 4 2 * *' fetches fresh DB-IP mmdb on 2nd of each month, gunzips, restarts jaeswift-api.service, logs to /var/log/geoip-update.log",
"Service watchlist cleaned \u2014 removed matty-lol, caddy, n8n from SYSTEMD_SERVICES in telemetry_routes.py (they were generating false SERVICE DOWN alerts; matty-lol runs on PM2, caddy+n8n unused)",
"Git DIRTY flag cleared \u2014 added runtime-generated files to .gitignore: api/data/telemetry_history.json, api/data/telemetry_netstate.json, api/govdomains-source/ (these are written by cron jobs, not source code)",
"Repos panel now reports CLEAN instead of DIRTY for jaeswift-homepage"
]
},
{
"version": "1.36.1",
"date": "20/04/2026",
"category": "FIX",
"title": "Cron Log Path Corrections",
"changes": [
"Fixed CRON_JOBS definitions in telemetry_routes.py \u2014 contraband/awesomelist/govdomains logs use hyphens not underscores on VPS (contraband-sync.log not contraband_sync.log)",
"Corrected govdomains_sync schedule from Sunday 05:00 to every 12 hours (0 */12 * * *) \u2014 matches actual crontab",
"All 5 crons now report OK status on telemetry dashboard instead of UNKNOWN"
]
},
{
"version": "1.36.0",
"date": "19/04/2026",
"category": "FEATURE",
"title": "TELEMETRY Dashboard \u2014 Live Ops Command Centre",
"changes": [
"New /hq/telemetry page replacing placeholder \u2014 full live ops dashboard with boot sequence animation, CRT aesthetic, real-time metrics",
"Backend blueprint api/telemetry_routes.py \u2014 6 new endpoints: /api/telemetry/overview, /history, /nginx-tail, /geo, /alerts, /visitors, /commits",
"System metrics: CPU gauge + 24h sparkline, memory gauge + sparkline, per-mount disk ASCII bars, network RX/TX rates + history graph, uptime, load avg, kernel",
"Services panel: systemctl state for jaeswift-api, matty-lol, nginx, filebrowser, caddy, n8n, docker, ssh \u2014 plus PM2 processes \u2014 with uptime, mem, CPU per service",
"Cron tracker: schedule + last run + status (ok/fail/unknown) for contraband_sync, awesomelist_sync, govdomains_sync, sitrep, telemetry_snapshot \u2014 expandable log tails",
"Nginx 24h analytics: total requests, bandwidth, avg RPM, top 10 pages, top 10 IPs (masked), 4xx/5xx counts, avg response time \u2014 60s cache",
"Security panel: fail2ban jails + ban counts, UFW rules, SSH bruteforce attempts 24h, last reboot timestamp",
"SSL expiry tracker: per-domain days-remaining with colour coding (red <14d, amber <30d, green otherwise) for jaeswift.xyz, git, files, plex, agentzero",
"Stack inventory: auto-detected versions of Python, Node, nginx, Docker, ffmpeg, kernel, OS \u2014 cached at startup",
"Git activity panel: repo name, last commit SHA, message, timestamp, dirty flag for /var/www/jaeswift-homepage",
"Geo-distribution: parses nginx IPs through GeoLite2 mmdb (if installed) \u2014 horizontal bar chart of top 15 countries by traffic, graceful empty state if mmdb missing",
"Live nginx tail widget: last 20 requests auto-scrolling every 5s with fade-in animation, colour-coded status codes, masked IPs",
"Alert engine: real-time /api/telemetry/alerts computes CPU/mem/disk/service/cron/5xx/SSL/SSH thresholds \u2014 red/amber/info levels \u2014 scrolling marquee banner on page",
"Visitor counter: active unique IPs in last 5min + req/min \u2014 animated ONLINE NOW strong number",
"Burn rate panel: free disk GB, 24h bandwidth totals (\u2191/\u2193), load avg breakdown, kernel@hostname",
"Deployment ticker: horizontal marquee of last 10 git commits (SHA + message + ago)",
"Boot animation: 1.5s cinematic sequence \u2014 INITIALISING \u2192 SECURE CHANNEL \u2192 DECRYPTING \u2192 AUTHORISED \u2014 with progress bar, fades out to reveal grid",
"Alarm sound toggle: Web Audio API generates beep on new alert (urgent=880Hz for red, 440Hz for amber), default OFF, speaker icon top-right",
"Blinking LIVE indicator showing last-sync seconds, dot colour shifts green\u2192amber\u2192red as staleness grows",
"Mobile responsive \u2014 all 7 rows stack to single column below 768px, alerts shrink, grid reflows",
"New api/telemetry_snapshot.py ring-buffer cron (every 5min) appends CPU/mem/net to api/data/telemetry_history.json (288 points = 24h)",
"New styles: css/telemetry.css (~620 lines) with full dashboard grid, canvas gauges, ASCII disk bars, terminal tail, geo chart, marquee banners \u2014 all theming existing var(--tm-green/amber/red/sol) CRT scheme"
]
},
{
"version": "1.35.0",
"date": "19/04/2026",
"category": "UI",
"title": "Homepage Panel Layout Swap",
"changes": [
"Moved POWER and CONTAINERS panels from right column to below JAE-AI chat",
"Moved NOW PLAYING panel from below chat to right column (above Network Graph)",
"Maintains two-panel horizontal layout below chat (POWER/CONTAINERS + SERVER TIME)"
]
},
{
"version": "1.34.0",
"date": "19/04/2026",
"category": "FEATURE",
"title": "JAE AI Memory System (Memoria-style)",
"changes": [
"Browser-local persistent memory for JAE-AI chat via localStorage (key jae-ai-memory-v1, max 100 entries, auto-pruned by importance)",
"Auto memory extraction every 4 user messages via new /api/chat/extract-memories endpoint (Venice gemma-4-uncensored)",
"Relevance-ranked memory injection: top 5 keyword-matched + top 3 recent memories prepended as [REMEMBERED FACTS] block in system prompt per message",
"Chat history persistence across page reloads (last 50 messages in localStorage key jae-ai-history-v1, auto-restored with RESTORED FROM MEMORY divider)",
"Memory Vault modal UI: military/terminal themed, grouped by category (identity/preference/project/skill/goal/relationship/other) with per-entry delete, importance/timestamp display",
"Modal controls: EXPORT JSON (download backup), FORCE EXTRACT (manual trigger), CLEAR HISTORY (wipes conversation), CLEAR ALL MEMORIES (with confirm)",
"Memory button in chat header with live count badge + privacy info tooltip (\u2139) explaining local-only storage",
"Fuzzy dedup: new memories >80% similar to existing are merged (importance boosted) instead of duplicated",
"Privacy-first design: all memories stay in the user\u2019s browser; only current query + small relevant subset sent to Venice per message",
"Graceful degradation: missing localStorage or extraction failures never break the chat loop"
]
},
{
"version": "1.33.0",
"date": "19/04/2026",
"category": "FEATURE",
"title": "Homepage SERVER METRICS \u2014 Real Live Data",
"changes": [
"SERVER METRICS panel now shows real VPS metrics via /api/stats",
"CPU LOAD bar: real load_avg / nproc percentage",
"MEMORY bar: real used/total memory percentage",
"DISK I/O bar: real root filesystem usage percentage",
"BANDWIDTH bar: real Mbps delta computed from network_rx_bytes + network_tx_bytes, scaled against 1 Gbps link",
"NETWORK TRAFFIC graph: real-time line chart of download/upload Mbps with auto-scaling peak",
"DOWNLOAD/UPLOAD readouts: auto-format Kbps/Mbps/Gbps based on actual traffic",
"PACKETS readout replaced with real active TCP connections count",
"POWER panel: reliability % derived from real CPU load",
"CONTAINERS panel: real docker ps running/total counts with progress bar",
"UPTIME: real /proc/uptime days/hours/minutes",
"SERVER HEALTH: weighted score from real CPU/memory/disk",
"Refresh interval: 5 seconds (was 10)",
"All fake random-data generators for these metrics disabled"
]
},
{
"version": "1.32.0",
"date": "19/04/2026",
"category": "SECURITY",
"title": "Critical API Key Exposure Patched",
"changes": [
"Removed api/data/apikeys.json from git tracking",
"Added apikeys.json to .gitignore permanently",
"Purged file from entire git history via git-filter-repo (all 120 commits rewritten)",
"Force-pushed cleaned history to Gitea (old commits garbage-collected)",
"Created apikeys.example.json template for future contributors",
"Rotated Venice API key \u2014 old key revoked by user",
"VPS file permissions hardened: chmod 600 api/data/apikeys.json",
"Verified raw URL git.jaeswift.xyz/.../apikeys.json now returns HTTP 404",
"Audit confirmed: zero occurrences of any API key in git history across all branches"
]
},
{
"version": "1.31.0",
"date": "19/04/2026",
"category": "AI",
"title": "AI Model Switch \u2014 Gemma-4-Uncensored",
"changes": [
"Switched JAE AI chat model from olafangensan-glm-4.7-flash-heretic to gemma-4-uncensored",
"Switched SITREP daily briefing generator to same model for consistency",
"Updated admin panel chat defaults: model + header tag now reflect GEMMA-4-UNCENSORED",
"API restarted and verified live \u2014 chat now returns tighter, more natural replies"
]
},
{
"version": "v1.30.0",
"date": "18/04/2026",
"title": "ARMOURY: Wallet X-Ray \u2014 Solana Wallet Analyser",
"category": "ARMOURY",
"changes": [
"New tool: Wallet X-Ray \u2014 deep scan any Solana wallet address or connect your own wallet",
"Overview panel: SOL balance with live USD value, total portfolio value, wallet age, transaction count, and activity rating",
"Token Holdings: full SPL token table with logos, balances, live prices via Jupiter Price API, and USD values sorted by value",
"NFT Detection: identifies NFTs (0-decimal single-supply tokens) with image grid and Solscan links",
"Recent Transactions: last 20 transactions with signatures linked to Solscan, status indicators, and timestamps",
"Wallet Score: composite grading system (A+ to F) based on age, activity, diversity, and portfolio scores with colour-coded progress bars",
"Supports Token-2022 programme accounts alongside standard SPL Token programme",
"Rate-limit resilient: automatic RPC failover to backup endpoint with exponential backoff",
"Jupiter token list cached in sessionStorage for faster repeat scans",
"URL parameter support: ?address=... for direct wallet scanning via shared links",
"Wallet X-Ray card added to LAB page with cyan/turquoise theme",
"Military radar sweep loading animation during wallet scan",
"Fully responsive design \u2014 works on mobile and desktop"
]
},
{
"version": "v1.29.0",
"date": "18/04/2026",
"title": "UNREDACTED: International UFO Files + Government Scandal Documents",
"category": "UNREDACTED",
"changes": [
"Added 9 new collections across UFO/UAP, Covert Operations, and Government categories with 15 indexed documents",
"COMETA Report (France, 1999): 2 English translations of landmark French military UFO assessment \u2014 163 pages total",
"RAAF UFO Files (Australia): Declassified Royal Australian Air Force intelligence file \u2014 18 pages",
"Project Magnet (Canada, 1950-54): Official Canadian government UFO research programme documents \u2014 6 pages",
"NZDF UFO/UAP Files (New Zealand, 1984-2024): 3 documents including Cold War sighting reports and modern OIA responses \u2014 136 pages",
"Opera\u00e7\u00e3o Prato (Brazil, 1977): Secret Brazilian Air Force UFO investigation in the Amazon \u2014 58 pages",
"COINTELPRO: 758-page FBI surveillance programme compilation plus analytical examination added to existing collection",
"Operation Paperclip (1945-59): Declassified CIA documents on Nazi scientist recruitment programme \u2014 11 pages",
"Watergate Scandal (1972-74): Ford Presidential Library documents on the constitutional crisis \u2014 35 pages",
"Iran-Contra Affair (1985-87): Complete 506-page Congressional investigation report",
"New countries added to UFO/UAP category: France, Australia, Canada, New Zealand, Brazil"
]
},
{
"version": "v1.28.0",
"date": "18/04/2026",
"title": "CRIME SCENE: Major International Case Expansion",
"category": "CRIME SCENE",
"changes": [
"Added 6 new crime case collections across cold-cases, serial-killers, and landmark-cases with 11 indexed documents",
"D.B. Cooper Hijacking (1971): FBI investigation files \u2014 162 pages on America's only unsolved aircraft hijacking",
"JonBen\u00e9t Ramsey Murder (1996): Autopsy report, unsealed grand jury indictment, and analytical case study \u2014 19 pages",
"Black Dahlia / Elizabeth Short (1947): Complete FBI investigation file \u2014 204 pages on LA's most famous unsolved murder",
"Delphi Murders (2017): Probable cause affidavit and court documents from the Richard Allen prosecution \u2014 95 pages",
"Harold Shipman (1975-98): First three reports of the Shipman Inquiry (Dame Janet Smith) \u2014 1,162 pages on Britain's worst serial killer",
"Moors Murders \u2014 Brady & Hindley (1963-65): Mental Health Review Tribunal academic paper \u2014 22 pages",
"New landmark-cases/US subcategory with Delphi Murders as first entry",
"Total new document pages added: 1,664 across all crime scene collections"
]
},
{
"version": "v1.27.0",
"date": "18/04/2026",
"title": "CRIME SCENE: UK Murder Cases \u2014 Mass Upload",
"category": "CRIME SCENE",
"changes": [
"Added 11 UK murder case collections across 4 categories with 57 indexed documents",
"New 'Landmark Cases' category for cases that changed British law and policing",
"Daniel Morgan (1987): 3-volume Independent Panel Report \u2014 1,276 pages on Met Police corruption",
"Claudia Lawrence (2009): ICO FOI audit of North Yorkshire Police practices",
"Jill Dando (1999): Barry George appeal judgment and CCRC referral decision",
"Suzy Lamplugh (1986): Suzy Lamplugh Trust safety resources and case documentation",
"Stephen Lawrence (1993): Complete Macpherson Report \u2014 389 pages, coined 'institutional racism'",
"James Bulger (1993): ECHR Grand Chamber judgments, anonymity injunction, minimum term review",
"Damilola Taylor (2000): Sentamu Oversight Panel investigation review \u2014 56 pages",
"Lee Rigby (2013): ISC intelligence report (200 pages), Government response, sentencing remarks",
"Lord Lucan (1974): Presumption of Death Act legal analysis for Sandra Rivett murder",
"Madeleine McCann (2007): PJ Police Report translation (57 pages), Jane Tanner statements (4 parts)",
"Jack the Ripper (1888): Macnaghten Memoranda (1894) plus 7 victim inquest transcripts",
"23 verified PDFs, 95 total files deployed (28.2 MB) across all 11 cases"
]
},
{
"version": "1.26.0",
"date": "17/04/2026",
"title": "Zodiac Killer Police Reports & Crime Scene Documents",
"category": "CRIME SCENE",
"changes": [
"Populated the Police Reports subcollection for the Zodiac Killer with 5 documents (207 pages, 26.4 MB)",
"Added Lake Herman Road police reports \u2014 Benicia PD & Solano County Sheriff (60 pages, 5.6 MB)",
"Added Blue Rock Springs police reports \u2014 Vallejo PD (75 pages, 10.3 MB)",
"Added Lake Berryessa police reports \u2014 Napa County Sheriff's Office (35 pages, 5.1 MB)",
"Added Presidio Heights / Paul Stine police reports \u2014 SFPD (2 pages, 0.4 MB)",
"Added California Department of Justice investigation report (35 pages, 5.0 MB)",
"Zodiac Killer collection now contains 26 documents across 4 subcollections totalling approximately 78 MB",
"All documents sourced from zodiackiller.com's authenticated police report archive"
]
},
{
"version": "1.25.0",
"date": "16/04/2026",
"title": "Changelog Fix \u2014 Date Format & Missing Entries",
"category": "fix",
"changes": [
"Fixed NaN/NaN/NaN date display bug in changelog renderer",
"Updated formatDate() to handle both DD/MM/YYYY and ISO formats",
"Dates now render as human-readable format (e.g. 16th April 2026)",
"Standardised all changelog dates to UK DD/MM/YYYY format",
"Added all missing changelog entries from recent updates"
]
},
{
"version": "1.24.0",
"date": "16/04/2026",
"title": "MKUltra Documents Fixed",
"category": "fix",
"changes": [
"Replaced encrypted/unreadable MKUltra PDF with two working documents",
"Added CIA Inspector General Report (1963) \u2014 48-page TOP SECRET internal review",
"Added Senate Hearing transcript (1977) \u2014 171-page Congressional testimony exposing 149 sub-projects"
]
},
{
"version": "1.23.0",
"date": "16/04/2026",
"title": "PROPAGANDA \u2192 UNREDACTED Rename + Nav Animation + CRIME SCENE",
"category": "feature",
"changes": [
"Renamed PROPAGANDA section to UNREDACTED across all pages, nav, API, and URLs",
"Built block-reveal animation on UNREDACTED nav item (\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2192 UNREDACTED \u2192 reverse \u2192 loop)",
"Added global document search across all UNREDACTED categories, titles, and descriptions",
"Built new CRIME SCENE section at /depot/crimescene with red CRT theme",
"Four crime categories: Unsolved Murders, Serial Killers, Court Transcripts, Cold Cases",
"PDF viewer with search functionality for crime documents",
"New Flask API endpoint /api/crimescene"
]
},
{
"version": "1.22.0",
"date": "15/04/2026",
"title": "CRIME SCENE: Zodiac Killer Expanded \u2014 Letters, Ciphers & Subcollections",
"category": "CRIME SCENE",
"changes": [
"Fixed PDF path bug: document URLs now correctly include country code (US) via subcollection routing",
"Restructured Zodiac Killer into 4 subcollections: FBI Investigation Files, Zodiac Letters & Cards, The Zodiac Ciphers, Police Reports & Crime Scene Documents",
"Added 11 original Zodiac letter PDFs (1969\u20131974) from zodiackiller.com: Chronicle/Examiner cipher letters, Debut letter, Stine bloody shirt letter, Bus Bomb letter, Belli letter, Dragon card, Phillips 66 map letter, Little List/Mikado letter, Exorcist letter, Citizen card",
"Added 3 cipher PDFs: Z408 three-part cipher (solved 1969), Z340 cipher (solved 2020), Z32 map code cipher (unsolved)",
"Added Z340 Solution academic paper by Oranchak, Blake & Van Eycke (2024, 38 pages) from arXiv",
"Each of the 21 new documents has a unique historical description with contextual detail",
"Subcollection accordion UI with expand/collapse rendering",
"Total Zodiac archive: 4 subcollections, 21 documents, ~52MB",
"Police Reports subcollection created as placeholder for future expansion"
]
},
{
"version": "1.21.0",
"date": "15/04/2026",
"title": "CRIME SCENE: Zodiac Killer FBI Files",
"category": "CRIME SCENE",
"changes": [
"Added complete FBI Zodiac Killer investigation files (6 parts, 1,116 pages, 34MB)",
"Files sourced from FBI Vault via Archive.org \u2014 declassified FOIA release",
"Each document includes unique summary describing specific contents",
"Covers: Arthur Leigh Allen suspect investigation, cipher analysis, forensic lab reports, fingerprint comparisons, decades of tips and suspect referrals",
"PDFs served from /crimescene/docs/serial-killers/US/zodiac-killer/",
"First collection populating the Serial Killers category under United States"
]
},
{
"version": "1.20.1",
"date": "15/04/2026",
"title": "UNREDACTED: Document Expansion & PDF Search",
"category": "feature",
"changes": [
"Added PDF text search to document viewer (Ctrl+F, green/amber highlights, match counter, case toggle)",
"Text layer enabled \u2014 select and copy text from PDFs",
"Added unique descriptions to all 113 UK MOD UFO documents sourced from National Archives highlights guides",
"Added Project Condign (250MB, 460pp SECRET UK EYES ONLY) \u2014 the classified DI55 UAP study",
"Downloaded US documents: Project Blue Book, CIA UFO Collection, NSA UFO Documents, Pentagon UAP Report",
"Downloaded Covert Ops: MKUltra, Stargate Program, Operation Northwoods",
"Downloaded Government: JFK Warren Commission, Pentagon Papers, CIA Torture Report",
"Total UNREDACTED archive: 116+ PDFs across 3 categories and 2 countries"
]
},
{
"version": "1.20.0",
"date": "06/04/2026",
"title": "Bug Fixes & Polish",
"category": "fix",
"changes": [
"Fixed dispatches post pages crashing (mood type error + fallback path)",
"SOL price ticker fixed \u2014 switched to Binance API (CORS-friendly)",
"Tightened navbar spacing between SOL price and wallet connect",
"Converted all post mood values from integers to proper strings"
]
},
{
"version": "1.19.0",
"date": "06/04/2026",
"title": "Admin Panel Overhaul",
"category": "feature",
"changes": [
"Fixed broken Editor section \u2014 full post editing with live preview",
"Fixed broken Backups section \u2014 export/import site data as ZIP",
"Added SITREP admin section \u2014 generate reports, view archive",
"Added Data Sync section \u2014 trigger Contraband/RECON syncs, view stats",
"Added Changelog admin section \u2014 CRUD for maintenance log entries",
"Added Cron Jobs section \u2014 view/toggle all scheduled tasks",
"Reorganised sidebar into grouped sections"
]
},
{
"version": "1.18.0",
"date": "06/04/2026",
"title": "SITREP \u2014 Daily AI Briefing System",
"category": "feature",
"changes": [
"Built automated daily intelligence briefing at /transmissions/sitrep",
"Venice AI generates military-formatted summaries from 5 RSS sources + crypto data",
"Sectors: ALPHA (technology), BRAVO (cybersecurity), CHARLIE (crypto markets)",
"Daily cron job at 0700 UTC with archive navigation",
"Source links included for every story",
"API endpoints: /api/sitrep, /api/sitrep/list, /api/sitrep/generate"
]
},
{
"version": "1.17.0",
"date": "06/04/2026",
"title": "TOKEN FORGE \u2014 SPL Token Launcher",
"category": "feature",
"changes": [
"Built token launcher at /tokenlauncher with full SPL token creation",
"Set name, symbol, supply, decimals, image, description",
"Optional mint/freeze authority revocation",
"Single transaction deployment with confirmation modal",
"0.1 SOL service fee per launch",
"Added TOKEN FORGE card to /armoury/lab (amber accent)"
]
},
{
"version": "1.16.0",
"date": "05/04/2026",
"title": ".SOL Domain Registration",
"category": "feature",
"changes": [
"Built .SOL domain search and registration at /soldomains",
"Bonfida SNS integration for availability checking and registration",
"Reverse lookup and My Domains tabs",
"Multi-wallet support (Phantom, Solflare, Backpack, Jupiter, MetaMask)",
"Added card to /armoury/lab (turquoise accent)"
]
},
{
"version": "1.15.0",
"date": "05/04/2026",
"title": "SOL Price Ticker",
"category": "feature",
"changes": [
"Live Solana price in navbar with 24hr change indicator",
"Binance API primary, CoinGecko fallback",
"Auto-refreshes every 30 seconds",
"Purple Solana-branded styling"
]
},
{
"version": "1.14.0",
"date": "05/04/2026",
"title": "Sitewide Solana Wallet Connect",
"category": "feature",
"changes": [
"Global wallet connect button in navbar across all 28 pages",
"Multi-wallet support: Phantom, Solflare, Backpack, Coinbase, Trust, MetaMask, Jupiter",
"Persistent connection via localStorage \u2014 survives page navigation",
"Connected dropdown with address copy, Solscan link, disconnect",
"Global window.solWallet API for all Solana features",
"Refactored soldomains.js to use shared wallet (removed 146 lines)"
]
},
{
"version": "1.13.0",
"date": "05/04/2026",
"title": "RADAR \u2014 Live Tech News Feed",
"category": "feature",
"changes": [
"Built live tech news aggregator at /transmissions/radar",
"Pulls from Hacker News, Reddit (r/technology, r/programming, r/netsec), Lobsters",
"Search, source filters, and auto-refresh",
"Military-themed CRT styling with scanlines",
"Flask API with caching at /api/radar"
]
},
{
"version": "1.12.0",
"date": "04/04/2026",
"title": "Nav Dropdown Descriptions",
"category": "feature",
"changes": [
"Added descriptive subtitles beneath every nav dropdown item",
"Updated navigation API with description field support"
]
},
{
"version": "1.11.0",
"date": "04/04/2026",
"title": "RECON \u2014 Site Restructure & Accordion Navigation",
"category": "feature",
"changes": [
"Moved RECON to /depot/recon for consistency with other depot pages",
"Subcategories now collapsible accordion sections with toggle arrows",
"Fixed navigation click bug that caused page reset",
"Fixed white flash on page load",
"Added cache-busting version tags to assets"
]
},
{
"version": "1.10.0",
"date": "04/04/2026",
"title": "RECON \u2014 Curated Lists Rebuild",
"category": "feature",
"changes": [
"Flattened 4-level navigation to 2-level (sector > list > entries)",
"Grouped entries by source list instead of duplicate subcategory cards",
"Stripped 'Awesome' prefix from all 660 list names",
"Reused CONTRABAND CSS for consistent styling across depot pages"
]
},
{
"version": "1.9.0",
"date": "04/04/2026",
"title": "RECON \u2014 Curated Lists Database",
"category": "feature",
"changes": [
"Parsed 660 curated lists into 28 themed sectors",
"135,179 total entries across all sectors",
"Built Flask API endpoints for index, sector detail, and search",
"Weekly auto-sync cron job (Sundays 4am) to pull latest data",
"Full-text search across all 135k entries"
]
},
{
"version": "1.8.0",
"date": "03/04/2026",
"title": "CONTRABAND Auto-Sync & Grid Overhaul",
"category": "feature",
"changes": [
"Subcategories now display as 2-column card grid with expandable detail panels",
"Added weekly auto-sync \u2014 resource database updates every Sunday at 03:00",
"Click any subcategory card to expand/collapse its entries below",
"Active card highlighting with amber glow",
"Responsive grid: 2-col desktop, 1-col mobile"
]
},
{
"version": "1.7.0",
"date": "03/04/2026",
"title": "Sitewide Visual Overhaul",
"category": "fix",
"changes": [
"Bumped 64 font sizes sitewide \u2014 no more microscopic text",
"Brightened all text colours: primary #c0c0c0\u2192#d8d8d8, secondary #707070\u2192#999999, muted #3a3a3a\u2192#666666",
"CONTRABAND page: 4-column category grid with responsive breakpoints",
"Purged all third-party attribution references from entire codebase"
]
},
{
"version": "1.6.0",
"date": "03/04/2026",
"title": "CONTRABAND \u2014 Classified Resource Index",
"category": "feature",
"changes": [
"Launched CONTRABAND page at /depot/contraband with 15,800+ indexed assets",
"24 categories with military codenames (CRT-001 through CRT-024)",
"Full-text search across all entries via API",
"Starred/top-pick filter system with \u2b50 indicators",
"Collapsible subcategories with item counts",
"Flask API endpoints: /api/contraband, /api/contraband/<slug>, /api/contraband/search"
]
},
{
"version": "1.5.1",
"date": "03/04/2026",
"title": "Navbar Dropdown Fix",
"category": "fix",
"changes": [
"Fixed dropdown menus disappearing on all subpages",
"Root cause: 25 subpages used class 'navbar' instead of 'nav-main'",
"All pages now use correct nav class with proper positioning and z-index"
]
},
{
"version": "1.5.0",
"date": "02/04/2026",
"title": "Globe & Chat AI Admin Panels",
"category": "feature",
"changes": [
"Admin panel: Globe management section \u2014 server location, rotation speed, arc cities, colours",
"Admin panel: Chat AI configuration \u2014 model selection, system prompt, greeting toggle",
"New API endpoints: /api/globe, /api/chat-config with auth-protected GET/POST",
"Interactive colour picker and slider controls for globe parameters",
"Arc cities table with add/remove functionality"
]
},
{
"version": "1.4.0",
"date": "01/04/2026",
"title": "Interactive 3D Globe",
"category": "feature",
"changes": [
"Added interactive 3D globe to homepage using globe.gl",
"Animated arcs connecting server location to cities worldwide",
"Hex polygon layer with customisable opacity and colour",
"Atmosphere glow effect with configurable altitude",
"Auto-rotation with adjustable speed"
]
},
{
"version": "1.3.0",
"date": "31/03/2026",
"title": "Blog & Transmissions System",
"category": "feature",
"changes": [
"Built blog system with markdown-to-HTML rendering",
"Blog index page with post cards, dates, and categories",
"Individual post pages with full content rendering",
"Transmissions section: SITREP, RADAR, DISPATCHES pages",
"Admin panel: blog post management with create/edit/delete"
]
},
{
"version": "1.2.0",
"date": "30/03/2026",
"title": "Admin Panel & Authentication",
"category": "feature",
"changes": [
"Built admin panel at /admin with session-based authentication",
"Dashboard with real-time server stats and process monitoring",
"Navigation management: add, edit, reorder, delete menu items",
"Blog post editor with live preview",
"Password-protected API endpoints with cookie auth"
]
},
{
"version": "1.1.0",
"date": "29/03/2026",
"title": "HQ & Section Pages",
"category": "feature",
"changes": [
"Created full site navigation structure with dropdown menus",
"HQ section: Telemetry, Logs, Profile, Briefing pages",
"DEPOT section: index, Propaganda, Recon, Exfil pages",
"ARMOURY section: Lab, Field Manuals, Deployments, Debrief pages",
"COMMS section: Open Channels, Encrypted Line, Backup Relay pages"
]
},
{
"version": "1.0.0",
"date": "28/03/2026",
"title": "Initial Launch",
"category": "release",
"changes": [
"Launched jaeswift.xyz with sci-fi military dashboard theme",
"Homepage with system stats, process monitor, clock, and typing effect",
"Dark theme with scanline overlay and monospace typography",
"Flask API backend for real-time server data",
"Responsive design across all screen sizes",
"Gitea repository setup at git.jaeswift.xyz"
]
}
]
}