mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-01-11 14:52:55 +01:00
304 lines
7.4 KiB
Markdown
304 lines
7.4 KiB
Markdown
# Task 7.1: Rebrand to Nodegex
|
|
|
|
## Overview
|
|
|
|
Rename the application from "OpenNoodl" to "Nodegex" (Node Graph Expression) across all user-facing surfaces while maintaining backward compatibility for existing users.
|
|
|
|
## Scope
|
|
|
|
### In Scope
|
|
- Application name and branding
|
|
- Window titles
|
|
- Protocol handlers
|
|
- Package identifiers
|
|
- userData path (with migration)
|
|
- Documentation references
|
|
|
|
### Out of Scope (Keep as "noodl")
|
|
- Internal package names (noodl-editor, noodl-runtime, etc.)
|
|
- Code variables and function names
|
|
- Git history
|
|
- NPM package names (if published)
|
|
|
|
## Changes Required
|
|
|
|
### 1. Package Configuration
|
|
|
|
**`packages/noodl-editor/package.json`**
|
|
|
|
```json
|
|
{
|
|
"name": "noodl-editor", // Keep internal
|
|
"productName": "Nodegex", // Change from OpenNoodl
|
|
"description": "Full stack low-code React app builder - Nodegex",
|
|
"author": "The Low Code Foundation",
|
|
"homepage": "https://nodegex.dev", // Update when domain ready
|
|
"build": {
|
|
"appId": "com.nodegex.app", // Change from com.opennoodl.app
|
|
"protocols": {
|
|
"name": "nodegex", // Change from opennoodl
|
|
"schemes": ["nodegex"] // Change from opennoodl
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### 2. Main Process
|
|
|
|
**`packages/noodl-editor/src/main/main.js`**
|
|
|
|
Update any hardcoded "OpenNoodl" or "Noodl" strings in:
|
|
- Window titles
|
|
- Dialog messages
|
|
- Menu items
|
|
|
|
```javascript
|
|
// Example changes
|
|
const mainWindow = new BrowserWindow({
|
|
title: 'Nodegex', // Was: OpenNoodl
|
|
// ...
|
|
});
|
|
```
|
|
|
|
### 3. Window Titles
|
|
|
|
**`packages/noodl-editor/src/editor/src/views/windows/BaseWindow/BaseWindow.tsx`**
|
|
|
|
```typescript
|
|
export function BaseWindow({
|
|
title = ProjectModel.instance.name, // Default project name as title
|
|
// ...
|
|
}) {
|
|
// The TitleBar component may show app name
|
|
}
|
|
```
|
|
|
|
**`packages/noodl-core-ui/src/components/app/TitleBar/TitleBar.tsx`**
|
|
|
|
Check for any hardcoded "Noodl" references.
|
|
|
|
### 4. Platform Identification
|
|
|
|
**`packages/noodl-platform-electron/src/platform-electron.ts`**
|
|
|
|
The userData path is determined by Electron using productName. After changing productName, the path becomes:
|
|
- Windows: `%APPDATA%/Nodegex`
|
|
- macOS: `~/Library/Application Support/Nodegex`
|
|
- Linux: `~/.config/Nodegex`
|
|
|
|
### 5. User Data Migration
|
|
|
|
**Critical**: Existing users have data in the old location. We need migration.
|
|
|
|
**Create: `packages/noodl-editor/src/main/src/migration.js`**
|
|
|
|
```javascript
|
|
const { app } = require('electron');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const OLD_NAMES = ['OpenNoodl', 'Noodl']; // Possible old names
|
|
const NEW_NAME = 'Nodegex';
|
|
|
|
function migrateUserData() {
|
|
const userDataPath = app.getPath('userData');
|
|
|
|
// Check if we're already in the new location
|
|
if (userDataPath.includes(NEW_NAME)) {
|
|
// Look for old data to migrate
|
|
for (const oldName of OLD_NAMES) {
|
|
const oldPath = userDataPath.replace(NEW_NAME, oldName);
|
|
|
|
if (fs.existsSync(oldPath) && !fs.existsSync(path.join(userDataPath, '.migrated'))) {
|
|
console.log(`Migrating user data from ${oldPath} to ${userDataPath}`);
|
|
|
|
// Copy contents (not move, safer)
|
|
copyDirectory(oldPath, userDataPath);
|
|
|
|
// Mark as migrated
|
|
fs.writeFileSync(path.join(userDataPath, '.migrated'), oldPath);
|
|
|
|
console.log('Migration complete');
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function copyDirectory(src, dest) {
|
|
if (!fs.existsSync(dest)) {
|
|
fs.mkdirSync(dest, { recursive: true });
|
|
}
|
|
|
|
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
|
|
for (const entry of entries) {
|
|
const srcPath = path.join(src, entry.name);
|
|
const destPath = path.join(dest, entry.name);
|
|
|
|
if (entry.isDirectory()) {
|
|
copyDirectory(srcPath, destPath);
|
|
} else {
|
|
// Don't overwrite existing files in new location
|
|
if (!fs.existsSync(destPath)) {
|
|
fs.copyFileSync(srcPath, destPath);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = { migrateUserData };
|
|
```
|
|
|
|
**Update: `packages/noodl-editor/src/main/main.js`**
|
|
|
|
```javascript
|
|
const { migrateUserData } = require('./src/migration');
|
|
|
|
app.on('ready', () => {
|
|
// Migrate before anything else
|
|
migrateUserData();
|
|
|
|
// ... rest of app initialization
|
|
});
|
|
```
|
|
|
|
### 6. Protocol Handler
|
|
|
|
Update deep links from `opennoodl://` to `nodegex://`
|
|
|
|
**`packages/noodl-editor/src/main/main.js`**
|
|
|
|
```javascript
|
|
// Register protocol handler
|
|
app.setAsDefaultProtocolClient('nodegex');
|
|
|
|
// Handle incoming URLs
|
|
app.on('open-url', (event, url) => {
|
|
if (url.startsWith('nodegex://')) {
|
|
// Handle URL
|
|
}
|
|
});
|
|
```
|
|
|
|
### 7. macOS Info.plist
|
|
|
|
**`packages/noodl-editor/build/Info.plist`** (if exists) or via electron-builder:
|
|
|
|
```json
|
|
{
|
|
"build": {
|
|
"mac": {
|
|
"extendInfo": {
|
|
"CFBundleDisplayName": "Nodegex",
|
|
"CFBundleName": "Nodegex",
|
|
"LSMultipleInstancesProhibited": true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### 8. UI Strings
|
|
|
|
Search for and replace user-facing strings:
|
|
|
|
```bash
|
|
# Find all references
|
|
grep -r "OpenNoodl\|Noodl" packages/ --include="*.tsx" --include="*.ts" --include="*.js"
|
|
```
|
|
|
|
Common locations:
|
|
- About dialogs
|
|
- Error messages
|
|
- Welcome screens
|
|
- Help text
|
|
- Tooltips
|
|
|
|
### 9. Launcher
|
|
|
|
**`packages/noodl-core-ui/src/preview/launcher/Launcher/`**
|
|
|
|
- Update any branding in launcher UI
|
|
- Logo/icon references
|
|
- Welcome messages
|
|
|
|
### 10. Build Assets
|
|
|
|
**`packages/noodl-editor/build/`**
|
|
|
|
- Icon files: Keep filenames, update icon content if needed
|
|
- Installer background images
|
|
- DMG background
|
|
|
|
### 11. Code Comments (Low Priority)
|
|
|
|
Internal comments can remain as "Noodl" for historical context. Only update user-visible strings.
|
|
|
|
## File Change Summary
|
|
|
|
| File | Change Type |
|
|
|------|-------------|
|
|
| `packages/noodl-editor/package.json` | productName, appId, protocols |
|
|
| `packages/noodl-editor/src/main/main.js` | Add migration, protocol handler |
|
|
| `packages/noodl-editor/src/main/src/migration.js` | Create new |
|
|
| `packages/noodl-core-ui/**/TitleBar*` | Check for hardcoded strings |
|
|
| `packages/noodl-core-ui/**/Launcher*` | Branding updates |
|
|
| Various `.tsx`, `.ts` files | User-facing string changes |
|
|
|
|
## Testing Checklist
|
|
|
|
### Fresh Install
|
|
- [ ] App installs as "Nodegex"
|
|
- [ ] userData created in correct location
|
|
- [ ] Protocol handler `nodegex://` works
|
|
- [ ] App icon shows correctly
|
|
- [ ] Window title shows "Nodegex"
|
|
- [ ] About dialog shows "Nodegex"
|
|
|
|
### Upgrade from OpenNoodl
|
|
- [ ] User data migrates automatically
|
|
- [ ] Projects list preserved
|
|
- [ ] Settings preserved
|
|
- [ ] No duplicate data created
|
|
|
|
### Platform Specific
|
|
- [ ] Windows: Start menu shows "Nodegex"
|
|
- [ ] macOS: Menu bar shows "Nodegex"
|
|
- [ ] macOS: Dock shows "Nodegex"
|
|
- [ ] Linux: Desktop entry shows "Nodegex"
|
|
|
|
## Rollback Plan
|
|
|
|
If issues arise, the migration is non-destructive:
|
|
1. Old userData folder is preserved
|
|
2. Migration marker file indicates completion
|
|
3. Can revert productName and migrate back
|
|
|
|
## Search Patterns
|
|
|
|
Use these to find remaining references:
|
|
|
|
```bash
|
|
# Case-insensitive search for noodl
|
|
grep -ri "noodl" packages/ --include="*.tsx" --include="*.ts" --include="*.js" \
|
|
| grep -v "node_modules" \
|
|
| grep -v ".bundle." \
|
|
| grep -v "// " \
|
|
| grep -v "* "
|
|
|
|
# Specific product names
|
|
grep -r "OpenNoodl\|opennoodl\|com\.opennoodl" packages/
|
|
```
|
|
|
|
## Notes on Internal Names
|
|
|
|
These should **NOT** change:
|
|
- `noodl-editor` package name
|
|
- `noodl-runtime` package name
|
|
- `noodl-core-ui` package name
|
|
- `@noodl/` npm scope (if any)
|
|
- Internal imports like `from '@noodl-models/...'`
|
|
|
|
Changing these would require massive refactoring with no user benefit.
|