System Changelog

Protocol updates, architectural shifts, and intelligence pipeline refinements.

Unreleased

Fixed
6 changes
  • Frontend: Resolved SyntaxError in next.config.mjs by removing TypeScript type annotations from JavaScript file.
  • Frontend: Fixed dependency resolution tree conflicts between Next.js 16, React 19, and react-simple-maps using legacy-peer-deps.
  • Frontend: Resolved hydration mismatch in SignalsDashboard by moving localStorage-based state initialization to useEffect.
  • Frontend: Fixed GeoHeatmap tooltip positioning by switching from absolute to fixed coordinates for viewport-relative tracking.
  • Frontend: Refactored Column component imports and structure for improved maintainability.
  • Documentation: Updated STUDY_GUIDE.md and DOCS.md to reflect latest architecture and deployment workflows.
Added
23 changes
  • Error boundary components for all routes (error.tsx, global-error.tsx, not-found.tsx)
  • Admin route error boundaries (admin, categories, sources)
  • scripts/audit.sh — VPS environment health check
  • scripts/deploy.sh — automated pull-and-deploy for production
  • CHANGELOG.md — this file
  • Infinite scroll with IntersectionObserver (auto-loads on scroll)
  • Mobile category tab switcher (Geopolitics / Technology)
  • ThemeProvider context with three themes: Onyx, Light, Cyberpunk
  • Smooth theme transitions via temporary CSS class (avoids page-load flash)
  • Custom scrollbar styling matching theme variables
  • Root .env file template for Docker Compose
  • docker-compose.prod.yml — production-ready with Dozzle log viewer
  • Database backup service with daily cron + manual trigger
  • Database seed script for bootstrapping categories/sources
  • /changelog page — view changelog in-browser
  • Column component — reusable category column with independent scroll
  • Shell component — app shell layout wrapper
  • Sidebar component — navigation sidebar
  • Footer component — page footer
  • Signal skeleton component — loading state placeholders
  • frontend/.dockerignore — excludes node_modules and .next from build context
  • Header: Show/Hide controls toggle button with text label
  • Header: SIGNAL STACK logo now visible on mobile
Changed
18 changes
  • API_BASE now uses NEXT_PUBLIC_API_URL env var instead of hardcoded localhost
  • Header: replaced theme dropdown with simple icon toggle button
  • Dashboard: two-column category layout (Geopolitics + Technology)
  • Dashboard: each category has independent infinite scroll
  • Dashboard: responsive column breakpoints (1 → 2 → 3 → 4 columns)
  • Dashboard: container max-width expands on 2xl screens (1800px)
  • CSS: Tailwind v4 with oklch color space for all theme tokens
  • CSS: added scroll-smooth to html/body
  • CSS: custom scrollbar with theme-aware colors
  • docker-compose.yml: volume mounts limited to src/ and public/ only (prevents cache corruption)
  • docker-compose.yml: removed full ./frontend:/app mount that caused stale .next issues
  • docker-compose.prod.yml: container renamed to signalstack-app
  • docker-compose.prod.yml: added FRONTEND_URL, NODE_ENV, PORT env vars
  • docker-compose.prod.yml: added Dozzle log viewer on port 9999
  • Dockerfile: multi-stage build — production stage copies only build artifacts
  • .gitignore: expanded patterns for backups and planning docs
  • DOCS.md: complete rewrite with production deployment guide
  • STUDY_GUIDE.md: expanded into full study guide with code examples
Fixed
22 changes
  • Build: Button asChild prop not supported — replaced with plain <a> tags
  • Build: theme-provider import paths broken — fixed to @/ alias
  • Build: Maximize2 icon missing import
  • Build: duplicate loadMore function definition
  • Build: signals referenced before initialization (hook ordering)
  • Build: revalidateOnMount=false prevented initial data fetch
  • Build: striptags module missing from package.json
  • Runtime: API response shape mismatch ({ data: [] } vs direct array)
  • Runtime: stats prop shape mismatch between StatsBar and page
  • Docker: frontend container serving blank page (stale build cache)
  • Docker: missing tsconfig.json in production stage broke dev mode
  • Docker: missing postcss.config.mjs caused Tailwind CSS not to load
  • Docker: stale .next cache from host volume mount corrupting container builds
  • Docker: docker compose v2 vs docker-compose v1 compatibility
  • Git: merge conflict markers in docker-compose.prod.yml on VPS
  • Git: untracked scripts/ folder blocking git pull on VPS
  • CORS: browser blocking localhost:3000 fetches from HTTPS origin
  • Scroll: infinite scroll jumping to top on load more
  • Scroll: CSS columns redistributing items causing scroll reset
  • RSS: HTML tags not being stripped properly from feed content — added striptags library
  • UI: Show/Hide controls button moved to header for better UX
  • Dev: next.config.ts default API backend changed to localhost:3000 for npm run dev
Removed
7 changes
  • docker-compose.prod.yml volume mounts (production isolation)
  • Backend volume mounts in docker-compose.yml
  • Full frontend directory mount in docker-compose.yml (replaced with src/ + public/ only)
  • asChild prop usage on Button components
  • ScrollArea component in favor of native overflow-y-auto
  • Load More button replaced with infinite scroll sentinel
  • Hardcoded localhost:3000 API URLs in frontend

2026-04-04 — Initial Release

Added
9 changes
  • NestJS backend with RSS feed scheduler
  • Drizzle ORM + PostgreSQL database
  • Redis caching and AI rate limiting
  • Groq + OpenRouter dual-provider AI pipeline
  • Next.js 16 frontend dashboard
  • Admin portal (login, categories, sources management)
  • Docker Compose multi-container setup
  • Signal scoring engine (keyword-based)
  • Discord webhook alerts for high-impact signals

End of Record // Protocol Stable