diff --git a/.omc/project-memory.json b/.omc/project-memory.json index d8a089ab..052d3caa 100644 --- a/.omc/project-memory.json +++ b/.omc/project-memory.json @@ -257,6 +257,12 @@ "lastAccessed": 1776433904397, "type": "file" }, + { + "path": "packages/web/next.config.js", + "accessCount": 4, + "lastAccessed": 1779965242978, + "type": "file" + }, { "path": "packages/web/lib/image-loader.ts", "accessCount": 3, @@ -287,12 +293,6 @@ "lastAccessed": 1776391802453, "type": "file" }, - { - "path": "packages/web/next.config.js", - "accessCount": 2, - "lastAccessed": 1776432841858, - "type": "file" - }, { "path": "scripts/start-issue.sh", "accessCount": 1, diff --git a/packages/web/app/api/v1/content/assets/video-jobs/[jobId]/compose/route.ts b/packages/web/app/api/v1/content/assets/video-jobs/[jobId]/compose/route.ts index 371258ec..c34949dc 100644 --- a/packages/web/app/api/v1/content/assets/video-jobs/[jobId]/compose/route.ts +++ b/packages/web/app/api/v1/content/assets/video-jobs/[jobId]/compose/route.ts @@ -18,7 +18,9 @@ async function requireAdmin() { return null; } -export const maxDuration = 600; +// Vercel Hobby plan: maxDuration 1-60s 제한. 긴 compose 작업은 background +// job 패턴 (poll endpoint 와 함께) 으로 처리. Pro plan 업그레이드 시 600 복원 가능. +export const maxDuration = 60; export async function POST( request: NextRequest, diff --git a/packages/web/app/api/v1/content/assets/videos/route.ts b/packages/web/app/api/v1/content/assets/videos/route.ts index fbd6f42d..1913d4d3 100644 --- a/packages/web/app/api/v1/content/assets/videos/route.ts +++ b/packages/web/app/api/v1/content/assets/videos/route.ts @@ -22,7 +22,8 @@ async function requireAdmin() { return null; } -export const maxDuration = 300; +// Vercel Hobby plan: maxDuration 1-60s 제한. Pro plan 업그레이드 시 300 복원 가능. +export const maxDuration = 60; export async function POST(request: NextRequest) { const adminError = await requireAdmin(); diff --git a/packages/web/next.config.js b/packages/web/next.config.js index 96c4a85a..6ac50d0c 100644 --- a/packages/web/next.config.js +++ b/packages/web/next.config.js @@ -4,7 +4,9 @@ const { withSentryConfig } = require("@sentry/nextjs"); const nextConfig = { reactStrictMode: true, // Transpile shared package from monorepo - transpilePackages: ["@decoded/shared"], + // `@next/third-parties` 는 Turbopack 의 subpath export 해석 회귀로 추가 + // (`@next/third-parties/google` resolve 실패 — vercel/next.js#58697 계열). + transpilePackages: ["@decoded/shared", "@next/third-parties"], images: { localPatterns: [{ pathname: "/**" }], // Direct-optimization allowlist — must stay in sync with diff --git a/packages/web/scripts/content-studio-video-local.ts b/packages/web/scripts/content-studio-video-local.ts index 54285b5c..e7ed2499 100644 --- a/packages/web/scripts/content-studio-video-local.ts +++ b/packages/web/scripts/content-studio-video-local.ts @@ -556,7 +556,6 @@ async function main() { platform: platform as ShortFormPlatform, durationSeconds, variants: [], - useResearchInCopy: false, }); const scenes = plan.scenes.filter( (scene) => !selectedSceneIds || selectedSceneIds.has(scene.id)