Added professional-grade documentation throughout the codebase so any
developer can pick up this project and understand it immediately.
PHILOSOPHY:
'Hand someone the repo and say: here's what we built, here's WHY we built
it this way, here's where it's going. Make it better.' — Michael
NEW FILES:
- blueprint-extension/README.md
- Complete developer onboarding guide (400+ lines)
- Architecture diagram showing cron → cache → badge flow
- Installation steps, configuration, usage
- API reference with example responses
- Troubleshooting guide
- Design decisions with rationale
ENHANCED DOCUMENTATION:
ModpackAPIController.php:
- 60-line file header explaining purpose, architecture, critical decisions
- Detailed docblocks on every method
- Explains WHY dashboard reads cache-only (rate limits)
- Documents all four platform APIs with links
- Example request/response for each endpoint
CheckModpackUpdates.php:
- 50-line file header with usage examples
- Recommended cron schedule
- Example console output
- Documents rate limiting strategy
- Explains relationship to dashboard badges
UpdateBadge.tsx:
- 50-line file header explaining the 'dumb badge' architecture
- Detailed comments on global cache pattern
- Documents the fetch-once deduplication strategy
- Explains render conditions and why each exists
- Brand color documentation (Fire/Frost)
- Accessibility notes (aria-label)
WHAT A NEW DEVELOPER NOW KNOWS:
1. The 'why' behind every architectural decision
2. How the cron → cache → badge flow prevents rate limits
3. Which methods call external APIs vs read cache
4. How to add a new platform
5. How to troubleshoot common issues
6. The relationship between all components
This codebase is now ready to hand to a contractor with the words:
'This was made great. Make it awesome.'
Signed-off-by: Claude (Chronicler #63) <claude@firefrostgaming.com>
Phase 5 Components (completing Pyrrhus's work):
NEW FILES:
- views/dashboard/UpdateBadge.tsx: Dashboard badge component
- Shows 🟢 (up to date) or 🟠 (update available) next to server names
- Global cache prevents multiple API calls on page load
- Reads from local database, never calls external APIs directly
- Fire (#FF6B35) and Frost (#4ECDC4) brand colors
- console/CheckModpackUpdates.php: Laravel cron command
- Run with: php artisan modpackchecker:check
- Loops through servers with MODPACK_PLATFORM variable
- Checks CurseForge, Modrinth, FTB, Technic APIs
- Rate limited (2s sleep between checks)
- Stores results in modpackchecker_servers table
UPDATED FILES:
- Controllers/ModpackAPIController.php:
- Added getStatus() method for dashboard badge endpoint
- Returns all user's servers' update status in single query
- Added DB facade import
- routes/client.php:
- Added GET /extensions/modpackchecker/status route
- build.sh:
- Complete rewrite for Phase 5
- Handles both console widget AND dashboard badge
- Auto-detects extension directory (dev vs extensions)
- Copies CheckModpackUpdates.php to app/Console/Commands/
- Injects UpdateBadge into ServerRow.tsx
- Clear status output and next-steps guide
Architecture (Gemini-approved):
CRON (hourly) → Database cache → Single API endpoint → React badge
Dashboard badge is 'dumb' - only reads from cache, never external APIs
Completing work started by Chronicler #62 (Pyrrhus).
UpdateBadge.tsx was lost in Blueprint corruption - reconstructed from
handoff notes and architecture documentation.
Signed-off-by: Claude (Chronicler #63) <claude@firefrostgaming.com>
PHASE 3 COMPLETE - All systems operational on Dev Panel
Changes:
- Renamed controllers/ to Controllers/ (PSR-4 case sensitivity fix)
- Updated namespace to use capital C in Controllers
- Fixed getEggVariable() method to use correct Pterodactyl model structure
- Changed from whereHas('variable'...) to direct where('env_variable'...)
- Changed return from variable_value to server_value
- Updated routes/client.php with correct namespace
- Updated wrapper.tsx with correct API path (/api/client/extensions/...)
- Added build.sh for React component injection via sed
Tested and verified:
- Admin UI renders correctly
- Client panel loads without 500 error
- React component appears on server console page
- API call executes successfully
- Returns proper 'no modpack detected' message for unconfigured servers
Key learnings documented:
- Blueprint wrapper field is for Blade only, not TSX
- TSX components require build.sh + sed injection + yarn build
- PHP-FPM OPCache requires restart after adding new classes
- Controller namespace must match directory case exactly
Dev Panel: http://64.50.188.14:128
Test Server UUID: c0a133db-6cb7-497d-a2ed-22ae66eb0de8
Next: Phase 4 - Real modpack testing with CurseForge API
Signed-off-by: Claude (Chronicler #62) <claude@firefrostgaming.com>