# Modpack Version Checker - Research Summary **Date:** April 1, 2026 **Researched by:** Chronicler #52 **Purpose:** Gather technical resources for MVP development --- ## Blueprint Framework - Key Resources ### Official Documentation - **Main Site:** https://blueprint.zip/ - **Documentation:** https://blueprint.zip/docs/ - **Quick Start Guide:** https://blueprint.zip/guides/dev/quickstart - **GitHub:** https://github.com/BlueprintFramework/framework - **Templates Repo:** https://github.com/BlueprintFramework/templates ### Key Facts About Blueprint - Open-source extension framework for Pterodactyl Panel - Fiscally sponsored by The Hack Foundation (501c3 nonprofit) - Industry-leading modding platform (well-established) - Extensions install/remove in seconds via CLI - No manual file editing or merge conflicts - Laravel/PHP backend + React frontend support - **Active marketplace on BuiltByBit** (already has Blueprint category) ### Development Workflow 1. **Create extension:** `blueprint -init` 2. **Development location:** `.blueprint/dev/` (relative to Pterodactyl directory) 3. **Build/test:** `blueprint -build` (apply changes to live panel) 4. **Package:** Creates `.blueprint` file for distribution 5. **Install:** `blueprint -i extension.blueprint` ### Extension Structure (from docs) ``` extension-name/ ├── conf.yml # Extension metadata (name, author, version) ├── components.yml # Component definitions ├── console.yml # Console/CLI commands ├── admin/ # Admin panel views (Blade templates) ├── controllers/ # Custom PHP controllers ├── database/ # Migrations └── public/ # Assets (CSS, JS, images) ``` --- ## CurseForge API ### API Key Status **Michael says:** "I think I already have the CurseForge API key" ### Testing the API Key ```bash curl -H "x-api-key: YOUR_KEY_HERE" \ "https://api.curseforge.com/v1/mods/search?gameId=432&classId=4471" ``` **What this tests:** - `gameId=432` = Minecraft - `classId=4471` = Modpacks - Should return JSON array of modpack data ### Key Endpoints We'll Need 1. **Search Modpacks:** `/v1/mods/search?gameId=432&classId=4471` 2. **Get Modpack Details:** `/v1/mods/{modId}` 3. **Get Modpack Files:** `/v1/mods/{modId}/files` 4. **Get Latest File:** `/v1/mods/{modId}/files` (filter by latest) ### Rate Limits (to verify) - Need to check CurseForge API docs for rate limits - BYOK model means each buyer uses their own limits - We cache results, so checking once per 12-24 hours is fine --- ## Modrinth API ### API Docs - **Main API:** https://docs.modrinth.com/api-spec/ - **No API key required** (public API, rate limited by IP) - **User-Agent header required** (per Gemini's guidance) ### User-Agent Format (per Gemini) ``` FirefrostExtension/1.0 (Contact: admin@buyer-domain.com) ``` ### Key Endpoints We'll Need 1. **Get Project:** `/v2/project/{id|slug}` 2. **Get Project Versions:** `/v2/project/{id|slug}/version` 3. **Search Projects:** `/v2/search?facets=[["project_type:modpack"]]` ### Rate Limits - Public API, IP-based rate limiting - Need to check exact limits in docs - Same 12-24 hour caching strategy applies --- ## BuiltByBit Marketplace ### Key Facts - Blueprint category already exists: https://builtbybit.com/resources/blueprint.29609/ - Active marketplace with lots of Blueprint extensions - Pricing range for extensions: $5-$30 typically - Gemini recommended: **$15** (sweet spot) ### Top Blueprint Extensions (for research) From search results, popular extensions include: - Announcements system - Theme customizations - Server management tools - Analytics/monitoring tools ### Submission Requirements (need to research) - Product description - Screenshots - Installation guide - Support policy - License terms - Refund policy --- ## Pterodactyl Modpack Installer Egg ### Environment Variables (per Gemini) The Modpack Installer egg uses environment variables to specify platform: - Common variable names: `INSTALL_TYPE`, `PLATFORM`, `MODPACK_API` - Values: `curseforge`, `modrinth`, `ftb`, `atlauncher`, `technic`, `voidswrath` ### Detection Strategy ```php // Pseudocode $envVars = $server->environment; $platform = $envVars['INSTALL_TYPE'] ?? $envVars['PLATFORM'] ?? 'unknown'; if (in_array($platform, ['curseforge', 'modrinth'])) { $is_supported = true; } else { $is_supported = false; $unsupported_reason = "Platform '$platform' does not provide public API"; } ``` --- ## Database Schema (Final from Gemini) ```sql CREATE TABLE modpack_version_tracker ( id BIGINT PRIMARY KEY AUTO_INCREMENT, server_id INT NOT NULL, platform VARCHAR(50) NOT NULL, -- Future-proof (not ENUM) project_id VARCHAR(255) NOT NULL, current_version_id VARCHAR(255), latest_version_id VARCHAR(255), is_supported BOOLEAN DEFAULT TRUE, unsupported_reason VARCHAR(255), -- NULL if supported last_checked_at TIMESTAMP, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, FOREIGN KEY (server_id) REFERENCES servers(id) ON DELETE CASCADE ); ``` --- ## Laravel Task Scheduler ### How It Works (per Gemini) - Pterodactyl already runs `php artisan schedule:run` every minute via cron - We inject our version-checking logic into Laravel's Task Scheduler - No separate systemd service needed (plug-and-play for buyers) ### Implementation Pattern ```php // In our extension's service provider protected function schedule(Schedule $schedule) { $schedule->call(function () { // Check modpack versions })->everyTwelveHours(); // Configurable by buyer } ``` --- ## Next Steps - Action Items ### Immediate (Tonight/Tomorrow) 1. ✅ **Test CurseForge API key** (Michael to run curl command) 2. ⏳ **Read Blueprint quick start guide** (blueprint.zip/guides/dev/quickstart) 3. ⏳ **Clone Blueprint templates repo** (for extension scaffold) 4. ⏳ **Read CurseForge API docs** (endpoints, rate limits, authentication) 5. ⏳ **Read Modrinth API docs** (endpoints, User-Agent requirements) ### Research Phase (1-2 days) 1. ⏳ Study Blueprint extension examples on GitHub 2. ⏳ Review BuiltByBit Blueprint marketplace listings 3. ⏳ Document exact API calls needed for both platforms 4. ⏳ Create development environment on Dev VPS 5. ⏳ Test API calls manually (curl/Postman) ### Development Phase (After Research) 1. Scaffold extension with Blueprint CLI 2. Implement platform detection 3. Build API integration 4. Create admin UI 5. Test on Panel VPS --- ## Questions to Answer During Research 1. **CurseForge:** - Exact rate limits? - How to detect deleted modpacks (404 handling)? - Best way to compare version IDs? 2. **Modrinth:** - Exact rate limits? - User-Agent format verification? - Version comparison logic? 3. **Blueprint:** - How to add admin settings page? - How to create database migrations? - How to schedule Laravel tasks from extension? - How to package for distribution? 4. **Pterodactyl:** - How to query server environment variables? - Where is server data stored in Panel database? - API vs direct database access? --- **Status:** Research phase ready to begin **Next Action:** Michael tests CurseForge API key **Timeline:** 1-2 days research → 1-2 weeks development → Launch --- **Fire + Frost + Foundation = Where Love Builds Legacy** 💙🔥❄️