@codeyam/codeyam-cli 0.1.0-staging.a890816 → 0.1.0-staging.ad88eeb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analyzer-template/.build-info.json +7 -7
- package/analyzer-template/log.txt +3 -3
- package/analyzer-template/package.json +9 -9
- package/analyzer-template/packages/ai/package.json +1 -1
- package/analyzer-template/packages/ai/src/lib/generateExecutionFlows.ts +0 -33
- package/analyzer-template/packages/analyze/src/lib/ProjectAnalyzer.ts +13 -7
- package/analyzer-template/packages/analyze/src/lib/asts/index.ts +7 -2
- package/analyzer-template/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.ts +0 -98
- package/analyzer-template/packages/aws/package.json +2 -2
- package/analyzer-template/packages/database/package.json +3 -3
- package/analyzer-template/packages/database/src/lib/kysely/tables/editorScenariosTable.ts +20 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts +4 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js +20 -0
- package/analyzer-template/packages/github/dist/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts +2 -0
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js +2 -0
- package/analyzer-template/packages/github/dist/types/src/enums/ProjectFramework.js.map +1 -1
- package/analyzer-template/packages/github/package.json +1 -1
- package/analyzer-template/packages/types/src/enums/ProjectFramework.ts +2 -0
- package/analyzer-template/packages/ui-components/package.json +1 -1
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts +2 -0
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.d.ts.map +1 -1
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js +2 -0
- package/analyzer-template/packages/utils/dist/types/src/enums/ProjectFramework.js.map +1 -1
- package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js +196 -0
- package/codeyam-cli/src/__tests__/memory-scripts/filter-session.test.js.map +1 -0
- package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js +114 -0
- package/codeyam-cli/src/__tests__/memory-scripts/read-json-field.test.js.map +1 -0
- package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js +149 -0
- package/codeyam-cli/src/__tests__/memory-scripts/ripgrep-fallback.test.js.map +1 -0
- package/codeyam-cli/src/commands/default.js +3 -46
- package/codeyam-cli/src/commands/default.js.map +1 -1
- package/codeyam-cli/src/commands/editor.js +1893 -215
- package/codeyam-cli/src/commands/editor.js.map +1 -1
- package/codeyam-cli/src/commands/init.js +6 -1
- package/codeyam-cli/src/commands/init.js.map +1 -1
- package/codeyam-cli/src/data/techStacks.js +82 -0
- package/codeyam-cli/src/data/techStacks.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js +134 -0
- package/codeyam-cli/src/utils/__tests__/devServerState.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js +127 -0
- package/codeyam-cli/src/utils/__tests__/editorApi.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js +635 -0
- package/codeyam-cli/src/utils/__tests__/editorAudit.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorCapture.test.js +93 -0
- package/codeyam-cli/src/utils/__tests__/editorCapture.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js +279 -0
- package/codeyam-cli/src/utils/__tests__/editorDevServer.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js +121 -0
- package/codeyam-cli/src/utils/__tests__/editorEntityChangeStatus.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js +294 -0
- package/codeyam-cli/src/utils/__tests__/editorImageVerifier.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js +542 -0
- package/codeyam-cli/src/utils/__tests__/editorJournal.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js +393 -0
- package/codeyam-cli/src/utils/__tests__/editorLoaderHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorMockState.test.js +270 -0
- package/codeyam-cli/src/utils/__tests__/editorMockState.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js +217 -0
- package/codeyam-cli/src/utils/__tests__/editorPreloadHelpers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js +266 -0
- package/codeyam-cli/src/utils/__tests__/editorPreview.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js +107 -0
- package/codeyam-cli/src/utils/__tests__/editorProxySession.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js +139 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioLookup.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js +221 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarioSwitch.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js +221 -0
- package/codeyam-cli/src/utils/__tests__/editorScenarios.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js +213 -0
- package/codeyam-cli/src/utils/__tests__/editorSeedAdapter.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js +1737 -0
- package/codeyam-cli/src/utils/__tests__/entityChangeStatus.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/git.editor.test.js +134 -0
- package/codeyam-cli/src/utils/__tests__/git.editor.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js +107 -0
- package/codeyam-cli/src/utils/__tests__/journalCaptureStabilization.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js +101 -0
- package/codeyam-cli/src/utils/__tests__/parseRegisterArg.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/project.test.js +65 -0
- package/codeyam-cli/src/utils/__tests__/project.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js +121 -0
- package/codeyam-cli/src/utils/__tests__/scenarioMarkers.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js +246 -0
- package/codeyam-cli/src/utils/__tests__/scenariosManifest.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js +25 -5
- package/codeyam-cli/src/utils/__tests__/setupClaudeCodeSettings.test.js.map +1 -1
- package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js +51 -0
- package/codeyam-cli/src/utils/__tests__/templateConsistency.test.js.map +1 -0
- package/codeyam-cli/src/utils/__tests__/webappDetection.test.js +142 -0
- package/codeyam-cli/src/utils/__tests__/webappDetection.test.js.map +1 -0
- package/codeyam-cli/src/utils/backgroundServer.js +2 -2
- package/codeyam-cli/src/utils/backgroundServer.js.map +1 -1
- package/codeyam-cli/src/utils/buildFlags.js +4 -0
- package/codeyam-cli/src/utils/buildFlags.js.map +1 -0
- package/codeyam-cli/src/utils/devServerState.js +71 -0
- package/codeyam-cli/src/utils/devServerState.js.map +1 -0
- package/codeyam-cli/src/utils/editorApi.js +73 -0
- package/codeyam-cli/src/utils/editorApi.js.map +1 -0
- package/codeyam-cli/src/utils/editorAudit.js +159 -0
- package/codeyam-cli/src/utils/editorAudit.js.map +1 -0
- package/codeyam-cli/src/utils/editorCapture.js +102 -0
- package/codeyam-cli/src/utils/editorCapture.js.map +1 -0
- package/codeyam-cli/src/utils/editorDevServer.js +193 -0
- package/codeyam-cli/src/utils/editorDevServer.js.map +1 -0
- package/codeyam-cli/src/utils/editorEntityChangeStatus.js +44 -0
- package/codeyam-cli/src/utils/editorEntityChangeStatus.js.map +1 -0
- package/codeyam-cli/src/utils/editorImageVerifier.js +155 -0
- package/codeyam-cli/src/utils/editorImageVerifier.js.map +1 -0
- package/codeyam-cli/src/utils/editorJournal.js +225 -0
- package/codeyam-cli/src/utils/editorJournal.js.map +1 -0
- package/codeyam-cli/src/utils/editorLoaderHelpers.js +81 -0
- package/codeyam-cli/src/utils/editorLoaderHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorMockState.js +248 -0
- package/codeyam-cli/src/utils/editorMockState.js.map +1 -0
- package/codeyam-cli/src/utils/editorPreloadHelpers.js +135 -0
- package/codeyam-cli/src/utils/editorPreloadHelpers.js.map +1 -0
- package/codeyam-cli/src/utils/editorPreview.js +106 -0
- package/codeyam-cli/src/utils/editorPreview.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js +112 -0
- package/codeyam-cli/src/utils/editorScenarioSwitch.js.map +1 -0
- package/codeyam-cli/src/utils/editorScenarios.js +96 -0
- package/codeyam-cli/src/utils/editorScenarios.js.map +1 -0
- package/codeyam-cli/src/utils/editorSeedAdapter.js +173 -0
- package/codeyam-cli/src/utils/editorSeedAdapter.js.map +1 -0
- package/codeyam-cli/src/utils/entityChangeStatus.js +347 -0
- package/codeyam-cli/src/utils/entityChangeStatus.js.map +1 -0
- package/codeyam-cli/src/utils/entityChangeStatus.server.js +158 -0
- package/codeyam-cli/src/utils/entityChangeStatus.server.js.map +1 -0
- package/codeyam-cli/src/utils/git.js +51 -0
- package/codeyam-cli/src/utils/git.js.map +1 -1
- package/codeyam-cli/src/utils/install-skills.js +28 -17
- package/codeyam-cli/src/utils/install-skills.js.map +1 -1
- package/codeyam-cli/src/utils/parseRegisterArg.js +31 -0
- package/codeyam-cli/src/utils/parseRegisterArg.js.map +1 -0
- package/codeyam-cli/src/utils/project.js +15 -5
- package/codeyam-cli/src/utils/project.js.map +1 -1
- package/codeyam-cli/src/utils/scenarioMarkers.js +134 -0
- package/codeyam-cli/src/utils/scenarioMarkers.js.map +1 -0
- package/codeyam-cli/src/utils/scenariosManifest.js +112 -0
- package/codeyam-cli/src/utils/scenariosManifest.js.map +1 -0
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js +46 -16
- package/codeyam-cli/src/utils/setupClaudeCodeSettings.js.map +1 -1
- package/codeyam-cli/src/utils/testRunner.js +1 -1
- package/codeyam-cli/src/utils/testRunner.js.map +1 -1
- package/codeyam-cli/src/utils/webappDetection.js +21 -0
- package/codeyam-cli/src/utils/webappDetection.js.map +1 -1
- package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js +178 -0
- package/codeyam-cli/src/webserver/__tests__/editorProxy.test.js.map +1 -0
- package/codeyam-cli/src/webserver/app/lib/git.js +396 -0
- package/codeyam-cli/src/webserver/app/lib/git.js.map +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{CopyButton-DmJveP3T.js → CopyButton-BPXZwM4t.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{EntityItem-C76mRRiF.js → EntityItem-BcgbViKV.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{EntityTypeIcon-CobE682z.js → EntityTypeIcon-CQIG2qda.js} +9 -9
- package/codeyam-cli/src/webserver/build/client/assets/{ReportIssueModal-djPLI-WV.js → ReportIssueModal-BzHcG7SE.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{ScenarioViewer-B76aig_2.js → ScenarioViewer-0DY_NKil.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/ViewportInspectBar-oAf2Kqsf.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{_index-C96V0n15.js → _index-DLxKhri3.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{activity.(_tab)-BpKzcsJz.js → activity.(_tab)-BcY3q6nt.js} +6 -6
- package/codeyam-cli/src/webserver/build/client/assets/addon-canvas-DpzMmAy5.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-fit-YJmn1quW.js +12 -0
- package/codeyam-cli/src/webserver/build/client/assets/addon-webgl-DI8QOUvO.js +58 -0
- package/codeyam-cli/src/webserver/build/client/assets/{agent-transcripts-D9hemwl6.js → agent-transcripts-Bni3iiUj.js} +5 -5
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-audit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-diff-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-file-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-load-commit-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/api.editor-project-info-l0sNRNKZ.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{book-open-D_nMCFmP.js → book-open-BYOypzCa.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{chevron-down-BH2h1Ea2.js → chevron-down-C_Pmso5S.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{circle-check-DyIKORY6.js → circle-check-BVMi9VA5.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{copy-NDbZjXao.js → copy-n2FB0_Sw.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CC6AbExI.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-Csi0_PMl.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/editor-BuT_Huj0.js +10 -0
- package/codeyam-cli/src/webserver/build/client/assets/editorPreview-B7ztwLut.js +41 -0
- package/codeyam-cli/src/webserver/build/client/assets/{entity._sha._-CrjR3zZW.js → entity._sha._-BF4oLwaE.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-D5rYBT5x.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-CF164ouH.js +6 -0
- package/codeyam-cli/src/webserver/build/client/assets/{files-DO4CZ16O.js → files-BZrlFE1F.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/git-DdZcvjGh.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/globals-BkWJ_UNc.css +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/index-yHOVb4rc.js +15 -0
- package/codeyam-cli/src/webserver/build/client/assets/{loader-circle-BAXYRVEO.js → loader-circle-DaAZ_H2w.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/manifest-b0f1372e.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/{memory-FweZHj5U.js → memory-Bl2rpw8u.js} +13 -10
- package/codeyam-cli/src/webserver/build/client/assets/{pause-DTAcYxBt.js → pause-f5-1lKBt.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{root-DiRdBreB.js → root-B_X8HS1x.js} +18 -18
- package/codeyam-cli/src/webserver/build/client/assets/{search-fKo7v0Zo.js → search-Di64LWVb.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/{settings-DfuTtcJP.js → settings-0OrEMU6J.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{simulations-B3aOzpCZ.js → simulations-DWT-CvLy.js} +1 -1
- package/codeyam-cli/src/webserver/build/client/assets/{terminal-BG4heKCG.js → terminal-Br7MOqts.js} +3 -3
- package/codeyam-cli/src/webserver/build/client/assets/{triangle-alert-DtSmdtM4.js → triangle-alert-BLdiCuG-.js} +2 -2
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-CrAK28Bc.js +1 -0
- package/codeyam-cli/src/webserver/build/client/assets/xterm-BqvuqXEL.js +27 -0
- package/codeyam-cli/src/webserver/build/server/assets/{index-BzAbACSx.js → index-CbF6h3dj.js} +1 -1
- package/codeyam-cli/src/webserver/build/server/assets/server-build-DRFwTJqO.js +367 -0
- package/codeyam-cli/src/webserver/build/server/index.js +1 -1
- package/codeyam-cli/src/webserver/build-info.json +5 -5
- package/codeyam-cli/src/webserver/editorProxy.js +383 -50
- package/codeyam-cli/src/webserver/editorProxy.js.map +1 -1
- package/codeyam-cli/src/webserver/scripts/codeyam-preload.mjs +414 -0
- package/codeyam-cli/src/webserver/scripts/journalCapture.ts +94 -4
- package/codeyam-cli/src/webserver/server.js +93 -12
- package/codeyam-cli/src/webserver/server.js.map +1 -1
- package/codeyam-cli/src/webserver/terminalServer.js +65 -112
- package/codeyam-cli/src/webserver/terminalServer.js.map +1 -1
- package/codeyam-cli/templates/chrome-extension-react/EXTENSION_SETUP.md +75 -0
- package/codeyam-cli/templates/chrome-extension-react/gitignore +15 -0
- package/codeyam-cli/templates/chrome-extension-react/index.html +12 -0
- package/codeyam-cli/templates/chrome-extension-react/package.json +26 -0
- package/codeyam-cli/templates/chrome-extension-react/popup.html +12 -0
- package/codeyam-cli/templates/chrome-extension-react/public/manifest.json +15 -0
- package/codeyam-cli/templates/chrome-extension-react/src/background/service-worker.ts +7 -0
- package/codeyam-cli/templates/chrome-extension-react/src/globals.css +6 -0
- package/codeyam-cli/templates/chrome-extension-react/src/lib/storage.ts +37 -0
- package/codeyam-cli/templates/chrome-extension-react/src/popup/App.tsx +12 -0
- package/codeyam-cli/templates/chrome-extension-react/src/popup/main.tsx +10 -0
- package/codeyam-cli/templates/chrome-extension-react/tsconfig.json +24 -0
- package/codeyam-cli/templates/chrome-extension-react/vite.config.ts +35 -0
- package/codeyam-cli/templates/editor-step-hook.py +95 -9
- package/codeyam-cli/templates/expo-react-native/MOBILE_SETUP.md +89 -0
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/_layout.tsx +33 -0
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/index.tsx +12 -0
- package/codeyam-cli/templates/expo-react-native/app/(tabs)/settings.tsx +12 -0
- package/codeyam-cli/templates/expo-react-native/app/_layout.tsx +12 -0
- package/codeyam-cli/templates/expo-react-native/app.json +18 -0
- package/codeyam-cli/templates/expo-react-native/babel.config.js +9 -0
- package/codeyam-cli/templates/expo-react-native/gitignore +12 -0
- package/codeyam-cli/templates/expo-react-native/global.css +3 -0
- package/codeyam-cli/templates/expo-react-native/lib/storage.ts +32 -0
- package/codeyam-cli/templates/expo-react-native/metro.config.js +6 -0
- package/codeyam-cli/templates/expo-react-native/nativewind-env.d.ts +1 -0
- package/codeyam-cli/templates/expo-react-native/package.json +37 -0
- package/codeyam-cli/templates/expo-react-native/tailwind.config.js +10 -0
- package/codeyam-cli/templates/expo-react-native/tsconfig.json +10 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_PATTERNS.md +308 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/AUTH_UPGRADE.md +304 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/DATABASE.md +112 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/FEATURE_PATTERNS.md +37 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/codeyam-isolate/layout.tsx +12 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/app/lib/prisma.ts +9 -4
- package/codeyam-cli/templates/nextjs-prisma-sqlite/env +4 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/gitignore +21 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/package.json +4 -1
- package/codeyam-cli/templates/nextjs-prisma-sqlite/prisma/seed.ts +4 -1
- package/codeyam-cli/templates/nextjs-prisma-sqlite/seed-adapter.ts +92 -0
- package/codeyam-cli/templates/nextjs-prisma-sqlite/vitest.config.ts +13 -0
- package/codeyam-cli/templates/{nextjs-prisma-sqlite/PRISMA_SETUP.md → nextjs-prisma-supabase/SUPABASE_SETUP.md} +37 -17
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/api/todos/route.ts +17 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/globals.css +26 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/layout.tsx +34 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/prisma.ts +20 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/lib/supabase.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/app/page.tsx +10 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/env +9 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/eslint.config.mjs +11 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/gitignore +40 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/next.config.ts +11 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/package.json +36 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/postcss.config.mjs +7 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/schema.prisma +27 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/prisma/seed.ts +39 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/prisma.config.ts +12 -0
- package/codeyam-cli/templates/nextjs-prisma-supabase/tsconfig.json +34 -0
- package/codeyam-cli/templates/{codeyam-dev-mode.md → skills/codeyam-dev-mode/SKILL.md} +2 -2
- package/codeyam-cli/templates/skills/codeyam-editor/SKILL.md +145 -0
- package/codeyam-cli/templates/{codeyam-memory.md → skills/codeyam-memory/SKILL.md} +215 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/deprecated-prompt.md +100 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/detect-deprecated-patterns.mjs +139 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/find-exports.mjs +52 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/holistic-analysis/misleading-api-prompt.md +117 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/read-json-field.mjs +61 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/lib/ripgrep-fallback.mjs +155 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/analyze-prompt.md +46 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/cleanup.mjs +13 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/filter-session.mjs +95 -0
- package/codeyam-cli/templates/skills/codeyam-memory/scripts/session-mining/preprocess.mjs +160 -0
- package/package.json +15 -10
- package/packages/ai/src/lib/generateExecutionFlows.js +0 -11
- package/packages/ai/src/lib/generateExecutionFlows.js.map +1 -1
- package/packages/analyze/src/lib/ProjectAnalyzer.js +10 -4
- package/packages/analyze/src/lib/ProjectAnalyzer.js.map +1 -1
- package/packages/analyze/src/lib/asts/index.js +4 -2
- package/packages/analyze/src/lib/asts/index.js.map +1 -1
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js +0 -40
- package/packages/analyze/src/lib/files/scenarios/generateExecutionFlows.js.map +1 -1
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js +20 -0
- package/packages/database/src/lib/kysely/tables/editorScenariosTable.js.map +1 -1
- package/packages/types/src/enums/ProjectFramework.js +2 -0
- package/packages/types/src/enums/ProjectFramework.js.map +1 -1
- package/scripts/npm-post-install.cjs +34 -0
- package/codeyam-cli/src/webserver/build/client/assets/Terminal-CcG8YTLx.js +0 -41
- package/codeyam-cli/src/webserver/build/client/assets/addon-fit-CUXOrorO.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/createLucideIcon-CMT1jU2q.js +0 -21
- package/codeyam-cli/src/webserver/build/client/assets/dev.empty-BiM6z3Do.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/editor-W_IGJ2Kd.js +0 -7
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.dev-D6SEzMCu.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/entity._sha.scenarios._scenarioId.fullscreen-C28BiQzt.js +0 -6
- package/codeyam-cli/src/webserver/build/client/assets/git-CFCTYk9I.js +0 -15
- package/codeyam-cli/src/webserver/build/client/assets/globals-BZB_H1w2.css +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/manifest-8daa4147.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/useCustomSizes-ByhSyh0W.js +0 -1
- package/codeyam-cli/src/webserver/build/client/assets/xterm-DMSzMhqy.js +0 -9
- package/codeyam-cli/src/webserver/build/server/assets/server-build-OdUocH6P.js +0 -362
- package/codeyam-cli/templates/codeyam-editor.md +0 -68
- package/scripts/finalize-analyzer.cjs +0 -13
- /package/codeyam-cli/templates/{codeyam-diagnose.md → commands/codeyam-diagnose.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-debug.md → skills/codeyam-debug/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-new-rule.md → skills/codeyam-new-rule/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-setup.md → skills/codeyam-setup/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-sim.md → skills/codeyam-sim/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-test.md → skills/codeyam-test/SKILL.md} +0 -0
- /package/codeyam-cli/templates/{codeyam-verify.md → skills/codeyam-verify/SKILL.md} +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Feature Patterns
|
|
2
|
+
|
|
3
|
+
When the feature you're building involves any of the patterns below, **read the linked doc before writing code**. These patterns are designed for the local SQLite dev environment and upgrade cleanly to production services later.
|
|
4
|
+
|
|
5
|
+
## Authentication (login, sign-up, user sessions)
|
|
6
|
+
|
|
7
|
+
**Read:** `AUTH_PATTERNS.md`
|
|
8
|
+
|
|
9
|
+
Use the cookie + DB auth abstraction in `app/lib/auth.ts`. All consumer code imports from this single file. DO NOT use NextAuth, Clerk, better-auth, Supabase Auth, or any external auth provider during prototyping — they require infrastructure unavailable locally.
|
|
10
|
+
|
|
11
|
+
**For scenarios:** Include User and Session seed rows. Add `"session": {"cookieValue": "<token>"}` at the scenario top level to auto-log the user in. Omit `session` for a logged-out scenario.
|
|
12
|
+
|
|
13
|
+
**Upgrade path:** See `AUTH_UPGRADE.md` — only `app/lib/auth.ts` internals change; consumer code stays the same.
|
|
14
|
+
|
|
15
|
+
## External Services (payments, email, maps, weather APIs, etc.)
|
|
16
|
+
|
|
17
|
+
If the user has dev/test credentials (e.g., Stripe test keys):
|
|
18
|
+
|
|
19
|
+
- Store them in `.codeyam/config.json` under `environmentVariables`
|
|
20
|
+
- Restart the dev server — credentials are injected into `process.env`
|
|
21
|
+
|
|
22
|
+
If no credentials are available:
|
|
23
|
+
|
|
24
|
+
- Build with real API calls in the code
|
|
25
|
+
- Mock responses per scenario using `externalApis` in scenario registration (Step 8)
|
|
26
|
+
|
|
27
|
+
## File Storage / Uploads
|
|
28
|
+
|
|
29
|
+
For local prototyping, store files in the `public/uploads/` directory and serve them as static assets. Use `fs.writeFile` in API routes. For production, swap to S3/Cloudflare R2/Supabase Storage.
|
|
30
|
+
|
|
31
|
+
## Email / Notifications
|
|
32
|
+
|
|
33
|
+
For prototyping, log emails to the console or write them to a `/api/dev/sent-emails` endpoint that stores in the database. For production, swap to Resend/SendGrid/Postmark.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
_This list will grow as new patterns are added. Each pattern follows the same principle: build with a simple local implementation, upgrade to a production service later by swapping one file._
|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
-
//
|
|
2
|
-
// This file
|
|
1
|
+
// Database connection singleton.
|
|
2
|
+
// This is the ONLY file that changes when upgrading to a hosted database.
|
|
3
|
+
// All application code imports from here — API routes, server components, etc.
|
|
3
4
|
//
|
|
4
|
-
// Usage
|
|
5
|
+
// Usage:
|
|
5
6
|
// import { prisma } from "@/app/lib/prisma";
|
|
6
7
|
// const items = await prisma.todo.findMany();
|
|
8
|
+
//
|
|
9
|
+
// To upgrade to a hosted database (e.g., Supabase PostgreSQL), see DATABASE.md.
|
|
7
10
|
|
|
8
11
|
import { PrismaClient } from '@prisma/client';
|
|
9
12
|
import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
|
|
10
13
|
|
|
11
14
|
const globalForPrisma = globalThis as unknown as { prisma: PrismaClient };
|
|
12
15
|
|
|
13
|
-
const adapter = new PrismaBetterSqlite3({
|
|
16
|
+
const adapter = new PrismaBetterSqlite3({
|
|
17
|
+
url: process.env.DATABASE_URL || 'file:./dev.db',
|
|
18
|
+
});
|
|
14
19
|
|
|
15
20
|
export const prisma = globalForPrisma.prisma ?? new PrismaClient({ adapter });
|
|
16
21
|
|
|
@@ -41,3 +41,24 @@ next-env.d.ts
|
|
|
41
41
|
# database
|
|
42
42
|
dev.db
|
|
43
43
|
dev.db-journal
|
|
44
|
+
|
|
45
|
+
# CodeYam - local only (not shared)
|
|
46
|
+
.codeyam/db.sqlite3
|
|
47
|
+
.codeyam/db.sqlite3-wal
|
|
48
|
+
.codeyam/db.sqlite3-shm
|
|
49
|
+
.codeyam/secrets.json
|
|
50
|
+
.codeyam/server.json
|
|
51
|
+
.codeyam/server-state.json
|
|
52
|
+
.codeyam/queue.json
|
|
53
|
+
.codeyam/active-scenario.json
|
|
54
|
+
.codeyam/editor-step.json
|
|
55
|
+
.codeyam/editor-user-prompt.txt
|
|
56
|
+
.codeyam/editor-mode-context.md
|
|
57
|
+
.codeyam/dev-mode-context.md
|
|
58
|
+
.codeyam/logs/
|
|
59
|
+
.codeyam/llm-calls/
|
|
60
|
+
.codeyam/captures/
|
|
61
|
+
.codeyam/results/
|
|
62
|
+
.codeyam/tmp/
|
|
63
|
+
.codeyam/rules/
|
|
64
|
+
.codeyam/bin/
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
"build": "next build",
|
|
8
8
|
"start": "next start",
|
|
9
9
|
"lint": "eslint",
|
|
10
|
+
"test": "vitest run",
|
|
11
|
+
"test:watch": "vitest",
|
|
10
12
|
"db:push": "npx prisma db push && npx prisma generate",
|
|
11
13
|
"db:seed": "npx tsx prisma/seed.ts",
|
|
12
14
|
"db:reset": "rm -f dev.db && npm run db:push && npx tsx prisma/seed.ts"
|
|
@@ -30,6 +32,7 @@
|
|
|
30
32
|
"eslint-config-next": "^15.3.3",
|
|
31
33
|
"tailwindcss": "^4",
|
|
32
34
|
"tsx": "^4.19.4",
|
|
33
|
-
"typescript": "^5"
|
|
35
|
+
"typescript": "^5",
|
|
36
|
+
"vitest": "^3"
|
|
34
37
|
}
|
|
35
38
|
}
|
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
// IMPORTANT: This file must use the same adapter pattern as app/lib/prisma.ts.
|
|
7
7
|
// Do NOT use `new PrismaClient()` without the adapter — Prisma 7 requires it.
|
|
8
8
|
|
|
9
|
+
import 'dotenv/config';
|
|
9
10
|
import { PrismaClient } from '@prisma/client';
|
|
10
11
|
import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
|
|
11
12
|
|
|
12
|
-
const adapter = new PrismaBetterSqlite3({
|
|
13
|
+
const adapter = new PrismaBetterSqlite3({
|
|
14
|
+
url: process.env.DATABASE_URL || 'file:./dev.db',
|
|
15
|
+
});
|
|
13
16
|
const prisma = new PrismaClient({ adapter });
|
|
14
17
|
|
|
15
18
|
async function main() {
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CodeYam Seed Adapter for Prisma + SQLite.
|
|
3
|
+
*
|
|
4
|
+
* Reads a JSON seed data file (path passed as CLI arg), wipes all tables,
|
|
5
|
+
* then inserts the seed data using Prisma.
|
|
6
|
+
*
|
|
7
|
+
* Usage: npx tsx .codeyam/seed-adapter.ts <path-to-seed-data.json>
|
|
8
|
+
*
|
|
9
|
+
* The JSON file has the format:
|
|
10
|
+
* {
|
|
11
|
+
* "type": "application",
|
|
12
|
+
* "seed": {
|
|
13
|
+
* "tableName": [{ "column": "value", ... }, ...]
|
|
14
|
+
* },
|
|
15
|
+
* "externalApis": { ... } // optional, not used by this adapter
|
|
16
|
+
* }
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import 'dotenv/config';
|
|
20
|
+
import { PrismaClient } from '@prisma/client';
|
|
21
|
+
import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
|
|
22
|
+
import * as fs from 'fs';
|
|
23
|
+
|
|
24
|
+
const adapter = new PrismaBetterSqlite3({
|
|
25
|
+
url: process.env.DATABASE_URL || 'file:./dev.db',
|
|
26
|
+
});
|
|
27
|
+
const prisma = new PrismaClient({ adapter });
|
|
28
|
+
|
|
29
|
+
async function main() {
|
|
30
|
+
const seedDataPath = process.argv[2];
|
|
31
|
+
if (!seedDataPath) {
|
|
32
|
+
console.error('Usage: npx tsx .codeyam/seed-adapter.ts <seed-data.json>');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const raw = fs.readFileSync(seedDataPath, 'utf-8');
|
|
37
|
+
const data = JSON.parse(raw);
|
|
38
|
+
const seed = data.seed || data;
|
|
39
|
+
|
|
40
|
+
console.log(`Seeding tables: ${Object.keys(seed).join(', ')}`);
|
|
41
|
+
|
|
42
|
+
// Wipe all tables in reverse order (to respect foreign keys)
|
|
43
|
+
const tableNames = Object.keys(seed);
|
|
44
|
+
for (const table of [...tableNames].reverse()) {
|
|
45
|
+
try {
|
|
46
|
+
await (prisma as any)[table].deleteMany();
|
|
47
|
+
console.log(` Cleared ${table}`);
|
|
48
|
+
} catch (err) {
|
|
49
|
+
console.warn(
|
|
50
|
+
` Could not clear ${table}: ${err instanceof Error ? err.message : err}`,
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Reset auto-increment counters so IDs start from 1 after each re-seed.
|
|
56
|
+
// Without this, SQLite IDs keep climbing (1, 2, ... then 9, 10, ...)
|
|
57
|
+
// across scenario switches, causing hardcoded URLs like /drinks/1 to 404.
|
|
58
|
+
for (const table of tableNames) {
|
|
59
|
+
try {
|
|
60
|
+
// Prisma uses PascalCase model names; sqlite_sequence stores the actual table name.
|
|
61
|
+
// Try both the seed key (which matches the Prisma model) and common casings.
|
|
62
|
+
await prisma.$executeRawUnsafe(
|
|
63
|
+
`DELETE FROM sqlite_sequence WHERE name = '${table}' OR name = '${table.charAt(0).toUpperCase() + table.slice(1)}'`,
|
|
64
|
+
);
|
|
65
|
+
} catch {
|
|
66
|
+
// sqlite_sequence may not exist if no autoincrement columns — safe to ignore
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Insert seed data
|
|
71
|
+
for (const [table, rows] of Object.entries(seed)) {
|
|
72
|
+
if (!Array.isArray(rows) || rows.length === 0) continue;
|
|
73
|
+
try {
|
|
74
|
+
await (prisma as any)[table].createMany({ data: rows });
|
|
75
|
+
console.log(` Seeded ${rows.length} rows into ${table}`);
|
|
76
|
+
} catch (err) {
|
|
77
|
+
console.error(
|
|
78
|
+
` Failed to seed ${table}: ${err instanceof Error ? err.message : err}`,
|
|
79
|
+
);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
console.log('Seed complete');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
main()
|
|
88
|
+
.then(() => prisma.$disconnect())
|
|
89
|
+
.catch((e) => {
|
|
90
|
+
console.error('Seed adapter error:', e);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
});
|
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
# Prisma 7
|
|
1
|
+
# Supabase + Prisma 7 Setup
|
|
2
2
|
|
|
3
|
-
This project uses Prisma 7 with
|
|
3
|
+
This project uses Prisma 7 with PostgreSQL via Supabase.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Quick start
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
1. Create a Supabase project at https://supabase.com/dashboard
|
|
8
|
+
2. Copy `.env` and fill in your credentials (see comments in the file)
|
|
9
|
+
3. Run `npm run db:push` to create tables
|
|
10
|
+
4. Run `npm run db:seed` to populate demo data
|
|
9
11
|
|
|
10
|
-
|
|
11
|
-
import { PrismaClient } from '@prisma/client';
|
|
12
|
-
import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
|
|
12
|
+
## How it works
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
const prisma = new PrismaClient({ adapter });
|
|
16
|
-
```
|
|
14
|
+
Prisma 7 requires a **driver adapter**. This project uses `@prisma/adapter-pg` with the `pg` package to connect to Supabase's PostgreSQL.
|
|
17
15
|
|
|
18
16
|
The singleton in `app/lib/prisma.ts` is already configured. Import it in your code:
|
|
19
17
|
|
|
@@ -21,6 +19,12 @@ The singleton in `app/lib/prisma.ts` is already configured. Import it in your co
|
|
|
21
19
|
import { prisma } from '@/app/lib/prisma';
|
|
22
20
|
```
|
|
23
21
|
|
|
22
|
+
For Supabase-specific features (auth, realtime, storage), use the Supabase client:
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import { supabase } from '@/app/lib/supabase';
|
|
26
|
+
```
|
|
27
|
+
|
|
24
28
|
## Important: do NOT change these settings
|
|
25
29
|
|
|
26
30
|
- **Generator must be `prisma-client-js`** (not `prisma-client`). The `prisma-client`
|
|
@@ -29,14 +33,19 @@ import { prisma } from '@/app/lib/prisma';
|
|
|
29
33
|
`node_modules/@prisma/client` works with standard imports everywhere.
|
|
30
34
|
- **Do NOT add `url` to the datasource block** in `schema.prisma`. Prisma 7
|
|
31
35
|
moved the URL to `prisma.config.ts`. Adding it to the schema causes a validation error.
|
|
32
|
-
- **Keep `serverExternalPackages: ["better-sqlite3"]`** in `next.config.ts`.
|
|
33
|
-
Without it, Next.js tries to bundle the native module and fails.
|
|
34
36
|
- **Keep `turbopack: { root: "." }`** in `next.config.ts`. Without it,
|
|
35
37
|
Turbopack may infer a parent directory as root and break imports.
|
|
36
|
-
- **Database file is at project root** (`./dev.db`), not in `prisma/`.
|
|
37
38
|
- **Always run `npx prisma generate`** after `npx prisma db push` (or use
|
|
38
39
|
`npm run db:push` which does both). Without this, the client module is missing.
|
|
39
40
|
|
|
41
|
+
## Getting your Supabase credentials
|
|
42
|
+
|
|
43
|
+
1. Go to https://supabase.com/dashboard and select your project
|
|
44
|
+
2. **SUPABASE_URL** and **SUPABASE_ANON_KEY**: Project Settings → API
|
|
45
|
+
3. **DATABASE_URL**: Project Settings → Database → Connection string (URI)
|
|
46
|
+
- For serverless (Vercel, etc.): use the "Transaction" pooler connection string (port 6543)
|
|
47
|
+
- For long-running servers: use the "Session" pooler connection string (port 5432)
|
|
48
|
+
|
|
40
49
|
## Common tasks
|
|
41
50
|
|
|
42
51
|
```bash
|
|
@@ -47,10 +56,9 @@ vim prisma/schema.prisma
|
|
|
47
56
|
npm run db:push
|
|
48
57
|
|
|
49
58
|
# Seed the database
|
|
50
|
-
|
|
51
|
-
# or: npm run db:seed
|
|
59
|
+
npm run db:seed
|
|
52
60
|
|
|
53
|
-
# Reset the database (
|
|
61
|
+
# Reset the database (drops all tables, re-creates, re-seeds)
|
|
54
62
|
npm run db:reset
|
|
55
63
|
|
|
56
64
|
# Open Prisma Studio (database browser)
|
|
@@ -82,3 +90,15 @@ export async function POST(request: Request) {
|
|
|
82
90
|
return Response.json(todo);
|
|
83
91
|
}
|
|
84
92
|
```
|
|
93
|
+
|
|
94
|
+
## Deployment
|
|
95
|
+
|
|
96
|
+
This template is ready to deploy to Vercel:
|
|
97
|
+
|
|
98
|
+
1. Push your code to GitHub
|
|
99
|
+
2. Import the repo in Vercel
|
|
100
|
+
3. Add the same environment variables from `.env` to Vercel's project settings
|
|
101
|
+
4. Deploy
|
|
102
|
+
|
|
103
|
+
The DATABASE_URL should use Supabase's **Transaction** pooler connection string
|
|
104
|
+
(port 6543) for serverless environments like Vercel.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Example API route using Prisma.
|
|
2
|
+
// Import prisma from the singleton — do NOT create a new PrismaClient here.
|
|
3
|
+
|
|
4
|
+
import { prisma } from '@/app/lib/prisma';
|
|
5
|
+
|
|
6
|
+
export async function GET() {
|
|
7
|
+
const todos = await prisma.todo.findMany({
|
|
8
|
+
orderBy: { createdAt: 'desc' },
|
|
9
|
+
});
|
|
10
|
+
return Response.json(todos);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export async function POST(request: Request) {
|
|
14
|
+
const { title } = await request.json();
|
|
15
|
+
const todo = await prisma.todo.create({ data: { title } });
|
|
16
|
+
return Response.json(todo);
|
|
17
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
@import "tailwindcss";
|
|
2
|
+
|
|
3
|
+
:root {
|
|
4
|
+
--background: #ffffff;
|
|
5
|
+
--foreground: #171717;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
@theme inline {
|
|
9
|
+
--color-background: var(--background);
|
|
10
|
+
--color-foreground: var(--foreground);
|
|
11
|
+
--font-sans: var(--font-geist-sans);
|
|
12
|
+
--font-mono: var(--font-geist-mono);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@media (prefers-color-scheme: dark) {
|
|
16
|
+
:root {
|
|
17
|
+
--background: #0a0a0a;
|
|
18
|
+
--foreground: #ededed;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
body {
|
|
23
|
+
background: var(--background);
|
|
24
|
+
color: var(--foreground);
|
|
25
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
26
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Metadata } from 'next';
|
|
2
|
+
import { Geist, Geist_Mono } from 'next/font/google';
|
|
3
|
+
import './globals.css';
|
|
4
|
+
|
|
5
|
+
const geistSans = Geist({
|
|
6
|
+
variable: '--font-geist-sans',
|
|
7
|
+
subsets: ['latin'],
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
const geistMono = Geist_Mono({
|
|
11
|
+
variable: '--font-geist-mono',
|
|
12
|
+
subsets: ['latin'],
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export const metadata: Metadata = {
|
|
16
|
+
title: 'CodeYam App',
|
|
17
|
+
description: 'Built with CodeYam Editor',
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default function RootLayout({
|
|
21
|
+
children,
|
|
22
|
+
}: Readonly<{
|
|
23
|
+
children: React.ReactNode;
|
|
24
|
+
}>) {
|
|
25
|
+
return (
|
|
26
|
+
<html lang="en">
|
|
27
|
+
<body
|
|
28
|
+
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
|
|
29
|
+
>
|
|
30
|
+
{children}
|
|
31
|
+
</body>
|
|
32
|
+
</html>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Prisma 7 requires a driver adapter for database access.
|
|
2
|
+
// This file uses the pg adapter for Supabase PostgreSQL.
|
|
3
|
+
//
|
|
4
|
+
// Usage in API routes and server components:
|
|
5
|
+
// import { prisma } from "@/app/lib/prisma";
|
|
6
|
+
// const items = await prisma.todo.findMany();
|
|
7
|
+
|
|
8
|
+
import { PrismaClient } from '@prisma/client';
|
|
9
|
+
import { PrismaPg } from '@prisma/adapter-pg';
|
|
10
|
+
|
|
11
|
+
const globalForPrisma = globalThis as unknown as { prisma: PrismaClient };
|
|
12
|
+
|
|
13
|
+
const connectionString = process.env.DATABASE_URL!;
|
|
14
|
+
const adapter = new PrismaPg({ connectionString });
|
|
15
|
+
|
|
16
|
+
export const prisma = globalForPrisma.prisma ?? new PrismaClient({ adapter });
|
|
17
|
+
|
|
18
|
+
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
|
|
19
|
+
|
|
20
|
+
export default prisma;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Supabase client for auth, realtime, and storage.
|
|
2
|
+
// For database queries, use Prisma instead (see prisma.ts).
|
|
3
|
+
//
|
|
4
|
+
// Usage:
|
|
5
|
+
// import { supabase } from "@/app/lib/supabase";
|
|
6
|
+
|
|
7
|
+
import { createClient } from '@supabase/supabase-js';
|
|
8
|
+
|
|
9
|
+
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL!;
|
|
10
|
+
const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!;
|
|
11
|
+
|
|
12
|
+
export const supabase = createClient(supabaseUrl, supabaseAnonKey);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export default function Home() {
|
|
2
|
+
return (
|
|
3
|
+
<main className="min-h-screen flex items-center justify-center">
|
|
4
|
+
<div className="text-center">
|
|
5
|
+
<h1 className="text-4xl font-bold mb-4">Welcome</h1>
|
|
6
|
+
<p className="text-gray-600">Your app is ready. Start building!</p>
|
|
7
|
+
</div>
|
|
8
|
+
</main>
|
|
9
|
+
);
|
|
10
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Supabase project credentials
|
|
2
|
+
# Get these from: https://supabase.com/dashboard → Project Settings → API
|
|
3
|
+
NEXT_PUBLIC_SUPABASE_URL=https://YOUR_PROJECT_ID.supabase.co
|
|
4
|
+
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key-here
|
|
5
|
+
|
|
6
|
+
# Database connection string (Supabase PostgreSQL)
|
|
7
|
+
# Get this from: Supabase Dashboard → Project Settings → Database → Connection string (URI)
|
|
8
|
+
# Use the "Transaction" connection string for serverless environments (Vercel, etc.)
|
|
9
|
+
DATABASE_URL=postgresql://postgres.YOUR_PROJECT_ID:YOUR_PASSWORD@aws-0-us-east-1.pooler.supabase.com:6543/postgres
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { defineConfig, globalIgnores } from "eslint/config";
|
|
2
|
+
import nextVitals from "eslint-config-next/core-web-vitals";
|
|
3
|
+
import nextTs from "eslint-config-next/typescript";
|
|
4
|
+
|
|
5
|
+
const eslintConfig = defineConfig([
|
|
6
|
+
...nextVitals,
|
|
7
|
+
...nextTs,
|
|
8
|
+
globalIgnores([".next/**", "out/**", "build/**", "next-env.d.ts"]),
|
|
9
|
+
]);
|
|
10
|
+
|
|
11
|
+
export default eslintConfig;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# dependencies
|
|
2
|
+
/node_modules
|
|
3
|
+
/.pnp
|
|
4
|
+
.pnp.*
|
|
5
|
+
.yarn/*
|
|
6
|
+
!.yarn/patches
|
|
7
|
+
!.yarn/plugins
|
|
8
|
+
!.yarn/releases
|
|
9
|
+
!.yarn/versions
|
|
10
|
+
|
|
11
|
+
# testing
|
|
12
|
+
/coverage
|
|
13
|
+
|
|
14
|
+
# next.js
|
|
15
|
+
/.next/
|
|
16
|
+
/out/
|
|
17
|
+
|
|
18
|
+
# production
|
|
19
|
+
/build
|
|
20
|
+
|
|
21
|
+
# misc
|
|
22
|
+
.DS_Store
|
|
23
|
+
*.pem
|
|
24
|
+
|
|
25
|
+
# debug
|
|
26
|
+
npm-debug.log*
|
|
27
|
+
yarn-debug.log*
|
|
28
|
+
yarn-error.log*
|
|
29
|
+
.pnpm-debug.log*
|
|
30
|
+
|
|
31
|
+
# env files (contains secrets)
|
|
32
|
+
.env
|
|
33
|
+
.env*.local
|
|
34
|
+
|
|
35
|
+
# vercel
|
|
36
|
+
.vercel
|
|
37
|
+
|
|
38
|
+
# typescript
|
|
39
|
+
*.tsbuildinfo
|
|
40
|
+
next-env.d.ts
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { NextConfig } from 'next';
|
|
2
|
+
|
|
3
|
+
const nextConfig: NextConfig = {
|
|
4
|
+
turbopack: {
|
|
5
|
+
// Required: prevents Turbopack from inferring a parent directory as root
|
|
6
|
+
// when .codeyam/ exists above the project (which breaks import resolution)
|
|
7
|
+
root: '.',
|
|
8
|
+
},
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export default nextConfig;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "codeyam-project",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "next dev --turbopack",
|
|
7
|
+
"build": "next build",
|
|
8
|
+
"start": "next start",
|
|
9
|
+
"lint": "eslint",
|
|
10
|
+
"db:push": "npx prisma db push && npx prisma generate",
|
|
11
|
+
"db:seed": "npx tsx prisma/seed.ts",
|
|
12
|
+
"db:reset": "npx prisma migrate reset --force"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@prisma/adapter-pg": "^7.4.1",
|
|
16
|
+
"@prisma/client": "^7.4.1",
|
|
17
|
+
"@supabase/supabase-js": "^2.49.4",
|
|
18
|
+
"next": "^15.3.3",
|
|
19
|
+
"pg": "^8.16.0",
|
|
20
|
+
"prisma": "^7.4.1",
|
|
21
|
+
"react": "^19.1.0",
|
|
22
|
+
"react-dom": "^19.1.0"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@tailwindcss/postcss": "^4",
|
|
26
|
+
"@types/node": "^20",
|
|
27
|
+
"@types/pg": "^8",
|
|
28
|
+
"@types/react": "^19",
|
|
29
|
+
"@types/react-dom": "^19",
|
|
30
|
+
"eslint": "^9",
|
|
31
|
+
"eslint-config-next": "^15.3.3",
|
|
32
|
+
"tailwindcss": "^4",
|
|
33
|
+
"tsx": "^4.19.4",
|
|
34
|
+
"typescript": "^5"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Prisma 7 with PostgreSQL via Supabase.
|
|
2
|
+
//
|
|
3
|
+
// IMPORTANT: Use "prisma-client-js" (NOT "prisma-client").
|
|
4
|
+
// The "prisma-client" generator requires a custom output path which
|
|
5
|
+
// breaks Turbopack import resolution and seed script imports.
|
|
6
|
+
// "prisma-client-js" outputs to node_modules/@prisma/client which
|
|
7
|
+
// works everywhere with standard imports.
|
|
8
|
+
|
|
9
|
+
generator client {
|
|
10
|
+
provider = "prisma-client-js"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
datasource db {
|
|
14
|
+
provider = "postgresql"
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// ──────────────────────────────────────────────
|
|
18
|
+
// Replace these placeholder models with your own.
|
|
19
|
+
// After editing, run: npm run db:push
|
|
20
|
+
// ──────────────────────────────────────────────
|
|
21
|
+
|
|
22
|
+
model Todo {
|
|
23
|
+
id Int @id @default(autoincrement())
|
|
24
|
+
title String
|
|
25
|
+
completed Boolean @default(false)
|
|
26
|
+
createdAt DateTime @default(now())
|
|
27
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Seed script for populating the database with demo data.
|
|
2
|
+
//
|
|
3
|
+
// Run with: npx tsx prisma/seed.ts
|
|
4
|
+
// Or: npm run db:seed
|
|
5
|
+
//
|
|
6
|
+
// IMPORTANT: This file must use the same adapter pattern as app/lib/prisma.ts.
|
|
7
|
+
// Do NOT use `new PrismaClient()` without the adapter — Prisma 7 requires it.
|
|
8
|
+
|
|
9
|
+
import 'dotenv/config';
|
|
10
|
+
import { PrismaClient } from '@prisma/client';
|
|
11
|
+
import { PrismaPg } from '@prisma/adapter-pg';
|
|
12
|
+
|
|
13
|
+
const connectionString = process.env.DATABASE_URL!;
|
|
14
|
+
const adapter = new PrismaPg({ connectionString });
|
|
15
|
+
const prisma = new PrismaClient({ adapter });
|
|
16
|
+
|
|
17
|
+
async function main() {
|
|
18
|
+
// Clear existing data
|
|
19
|
+
await prisma.todo.deleteMany();
|
|
20
|
+
|
|
21
|
+
// Seed with demo data
|
|
22
|
+
await prisma.todo.createMany({
|
|
23
|
+
data: [
|
|
24
|
+
{ title: 'Set up the project', completed: true },
|
|
25
|
+
{ title: 'Build the first feature' },
|
|
26
|
+
{ title: 'Add more scenarios' },
|
|
27
|
+
],
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const count = await prisma.todo.count();
|
|
31
|
+
console.log(`Seeded ${count} todos`);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
main()
|
|
35
|
+
.then(() => prisma.$disconnect())
|
|
36
|
+
.catch((e) => {
|
|
37
|
+
console.error(e);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
});
|