{ "name": "docdoe", "version": "1.0.0", "private": true, "engines": { "node": ">=20.9.0" }, "scripts": { "content:manifest": "tsx scripts/generate-content-manifest.ts", "tuition:content-contract": "tsx scripts/generate-tuition-content-contract.ts", "dev": "next dev", "build": "next build", "start": "next start", "lint": "eslint src next.config.ts eslint.config.mjs vitest.config.ts", "lint:all": "eslint", "remotion:studio": "remotion studio src/remotion/Root.tsx", "render:sample-video": "remotion render src/remotion/Root.tsx ExplainerVideo generated-videos/sample-explainer.mp4", "render:sample-anime-video": "remotion render src/remotion/Root.tsx ExplainerVideoVertical generated-videos/sample-anime-visual-explainer.mp4", "tts:sample": "python backend/scripts/generate_sample_tts.py --provider edge --voice-mode english_soft", "tts:sample-mock": "python backend/scripts/generate_sample_tts.py --provider mock --voice-mode english_soft", "video:photosynthesis-real-audio": ".\\backend\\.venv\\Scripts\\python.exe backend/scripts/generate_photosynthesis_anime_video.py", "render:sample-video-with-audio": "remotion render src/remotion/Root.tsx ExplainerVideo generated-videos/sample-explainer-with-audio.mp4 --props=public/generated/audio/sample-rest-api-en/scene-plan-with-audio.json", "render:from-json": "node scripts/render-video-from-json.mjs", "doctor": "npx react-doctor@latest", "seo:verify": "npx tsx scripts/verify-seo-routes.ts", "seo:smoke": "npx tsx scripts/seo-smoke-test.ts", "test": "vitest run", "preflight:prod": "python backend/scripts/production_preflight.py", "verify:deploy": "python scripts/verify_deploy.py", "video:plan": "tsx scripts/video/generate-tuition-video-plan.ts", "video:preview": "remotion studio src/remotion/Root.tsx", "video:render:sample": "remotion render src/remotion/Root.tsx TuitionLessonVideoPreview generated-videos/tuition-sound-waves-sample.mp4", "video:render:full": "remotion render src/remotion/Root.tsx TuitionLessonVideoFull generated-videos/tuition-sound-waves-full.mp4", "video:manifest": "tsx scripts/video/create-render-manifest.ts", "video:render:segment": "remotion render src/remotion/Root.tsx TuitionLessonVideoSegment", "video:render:all-segments": "tsx scripts/video/render-all-segments.ts", "video:render:sample:short": "remotion render src/remotion/Root.tsx TuitionLessonVideoShortSample outputs/video/tuition/sound-waves/sample/sound-waves-sample.mp4", "video:subtitles": "tsx scripts/video/export-tuition-subtitles.ts", "video:voiceover-script": "tsx scripts/video/generate-voiceover-script.ts", "video:first-segment:assets": "tsx scripts/video/generate-first-segment-assets.ts", "video:render:first-segment": "remotion render src/remotion/Root.tsx TuitionLessonVideoFirstSegment outputs/video/tuition/sound-waves/segments/sound-waves-vibration-medium.mp4", "video:tts:chunks": "tsx scripts/video/generate-tts-chunks.ts", "video:tts:audio": "tsx scripts/video/generate-tts-audio.ts", "video:tts:merge": "tsx scripts/video/merge-tts-audio.ts", "video:check-density": "tsx scripts/video/check-teaching-density.ts", "video:check-audio": "tsx scripts/video/check-video-audio.ts", "video:full-chapter:assets": "tsx scripts/video/prepare-full-chapter-render-props.ts", "video:render:full-chapter": "npm run video:full-chapter:assets && remotion render src/remotion/Root.tsx TuitionLessonVideoFullChapter --props=outputs/video/tuition/phy-p1-c1/full/render-props.json --hardware-acceleration=if-possible --gl=angle --scale=0.6666666666666666 outputs/video/tuition/phy-p1-c1/full/sound-waves-full-chapter.mp4", "video:render:full-chapter:dry": "remotion render src/remotion/Root.tsx TuitionLessonVideoFullChapterPreview --hardware-acceleration=if-possible --gl=angle --scale=0.6666666666666666 outputs/video/tuition/phy-p1-c1/full/sound-waves-full-chapter-preview.mp4", "video:lenses:tts:chunks": "cross-env CHAPTER_ID=phy-p1-c2 tsx scripts/video/generate-tts-chunks.ts", "video:lenses:tts:audio": "cross-env CHAPTER_ID=phy-p1-c2 tsx scripts/video/generate-tts-audio.ts", "video:lenses:tts:merge": "cross-env CHAPTER_ID=phy-p1-c2 tsx scripts/video/merge-tts-audio.ts", "video:lenses:render": "cross-env CHAPTER_ID=phy-p1-c2 npm run video:full-chapter:assets && remotion render src/remotion/Root.tsx TuitionLessonVideoFullChapter --props=outputs/video/tuition/phy-p1-c2/full/render-props.json --hardware-acceleration=if-possible --gl=angle --scale=0.6666666666666666 outputs/video/tuition/phy-p1-c2/full/lenses-full-chapter.mp4", "video:scene-index": "tsx scripts/video/generate-scene-index.ts", "video:scene-stills": "tsx scripts/video/render-all-scene-stills.ts", "video:scene-contact-sheets": "tsx scripts/video/generate-contact-sheets.ts", "video:scene-qa-check": "tsx scripts/video/check-scene-screen-text.ts", "video:day19-sample:props": "tsx scripts/video/render-day19-sample.ts", "video:day19-sample": "npm run video:day19-sample:props && remotion render src/remotion/Root.tsx TuitionLessonVideoFullChapter --props=outputs/video/tuition/sound-waves/scene-review/sample/render-props.json --hardware-acceleration=if-possible --gl=angle outputs/video/tuition/sound-waves/scene-review/sample/sound-waves-day19-sample.mp4", "video:c3:tts:chunks": "cross-env CHAPTER_ID=phy-p1-c3 tsx scripts/video/generate-tts-chunks.ts", "video:c3:tts:audio": "cross-env CHAPTER_ID=phy-p1-c3 tsx scripts/video/generate-tts-audio.ts", "video:c3:tts:merge": "cross-env CHAPTER_ID=phy-p1-c3 tsx scripts/video/merge-tts-audio.ts", "video:c3:render": "cross-env CHAPTER_ID=phy-p1-c3 npm run video:full-chapter:assets && remotion render src/remotion/Root.tsx TuitionLessonVideoFullChapter --props=outputs/video/tuition/phy-p1-c3/full/render-props.json --hardware-acceleration=if-possible --gl=angle --scale=0.6666666666666666 outputs/video/tuition/phy-p1-c3/full/colours-full-chapter.mp4", "video:c4:tts:chunks": "cross-env CHAPTER_ID=phy-p1-c4 tsx scripts/video/generate-tts-chunks.ts", "video:c4:tts:audio": "cross-env CHAPTER_ID=phy-p1-c4 tsx scripts/video/generate-tts-audio.ts", "video:c4:tts:merge": "cross-env CHAPTER_ID=phy-p1-c4 tsx scripts/video/merge-tts-audio.ts", "video:c4:render": "cross-env CHAPTER_ID=phy-p1-c4 npm run video:full-chapter:assets && remotion render src/remotion/Root.tsx TuitionLessonVideoFullChapter --props=outputs/video/tuition/phy-p1-c4/full/render-props.json --hardware-acceleration=if-possible --gl=angle --scale=0.6666666666666666 outputs/video/tuition/phy-p1-c4/full/magnetic-full-chapter.mp4", "video:check-master-teacher": "tsx scripts/video/check-master-teacher.ts", "textbook:ingest:sslc-physics": "python backend/scripts/ingest_sslc_physics_textbooks.py", "video-engine:export": "tsx scripts/video-engine/export-grounded-artifacts.ts", "video-engine:test": "tsx src/video-engine/__tests__/engine.test.ts && vitest run src/video-engine/physics/__tests__/continuousPhysicsEngine.test.ts", "video-engine:preview": "remotion render src/remotion/PhysicsEngineRoot.tsx SoundWavesContinuousPreview outputs/video-engine/continuous-sound-waves/sound-waves-continuous-preview.mp4 --scale=0.6666666667", "physics-video:package-all": "tsx scripts/video-engine/build-physics-production-packages.ts", "physics-video:render-all": "tsx scripts/video-engine/render-physics-production-chapters.ts", "render:launch-ad": "remotion render src/remotion/Root.tsx DocDoeLaunchAd generated-videos/docdoe-launch-ad.mp4 --hardware-acceleration=if-possible --gl=angle", "render:launch-ad-4k": "remotion render src/remotion/Root.tsx DocDoeLaunchAd generated-videos/docdoe-launch-ad-4k.mp4 --scale=2 --hardware-acceleration=if-possible --gl=angle", "render:launch-ad-prores": "remotion render src/remotion/Root.tsx DocDoeLaunchAd generated-videos/docdoe-launch-ad-master.mov --codec=prores --prores-profile=hq", "render:launch-ad-portrait": "remotion render src/remotion/Root.tsx DocDoeLaunchAdPortrait generated-videos/docdoe-launch-ad-portrait.mp4 --hardware-acceleration=if-possible --gl=angle", "render:geography-ad": "remotion render src/remotion/Root.tsx DocDoeGeographyAd generated-videos/docdoe-geography-ad.mp4 --hardware-acceleration=if-possible --gl=angle", "render:geography-ad-portrait": "remotion render src/remotion/Root.tsx DocDoeGeographyAdPortrait generated-videos/docdoe-geography-ad-portrait.mp4 --hardware-acceleration=if-possible --gl=angle" }, "dependencies": { "@react-three/drei": "^10.7.8", "@react-three/fiber": "^9.7.0", "@remotion/cli": "^4.0.459", "@remotion/google-fonts": "^4.0.459", "@remotion/motion-blur": "^4.0.459", "@remotion/player": "^4.0.459", "@remotion/shapes": "^4.0.459", "@vercel/analytics": "^2.0.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "framer-motion": "^12.38.0", "gsap": "^3.15.0", "hls.js": "^1.6.16", "katex": "^0.16.47", "lenis": "^1.3.23", "liquid-glass-react": "^1.1.1", "lucide-react": "^1.16.0", "motion": "^12.40.0", "next": "16.2.6", "next-themes": "^0.4.6", "ogl": "^1.0.11", "radix-ui": "^1.4.3", "react": "19.2.4", "react-dom": "19.2.4", "react-markdown": "^10.1.0", "rehype-katex": "^7.0.1", "remark-gfm": "^4.0.1", "remark-math": "^6.0.0", "remark-parse": "^11.0.0", "remotion": "^4.0.459", "shadcn": "^4.13.0", "tailwind-merge": "^3.6.0", "three": "^0.185.1", "tw-animate-css": "^1.4.0", "unified": "^11.0.5" }, "overrides": { "postcss": "8.5.14" }, "devDependencies": { "@tailwindcss/postcss": "^4", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", "cross-env": "^10.1.0", "eslint": "^9", "eslint-config-next": "16.2.6", "jsdom": "^29.1.1", "playwright-core": "^1.62.1", "react-doctor": "^0.2.9", "tailwindcss": "^4", "tsx": "^4.23.0", "typescript": "^5", "vitest": "^4.1.7" } }