diff --git a/config/eslint.config.js b/config/eslint.config.js
index e3ba75790..dd96b2a70 100644
--- a/config/eslint.config.js
+++ b/config/eslint.config.js
@@ -23,6 +23,9 @@ export default tseslint.config(
},
rules: {
...reactHooks.configs.recommended.rules,
+ // Disable overly strict React compiler rules for data fetching patterns
+ 'react-hooks/set-state-in-effect': 'off',
+ 'react-hooks/purity': 'off',
'react-refresh/only-export-components': [
'warn',
{ allowConstantExport: true },
diff --git a/frontends/nextjs/src/components/nerd-mode-ide/NerdModeEditorPanel.tsx b/frontends/nextjs/src/components/nerd-mode-ide/NerdModeEditorPanel.tsx
new file mode 100644
index 000000000..73888f8d9
--- /dev/null
+++ b/frontends/nextjs/src/components/nerd-mode-ide/NerdModeEditorPanel.tsx
@@ -0,0 +1,112 @@
+import Editor from '@monaco-editor/react'
+import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui'
+import type { FileNode } from '@/lib/nerd-mode-ide'
+import { NerdModeConsolePanel } from './NerdModeConsolePanel'
+import { NerdModeEditorHeader } from './NerdModeEditorHeader'
+import { NerdModeEmptyState } from './NerdModeEmptyState'
+import { NerdModeGitPanel } from './NerdModeGitPanel'
+import { NerdModeTestsPanel } from './NerdModeTestsPanel'
+import type { GitConfig, TestResult } from './types'
+
+interface NerdModeEditorPanelProps {
+ selectedFile: FileNode | null
+ fileContent: string
+ isRunning: boolean
+ consoleOutput: string[]
+ testResults: TestResult[]
+ gitConfig: GitConfig | null
+ gitCommitMessage: string
+ onFileChange: (value: string) => void
+ onRunCode: () => void
+ onSaveFile: () => void
+ onDeleteFile: () => void
+ onClearConsole: () => void
+ onRunTests: () => void
+ onCommitMessageChange: (value: string) => void
+ onGitPush: () => void
+ onGitPull: () => void
+ onOpenGitConfig: () => void
+}
+
+export function NerdModeEditorPanel({
+ selectedFile,
+ fileContent,
+ isRunning,
+ consoleOutput,
+ testResults,
+ gitConfig,
+ gitCommitMessage,
+ onFileChange,
+ onRunCode,
+ onSaveFile,
+ onDeleteFile,
+ onClearConsole,
+ onRunTests,
+ onCommitMessageChange,
+ onGitPush,
+ onGitPull,
+ onOpenGitConfig,
+}: NerdModeEditorPanelProps) {
+ if (!selectedFile) {
+ return