diff --git a/forge.config.js b/forge.config.js index 9fcfa99..8b7281b 100644 --- a/forge.config.js +++ b/forge.config.js @@ -7,7 +7,7 @@ module.exports = { packagerConfig: { asar: true, extraResource: ['./src/assets/SystemAudioDump'], - name: 'Cheating Daddy', + name: 'Mastermind', icon: 'src/assets/logo', // Fix executable permissions after packaging afterCopy: [ @@ -51,9 +51,9 @@ module.exports = { { name: '@electron-forge/maker-squirrel', config: { - name: 'cheating-daddy', - productName: 'Cheating Daddy', - shortcutName: 'Cheating Daddy', + name: 'mastermind', + productName: 'Mastermind', + shortcutName: 'Mastermind', createDesktopShortcut: true, createStartMenuShortcut: true, }, @@ -62,7 +62,7 @@ module.exports = { name: '@electron-forge/maker-dmg', platforms: ['darwin'], config: { - name: 'CheatingDaddy', + name: 'Mastermind', format: 'ULFO', }, }, @@ -71,10 +71,10 @@ module.exports = { platforms: ['linux'], config: { options: { - name: 'Cheating Daddy', - productName: 'Cheating Daddy', + name: 'Mastermind', + productName: 'Mastermind', genericName: 'AI Assistant', - description: 'AI assistant for interviews and learning', + description: 'AI assistant for video calls, interviews, presentations, and meetings', categories: ['Development', 'Education'], icon: 'src/assets/logo.png', }, diff --git a/package.json b/package.json index 52fd56b..a1738d9 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "cheating-daddy", - "productName": "cheating-daddy", - "version": "0.5.11", - "description": "cheating daddy", + "name": "mastermind", + "productName": "mastermind", + "version": "0.6.0", + "description": "Mastermind", "main": "src/index.js", "scripts": { "start": "electron-forge start", @@ -12,11 +12,11 @@ "lint": "echo \"No linting configured\"" }, "keywords": [ - "cheating daddy", - "cheating daddy ai", - "cheating daddy ai assistant", - "cheating daddy ai assistant for interviews", - "cheating daddy ai assistant for interviews" + "mastermind", + "mastermind ai", + "mastermind ai assistant", + "mastermind ai assistant for interviews", + "mastermind ai assistant for interviews" ], "author": { "name": "ShiftyX1", diff --git a/src/audioUtils.js b/src/audioUtils.js index 40602c6..a9535e8 100644 --- a/src/audioUtils.js +++ b/src/audioUtils.js @@ -86,7 +86,7 @@ function analyzeAudioBuffer(buffer, label = 'Audio') { // Save audio buffer with metadata for debugging function saveDebugAudio(buffer, type, timestamp = Date.now()) { const homeDir = require('os').homedir(); - const debugDir = path.join(homeDir, 'cheating-daddy-debug'); + const debugDir = path.join(homeDir, 'mastermind-debug'); if (!fs.existsSync(debugDir)) { fs.mkdirSync(debugDir, { recursive: true }); diff --git a/src/components/app/AppHeader.js b/src/components/app/AppHeader.js index d563d2a..2b3f329 100644 --- a/src/components/app/AppHeader.js +++ b/src/components/app/AppHeader.js @@ -314,8 +314,8 @@ export class AppHeader extends LitElement { async _checkForUpdates() { try { - const currentVersion = await cheatingDaddy.getVersion(); - const response = await fetch('https://raw.githubusercontent.com/sohzm/cheating-daddy/refs/heads/master/package.json'); + const currentVersion = await mastermind.getVersion(); + const response = await fetch('https://raw.githubusercontent.com/ShiftyX1/Mastermind/refs/heads/master/package.json'); if (!response.ok) return; const remotePackage = await response.json(); @@ -344,7 +344,7 @@ export class AppHeader extends LitElement { async _openUpdatePage() { const { ipcRenderer } = require('electron'); - await ipcRenderer.invoke('open-external', 'https://cheatingdaddy.com'); + await ipcRenderer.invoke('open-external', 'https://github.com/ShiftyX1/Mastermind'); } disconnectedCallback() { @@ -396,15 +396,15 @@ export class AppHeader extends LitElement { getViewTitle() { const titles = { - onboarding: 'Welcome to Cheating Daddy', - main: 'Cheating Daddy', + onboarding: 'Welcome to Mastermind', + main: 'Mastermind', customize: 'Customize', help: 'Help & Shortcuts', history: 'Conversation History', advanced: 'Advanced Tools', - assistant: 'Cheating Daddy', + assistant: 'Mastermind', }; - return titles[this.currentView] || 'Cheating Daddy'; + return titles[this.currentView] || 'Mastermind'; } getElapsedTime() { @@ -539,7 +539,7 @@ export class AppHeader extends LitElement { ${this.currentView === 'assistant' ? html` - Hide ${cheatingDaddy.isMacOS ? 'Cmd' : 'Ctrl'}${mastermind.isMacOS ? 'Cmd' : 'Ctrl'} \ diff --git a/src/components/app/CheatingDaddyApp.js b/src/components/app/MastermindApp.js similarity index 95% rename from src/components/app/CheatingDaddyApp.js rename to src/components/app/MastermindApp.js index 6be3f37..2087bdd 100644 --- a/src/components/app/CheatingDaddyApp.js +++ b/src/components/app/MastermindApp.js @@ -8,7 +8,7 @@ import { AssistantView } from '../views/AssistantView.js'; import { OnboardingView } from '../views/OnboardingView.js'; import { ScreenPickerDialog } from '../views/ScreenPickerDialog.js'; -export class CheatingDaddyApp extends LitElement { +export class MastermindApp extends LitElement { static styles = css` * { box-sizing: border-box; @@ -154,9 +154,9 @@ export class CheatingDaddyApp extends LitElement { async _loadFromStorage() { try { const [config, prefs, openaiSdkCreds] = await Promise.all([ - cheatingDaddy.storage.getConfig(), - cheatingDaddy.storage.getPreferences(), - cheatingDaddy.storage.getOpenAISDKCredentials(), + mastermind.storage.getConfig(), + mastermind.storage.getPreferences(), + mastermind.storage.getOpenAISDKCredentials(), ]); // Check onboarding status @@ -325,7 +325,7 @@ export class CheatingDaddyApp extends LitElement { if (this.currentView === 'customize' || this.currentView === 'help' || this.currentView === 'history') { this.currentView = 'main'; } else if (this.currentView === 'assistant') { - cheatingDaddy.stopCapture(); + mastermind.stopCapture(); // Close the session if (window.require) { @@ -354,7 +354,7 @@ export class CheatingDaddyApp extends LitElement { // Main view event handlers async handleStart() { // check if api key is empty do nothing - const apiKey = await cheatingDaddy.storage.getApiKey(); + const apiKey = await mastermind.storage.getApiKey(); if (!apiKey || apiKey === '') { // Trigger the red blink animation on the API key input const mainView = this.shadowRoot.querySelector('main-view'); @@ -364,9 +364,9 @@ export class CheatingDaddyApp extends LitElement { return; } - await cheatingDaddy.initializeGemini(this.selectedProfile, this.selectedLanguage); + await mastermind.initializeGemini(this.selectedProfile, this.selectedLanguage); // Pass the screenshot interval as string (including 'manual' option) - cheatingDaddy.startCapture(this.selectedScreenshotInterval, this.selectedImageQuality); + mastermind.startCapture(this.selectedScreenshotInterval, this.selectedImageQuality); this.responses = []; this.currentResponseIndex = -1; this.startTime = Date.now(); @@ -383,22 +383,22 @@ export class CheatingDaddyApp extends LitElement { // Customize view event handlers async handleProfileChange(profile) { this.selectedProfile = profile; - await cheatingDaddy.storage.updatePreference('selectedProfile', profile); + await mastermind.storage.updatePreference('selectedProfile', profile); } async handleLanguageChange(language) { this.selectedLanguage = language; - await cheatingDaddy.storage.updatePreference('selectedLanguage', language); + await mastermind.storage.updatePreference('selectedLanguage', language); } async handleScreenshotIntervalChange(interval) { this.selectedScreenshotInterval = interval; - await cheatingDaddy.storage.updatePreference('selectedScreenshotInterval', interval); + await mastermind.storage.updatePreference('selectedScreenshotInterval', interval); } async handleImageQualityChange(quality) { this.selectedImageQuality = quality; - await cheatingDaddy.storage.updatePreference('selectedImageQuality', quality); + await mastermind.storage.updatePreference('selectedImageQuality', quality); } handleBackClick() { @@ -416,7 +416,7 @@ export class CheatingDaddyApp extends LitElement { // Assistant view event handlers async handleSendText(message) { - const result = await window.cheatingDaddy.sendTextMessage(message); + const result = await window.mastermind.sendTextMessage(message); if (!result.success) { console.error('Failed to send message:', result.error); @@ -582,7 +582,7 @@ export class CheatingDaddyApp extends LitElement { async handleLayoutModeChange(layoutMode) { this.layoutMode = layoutMode; - await cheatingDaddy.storage.updateConfig('layout', layoutMode); + await mastermind.storage.updateConfig('layout', layoutMode); this.updateLayoutMode(); // Notify main process about layout change for window resizing @@ -637,4 +637,4 @@ export class CheatingDaddyApp extends LitElement { } } -customElements.define('cheating-daddy-app', CheatingDaddyApp); +customElements.define('mastermind-app', MastermindApp); diff --git a/src/components/index.js b/src/components/index.js index 33c93fc..b927755 100644 --- a/src/components/index.js +++ b/src/components/index.js @@ -1,5 +1,5 @@ // Main app components -export { CheatingDaddyApp } from './app/CheatingDaddyApp.js'; +export { MastermindApp } from './app/MastermindApp.js'; export { AppHeader } from './app/AppHeader.js'; // View components diff --git a/src/components/views/AssistantView.js b/src/components/views/AssistantView.js index 9b5d2de..ad1a0af 100644 --- a/src/components/views/AssistantView.js +++ b/src/components/views/AssistantView.js @@ -645,18 +645,18 @@ export class AssistantView extends LitElement { } async loadLimits() { - if (window.cheatingDaddy?.storage?.getTodayLimits) { - const limits = await window.cheatingDaddy.storage.getTodayLimits(); + if (window.mastermind?.storage?.getTodayLimits) { + const limits = await window.mastermind.storage.getTodayLimits(); this.flashCount = limits.flash?.count || 0; this.flashLiteCount = limits.flashLite?.count || 0; } } async loadPushToTalkKeybind() { - if (window.cheatingDaddy?.storage?.getKeybinds) { - const isMac = window.cheatingDaddy?.isMacOS || navigator.platform.includes('Mac'); + if (window.mastermind?.storage?.getKeybinds) { + const isMac = window.mastermind?.isMacOS || navigator.platform.includes('Mac'); const defaultKeybind = isMac ? 'Ctrl+Space' : 'Ctrl+Space'; - const keybinds = await window.cheatingDaddy.storage.getKeybinds(); + const keybinds = await window.mastermind.storage.getKeybinds(); this.pushToTalkKeybind = keybinds?.pushToTalk || defaultKeybind; } } diff --git a/src/components/views/CustomizeView.js b/src/components/views/CustomizeView.js index 10adaba..ee698ae 100644 --- a/src/components/views/CustomizeView.js +++ b/src/components/views/CustomizeView.js @@ -617,7 +617,7 @@ export class CustomizeView extends LitElement { } getThemes() { - return cheatingDaddy.theme.getAll(); + return mastermind.theme.getAll(); } setActiveSection(section) { @@ -787,11 +787,11 @@ export class CustomizeView extends LitElement { async _loadFromStorage() { try { const [prefs, keybinds, credentials, openaiCreds, openaiSdkCreds] = await Promise.all([ - cheatingDaddy.storage.getPreferences(), - cheatingDaddy.storage.getKeybinds(), - cheatingDaddy.storage.getCredentials(), - cheatingDaddy.storage.getOpenAICredentials(), - cheatingDaddy.storage.getOpenAISDKCredentials(), + mastermind.storage.getPreferences(), + mastermind.storage.getKeybinds(), + mastermind.storage.getCredentials(), + mastermind.storage.getOpenAICredentials(), + mastermind.storage.getOpenAISDKCredentials(), ]); this.googleSearchEnabled = prefs.googleSearchEnabled ?? true; @@ -944,18 +944,18 @@ export class CustomizeView extends LitElement { async handleCustomPromptInput(e) { this.customPrompt = e.target.value; - await cheatingDaddy.storage.updatePreference('customPrompt', e.target.value); + await mastermind.storage.updatePreference('customPrompt', e.target.value); } async handleAudioModeSelect(e) { this.audioMode = e.target.value; - await cheatingDaddy.storage.updatePreference('audioMode', e.target.value); + await mastermind.storage.updatePreference('audioMode', e.target.value); this.requestUpdate(); } async handleAudioInputModeChange(e) { this.audioInputMode = e.target.value; - await cheatingDaddy.storage.updatePreference('audioInputMode', e.target.value); + await mastermind.storage.updatePreference('audioInputMode', e.target.value); this.notifyPushToTalkSettings(); this.requestUpdate(); } @@ -977,13 +977,13 @@ export class CustomizeView extends LitElement { async handleThemeChange(e) { this.theme = e.target.value; - await cheatingDaddy.theme.save(this.theme); + await mastermind.theme.save(this.theme); this.updateBackgroundAppearance(); this.requestUpdate(); } getDefaultKeybinds() { - const isMac = cheatingDaddy.isMacOS || navigator.platform.includes('Mac'); + const isMac = mastermind.isMacOS || navigator.platform.includes('Mac'); return { moveUp: isMac ? 'Alt+Up' : 'Ctrl+Up', moveDown: isMac ? 'Alt+Down' : 'Ctrl+Down', @@ -1001,7 +1001,7 @@ export class CustomizeView extends LitElement { } async saveKeybinds() { - await cheatingDaddy.storage.setKeybinds(this.keybinds); + await mastermind.storage.setKeybinds(this.keybinds); // Send to main process to update global shortcuts if (window.require) { const { ipcRenderer } = window.require('electron'); @@ -1017,7 +1017,7 @@ export class CustomizeView extends LitElement { async resetKeybinds() { this.keybinds = this.getDefaultKeybinds(); - await cheatingDaddy.storage.setKeybinds(null); + await mastermind.storage.setKeybinds(null); this.requestUpdate(); if (window.require) { const { ipcRenderer } = window.require('electron'); @@ -1167,7 +1167,7 @@ export class CustomizeView extends LitElement { async handleGoogleSearchChange(e) { this.googleSearchEnabled = e.target.checked; - await cheatingDaddy.storage.updatePreference('googleSearchEnabled', this.googleSearchEnabled); + await mastermind.storage.updatePreference('googleSearchEnabled', this.googleSearchEnabled); // Notify main process if available if (window.require) { @@ -1184,32 +1184,32 @@ export class CustomizeView extends LitElement { async handleAIProviderChange(e) { this.aiProvider = e.target.value; - await cheatingDaddy.storage.updatePreference('aiProvider', e.target.value); + await mastermind.storage.updatePreference('aiProvider', e.target.value); this.requestUpdate(); } async handleGeminiApiKeyInput(e) { this.geminiApiKey = e.target.value; - await cheatingDaddy.storage.setApiKey(e.target.value); + await mastermind.storage.setApiKey(e.target.value); } async handleOpenAIApiKeyInput(e) { this.openaiApiKey = e.target.value; - await cheatingDaddy.storage.setOpenAICredentials({ + await mastermind.storage.setOpenAICredentials({ apiKey: e.target.value, }); } async handleOpenAIBaseUrlInput(e) { this.openaiBaseUrl = e.target.value; - await cheatingDaddy.storage.setOpenAICredentials({ + await mastermind.storage.setOpenAICredentials({ baseUrl: e.target.value, }); } async handleOpenAIModelInput(e) { this.openaiModel = e.target.value; - await cheatingDaddy.storage.setOpenAICredentials({ + await mastermind.storage.setOpenAICredentials({ model: e.target.value, }); } @@ -1217,35 +1217,35 @@ export class CustomizeView extends LitElement { // OpenAI SDK handlers async handleOpenAISdkApiKeyInput(e) { this.openaiSdkApiKey = e.target.value; - await cheatingDaddy.storage.setOpenAISDKCredentials({ + await mastermind.storage.setOpenAISDKCredentials({ apiKey: e.target.value, }); } async handleOpenAISdkBaseUrlInput(e) { this.openaiSdkBaseUrl = e.target.value; - await cheatingDaddy.storage.setOpenAISDKCredentials({ + await mastermind.storage.setOpenAISDKCredentials({ baseUrl: e.target.value, }); } async handleOpenAISdkModelInput(e) { this.openaiSdkModel = e.target.value; - await cheatingDaddy.storage.setOpenAISDKCredentials({ + await mastermind.storage.setOpenAISDKCredentials({ model: e.target.value, }); } async handleOpenAISdkVisionModelInput(e) { this.openaiSdkVisionModel = e.target.value; - await cheatingDaddy.storage.setOpenAISDKCredentials({ + await mastermind.storage.setOpenAISDKCredentials({ visionModel: e.target.value, }); } async handleOpenAISdkWhisperModelInput(e) { this.openaiSdkWhisperModel = e.target.value; - await cheatingDaddy.storage.setOpenAISDKCredentials({ + await mastermind.storage.setOpenAISDKCredentials({ whisperModel: e.target.value, }); } @@ -1259,7 +1259,7 @@ export class CustomizeView extends LitElement { this.requestUpdate(); try { - await cheatingDaddy.storage.clearAll(); + await mastermind.storage.clearAll(); this.clearStatusMessage = 'Successfully cleared all local data'; this.clearStatusType = 'success'; @@ -1288,15 +1288,15 @@ export class CustomizeView extends LitElement { async handleBackgroundTransparencyChange(e) { this.backgroundTransparency = parseFloat(e.target.value); - await cheatingDaddy.storage.updatePreference('backgroundTransparency', this.backgroundTransparency); + await mastermind.storage.updatePreference('backgroundTransparency', this.backgroundTransparency); this.updateBackgroundAppearance(); this.requestUpdate(); } updateBackgroundAppearance() { // Use theme's background color - const colors = cheatingDaddy.theme.get(this.theme); - cheatingDaddy.theme.applyBackgrounds(colors.background, this.backgroundTransparency); + const colors = mastermind.theme.get(this.theme); + mastermind.theme.applyBackgrounds(colors.background, this.backgroundTransparency); } // Keep old function name for backwards compatibility @@ -1306,7 +1306,7 @@ export class CustomizeView extends LitElement { async handleFontSizeChange(e) { this.fontSize = parseInt(e.target.value, 10); - await cheatingDaddy.storage.updatePreference('fontSize', this.fontSize); + await mastermind.storage.updatePreference('fontSize', this.fontSize); this.updateFontSize(); this.requestUpdate(); } diff --git a/src/components/views/HelpView.js b/src/components/views/HelpView.js index 7727701..401c50d 100644 --- a/src/components/views/HelpView.js +++ b/src/components/views/HelpView.js @@ -243,7 +243,7 @@ export class HelpView extends LitElement { async _loadKeybinds() { try { - const keybinds = await cheatingDaddy.storage.getKeybinds(); + const keybinds = await mastermind.storage.getKeybinds(); if (keybinds) { this.keybinds = { ...this.getDefaultKeybinds(), ...keybinds }; this.requestUpdate(); @@ -260,7 +260,7 @@ export class HelpView extends LitElement { } getDefaultKeybinds() { - const isMac = cheatingDaddy.isMacOS || navigator.platform.includes('Mac'); + const isMac = mastermind.isMacOS || navigator.platform.includes('Mac'); return { moveUp: isMac ? 'Alt+Up' : 'Ctrl+Up', moveDown: isMac ? 'Alt+Down' : 'Ctrl+Down', @@ -285,8 +285,8 @@ export class HelpView extends LitElement { } render() { - const isMacOS = cheatingDaddy.isMacOS || false; - const isLinux = cheatingDaddy.isLinux || false; + const isMacOS = mastermind.isMacOS || false; + const isLinux = mastermind.isLinux || false; return html` @@ -295,7 +295,7 @@ export class HelpView extends LitElement { Community & Support - `; } } diff --git a/src/components/views/OnboardingView.js b/src/components/views/OnboardingView.js index 4067290..40a277e 100644 --- a/src/components/views/OnboardingView.js +++ b/src/components/views/OnboardingView.js @@ -157,6 +157,49 @@ export class OnboardingView extends LitElement { opacity: 0.8; } + .migration-buttons { + display: flex; + gap: 12px; + margin-top: 24px; + } + + .migration-button { + flex: 1; + padding: 12px 24px; + border-radius: 8px; + font-size: 14px; + font-weight: 500; + cursor: pointer; + transition: all 0.2s ease; + border: 1px solid rgba(255, 255, 255, 0.1); + } + + .migration-button.primary { + background: rgba(59, 130, 246, 0.8); + color: #ffffff; + border-color: rgba(59, 130, 246, 0.9); + } + + .migration-button.primary:hover { + background: rgba(59, 130, 246, 0.9); + border-color: rgba(59, 130, 246, 1); + } + + .migration-button.secondary { + background: rgba(255, 255, 255, 0.08); + color: #e5e5e5; + border-color: rgba(255, 255, 255, 0.1); + } + + .migration-button.secondary:hover { + background: rgba(255, 255, 255, 0.12); + border-color: rgba(255, 255, 255, 0.2); + } + + .migration-button:active { + transform: scale(0.98); + } + .navigation { position: absolute; bottom: 0; @@ -239,6 +282,7 @@ export class OnboardingView extends LitElement { static properties = { currentSlide: { type: Number }, contextText: { type: String }, + hasOldConfig: { type: Boolean }, onComplete: { type: Function }, onClose: { type: Function }, }; @@ -247,6 +291,7 @@ export class OnboardingView extends LitElement { super(); this.currentSlide = 0; this.contextText = ''; + this.hasOldConfig = false; this.onComplete = () => {}; this.onClose = () => {}; this.canvas = null; @@ -297,7 +342,16 @@ export class OnboardingView extends LitElement { [30, 40, 35], // Muted green [5, 15, 10], // Almost black ], - // Slide 5 - Complete (Dark warm gray) + // Slide 5 - Migration (Dark teal-gray) + [ + [20, 30, 30], // Dark teal-gray + [15, 25, 25], // Darker teal-gray + [25, 35, 35], // Slightly teal + [10, 20, 20], // Very dark teal + [30, 40, 40], // Muted teal + [5, 15, 15], // Almost black + ], + // Slide 6 - Complete (Dark warm gray) [ [30, 25, 20], // Dark warm gray [25, 20, 15], // Darker warm @@ -309,13 +363,25 @@ export class OnboardingView extends LitElement { ]; } - firstUpdated() { + async firstUpdated() { this.canvas = this.shadowRoot.querySelector('.gradient-canvas'); this.ctx = this.canvas.getContext('2d'); this.resizeCanvas(); this.startGradientAnimation(); window.addEventListener('resize', () => this.resizeCanvas()); + + // Check if old config exists + if (window.mastermind && window.mastermind.storage) { + try { + this.hasOldConfig = await window.mastermind.storage.hasOldConfig(); + console.log('Has old config:', this.hasOldConfig); + this.requestUpdate(); // Force re-render with new hasOldConfig value + } catch (error) { + console.error('Error checking old config:', error); + this.hasOldConfig = false; + } + } } disconnectedCallback() { @@ -414,7 +480,7 @@ export class OnboardingView extends LitElement { } nextSlide() { - if (this.currentSlide < 4) { + if (this.currentSlide < 5) { this.startColorTransition(this.currentSlide + 1); } else { this.completeOnboarding(); @@ -462,11 +528,23 @@ export class OnboardingView extends LitElement { } } + async handleMigrate() { + const success = await window.mastermind.storage.migrateFromOldConfig(); + if (success) { + console.log('Migration completed successfully'); + } + this.nextSlide(); + } + + async handleSkipMigration() { + this.nextSlide(); + } + async completeOnboarding() { if (this.contextText.trim()) { - await cheatingDaddy.storage.updatePreference('customPrompt', this.contextText.trim()); + await mastermind.storage.updatePreference('customPrompt', this.contextText.trim()); } - await cheatingDaddy.storage.updateConfig('onboarded', true); + await mastermind.storage.updateConfig('onboarded', true); this.onComplete(); } @@ -474,9 +552,9 @@ export class OnboardingView extends LitElement { const slides = [ { icon: 'assets/onboarding/welcome.svg', - title: 'Welcome to Cheating Daddy', + title: 'Welcome to Mastermind', content: - 'Your AI assistant that listens and watches, then provides intelligent suggestions automatically during interviews and meetings.', + 'Your AI assistant that listens and watches, then provides intelligent suggestions automatically during interviews, meetings, and presentations.', }, { icon: 'assets/onboarding/security.svg', @@ -495,10 +573,18 @@ export class OnboardingView extends LitElement { content: '', showFeatures: true, }, + { + icon: 'assets/onboarding/context.svg', + title: 'Migrate Settings?', + content: this.hasOldConfig + ? 'Mastermind is a fork of Cheating Daddy. We detected existing Cheating Daddy settings on your system. Would you like to automatically migrate your settings, API keys, and history?' + : 'Mastermind is a fork of Cheating Daddy. No previous settings were detected.', + showMigration: this.hasOldConfig, + }, { icon: 'assets/onboarding/ready.svg', title: 'Ready to Go', - content: 'Add your Gemini API key in settings and start getting AI-powered assistance in real-time.', + content: 'Choose your AI Provider and start getting AI-powered assistance in real-time.', }, ]; @@ -552,6 +638,18 @@ export class OnboardingView extends LitElement { ` : ''} + ${slide.showMigration + ? html` + + + Migrate Settings + + + Start Fresh + + + ` + : ''} @@ -562,7 +660,7 @@ export class OnboardingView extends LitElement { - ${[0, 1, 2, 3, 4].map( + ${[0, 1, 2, 3, 4, 5].map( index => html` - ${this.currentSlide === 4 + ${this.currentSlide === 5 ? 'Get Started' : html` diff --git a/src/index.html b/src/index.html index 5279509..2545d0c 100644 --- a/src/index.html +++ b/src/index.html @@ -123,7 +123,7 @@ box-sizing: border-box; } - cheating-daddy-app { + mastermind-app { display: block; width: 100%; height: 100%; @@ -134,10 +134,9 @@ - + - - +