- Implement full web interface with Go html/template server
- Add GX component library (buttons, dialogs, tables, forms, etc.)
- Create scene/performer/studio/movie detail and listing pages
- Add Adult Empire scraper for additional metadata sources
- Implement movie support with database schema
- Add import and sync services for data management
- Include comprehensive API and frontend documentation
- Add custom color scheme and responsive layout
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
This release adds comprehensive metadata support and fixes the duplicate
performer issue.
MAJOR FIXES:
✅ Duplicate Prevention
- Added UNIQUE(source, source_id) constraint to performers table
- ON CONFLICT DO UPDATE in performer store
- No more duplicate Riley Reid entries!
✅ Comprehensive TPDB Metadata
- Extended Performer model with ALL TPDB fields
- Physical: height, weight, measurements, cup size, eye/hair color
- Personal: birthday, astrology, birthplace, ethnicity, nationality
- Body: tattoos, piercings, boob job status
- Career: start/end years, active status
- Added PerformerExtras nested struct for TPDB "extras" object
- Parse weight/height strings ("49kg" -> 49, "160cm" -> 160)
- Handle British spelling (hair_colour, eye_colour)
✅ Enriched Import
- Auto-fetch full performer details via GetPerformerByID
- Search results now enriched with complete metadata
- UUID + numeric TPDB ID both stored
✅ Enhanced CLI Output
- Formatted display with all available stats
- Height shown in cm and feet/inches
- Weight shown in kg and lbs
- Organized sections (IDs, Personal, Physical, Bio, Media)
- Beautiful separator bars
TECHNICAL DETAILS:
- Schema: 25+ new performer fields with proper types
- Types: PerformerExtras struct for nested TPDB response
- Mapper: String parsing for "160cm", "49kg" format
- Store: Full field support in Create/Search/GetByID
- Display: Conditional rendering of all available data
TESTING:
✅ Riley Reid import: All 25+ fields populated correctly
✅ Duplicate prevention: Second import updates existing record
✅ Broad search ("riley"): Only 2 unique performers
✅ Data accuracy: Matches theporndb.net/performers/riley-reid
Database now captures:
- UUID: 26d101c0-1e23-4e1f-ac12-8c30e0e2f451
- TPDB ID: 83047
- Birthday: 1991-07-09
- Height: 160cm (5'3")
- Weight: 49kg (108lb)
- Measurements: 32A-24-34
- All tattoos, piercings, career info, and full bio
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Removed specific git clone URL from README
- Removed example import path with repository details
- Removed issues tracker URL
- Maintained Go import paths (required for builds)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major Features:
- ✅ Complete TPDB scraper implementation with real API calls
- ✅ Auto-fetch on cache miss: search commands now automatically import from TPDB when not found locally
- ✅ Comprehensive documentation (5 markdown files for Bookstack)
- ✅ Import commands for performers, studios, and scenes
- ✅ Fixed JSON type mismatches (aliases array, studio numeric IDs)
Changes:
1. TPDB Scraper (internal/scraper/tpdb/):
- types.go: Full API response structures with correct types
- PerformerResponse.Aliases: string → []string (TPDB returns array)
- StudioResponse.ID: string → int (TPDB returns numeric IDs)
- SiteInfo.ID: string → int (scenes reference studios by number)
- mapper.go: Maps TPDB responses to internal models
- Converts aliases array to comma-separated string
- Converts numeric studio IDs to strings using strconv.Itoa()
- scraper.go: Real HTTP client with Bearer token auth
- SearchPerformers, SearchStudios, SearchScenes implemented
- GetPerformerByID, GetStudioByID, GetSceneByID implemented
2. CLI Auto-Fetch (cmd/goondex/main.go):
- performer-search: Auto-fetches from TPDB if local DB empty
- studio-search: Auto-fetches from TPDB if local DB empty
- scene-search: Auto-fetches basic metadata (no relationships)
- Graceful handling of missing TPDB_API_KEY
- Import → search again to get local IDs
3. Documentation (docs/):
- INDEX.md: Documentation overview and navigation
- ARCHITECTURE.md: System design, data flow, component diagrams
- DATABASE_SCHEMA.md: Complete schema with relationships and indexes
- CLI_REFERENCE.md: All commands with examples
- TPDB_INTEGRATION.md: API guide, data mapping, best practices
4. Fixes:
- .gitignore: Fixed pattern to allow cmd/goondex/* and cmd/goondexd/*
- README: Updated to reflect TPDB integration and auto-fetch
Testing:
- ✅ performer-search "Riley Reid" - auto-fetched 2 performers, cached
- ✅ studio-search "Brazzers" - auto-fetched 12 studios, cached
- ✅ Aliases now display correctly as comma-separated list
- ✅ Studio IDs properly converted from numeric to string
API Integration:
- Base URL: https://api.theporndb.net
- Authentication: Bearer token via TPDB_API_KEY env var
- Endpoints: /performers, /sites, /scenes
- Rate limiting handled with warnings
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Clean slate initialization of Goondex - a fast, local-first media indexer.
Features:
- SQLite database with WAL mode and foreign keys
- Full schema for performers, studios, scenes, and tags
- Many-to-many relationships via junction tables
- CRUD stores for all entities with search capabilities
- CLI with performer/studio/scene search commands
- Pluggable scraper architecture with registry
- TPDB client stub (ready for implementation)
- Configuration system via YAML files
- Comprehensive .gitignore and documentation
Architecture:
- cmd/goondex: CLI application with Cobra
- cmd/goondexd: Daemon placeholder for v0.2.0
- internal/db: Database layer with stores
- internal/model: Clean data models
- internal/scraper: Scraper interface and TPDB client
- config/: YAML configuration templates
Database schema includes indexes on common query fields and uses
RFC3339 timestamps for consistency.
Built and tested successfully with Go 1.25.4.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>