@mevdragon/vidfarm-devcli 0.20.5 โ†’ 0.20.8

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.
Files changed (154) hide show
  1. package/.agents/skills/editor-capabilities/SKILL.md +15 -1
  2. package/.agents/skills/vidfarm-director/SKILL.md +106 -0
  3. package/.agents/skills/vidfarm-director/recipes/find-and-fork-template.md +16 -0
  4. package/.agents/skills/vidfarm-director/recipes/local-edit-render-approve.md +13 -0
  5. package/.agents/skills/vidfarm-director/recipes/onboard-a-new-director.md +13 -0
  6. package/.agents/skills/vidfarm-director/recipes/retheme-template.md +17 -0
  7. package/.agents/skills/vidfarm-director/references/assets-and-sourcing.md +111 -0
  8. package/.agents/skills/vidfarm-director/references/automation-and-local-dev.md +243 -0
  9. package/.agents/skills/vidfarm-director/references/core-workflows.md +273 -0
  10. package/.agents/skills/vidfarm-director/references/editor-workflows.md +365 -0
  11. package/.agents/skills/vidfarm-director/references/onboarding.md +28 -0
  12. package/.agents/skills/vidfarm-director/references/primitives.md +265 -0
  13. package/SKILL.director.md +521 -261
  14. package/dist/src/cli.js +404 -96
  15. package/dist/src/devcli/clips.js +15 -10
  16. package/dist/src/devcli/doctor.js +2 -2
  17. package/dist/src/devcli/local-backend.js +46 -2
  18. package/dist/src/services/clip-curation/cost.js +5 -1
  19. package/dist/src/services/clip-curation/gemini.js +10 -0
  20. package/package.json +30 -10
  21. package/SKILL.platform.md +0 -432
  22. package/demo/README.md +0 -28
  23. package/demo/dist/app.css +0 -1
  24. package/demo/dist/app.js +0 -1850
  25. package/demo/dist/chunks/chunk-DXB73IDG.js +0 -1
  26. package/demo/dist/chunks/chunk-S7OWAJDS.js +0 -36
  27. package/demo/dist/chunks/chunk-VTIBZ6AN.js +0 -1
  28. package/demo/dist/chunks/dist-ADSJKBVE.js +0 -332
  29. package/demo/dist/chunks/domEditingLayers-VZMLL4AP-SGHWPND4.js +0 -1
  30. package/demo/dist/chunks/hyperframes-player-XB65TCD6.js +0 -425
  31. package/demo/dist/chunks/lib-XAQ37YOE.js +0 -1
  32. package/demo/dist/chunks/src-TJ2QYA4U.js +0 -207
  33. package/demo/dist/favicon.ico +0 -0
  34. package/demo/dist/icons/timeline/audio.svg +0 -7
  35. package/demo/dist/icons/timeline/captions.svg +0 -5
  36. package/demo/dist/icons/timeline/composition.svg +0 -12
  37. package/demo/dist/icons/timeline/image.svg +0 -18
  38. package/demo/dist/icons/timeline/music.svg +0 -10
  39. package/demo/dist/icons/timeline/text.svg +0 -3
  40. package/demo/dist/index.html +0 -15
  41. package/dist/src/account-pages-legacy.js +0 -9396
  42. package/dist/src/account-pages.js +0 -61
  43. package/dist/src/app.js +0 -21602
  44. package/dist/src/composition-runtime.js +0 -1053
  45. package/dist/src/config.js +0 -217
  46. package/dist/src/context.js +0 -447
  47. package/dist/src/dev-app-legacy.js +0 -739
  48. package/dist/src/dev-app.js +0 -6
  49. package/dist/src/devcli/migrate-local.js +0 -140
  50. package/dist/src/devcli/sync.js +0 -368
  51. package/dist/src/domain.js +0 -5
  52. package/dist/src/editor-chat-history.js +0 -82
  53. package/dist/src/editor-chat.js +0 -756
  54. package/dist/src/editor-dark-theme.js +0 -1128
  55. package/dist/src/frontend/debug.js +0 -71
  56. package/dist/src/frontend/discover-client.js +0 -130
  57. package/dist/src/frontend/discover-store.js +0 -23
  58. package/dist/src/frontend/file-directory.js +0 -1018
  59. package/dist/src/frontend/flockposter-cache-store.js +0 -124
  60. package/dist/src/frontend/homepage-client.js +0 -446
  61. package/dist/src/frontend/homepage-shared.js +0 -201
  62. package/dist/src/frontend/homepage-store.js +0 -66
  63. package/dist/src/frontend/homepage-view.js +0 -705
  64. package/dist/src/frontend/page-runtime-client.js +0 -132
  65. package/dist/src/frontend/page-runtime-store.js +0 -9
  66. package/dist/src/frontend/sentry.js +0 -42
  67. package/dist/src/frontend/template-editor-chat.js +0 -4181
  68. package/dist/src/help-page.js +0 -346
  69. package/dist/src/homepage.js +0 -1458
  70. package/dist/src/index.js +0 -16
  71. package/dist/src/instrument.js +0 -30
  72. package/dist/src/landing-page.js +0 -384
  73. package/dist/src/page-runtime.js +0 -2
  74. package/dist/src/page-shell.js +0 -1452
  75. package/dist/src/primitive-context.js +0 -416
  76. package/dist/src/primitive-registry.js +0 -3940
  77. package/dist/src/primitive-sdk.js +0 -4
  78. package/dist/src/primitives/hyperframes-media.js +0 -108
  79. package/dist/src/react-page-shell.js +0 -35
  80. package/dist/src/ready-post-schedule-component.js +0 -1540
  81. package/dist/src/registry.js +0 -296
  82. package/dist/src/reskin/agency-page.js +0 -299
  83. package/dist/src/reskin/calendar-page.js +0 -568
  84. package/dist/src/reskin/chat-page.js +0 -942
  85. package/dist/src/reskin/discover-page.js +0 -1788
  86. package/dist/src/reskin/document.js +0 -1587
  87. package/dist/src/reskin/help-page.js +0 -357
  88. package/dist/src/reskin/index-page.js +0 -62
  89. package/dist/src/reskin/inpaint-clipper-page.js +0 -890
  90. package/dist/src/reskin/inpaint-page.js +0 -2554
  91. package/dist/src/reskin/inpaint-video-page.js +0 -1339
  92. package/dist/src/reskin/job-runs-page.js +0 -477
  93. package/dist/src/reskin/library-page.js +0 -1634
  94. package/dist/src/reskin/login-page.js +0 -262
  95. package/dist/src/reskin/portfolio-page.js +0 -687
  96. package/dist/src/reskin/pricing-page.js +0 -390
  97. package/dist/src/reskin/settings-page.js +0 -732
  98. package/dist/src/reskin/theme.js +0 -711
  99. package/dist/src/runtime.js +0 -35
  100. package/dist/src/services/api-call-history.js +0 -249
  101. package/dist/src/services/auth.js +0 -152
  102. package/dist/src/services/billing-pricing.js +0 -39
  103. package/dist/src/services/billing.js +0 -241
  104. package/dist/src/services/cast.js +0 -127
  105. package/dist/src/services/chat-threads.js +0 -92
  106. package/dist/src/services/clip-records.js +0 -250
  107. package/dist/src/services/clip-search.js +0 -77
  108. package/dist/src/services/clip-vectors.js +0 -125
  109. package/dist/src/services/composition-sanitize.js +0 -124
  110. package/dist/src/services/composition-watch.js +0 -79
  111. package/dist/src/services/elevenlabs.js +0 -222
  112. package/dist/src/services/file-directory.js +0 -117
  113. package/dist/src/services/fork-access.js +0 -93
  114. package/dist/src/services/fork-manifest.js +0 -42
  115. package/dist/src/services/ghostcut.js +0 -179
  116. package/dist/src/services/hyperframes.js +0 -3517
  117. package/dist/src/services/job-capacity.js +0 -14
  118. package/dist/src/services/job-logs.js +0 -197
  119. package/dist/src/services/jobs.js +0 -136
  120. package/dist/src/services/local-dynamo.js +0 -0
  121. package/dist/src/services/media-processing.js +0 -766
  122. package/dist/src/services/primitive-media-lambda.js +0 -280
  123. package/dist/src/services/providers.js +0 -2748
  124. package/dist/src/services/rate-limits.js +0 -262
  125. package/dist/src/services/scene-annotations.js +0 -32
  126. package/dist/src/services/serverless-auth.js +0 -382
  127. package/dist/src/services/serverless-jobs.js +0 -1084
  128. package/dist/src/services/serverless-provider-keys.js +0 -409
  129. package/dist/src/services/serverless-records.js +0 -1515
  130. package/dist/src/services/serverless-template-configs.js +0 -75
  131. package/dist/src/services/storage.js +0 -461
  132. package/dist/src/services/swipe-customize.js +0 -437
  133. package/dist/src/services/template-certification.js +0 -413
  134. package/dist/src/services/template-loader.js +0 -99
  135. package/dist/src/services/template-runtime-bundles.js +0 -217
  136. package/dist/src/services/template-sources.js +0 -1017
  137. package/dist/src/services/upstream.js +0 -248
  138. package/dist/src/services/video-normalization.js +0 -2
  139. package/dist/src/services/webhooks.js +0 -62
  140. package/dist/src/template-editor-pages.js +0 -2576
  141. package/dist/src/template-editor-shell.js +0 -2893
  142. package/dist/src/template-sdk.js +0 -4
  143. package/dist/src/worker.js +0 -17
  144. package/public/assets/discover-client-app.js +0 -1
  145. package/public/assets/file-directory-app.js +0 -3
  146. package/public/assets/homepage-app.js +0 -54
  147. package/public/assets/homepage-client-app.js +0 -80
  148. package/public/assets/page-runtime-client-app.js +0 -94
  149. package/public/assets/placeholders/scene-placeholder.png +0 -0
  150. package/src/assets/SELLING_AWARENESS_STAGES.md +0 -579
  151. package/src/assets/SELLING_WITH_HOOKS.md +0 -377
  152. package/src/assets/SELLING_WITH_VSLS.md +0 -606
  153. package/src/assets/favicon.ico +0 -0
  154. package/src/assets/logo-vidfarm.png +0 -0
package/dist/src/index.js DELETED
@@ -1,16 +0,0 @@
1
- import { startRuntime } from "./runtime.js";
2
- void (async () => {
3
- const runtime = await startRuntime();
4
- for (const signal of ["SIGINT", "SIGTERM"]) {
5
- process.on(signal, () => {
6
- void (async () => {
7
- await runtime.shutdown();
8
- process.exit(0);
9
- })();
10
- });
11
- }
12
- })().catch((error) => {
13
- console.error(error instanceof Error ? error.stack ?? error.message : String(error));
14
- process.exit(1);
15
- });
16
- //# sourceMappingURL=index.js.map
@@ -1,30 +0,0 @@
1
- import dotenv from "dotenv";
2
- import * as Sentry from "@sentry/hono/node";
3
- dotenv.config();
4
- function readBoolean(name, defaultValue) {
5
- const raw = process.env[name]?.trim().toLowerCase();
6
- if (!raw)
7
- return defaultValue;
8
- return raw === "1" || raw === "true" || raw === "yes";
9
- }
10
- function readSampleRate(name, defaultValue) {
11
- const raw = process.env[name]?.trim();
12
- if (!raw)
13
- return defaultValue;
14
- const parsed = Number(raw);
15
- return Number.isFinite(parsed) && parsed >= 0 && parsed <= 1 ? parsed : defaultValue;
16
- }
17
- const dsn = process.env.SENTRY_DSN?.trim();
18
- if (dsn) {
19
- const environment = process.env.SENTRY_ENVIRONMENT?.trim() || process.env.NODE_ENV || "development";
20
- const defaultTracesSampleRate = environment === "production" ? 0.1 : 1.0;
21
- Sentry.init({
22
- dsn,
23
- environment,
24
- release: process.env.SENTRY_RELEASE?.trim() || undefined,
25
- tracesSampleRate: readSampleRate("SENTRY_TRACES_SAMPLE_RATE", defaultTracesSampleRate),
26
- enableLogs: readBoolean("SENTRY_ENABLE_LOGS", true),
27
- sendDefaultPii: readBoolean("SENTRY_SEND_DEFAULT_PII", false)
28
- });
29
- }
30
- //# sourceMappingURL=instrument.js.map
@@ -1,384 +0,0 @@
1
- // Standalone marketing landing page for vidfarm.cc (the root "/").
2
- //
3
- // This is a deliberately SELF-CONTAINED test page: its own <style> block, its
4
- // own copy-pasted design tokens, no shared page shell or React runtime. It
5
- // exists to trial the "farmville-saas-ux" design system (warm, sunny, storybook
6
- // SaaS distilled from Fillout.com) against the real Vidfarm product without
7
- // touching /discover, /editor, or any of the app surfaces.
8
- //
9
- // If we like it, it graduates into the real homepage shell. Until then keep it
10
- // isolated โ€” do not import app state or components here.
11
- // Real Vidfarm routes the CTAs point at:
12
- // /discover โ†’ the template feed (the "studio" entry point)
13
- // /library โ†’ the signed-in director's own projects
14
- // /chat โ†’ the brainstorm / AI chat
15
- // /clips โ†’ the clip library
16
- // /login โ†’ sign in
17
- const HREF = {
18
- studio: "/discover",
19
- library: "/library",
20
- chat: "/chat",
21
- clips: "/clips",
22
- login: "/login"
23
- };
24
- export function renderLandingPage(input) {
25
- const primaryCta = input.isLoggedIn
26
- ? { label: "Open the studio", href: HREF.studio }
27
- : { label: "Get started", href: HREF.studio };
28
- const quietNav = input.isLoggedIn
29
- ? `<a class="link-quiet" href="${HREF.library}">Library</a>`
30
- : `<a class="link-quiet" href="${HREF.login}">Log in</a>`;
31
- return `<!doctype html>
32
- <html lang="en">
33
- <head>
34
- <meta charset="utf-8">
35
- <meta name="viewport" content="width=device-width, initial-scale=1">
36
- <title>VidFarm โ€” short-form video that makes itself</title>
37
- <meta name="description" content="Fork a proven short-form template, remix it on the timeline, and render a share-ready MP4 โ€” all in your browser. VidFarm is the serverless video studio that scales to zero.">
38
- <meta name="theme-color" content="#171717">
39
- <meta name="robots" content="index, follow">
40
- <meta name="application-name" content="VidFarm">
41
- <link rel="canonical" href="https://vidfarm.cc/">
42
- <meta property="og:type" content="website">
43
- <meta property="og:site_name" content="VidFarm">
44
- <meta property="og:title" content="VidFarm โ€” short-form video that makes itself">
45
- <meta property="og:description" content="Fork a proven short-form template, remix it on the timeline, and render a share-ready MP4 โ€” all in your browser. VidFarm is the serverless video studio that scales to zero.">
46
- <meta property="og:url" content="https://vidfarm.cc/">
47
- <meta property="og:image" content="https://vidfarm.cc/assets/logo-vidfarm.png">
48
- <meta name="twitter:card" content="summary_large_image">
49
- <meta name="twitter:title" content="VidFarm โ€” short-form video that makes itself">
50
- <meta name="twitter:description" content="Fork a proven short-form template, remix it on the timeline, and render a share-ready MP4 โ€” all in your browser. VidFarm is the serverless video studio that scales to zero.">
51
- <meta name="twitter:image" content="https://vidfarm.cc/assets/logo-vidfarm.png">
52
- <link rel="icon" href="/assets/favicon.ico" sizes="any">
53
- <link rel="apple-touch-icon" href="/assets/logo-vidfarm.png">
54
- <link rel="preconnect" href="https://fonts.googleapis.com">
55
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
56
- <link href="https://fonts.googleapis.com/css2?family=Hanken+Grotesk:wght@400;500;600;700;800&family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
57
- <style>
58
- :root{
59
- --font-display:"Hanken Grotesk","blMelody",ui-sans-serif,system-ui,sans-serif;
60
- --font-body:"Inter",ui-sans-serif,system-ui,-apple-system,sans-serif;
61
- /* honey gold โ€” the one joy accent */
62
- --gold-500:#ffc738;--gold-600:#f6c744;--gold-700:#fcb900;--gold-tint:#fff5e4;--gold-tint2:#ffe9cc;
63
- /* ink + neutral scale */
64
- --ink:#171717;--n-800:#262626;--n-700:#404040;--n-600:#525252;--n-500:#737373;--n-400:#a3a3a3;
65
- --n-300:#d4d4d4;--n-200:#ededed;--n-100:#f5f5f5;--n-50:#fbfbfb;--white:#fff;
66
- /* support pastels */
67
- --sky:#3f9fe0;--sky-tint:#e2effd;--violet:#9f5bde;--violet-tint:#e4ddfd;--green:#22c55e;--green-tint:#dcfce7;--coral:#f97316;--coral-tint:#ffe9cc;
68
- /* semantic */
69
- --bg:var(--n-50);--bg-section:var(--n-100);--surface:var(--white);--border:var(--n-200);--border-strong:var(--n-300);
70
- --text:var(--n-700);--text-muted:var(--n-500);--text-faint:var(--n-400);
71
- /* radius */
72
- --r-md:6px;--r-lg:8px;--r-xl:12px;--r-2xl:16px;--r-3xl:24px;--r-full:9999px;
73
- /* shadow */
74
- --shadow-xs:0 1px 2px 0 #0000000d;--shadow-sm:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;
75
- --shadow-md:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--shadow-lg:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;
76
- --shadow-xl:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a;
77
- --shadow-card:0 1px 2px #0000000d,0 8px 24px -12px #00000014;--shadow-nav:0 4px 24px -8px #00000026,0 1px 2px #0000000d;
78
- --ring-gold:0 0 0 3px var(--gold-600),0 0 14px rgba(246,199,68,.4);
79
- /* type */
80
- --text-sm:.875rem;--text-lg:1.125rem;--text-xl:1.25rem;--text-2xl:1.5rem;--text-4xl:2.25rem;--text-5xl:3rem;
81
- --display:clamp(3rem,7vw,6rem);
82
- /* space + motion */
83
- --section-y:clamp(4rem,9vw,7rem);--container:75rem;--gutter:clamp(1rem,4vw,2rem);
84
- --nav-h:103px; /* measured nav-wrap height โ€” constant across breakpoints */
85
- --glass-blur:16px;--ease:cubic-bezier(.22,1,.36,1);--dur:220ms;
86
- }
87
- *{box-sizing:border-box;margin:0;padding:0}
88
- html{font-size:16px;scroll-behavior:smooth}
89
- body{font-family:var(--font-body);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;line-height:1.5}
90
- a{text-decoration:none;color:inherit}
91
- h1,h2,h3,h4{font-family:var(--font-display);font-weight:800;letter-spacing:-.025em;line-height:1.1;color:var(--ink)}
92
- .container{width:min(var(--container),100%);margin:0 auto;padding:0 var(--gutter)}
93
-
94
- /* nav โ€” floating frosted-glass pill */
95
- .nav-wrap{position:sticky;top:0;z-index:50;padding:16px var(--gutter);display:flex;justify-content:center}
96
- .glass{background:rgba(255,255,255,.72);backdrop-filter:blur(var(--glass-blur));-webkit-backdrop-filter:blur(var(--glass-blur));border:1px solid var(--border);box-shadow:var(--shadow-nav)}
97
- .nav{width:min(var(--container),100%);display:flex;align-items:center;gap:24px;padding:10px 12px 10px 22px;border-radius:var(--r-full)}
98
- .brand{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-display);font-weight:800;font-size:22px;color:var(--ink);letter-spacing:-.02em}
99
- .brand-mark{display:inline-block;vertical-align:middle;width:48px;height:48px;border-radius:12px;background:center/contain no-repeat url("/assets/logo-vidfarm.png");font-size:0;color:transparent;text-indent:-9999px;overflow:hidden}
100
- .nav-links{display:flex;gap:2px;margin:0 auto;list-style:none}
101
- .nav-links a{display:inline-flex;align-items:center;gap:4px;padding:8px 12px;border-radius:var(--r-lg);font-size:15px;font-weight:500;color:var(--n-700);transition:background var(--dur) var(--ease)}
102
- .nav-links a:hover{background:#0000000a}
103
- .nav-cta{display:flex;align-items:center;gap:8px}
104
- .link-quiet{padding:8px 12px;font-size:15px;font-weight:500;color:var(--n-700);border-radius:var(--r-lg);transition:background var(--dur) var(--ease)}
105
- .link-quiet:hover{background:#0000000a}
106
- @media(max-width:820px){.nav-links{display:none}}
107
-
108
- /* buttons */
109
- .btn{display:inline-flex;align-items:center;gap:8px;padding:12px 20px;border-radius:var(--r-full);font-family:var(--font-body);font-size:15px;font-weight:600;border:1px solid transparent;cursor:pointer;white-space:nowrap;transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease),background var(--dur) var(--ease)}
110
- .btn .arrow{transition:transform var(--dur) var(--ease)}
111
- .btn:hover .arrow{transform:translateX(3px)}
112
- .btn-ink{background:var(--ink);color:#fff;box-shadow:var(--shadow-sm)}
113
- .btn-ink:hover{background:#000;box-shadow:var(--shadow-md);transform:translateY(-1px)}
114
- .btn-gold{background:var(--gold-500);color:var(--ink);font-weight:700;box-shadow:var(--shadow-sm)}
115
- .btn-gold:hover{background:var(--gold-700);box-shadow:0 6px 18px -6px rgba(252,185,0,.6);transform:translateY(-1px)}
116
- .btn-ghost{background:#fff;color:var(--ink);border-color:var(--border);box-shadow:var(--shadow-xs)}
117
- .btn-ghost:hover{border-color:var(--border-strong);box-shadow:var(--shadow-sm)}
118
- .btn-lg{padding:15px 26px;font-size:16px}
119
-
120
- /* badges */
121
- .badge{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border-radius:var(--r-full);background:#fff;border:1px solid var(--border);box-shadow:var(--shadow-xs);font-size:14px;font-weight:500;color:var(--n-700)}
122
-
123
- /* hero band โ€” the sunny sky sits behind BOTH the nav and the hero so the
124
- frosted pill nav floats over the illustration (not on a white strip).
125
- Pulled up by one nav-height so it slides under the (body-level, still
126
- whole-page-sticky) nav; the hero's top padding adds that height back. */
127
- .hero-band{position:relative;overflow:hidden;margin-top:calc(-1 * var(--nav-h))}
128
- /* hero โ€” Tier-2 pure-CSS sunny sky (no image asset needed) */
129
- .hero{position:relative;z-index:1;text-align:center;padding:calc(var(--nav-h) + 40px) var(--gutter) 108px}
130
- .hero-art{position:absolute;inset:0;z-index:0;background:
131
- radial-gradient(58% 46% at 78% 20%,rgba(255,241,204,.9),transparent 60%),
132
- linear-gradient(180deg,#3f9fe0 0%,#6cc0f5 55%,#a9dbfb 100%)}
133
- .hero-art::after{content:"";position:absolute;right:9%;bottom:16%;width:340px;height:130px;
134
- background:radial-gradient(ellipse 60% 60% at 30% 60%,#fff,transparent 70%),radial-gradient(ellipse 50% 70% at 66% 50%,#fff,transparent 70%);filter:blur(2px);opacity:.95}
135
- .hero-art::before{content:"";position:absolute;left:6%;top:30%;width:220px;height:90px;
136
- background:radial-gradient(ellipse 60% 60% at 40% 60%,#fff,transparent 72%);filter:blur(3px);opacity:.8}
137
- .hero-inner{position:relative;z-index:1;max-width:860px;margin:0 auto;display:grid;gap:22px;justify-items:center}
138
- .hero h1{font-size:var(--display);line-height:1;letter-spacing:-.03em;color:#fff;text-shadow:0 2px 24px rgba(0,0,0,.12)}
139
- .hero h1 .soft{color:rgba(255,255,255,.55)}
140
- .hero-sub{font-size:var(--text-xl);line-height:1.5;color:rgba(255,255,255,.94);max-width:600px}
141
- .hero .badge{background:rgba(255,255,255,.9)}
142
- .hero-cta{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;margin-top:4px}
143
- .hero-note{font-size:var(--text-sm);color:rgba(255,255,255,.85);margin-top:2px}
144
-
145
- /* floating pipeline mockup โ€” fork โ†’ edit โ†’ render โ†’ publish nodes */
146
- .hero-shot{position:relative;z-index:2;width:min(64rem,100%);margin:-64px auto 0;background:#fff;border:1px solid var(--border);border-radius:var(--r-3xl);box-shadow:var(--shadow-xl);padding:22px}
147
- .shot-head{display:flex;align-items:center;gap:8px;padding:2px 4px 16px;border-bottom:1px solid var(--border);margin-bottom:18px}
148
- .dot{width:11px;height:11px;border-radius:50%}.dot-r{background:#ff5f57}.dot-y{background:#febc2e}.dot-g{background:#28c840}
149
- .shot-title{margin-left:8px;font-size:13px;color:var(--text-muted);font-weight:500}
150
- .pipeline{display:flex;align-items:center;gap:14px;flex-wrap:wrap;justify-content:center}
151
- .node{display:inline-flex;align-items:center;gap:12px;background:#fff;border:1px solid var(--border);border-radius:var(--r-2xl);padding:12px 16px;box-shadow:var(--shadow-sm)}
152
- .node-title{font-weight:600;font-size:15px;color:var(--ink)}.node-sub{font-size:13px;color:var(--text-muted)}
153
- .flow{color:var(--n-400);font-size:20px;flex:none}
154
- @media(max-width:640px){.flow{transform:rotate(90deg)}}
155
-
156
- /* icon tiles */
157
- .tile{width:40px;height:40px;border-radius:var(--r-xl);display:grid;place-items:center;font-size:18px;flex:none}
158
- .tile-violet{background:var(--violet-tint);color:var(--violet)}.tile-green{background:var(--green-tint);color:var(--green)}
159
- .tile-gold{background:var(--gold-tint2);color:var(--gold-700)}.tile-sky{background:var(--sky-tint);color:var(--sky)}.tile-coral{background:var(--coral-tint);color:var(--coral)}
160
-
161
- /* sections */
162
- .section{padding:var(--section-y) 0}
163
- .section-tint{background:var(--bg-section)}
164
- .center-intro{text-align:center;display:grid;gap:16px;justify-items:center;margin-bottom:48px}
165
- .section-title{font-size:var(--text-5xl);letter-spacing:-.025em}
166
- .section-sub{font-size:var(--text-xl);color:var(--text-muted);max-width:560px}
167
-
168
- /* feature cards */
169
- .grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:24px}
170
- @media(max-width:820px){.grid-2{grid-template-columns:1fr}}
171
- .card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-3xl);padding:32px;box-shadow:var(--shadow-card);transition:transform var(--dur) var(--ease),box-shadow var(--dur) var(--ease)}
172
- .card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}
173
- .card .tile{margin-bottom:18px}
174
- .card h3{font-size:var(--text-2xl);font-weight:700;letter-spacing:-.02em;margin-bottom:8px}
175
- .card p{color:var(--text-muted);font-size:var(--text-lg)}
176
- .card-media{margin-top:24px;background:var(--n-50);border:1px solid var(--border);border-radius:var(--r-2xl);padding:20px;display:flex;gap:12px;flex-wrap:wrap}
177
-
178
- /* stat / trust row */
179
- .trust-wrap{display:grid;grid-template-columns:1.1fr .9fr;gap:48px;align-items:center}
180
- @media(max-width:820px){.trust-wrap{grid-template-columns:1fr}}
181
- .stat-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}
182
- .stat-card{display:grid;gap:10px}
183
- .stat-head{display:flex;align-items:center;gap:8px;font-weight:600;color:var(--ink);font-size:15px}
184
- .stat-num{font-family:var(--font-display);font-size:var(--text-5xl);font-weight:700;letter-spacing:-.02em;color:var(--ink)}
185
- .stat-sub{font-size:var(--text-sm);color:var(--text-muted)}
186
- .stars{color:var(--gold-500);font-size:18px;letter-spacing:2px}
187
-
188
- /* how-it-works steps */
189
- .steps{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin-top:8px}
190
- @media(max-width:820px){.steps{grid-template-columns:repeat(2,1fr)}}
191
- @media(max-width:480px){.steps{grid-template-columns:1fr}}
192
- .step{background:#fff;border:1px solid var(--border);border-radius:var(--r-2xl);padding:24px;box-shadow:var(--shadow-card)}
193
- .step-n{width:32px;height:32px;border-radius:var(--r-full);background:var(--gold-tint2);color:var(--gold-700);font-family:var(--font-display);font-weight:800;display:grid;place-items:center;margin-bottom:14px;font-size:15px}
194
- .step h4{font-size:var(--text-lg);font-weight:700;margin-bottom:6px;font-family:var(--font-display);color:var(--ink)}
195
- .step p{color:var(--text-muted);font-size:15px}
196
-
197
- /* final CTA */
198
- .cta-final{text-align:center;display:grid;gap:16px;justify-items:center}
199
-
200
- /* footer โ€” warm-dark charcoal */
201
- .footer{background:var(--ink);color:var(--n-400);padding:80px var(--gutter) 40px}
202
- .footer-inner{width:min(var(--container),100%);margin:0 auto}
203
- .footer-top{display:grid;grid-template-columns:1.4fr 3fr;gap:40px;margin-bottom:40px}
204
- @media(max-width:820px){.footer-top{grid-template-columns:1fr}}
205
- .footer-brand{font-family:var(--font-display);font-weight:800;font-size:28px;color:var(--gold-500);display:inline-flex;align-items:center;gap:12px}
206
- .footer-brand .brand-mark{width:60px;height:60px;border-radius:14px}
207
- .footer-tagline{color:var(--n-500);margin-top:10px;max-width:280px}
208
- .footer-cols{display:grid;grid-template-columns:repeat(3,1fr);gap:32px}
209
- @media(max-width:560px){.footer-cols{grid-template-columns:repeat(2,1fr)}}
210
- .footer-col h4{color:var(--n-400);font-size:14px;font-weight:600;margin-bottom:14px;font-family:var(--font-body)}
211
- .footer-col a{display:block;color:var(--n-300);font-size:15px;padding:6px 0;transition:color var(--dur) var(--ease)}
212
- .footer-col a:hover{color:#fff}
213
- .trust-row{display:flex;flex-wrap:wrap;gap:12px;margin-top:8px;padding-top:32px;border-top:1px solid #ffffff1a}
214
- .trust-pill{display:inline-flex;align-items:center;gap:8px;padding:8px 16px;border-radius:var(--r-full);background:#ffffff0d;color:var(--n-400);font-size:14px}
215
-
216
- :where(a,button,input,textarea):focus-visible{outline:none;box-shadow:var(--ring-gold)}
217
- </style>
218
- </head>
219
- <body>
220
-
221
- <!-- NAV (body-level so it stays sticky across the whole page) -->
222
- <header class="nav-wrap">
223
- <nav class="nav glass">
224
- <a class="brand" href="/"><span class="brand-mark">๐ŸŽฌ</span>VidFarm</a>
225
- <ul class="nav-links">
226
- <li><a href="${HREF.studio}">Templates</a></li>
227
- <li><a href="${HREF.clips}">Clips</a></li>
228
- <li><a href="${HREF.chat}">Brainstorm</a></li>
229
- <li><a href="#how">How it works</a></li>
230
- </ul>
231
- <div class="nav-cta">
232
- ${quietNav}
233
- <a class="btn btn-ink" href="${primaryCta.href}">${primaryCta.label} <span class="arrow">โ†’</span></a>
234
- </div>
235
- </nav>
236
- </header>
237
-
238
- <!-- HERO BAND: pulled up under the nav so the sky sits behind it too -->
239
- <div class="hero-band">
240
- <div class="hero-art"></div>
241
-
242
- <!-- HERO -->
243
- <section class="hero">
244
- <div class="hero-inner">
245
- <span class="badge">๐ŸŽฌ The serverless video studio</span>
246
- <h1><span class="soft">Short-form video</span><br>that makes itself</h1>
247
- <p class="hero-sub">Fork a template that already works, remix it on the timeline, and render a share-ready MP4 โ€” all in your browser.</p>
248
- <div class="hero-cta">
249
- <a class="btn btn-ink btn-lg" href="${primaryCta.href}">${primaryCta.label} <span class="arrow">โ†’</span></a>
250
- <a class="btn btn-ghost btn-lg" href="${HREF.clips}">Browse clips</a>
251
- </div>
252
- <p class="hero-note">No render farm to babysit. Scales to zero when you're done.</p>
253
- </div>
254
- </section>
255
- </div><!-- /hero-band -->
256
- <div class="hero-shot">
257
- <div class="shot-head">
258
- <span class="dot dot-r"></span><span class="dot dot-y"></span><span class="dot dot-g"></span>
259
- <span class="shot-title">VidFarm ยท trackpad editor</span>
260
- </div>
261
- <div class="pipeline">
262
- <div class="node"><span class="tile tile-sky">๐Ÿ“ผ</span><div><div class="node-title">Fork template</div><div class="node-sub">Proven hook</div></div></div>
263
- <span class="flow">โ†’</span>
264
- <div class="node"><span class="tile tile-violet">โœฆ</span><div><div class="node-title">Remix on timeline</div><div class="node-sub">Swap ยท retime ยท recaption</div></div></div>
265
- <span class="flow">โ†’</span>
266
- <div class="node"><span class="tile tile-gold">โ–ถ</span><div><div class="node-title">Render MP4</div><div class="node-sub">HyperFrames</div></div></div>
267
- <span class="flow">โ†’</span>
268
- <div class="node"><span class="tile tile-green">โœ“</span><div><div class="node-title">Publish</div><div class="node-sub">Ready to post</div></div></div>
269
- </div>
270
- </div>
271
-
272
- <!-- TRUST -->
273
- <section class="section">
274
- <div class="container">
275
- <div class="trust-wrap">
276
- <div>
277
- <h2 style="font-size:var(--text-4xl)">Everything runs serverless, so it scales to zero</h2>
278
- <p style="margin-top:16px;color:var(--text-muted);font-size:var(--text-lg)"><strong style="color:var(--ink)">No long-lived worker, no idle bill.</strong> Renders fan out across AWS Lambda in seconds โ€” or run free, in-process, on your own box with <code style="font-family:var(--font-mono,monospace);background:var(--n-100);padding:2px 6px;border-radius:6px">vidfarm serve</code>.</p>
279
- </div>
280
- <div class="stat-row">
281
- <div class="card stat-card"><div class="stat-head"><span class="tile tile-gold">โšก</span> Render time</div><div class="stat-num">~30s</div><div class="stat-sub">A finished cut, cloud-rendered</div></div>
282
- <div class="card stat-card"><div class="stat-head"><span class="tile tile-green">$</span> Idle cost</div><div class="stat-num">$0</div><div class="stat-sub">Scales to zero at rest</div></div>
283
- </div>
284
- </div>
285
- </div>
286
- </section>
287
-
288
- <!-- FEATURES -->
289
- <section class="section section-tint">
290
- <div class="container center-intro">
291
- <span class="badge">๐Ÿ”ฅ What you get</span>
292
- <h2 class="section-title">A whole studio, one browser tab</h2>
293
- <p class="section-sub">Everything to go from a blank idea to a posted video โ€” no timeline degree required.</p>
294
- </div>
295
- <div class="container grid-2">
296
- <div class="card">
297
- <span class="tile tile-sky">๐Ÿ“ผ</span>
298
- <h3>Fork a proven template</h3>
299
- <p>Start from short-form templates that already perform. One click forks it straight into your library, yours to remix.</p>
300
- <div class="card-media">
301
- <span class="tile tile-gold">Aa</span><span class="tile tile-sky">๐ŸŽž</span><span class="tile tile-violet">โœฆ</span><span class="tile tile-coral">๐Ÿ”Š</span>
302
- </div>
303
- </div>
304
- <div class="card">
305
- <span class="tile tile-violet">โœฆ</span>
306
- <h3>Remix on the Trackpad</h3>
307
- <p>Drag clips, retime layers, swap media, and recaption on a real timeline โ€” with an AI copilot riding shotgun when you want it.</p>
308
- <div class="card-media" style="flex-direction:column;align-items:flex-start;gap:10px">
309
- <div class="node"><span class="tile tile-violet">โœฆ</span><div><div class="node-title">AI edit</div><div class="node-sub">"Make the hook punchier"</div></div></div>
310
- <div class="node"><span class="tile tile-green">โœŽ</span><div><div class="node-title">Recaption</div><div class="node-sub">Word-by-word timing</div></div></div>
311
- </div>
312
- </div>
313
- <div class="card">
314
- <span class="tile tile-coral">โœ‚๏ธ</span>
315
- <h3>Mine clips from anything</h3>
316
- <p>Turn a podcast, VOD, or YouTube URL into tagged, searchable short clips โ€” then drop the best moments right into your edit.</p>
317
- <div class="card-media">
318
- <span class="tile tile-coral">๐ŸŽ™</span><span class="tile tile-sky">๐Ÿ”</span><span class="tile tile-green">๐Ÿท</span>
319
- </div>
320
- </div>
321
- <div class="card">
322
- <span class="tile tile-gold">โ–ถ</span>
323
- <h3>Render &amp; publish</h3>
324
- <p>Approve a cut and the native HyperFrames renderer produces the MP4 โ€” cloud or local โ€” landing ready-to-post in your library.</p>
325
- <div class="card-media" style="flex-direction:column;align-items:flex-start;gap:10px">
326
- <div class="node"><span class="tile tile-gold">โ–ถ</span><div><div class="node-title">Render MP4</div><div class="node-sub">Lambda fan-out ยท or free locally</div></div></div>
327
- <div class="node"><span class="tile tile-green">โœ“</span><div><div class="node-title">Ready to post</div><div class="node-sub">Straight to /library</div></div></div>
328
- </div>
329
- </div>
330
- </div>
331
- </section>
332
-
333
- <!-- HOW IT WORKS -->
334
- <section class="section" id="how">
335
- <div class="container center-intro">
336
- <span class="badge">๐Ÿงญ How it works</span>
337
- <h2 class="section-title">From idea to posted in four steps</h2>
338
- </div>
339
- <div class="container">
340
- <div class="steps">
341
- <div class="step"><div class="step-n">1</div><h4>Pick a template</h4><p>Browse the feed and fork a short-form format that fits your idea.</p></div>
342
- <div class="step"><div class="step-n">2</div><h4>Make it yours</h4><p>Swap footage, retime beats, and rewrite captions on the timeline.</p></div>
343
- <div class="step"><div class="step-n">3</div><h4>Render</h4><p>Hit render โ€” HyperFrames fans out on Lambda, or runs free on your box.</p></div>
344
- <div class="step"><div class="step-n">4</div><h4>Publish</h4><p>Approve the cut and it lands in your library, ready to post.</p></div>
345
- </div>
346
- </div>
347
- </section>
348
-
349
- <!-- FINAL CTA -->
350
- <section class="section section-tint">
351
- <div class="container cta-final">
352
- <span class="badge">๐ŸŒค๏ธ It all starts with a fork</span>
353
- <h2 class="section-title">Make your first video today</h2>
354
- <p class="section-sub">Free to start. Nothing to install. Scales to zero when you're done.</p>
355
- <a class="btn btn-gold btn-lg" href="${primaryCta.href}" style="margin-top:8px">${primaryCta.label} <span class="arrow">โ†’</span></a>
356
- </div>
357
- </section>
358
-
359
- <!-- FOOTER -->
360
- <footer class="footer">
361
- <div class="footer-inner">
362
- <div class="footer-top">
363
- <div>
364
- <div class="footer-brand"><span class="brand-mark">๐ŸŽฌ</span>VidFarm</div>
365
- <div class="footer-tagline">The serverless studio for short-form video.</div>
366
- </div>
367
- <div class="footer-cols">
368
- <div class="footer-col"><h4>Studio</h4><a href="${HREF.studio}">Templates</a><a href="${HREF.clips}">Clips</a><a href="${HREF.chat}">Brainstorm</a><a href="${HREF.library}">Library</a></div>
369
- <div class="footer-col"><h4>Product</h4><a href="${HREF.studio}">Trackpad editor</a><a href="${HREF.studio}">HyperFrames render</a><a href="${HREF.clips}">Clip hunting</a><a href="${HREF.studio}">Publish &amp; schedule</a></div>
370
- <div class="footer-col"><h4>Account</h4><a href="${HREF.login}">Log in</a><a href="${HREF.studio}">Get started</a><a href="${HREF.library}">Your projects</a></div>
371
- </div>
372
- </div>
373
- <div class="trust-row">
374
- <span class="trust-pill">โ˜๏ธ Serverless on AWS</span>
375
- <span class="trust-pill">๐Ÿ’ค Scales to zero at idle</span>
376
- <span class="trust-pill">๐Ÿ–ฅ๏ธ Render free with vidfarm serve</span>
377
- </div>
378
- </div>
379
- </footer>
380
-
381
- </body>
382
- </html>`;
383
- }
384
- //# sourceMappingURL=landing-page.js.map
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=page-runtime.js.map