feat: complete debranding of MoreMinimore by removing Dyad dependencies and integrating custom features
This commit is contained in:
378
README-DEBRAND.md
Normal file
378
README-DEBRAND.md
Normal file
@@ -0,0 +1,378 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user