# MoreMinimore MoreMinimore is a local, open-source AI app builder. It's fast, private, and fully under your control โ€” like Lovable, v0, or Bolt, but running right on your machine. ![Image](https://github.com/user-attachments/assets/f6c83dfc-6ffd-4d32-93dd-4b9c46d17790) ## ๐Ÿš€ Features - โšก๏ธ **Local**: Fast, private and no lock-in. - ๐Ÿ›  **Bring your own keys**: Use your own AI API keys โ€” no vendor lock-in. - ๐Ÿ–ฅ๏ธ **Cross-platform**: Easy to run on Mac or Windows. - โœจ **Enhanced**: Smart context and unlimited usage with custom features. ## ๐Ÿงฐ Prerequisites - Node.js >= 20 - npm (comes with Node.js) - Git You can verify your versions: ```bash node -v npm -v ``` ## ๐Ÿ—๏ธ Install (from source) ```bash git clone https://github.com/kunthawat/moreminimore-vibe.git cd moreminimore-vibe npm install ``` ## โ–ถ๏ธ Run locally (development) - Start the app with the default configuration: ```bash npm start ``` ### Environment variables (optional) - `MOREMINIMORE_GATEWAY_URL`: URL of a compatible gateway if you prefer to route requests. Example: ```bash MOREMINIMORE_GATEWAY_URL=http://localhost:8080/v1 npm start ``` ## ๐Ÿ“ฆ Build installers (make) Create platform-specific distributables: ```bash npm run make ``` Outputs are written to the `out/` directory. ## ๐Ÿงช Tests and linting ```bash # Unit tests npm test # Lint npm run lint # Prettier check npm run prettier:check ``` ## ๐Ÿ“„ License MIT License โ€” see [LICENSE](./LICENSE). --- # 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" } ``` Keep the original dependency (no changes needed): ```json "@dyad-sh/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.