- Fixed TypeError in SessionBrowser by adding defensive checks for the sessions array.
- Implemented mandatory URL persistence: The research URL is now saved in DB, shown in UI, and included in reports.
- Added 'Start New Analysis' button to the session browser for better UX flow.
- Updated documentation to reflect v2.6.1 changes.
- Replaced the basic session list with a dedicated, card-based Session Browser page.
- Each session card now displays product name, category, description, and a thumbnail placeholder for better usability.
- Updated the backend DB manager to extract this rich information from the existing JSON data store.
- Refactored the frontend (App.tsx, types.ts) to support the new UI and data structure.
- Added new component SessionBrowser.tsx and its corresponding CSS.
- Updated documentation to reflect the v2.6 changes.
- Implement relational data structure in Notion as per the plan.
- Add scripts for initial data import (import_product.py) and distribution to related databases (distribute_product_data.py).
- Create helper scripts for reading Notion content.
- Update Notion_Dashboard.md and GEMINI.md with the latest implementation status, database IDs, and key lessons learned from the MVP phase, including API constraints and schema-first principles.
- Added logic to automatically flatten list-wrapped JSON responses from LLM in Impressum extraction.
- Fixed 'Unknown Legal Name' issue by ensuring property access on objects, not lists.
- Finalized v0.3.0 features and updated documentation with Lessons Learned.
- Increased logging verbosity in to track raw input to LLM and raw LLM response.
- This helps diagnose why Impressum data extraction might be failing for specific company websites.
- Enforced fresh scrape on 'Analyze' request to bypass stale cache.
- Implemented 2-Hop Impressum scraping strategy (via Kontakt page).
- Refined numeric extraction for German locale (thousands separators).
- Updated documentation with Lessons Learned.
- Updated version to v0.3.0 (UI & Backend) to clear potential caching confusion.
- Enhanced Impressum scraper to extract VAT ID (Umsatzsteuer-ID).
- Implemented 2-Hop scraping strategy: Looks for 'Kontakt' page if Impressum isn't on the start page.
- Added VAT ID display to the Legal Data block in Inspector.
- Implemented Impressum scraping with Root-URL fallback and enhanced keyword detection.
- Added 'clean_json_response' helper to strip Markdown from LLM outputs, preventing JSONDecodeErrors.
- Improved numeric extraction for German formatting (thousands separators vs decimals).
- Updated Inspector UI with Polling logic for auto-refresh and display of AI Dossier and Legal Data.
- Added Manual Override for Website URL.
- Ported robust Wikipedia extraction logic (categories, first paragraph) from legacy system.
- Implemented database-driven Robotics Category configuration with frontend settings UI.
- Updated Robotics Potential analysis to use Chain-of-Thought infrastructure reasoning.
- Added Manual Override features for Wikipedia URL (with locking) and Website URL (with re-scrape trigger).
- Enhanced Inspector UI with Wikipedia profile, category tags, and action buttons.
This commit introduces the foundational elements for the new "Company Explorer" web application, marking a significant step away from the legacy Google Sheets / CLI system.
Key changes include:
- Project Structure: A new directory with separate (FastAPI) and (React/Vite) components.
- Data Persistence: Migration from Google Sheets to a local SQLite database () using SQLAlchemy.
- Core Utilities: Extraction and cleanup of essential helper functions (LLM wrappers, text utilities) into .
- Backend Services: , , for AI-powered analysis, and logic.
- Frontend UI: Basic React application with company table, import wizard, and dynamic inspector sidebar.
- Docker Integration: Updated and for multi-stage builds and sideloading.
- Deployment & Access: Integrated into central Nginx proxy and dashboard, accessible via .
Lessons Learned & Fixed during development:
- Frontend Asset Loading: Addressed issues with Vite's path and FastAPI's .
- TypeScript Configuration: Added and .
- Database Schema Evolution: Solved errors by forcing a new database file and correcting override.
- Logging: Implemented robust file-based logging ().
This new foundation provides a powerful and maintainable platform for future B2B robotics lead generation.
- Added documentation for Notion setup and resources (notion_integration.md).
- Added scripts for authentication test, database creation, and product insertion.
- Successfully tested connection and data mapping for 'RoboPlanet Product Master'.
- Added section on 'Hardware / DSL-Leitung' explaining the detected 17m branch line (Stichleitung) causing signal reflections and timeouts.
- Clarified that 'IP Flapping' was caused by stale caching of the previous day's IP, exacerbated by incorrect DNS settings (8.8.8.8).
- Finalized troubleshooting steps for Synology and FritzBox configuration.
- Documented the critical finding of hardcoded DNS (8.8.8.8) in Synology Network Interface settings overriding global DSM settings.
- Added comprehensive checklist for Synology, FritzBox, and Client configuration to ensure DNS stability and NAT loopback functionality.
- Updated log analysis section with 'NETWORK_WAIT' and 'ALERT' scenarios.
- Updated 'duckdns_setup.md' with critical instructions for configuring FritzBox DNS Rebind Protection to enable internal access (NAT Loopback).
- Added steps for clearing client-side DNS cache (Windows).
- Included Cloudflare DNS switch in documentation reflecting recent monitor script changes.
- Added 'Log_from_docker/' to ignore runtime logs.
- Added 'diag_venv/' to ignore temporary diagnostic environments.
- Added '*.db' to exclude local SQLite databases from version control.
- Updated 'docker-compose.yml' with new DuckDNS token to lock out rogue updaters (FritzBox/HA).
- Enhanced 'dns-monitor/monitor.sh' to detect 'IP Flapping' (Zombie Updaters) by comparing Public vs. Global vs. Local IPs.
- Updated documentation 'duckdns_setup.md' with troubleshooting steps for IP flapping and zombie updaters.
- Changes the model ID from the generic 'gemini-1.5-flash' to the specific 'gemini-1.5-flash-001'.
- This resolves the '404 NOT_FOUND' error where the API could not locate the generic model alias in the v1beta API version.
- Rewrites and in helpers.py to use the new and syntax.
- Removes the deprecated calls which were causing AttributeError.
- Updates parameter handling to use .
- This change ensures full compatibility with the library version 1.0+.
- Reverts docker-compose.yml to use volume mount for gemini_api_key.txt, due to format constraints.
- Restores and refines Config.load_api_keys() in config.py.
- **Crucially, calls Config.load_api_keys() at the start of gtm_architect_orchestrator.py to ensure keys are loaded.**
- Adjusts _get_gemini_api_key in helpers.py to prioritize keys from Config.API_KEYS.
- This definitively addresses the 'API Key missing' error by guaranteeing key initialization.
- Modifies docker-compose.yml to use for injecting the Gemini API key, which is more robust than volume mounting.
- Updates helpers.py to prioritize reading the API key from the environment variable.
- Removes the now-redundant file-based key loading logic from config.py and the Dockerfile.
- This change completely bypasses the problematic file system interactions within the container, providing a definitive fix for the 'API Key missing' error.
- Adds a prominent warning section to the migration guide.
- Explains that local volume mounts (sideloading) will overwrite container code.
- Explicitly states that Already up to date. on the host is mandatory before rebuilding to ensure changes are applied. This addresses a recurring debugging issue.
- Adds a version and timestamp to the orchestrator's startup logs to verify code deployment.
- Introduces extensive debug logging in config.py and helpers.py to trace the API key loading process, including exact file paths and environment variable checks. This will help diagnose the persistent 'API Key missing' error.