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