457 lines
11 KiB
Markdown
457 lines
11 KiB
Markdown
# 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.
|
|
|
|

|
|
|
|
## 🚀 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.
|