# MoreMinimore Debranding and Custom Features Guide This guide explains how to remove Dyad branding and dependencies from the codebase and integrate custom features for MoreMinimore. ## Overview The debranding process includes: - ✅ Removing Dyad API dependencies (templates, updates, release notes) - ✅ Removing Dyad Engine dependencies (AI processing) - ✅ Removing pro features and restrictions - ✅ Converting smart context from pro to standard feature - ✅ Updating branding from "Dyad" to "MoreMinimore" - ✅ Applying custom remove-limit feature - ✅ Updating UI text and protocol handlers ## Quick Start ### Option 1: Automated Script (Recommended) Run the automated debranding script: ```bash # Make the script executable (if not already done) chmod +x scripts/update-and-debrand.sh # Run the debranding process ./scripts/update-and-debrand.sh ``` The script will: 1. Create a backup of your current code 2. Apply all debranding changes 3. Install dependencies 4. Test compilation 5. Provide a summary of changes ### Option 2: Manual Step-by-Step If you prefer to apply changes manually, follow these steps: ## Step 1: Create Backup ```bash # Create a backup directory with timestamp BACKUP_DIR="dyad-backup-$(date +%Y%m%d-%H%M%S)" mkdir -p "$BACKUP_DIR" cp -r src "$BACKUP_DIR/" cp package.json "$BACKUP_DIR/" cp -r scripts "$BACKUP_DIR/" 2>/dev/null || true echo "Backup created: $BACKUP_DIR" ``` ## Step 2: Apply Custom Remove-Limit Feature ```bash # Check if custom directory exists if [ -d "src/custom" ]; then # Apply remove-limit feature if ! grep -q "REMOVE_LIMIT_ENABLED" src/custom/index.ts; then echo "export const REMOVE_LIMIT_ENABLED = true;" >> src/custom/index.ts echo "Remove-limit feature enabled" fi else mkdir -p src/custom echo "export const REMOVE_LIMIT_ENABLED = true;" > src/custom/index.ts echo "Created custom directory and enabled remove-limit feature" fi ``` ## Step 3: Remove Dyad API Dependencies ### Remove Template API Edit `src/ipc/utils/template_utils.ts`: ```typescript // Replace the fetch call to Dyad API // FROM: const response = await fetch("https://api.dyad.sh/v1/templates"); // TO: // Dyad API templates removed - using local templates only return [...localTemplatesData]; ``` ### Remove Release Notes API Edit `src/ipc/handlers/release_note_handlers.ts`: ```typescript // Replace the fetch call // FROM: const response = await fetch(`https://api.dyad.sh/v1/release-notes/${version}`); // TO: // Release notes disabled - removed Dyad API dependency logger.debug(`Release notes check disabled for version ${version}`); return { exists: false }; ``` ### Remove Auto-Update API Edit `src/main.ts`: ```typescript // Replace the update-electron-app configuration // FROM: const host = `https://api.dyad.sh/v1/update/${postfix}`; updateElectronApp({ logger, updateSource: { type: UpdateSourceType.ElectronPublicUpdateService, repo: "dyad-sh/dyad", host, }, }); // TO: logger.info("Auto-update disabled - removed Dyad API dependency"); // Auto-update functionality removed to eliminate Dyad API dependency // Users can manually update by downloading new releases from GitHub ``` ## Step 4: Remove Dyad Engine Dependencies Edit `src/ipc/utils/get_model_client.ts`: ```typescript // Comment out Dyad Engine URL // const dyadEngineUrl = process.env.DYAD_ENGINE_URL; // Removed - Dyad Engine dependency // Remove Dyad Pro functionality // Replace the entire "Handle Dyad Pro override" section with: // Dyad Pro functionality removed - eliminated Dyad Engine dependency // All models now use direct provider connections if (dyadApiKey && settings.enableDyadPro) { logger.warn( `Dyad Pro was enabled but has been disabled to remove Dyad API dependency. Falling back to direct provider connection.`, ); // Fall through to regular provider logic } // Comment out the import // import { createDyadEngine } from "./llm_engine_provider"; // Removed - Dyad Engine dependency ``` ## Step 5: Remove Pro Features ### Remove Pro Handlers Edit `src/ipc/ipc_host.ts`: ```typescript // Remove this line: registerProHandlers(); ``` ### Remove Pro IPC Channels Edit `src/preload.ts`: ```typescript // Remove these lines from the contextBridge: "get-pro-status": () => ipcRenderer.invoke("get-pro-status"), "enable-dyad-pro": (apiKey: string) => ipcRenderer.invoke("enable-dyad-pro", apiKey), ``` ## Step 6: Update Branding ### Update package.json ```json { "name": "moreminimore", "productName": "moreminimore", "description": "Free, local, open-source AI app builder" } ``` Replace the dependency: ```json // FROM: "@dyad-sh/supabase-management-js": "v1.0.1", // TO: "@moreminimore/supabase-management-js": "v1.0.1", ``` ### Update Protocol Handlers Edit `src/main.ts`: ```typescript // Update protocol registration app.setAsDefaultProtocolClient("moreminimore", process.execPath, [ path.resolve(process.argv[1]), ]); // Update protocol validation if (parsed.protocol !== "moreminimore:") { dialog.showErrorBox( "Invalid Protocol", `Expected moreminimore://, got ${parsed.protocol}. Full URL: ${url}`, ); return; } ``` ## Step 7: Convert Smart Context to Standard Feature Edit `src/ipc/utils/smart_context_store.ts`: ```typescript // Remove pro restriction // FROM: if (settings.enableDyadPro) { // TO: // Smart context now available for all users - removed pro restriction if (true) { ``` ## Step 8: Update UI Text Update "CodeBase Context" to "Context Settings" in components: ```bash # Find and replace in all TSX files find src/components -name "*.tsx" -type f -exec sed -i.bak 's/CodeBase Context/Context Settings/g' {} \; find src/components -name "*.tsx" -type f -exec rm {}.bak \; ``` ## Step 9: Clean Up Unused Imports ### Clean up main.ts ```typescript // Comment out unused import // import { updateElectronApp, UpdateSourceType } from "update-electron-app"; // Removed - Dyad API dependency ``` ### Clean up release_note_handlers.ts ```typescript // Remove unused import // import fetch from "node-fetch"; ``` ## Step 10: Install Dependencies and Test ```bash # Install dependencies npm install # Test TypeScript compilation npm run ts # Test the application npm start ``` ## Validation After applying the changes, validate that: 1. **TypeScript compilation passes**: `npm run ts` 2. **Application starts without errors**: `npm start` 3. **No Dyad API calls in the codebase**: `grep -r "api\.dyad\.sh" src/` 4. **No Dyad Engine calls**: `grep -r "engine\.dyad\.sh" src/` 5. **Custom features are enabled**: Check `src/custom/index.ts` ## Troubleshooting ### TypeScript Compilation Errors If you encounter TypeScript errors: 1. Check for missing imports 2. Verify all Dyad API references are removed 3. Ensure pro feature handlers are properly removed 4. Check for unused variables and imports ### Runtime Errors If the application doesn't start: 1. Check the console for specific error messages 2. Verify all IPC handlers are properly registered 3. Ensure all file paths are correct 4. Check for missing dependencies ### Missing Features If some features don't work: 1. Verify smart context handlers are registered 2. Check that custom features are enabled 3. Ensure UI components are properly updated 4. Verify protocol handlers are working ## Rollback If you need to rollback changes: ```bash # Find your backup directory ls -la dyad-backup-* # Restore from backup (replace with your backup directory) BACKUP_DIR="dyad-backup-YYYYMMDD-HHMMSS" cp -r "$BACKUP_DIR/src" ./ cp "$BACKUP_DIR/package.json" ./ cp -r "$BACKUP_DIR/scripts" ./ # Reinstall dependencies npm install ``` ## What's Removed vs What's Kept ### Removed (Dyad Dependencies) - ❌ Dyad API calls (templates, updates, release notes) - ❌ Dyad Engine (AI processing) - ❌ Pro features and restrictions - ❌ Dyad branding and references - ❌ Auto-update functionality - ❌ Telemetry (disabled) ### Kept (Essential Services) - ✅ OAuth services (Neon, Supabase) - with updated branding - ✅ Help services - marked for future changes - ✅ Core AI model connections (OpenAI, Anthropic, etc.) - ✅ Local model support (Ollama, LM Studio) - ✅ MCP (Model Context Protocol) support - ✅ Database and file system operations ### Enhanced (Custom Features) - ✅ Smart context (now available for all users) - ✅ Remove-limit feature (unlimited usage) - ✅ Context Settings (improved UI) - ✅ MoreMinimore branding ## Future Considerations ### Help Services The help services are currently kept but should be replaced with: - Local documentation - Community-driven support - Custom help system ### Telemetry Telemetry is disabled but could be replaced with: - Local analytics - Optional usage tracking - Privacy-focused metrics ### Auto-Update Auto-update is removed but could be replaced with: - GitHub release checking - Manual update notifications - Custom update system ## Support For issues with the debranding process: 1. Check this guide for troubleshooting steps 2. Review the automated script for reference implementations 3. Test changes in a development environment first 4. Keep backups of your working code ## Contributing When contributing to MoreMinimore: 1. Ensure no Dyad dependencies are added 2. Maintain the custom features 3. Update documentation as needed 4. Test thoroughly before submitting changes --- **Note**: This debranding process removes all Dyad commercial dependencies while maintaining the core functionality of the application. The result is a fully functional, open-source AI app builder with custom enhancements.