Changed the frontend container port mapping from 80:80 to 4200:80 to avoid conflicts with system services and improve browser compatibility on macOS.
Port 4200 is the standard Angular development port and is less likely to be blocked by system security settings or conflict with other services.
**Access:**
- Frontend: http://localhost:4200
- API: http://localhost:8000
- MinIO Console: http://localhost:9001🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
**Angular Downgrade:**
- Downgraded from Angular 20 to Angular 19 for better stability
- Updated all @angular/* packages to ^19.0.0
- Adjusted TypeScript to ~5.8.0 for Angular 19 compatibility
- Added required outputPath and index to angular.json for Angular 19 build requirements
- Verified production build works successfully
**NPM Registry Enhancements:**
- Updated Dockerfile.frontend to regenerate package-lock.json when custom npm registry is provided
- When NPM_REGISTRY is set to custom URL, the build will:
1. Configure npm to use the custom registry
2. Delete existing package-lock.json
3. Generate new package-lock.json with custom registry URLs
4. Run npm ci with the new lock file
- Default behavior (npmjs.org) unchanged - uses existing package-lock.json
**Build Verification:**
- Local build tested: ✓
- Docker build tested: ✓
- Bundle size: 348.75 kB raw, 91.73 kB gzipped
- No vulnerabilities found
**Usage:**
```bash
# Default registry (uses existing package-lock.json)
./quickstart.sh
# Custom registry (regenerates package-lock.json)
NPM_REGISTRY=http://your-npm-proxy:8081/repository/npm-proxy/ ./quickstart.sh
```
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Implemented a complete Angular 20 migration with modern standalone components architecture and production-ready Docker deployment:
**Frontend Migration:**
- Created Angular 20 application with standalone components (no NgModules)
- Implemented three main components: artifacts-list, upload-form, query-form
- Added TypeScript models and services for type-safe API communication
- Migrated dark theme UI with all existing features
- Configured routing and navigation between views
- Set up development proxy for seamless API integration
- Reactive forms with validation for upload and query functionality
- Auto-refresh artifacts every 5 seconds with RxJS observables
- Client-side sorting, filtering, and search capabilities
- Tags displayed as inline badges, SIM source grouping support
**Docker Integration:**
- Multi-stage Dockerfile for Angular (Node 24 build, nginx Alpine serve)
- nginx configuration for SPA routing and API proxy
- Updated docker-compose.yml with frontend service on port 80
- Health checks for all services
- Production-optimized build with gzip compression and asset caching
**Technical Stack:**
- Angular 20 with standalone components
- TypeScript for type safety
- RxJS for reactive programming
- nginx as reverse proxy
- Multi-stage Docker builds for optimal image size
All features fully functional and tested in Docker environment.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Guarantee each SIM source has 2-4 artifacts (previously was random)
- Pre-assign artifacts to SIM sources before generation
- 70% of artifacts are grouped, 30% remain ungrouped
- Shuffle assignments to randomize display order
- Makes multi-artifact grouping feature more obvious in demo data
Example output: Each sim_run_* ID now clearly shows 2-4 related artifacts
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Database changes:
- Add sim_source_id column to artifacts table for grouping multiple artifacts
- Create Alembic migration (001_add_sim_source_id) for schema update
- Add Alembic env.py for migration support with environment-based DB URLs
API enhancements:
- Add sim_source_id parameter to upload endpoint
- Add sim_source_id filter to query endpoint
- Add new /grouped-by-sim-source endpoint for getting artifacts by group
- Update all API documentation to include sim_source_id
UI improvements:
- Make tags required field and more prominent in upload form
- Add tags display directly in artifacts table (below filename)
- Add SIM Source ID field in upload form with helper text for grouping
- Update table to show sim_source_id (falls back to test_suite if null)
- Tags now displayed as inline badges in main table view
Seed data updates:
- Generate sim_source_id for 70% of artifacts to demonstrate grouping
- Multiple artifacts can share same sim_source_id
- Improved seed data variety with tag combinations
Features:
- Tags are now prominently displayed in both table and detail views
- Multiple artifacts can be grouped by SIM source ID
- Users can filter/query by sim_source_id
- Backward compatible - existing artifacts without sim_source_id still work
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Change from postgres:15 to postgres:15-alpine
- Maintains consistency with Alpine-based API container
- Smaller image size and better ARM64 support
- All services now use Alpine or minimal base images
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Switch from Debian (python:3.11-slim) to Alpine (python:3.11-alpine) for better ARM64 support
- Replace apt-get with apk package manager for lighter, faster builds
- Update package dependencies for Alpine (musl-dev, postgresql-dev, linux-headers)
- Change user creation from useradd to adduser (Alpine syntax)
- Add .gitkeep files to preserve empty alembic directories in git
- Update all quickstart scripts to always rebuild containers with --build flag
- Fixes ARM64 package installation errors on Apple Silicon Macs
- Fixes missing alembic directory errors on fresh clones
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added --build flag to docker-compose up command
- Ensures latest code changes are always included
- Prevents issues with stale cached images
- Updated all three quickstart scripts (Linux/macOS, Windows batch, PowerShell)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Cleans apt cache before update to avoid stale data
- Adds --fix-missing flag to handle transient mirror synchronization issues
- Fixes hash sum mismatch errors during package installation
- Improves reliability when building on different mirrors
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added libpq-dev package for ARM64 PostgreSQL client libraries
- Added --no-install-recommends flag to reduce image size
- Ensures compatibility with Apple Silicon (M1/M2/M3) and ARM servers
- Fixes package installation errors on arm64 architecture
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Ensures alembic/ and alembic/versions/ directories exist when cloning
- Fixes error on fresh installations where directories were missing
- Git doesn't track empty directories, .gitkeep solves this
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implemented sortable table headers with visual indicators (▲▼)
- Click any column to sort ascending/descending
- Sort state persists during auto-refresh
- Added compact inline search filter in toolbar
- Unified search across all columns (Sim Source, Artifacts, Date, Uploaded By)
- Positioned search on right side of toolbar for cleaner layout
- Real-time filtering as you type
- Combined filtering and sorting work seamlessly together
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Renamed project from "Test Artifact Data Lake" to "Obsidian"
- Updated all branding across README, quickstart scripts, and API
- Implemented dark mode theme with professional color palette
- Simplified table to 4 essential columns (Sim Source, Artifacts, Date, Uploaded By)
- Replaced emoji icons with Lucide SVG icons for better scaling
- Added auto-refresh functionality (5-second intervals, toggleable)
- Enhanced UI with modern flexbox layouts and hover effects
- Updated upload form labels to match new terminology
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
New files:
- quickstart.bat - Windows batch script for Command Prompt
- quickstart.ps1 - Windows PowerShell script with colored output
- Both scripts auto-detect Docker/Docker Compose
- Automatically open browser after setup
- Error handling and user-friendly messages
Updated:
- README.md - Added one-command setup section for all platforms
- Highlighted Web UI as primary access method
Now Windows users can run:
quickstart.bat (Command Prompt)
quickstart.ps1 (PowerShell)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Features:
- Modern web interface with table view of all artifacts
- Display all metadata: filename, type, size, test info, tags
- Upload form with full metadata support
- Query/filter interface
- Detail modal for viewing full artifact information
- Download and delete actions
- Integrated seed data generation via UI
- Responsive design with gradient theme
Technical:
- Pure HTML/CSS/JavaScript (no frameworks)
- FastAPI serves static files
- Seed data API endpoint for easy testing
- Pagination support
- Real-time deployment mode display
The UI is now accessible at http://localhost:8000/🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major enhancements:
- Feature flag system for cloud vs air-gapped deployment modes
- Automatic storage backend selection based on deployment mode
- Comprehensive seed data generation utilities
- Support for generating CSV, JSON, binary, and PCAP test files
- Quick seed script for easy data generation
- Angular 19 frontend complete setup documentation
- Material Design UI component examples and configuration
Fixes:
- Resolve SQLAlchemy metadata column name conflict
- Rename metadata to custom_metadata throughout codebase
- Fix API health check issues
Documentation:
- FEATURES.md - Complete feature overview
- FRONTEND_SETUP.md - Angular 19 setup guide with examples
- SUMMARY.md - Implementation summary
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>