From cce15885d814934dcd939c1140a00f941e50c5c8 Mon Sep 17 00:00:00 2001 From: Miriad Date: Fri, 13 Mar 2026 19:05:08 +0000 Subject: [PATCH 01/12] fix: stronger black bg enforcement in Gemini image prompts V5b showed 2/4 infographic frames with gray/off-white backgrounds despite the color rule saying 'Use ONLY black'. Restructured as numbered rules with explicit rejection language. Background rule is now #1 priority. --- lib/services/gemini-infographics.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/services/gemini-infographics.ts b/lib/services/gemini-infographics.ts index a2ea194c..a3d417b7 100644 --- a/lib/services/gemini-infographics.ts +++ b/lib/services/gemini-infographics.ts @@ -107,7 +107,13 @@ async function generateWithGeminiContent( const ai = getAI(); // Enforce brand colors by prepending strict color instruction - const colorEnforcedPrompt = `CRITICAL COLOR RULE: Use ONLY purple (#7c3aed) for all highlighted elements, fills, accents, and glows. Use ONLY white (#FFFFFF) for text, arrows, and lines. Use ONLY black (#000000) for background. NEVER use teal, cyan, green, blue, or any other accent color.\n\n${prompt}`; + const colorEnforcedPrompt = `STRICT RULES — FOLLOW EXACTLY: +1. BACKGROUND: Pure black (#000000) only. NO gray, NO white, NO gradients, NO off-white. The entire background MUST be solid black. +2. ACCENTS: Purple (#7c3aed) only for all boxes, fills, highlights, and glows. NO teal, NO cyan, NO green, NO blue. +3. TEXT & LINES: White (#FFFFFF) only for all text labels, arrows, and connecting lines. +4. VIOLATION: Any color other than black background, purple accents, and white text is REJECTED. + +${prompt}`; const response = await ai.models.generateContent({ model, From fa85914027a8d543b6434a02e393306ebb30c31c Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Mon, 16 Mar 2026 20:29:28 -0400 Subject: [PATCH 02/12] temp --- .github/.branch-cleanup | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/.branch-cleanup diff --git a/.github/.branch-cleanup b/.github/.branch-cleanup new file mode 100644 index 00000000..94467fc4 --- /dev/null +++ b/.github/.branch-cleanup @@ -0,0 +1 @@ +cleanup \ No newline at end of file From 7d9368c8fe9eb0022628b17a6dd082afee6152a5 Mon Sep 17 00:00:00 2001 From: Alex Patterson Date: Fri, 29 May 2026 14:21:39 -0400 Subject: [PATCH 03/12] refactor: consolidate monorepo with Next.js in apps/web and Sanity in apps/sanity Replace the Astro apps/web on dev with main's Next.js app, strip the embedded Studio route, wire typegen to apps/sanity's schema extract, and trim CI to Sanity Studio deploys only (Vercel handles apps/web). Co-authored-by: Cursor --- .github/workflows/deploy.yml | 35 +- .gitignore | 1 + apps/sanity/extract.json | 14884 +++++++++++ apps/sanity/package.json | 3 +- apps/sanity/sanity.config.ts | 4 +- .../sanity/schemas/singletons/engineConfig.ts | 10 + apps/web/.dev.vars.example | 15 - apps/web/.env.example | 76 +- apps/web/.eslintignore | 2 + apps/web/.prettierignore | 3 + apps/web/README.md | 43 - apps/web/app/(dashboard)/dashboard/actions.ts | 10 + .../dashboard/auth/callback/route.ts | 20 + .../dashboard/config/config-form.tsx | 597 + .../app/(dashboard)/dashboard/config/page.tsx | 41 + .../(dashboard)/dashboard/content/actions.ts | 16 + .../dashboard/content/content-ideas-table.tsx | 176 + .../(dashboard)/dashboard/content/page.tsx | 56 + .../app/(dashboard)/dashboard/login/page.tsx | 92 + apps/web/app/(dashboard)/dashboard/page.tsx | 36 + .../(dashboard)/dashboard/pipeline/page.tsx | 202 + .../dashboard/review/[id]/page.tsx | 51 + .../review/[id]/review-detail-client.tsx | 305 + .../(dashboard)/dashboard/review/actions.ts | 102 + .../app/(dashboard)/dashboard/review/page.tsx | 109 + .../(dashboard)/dashboard/settings/page.tsx | 115 + .../dashboard/settings/settings-form.tsx | 370 + .../(dashboard)/dashboard/sponsors/actions.ts | 10 + .../(dashboard)/dashboard/sponsors/page.tsx | 109 + .../sponsors/sponsor-leads-table.tsx | 198 + .../dashboard/sponsors/sponsor-pool-table.tsx | 131 + .../(dashboard)/dashboard/videos/actions.ts | 26 + .../app/(dashboard)/dashboard/videos/page.tsx | 63 + .../dashboard/videos/videos-table.tsx | 190 + apps/web/app/(dashboard)/layout.tsx | 91 + .../(main)/(author)/author/[slug]/page.tsx | 104 + apps/web/app/(main)/(author)/authors/page.tsx | 5 + .../(author)/authors/page/[num]/page.tsx | 41 + .../app/(main)/(author)/authors/page/page.tsx | 5 + .../app/(main)/(guest)/guest/[slug]/page.tsx | 104 + apps/web/app/(main)/(guest)/guests/page.tsx | 5 + .../(main)/(guest)/guests/page/[num]/page.tsx | 42 + .../app/(main)/(guest)/guests/page/page.tsx | 5 + .../app/(main)/(podcast)/podcast/Podcast.tsx | 142 + .../(main)/(podcast)/podcast/[slug]/page.tsx | 59 + .../app/(main)/(podcast)/podcast/picks.tsx | 88 + .../podcast/preview/[token]/page.tsx | 32 + .../app/(main)/(podcast)/podcasts/page.tsx | 116 + .../(podcast)/podcasts/page/[num]/page.tsx | 42 + .../(main)/(podcast)/podcasts/page/page.tsx | 5 + .../(podcast)/podcasts/rss.json/route.ts | 16 + .../(podcast)/podcasts/rss.xml/route.ts | 13 + apps/web/app/(main)/(post)/blog/page.tsx | 98 + .../(main)/(post)/blog/page/[num]/page.tsx | 37 + apps/web/app/(main)/(post)/blog/page/page.tsx | 5 + .../app/(main)/(post)/blog/rss.json/route.ts | 16 + .../app/(main)/(post)/blog/rss.xml/route.ts | 16 + .../app/(main)/(post)/post/[slug]/page.tsx | 129 + .../(main)/(sponsor)/sponsor/[slug]/page.tsx | 98 + .../app/(main)/(sponsor)/sponsors/page.tsx | 5 + .../(sponsor)/sponsors/page/[num]/page.tsx | 55 + .../(main)/(sponsor)/sponsors/page/page.tsx | 5 + .../(main)/(top-level-pages)/[slug]/page.tsx | 80 + .../app/(main)/(top-level-pages)/pro/page.tsx | 80 + .../(main)/(top-level-pages)/search/page.tsx | 13 + .../(top-level-pages)/sponsorships/page.tsx | 103 + .../sponsorships/sponsorship-form.tsx | 241 + apps/web/app/(main)/icon.svg | 35 + apps/web/app/(main)/layout.tsx | 163 + apps/web/app/(main)/meta-pixel.tsx | 31 + apps/web/app/(main)/page.tsx | 195 + apps/web/app/(sponsor-portal)/layout.tsx | 19 + apps/web/app/(sponsor-portal)/portal/page.tsx | 17 + apps/web/app/api/algolia/route.tsx | 125 + apps/web/app/api/auth/logout/route.tsx | 9 + apps/web/app/api/auth/session/route.tsx | 5 + .../web/app/api/auth/session/verify/route.tsx | 5 + apps/web/app/api/cron/check-renders/route.ts | 584 + apps/web/app/api/cron/check-research/route.ts | 1084 + apps/web/app/api/cron/ingest/route.ts | 728 + apps/web/app/api/cron/route.tsx | 45 + .../app/api/cron/sponsor-outreach/route.ts | 139 + apps/web/app/api/dashboard/activity/route.ts | 43 + apps/web/app/api/dashboard/config/route.ts | 177 + apps/web/app/api/dashboard/metrics/route.ts | 49 + apps/web/app/api/dashboard/pipeline/route.ts | 48 + apps/web/app/api/dashboard/review/route.ts | 117 + apps/web/app/api/dashboard/settings/route.ts | 152 + apps/web/app/api/devto/route.tsx | 253 + apps/web/app/api/draft-mode/disable/route.tsx | 9 + apps/web/app/api/draft-mode/enable/route.tsx | 7 + .../app/api/generate-preview-token/route.ts | 44 + apps/web/app/api/get-preview-content/route.ts | 64 + apps/web/app/api/hashnode/route.tsx | 361 + apps/web/app/api/sponsor/opt-out/route.ts | 89 + apps/web/app/api/sponsorship/route.ts | 189 + .../api/sponsorship/sponsorship-template.tsx | 48 + apps/web/app/api/verify-turnstile.ts | 39 + .../app/api/webhooks/sanity-content/route.ts | 105 + .../api/webhooks/sanity-distribute/route.ts | 402 + .../api/webhooks/sanity-revalidate/route.ts | 67 + .../app/api/webhooks/sponsor-inbound/route.ts | 98 + .../app/api/webhooks/stripe-sponsor/route.ts | 172 + apps/web/app/api/youtube/rss.xml/route.tsx | 106 + apps/web/app/api/youtube/views/route.tsx | 53 + apps/web/app/globals.css | 224 + apps/web/app/sitemap.ts | 46 + apps/web/astro.config.mjs | 113 - apps/web/biome.json | 54 + apps/web/components.json | 21 + apps/web/components/algolia-dialog.tsx | 44 + apps/web/components/algolia-search.tsx | 211 + apps/web/components/analytics.tsx | 21 + apps/web/components/animated-hero.tsx | 81 + apps/web/components/app-sidebar.tsx | 123 + apps/web/components/avatar.tsx | 56 + apps/web/components/badge-pro.tsx | 19 + apps/web/components/become-sponsor-popup.tsx | 48 + apps/web/components/block-code-btn.tsx | 29 + apps/web/components/block-code.tsx | 36 + apps/web/components/block-image.tsx | 36 + apps/web/components/block-table.tsx | 28 + apps/web/components/bookmark.tsx | 5 + apps/web/components/breadrumb-links.tsx | 43 + apps/web/components/cloudflare-turnstile.tsx | 25 + apps/web/components/codepen-embed.tsx | 19 + apps/web/components/codesandbox-embed.tsx | 20 + .../components/cookies-provider-client.tsx | 11 + apps/web/components/cookies-provider.tsx | 0 apps/web/components/cover-image.tsx | 47 + apps/web/components/cover-media.tsx | 36 + apps/web/components/cover-video.tsx | 43 + apps/web/components/date.tsx | 9 + apps/web/components/disable-draft-mode.tsx | 22 + apps/web/components/footer.tsx | 120 + apps/web/components/google-ad-banner.tsx | 64 + apps/web/components/html-embed.tsx | 7 + apps/web/components/icons.tsx | 3 + apps/web/components/icons/aj-alt.tsx | 118 + apps/web/components/icons/aj-dark.tsx | 89 + .../components/icons/aj-headphones-alt.tsx | 258 + apps/web/components/icons/aj-headphones.tsx | 253 + apps/web/components/icons/aj-light.tsx | 89 + apps/web/components/icons/aj-primary-alt.tsx | 154 + apps/web/components/icons/aj-primary.tsx | 152 + apps/web/components/icons/checkout-arrow.tsx | 18 + apps/web/components/icons/dribble.svg | 14 + apps/web/components/mode-toggle.tsx | 40 + apps/web/components/more-content.tsx | 135 + apps/web/components/more-header.tsx | 32 + apps/web/components/nav-header.tsx | 54 + apps/web/components/nav-link.tsx | 26 + apps/web/components/nav-main.tsx | 50 + apps/web/components/nav-user.tsx | 113 + apps/web/components/onboarding.tsx | 73 + apps/web/components/page-refresh-button.tsx | 32 + apps/web/components/paginate-list.tsx | 75 + apps/web/components/pipeline-status.tsx | 139 + apps/web/components/player-context.tsx | 192 + apps/web/components/player-floating.tsx | 189 + apps/web/components/player-play-button.tsx | 54 + apps/web/components/podcast-open-apple.tsx | 20 + apps/web/components/podcast-open-spotify.tsx | 28 + apps/web/components/podcast-open-youtube.tsx | 28 + apps/web/components/podmatch-badge.tsx | 81 + apps/web/components/portable-text.tsx | 84 + apps/web/components/pro-benefits.tsx | 161 + apps/web/components/quote-embed.tsx | 34 + apps/web/components/recent-activity.tsx | 105 + apps/web/components/section-cards-live.tsx | 131 + apps/web/components/section-cards.tsx | 94 + apps/web/components/site-header.tsx | 53 + apps/web/components/sponsor-card.tsx | 52 + apps/web/components/theme-provider.tsx | 9 + apps/web/components/twitter-embed.tsx | 10 + apps/web/components/ui/accordion.tsx | 57 + apps/web/components/ui/alert-dialog.tsx | 141 + apps/web/components/ui/alert.tsx | 59 + apps/web/components/ui/aspect-ratio.tsx | 7 + apps/web/components/ui/avatar.tsx | 50 + apps/web/components/ui/badge.tsx | 36 + apps/web/components/ui/breadcrumb.tsx | 115 + apps/web/components/ui/button.tsx | 57 + apps/web/components/ui/calendar.tsx | 213 + apps/web/components/ui/card.tsx | 83 + apps/web/components/ui/carousel.tsx | 262 + apps/web/components/ui/chart.tsx | 375 + apps/web/components/ui/checkbox.tsx | 30 + apps/web/components/ui/collapsible.tsx | 11 + apps/web/components/ui/command.tsx | 153 + apps/web/components/ui/context-menu.tsx | 200 + apps/web/components/ui/dialog.tsx | 122 + apps/web/components/ui/drawer.tsx | 118 + apps/web/components/ui/dropdown-menu.tsx | 201 + apps/web/components/ui/form.tsx | 179 + apps/web/components/ui/hover-card.tsx | 29 + apps/web/components/ui/input-otp.tsx | 71 + apps/web/components/ui/input.tsx | 22 + apps/web/components/ui/label.tsx | 26 + apps/web/components/ui/menubar.tsx | 256 + apps/web/components/ui/navigation-menu.tsx | 128 + apps/web/components/ui/pagination.tsx | 117 + apps/web/components/ui/popover.tsx | 33 + apps/web/components/ui/progress.tsx | 28 + apps/web/components/ui/radio-group.tsx | 44 + apps/web/components/ui/resizable.tsx | 69 + apps/web/components/ui/scroll-area.tsx | 48 + apps/web/components/ui/select.tsx | 159 + apps/web/components/ui/separator.tsx | 31 + apps/web/components/ui/sheet.tsx | 140 + apps/web/components/ui/sidebar.tsx | 781 + apps/web/components/ui/skeleton.tsx | 15 + apps/web/components/ui/slider.tsx | 28 + apps/web/components/ui/sonner.tsx | 31 + apps/web/components/ui/switch.tsx | 29 + apps/web/components/ui/table.tsx | 120 + apps/web/components/ui/tabs.tsx | 55 + apps/web/components/ui/textarea.tsx | 22 + apps/web/components/ui/toggle-group.tsx | 61 + apps/web/components/ui/toggle.tsx | 45 + apps/web/components/ui/tooltip.tsx | 32 + apps/web/components/user-buy.tsx | 5 + apps/web/components/user-go-pro-button.tsx | 16 + apps/web/components/user-go-pro.tsx | 10 + apps/web/components/user-related.tsx | 96 + apps/web/components/user-socials.tsx | 183 + apps/web/components/youtube-embed.tsx | 70 + apps/web/components/youtube-short-embed.tsx | 97 + apps/web/components/youtube-short.tsx | 41 + apps/web/components/youtube-shorts.tsx | 70 + apps/web/components/youtube.tsx | 43 + apps/web/drizzle.config.ts | 7 - apps/web/e2e/dashboard.spec.ts | 71 + apps/web/e2e/smoke.spec.ts | 27 + apps/web/hooks/use-mobile.ts | 21 + apps/web/lib/block-content-to-markdown.d.ts | 1 + apps/web/lib/config.ts | 76 + apps/web/lib/gemini-metadata.ts | 15 + apps/web/lib/gemini.ts | 41 + apps/web/lib/hooks.ts | 27 + apps/web/lib/prism.ts | 279 + apps/web/lib/resend-notify.ts | 39 + apps/web/lib/rss.ts | 262 + apps/web/lib/sanity-write-client.ts | 16 + apps/web/lib/sanity/dashboard.ts | 55 + apps/web/lib/services/elevenlabs.ts | 403 + apps/web/lib/services/gcs.ts | 351 + apps/web/lib/services/gemini-infographics.ts | 448 + apps/web/lib/services/gemini-research.ts | 535 + apps/web/lib/services/notebooklm/auth.ts | 280 + apps/web/lib/services/notebooklm/client.ts | 986 + apps/web/lib/services/notebooklm/index.ts | 33 + apps/web/lib/services/notebooklm/rpc.ts | 263 + apps/web/lib/services/notebooklm/types.ts | 135 + apps/web/lib/services/pexels.ts | 421 + apps/web/lib/services/remotion-deploy.ts | 173 + apps/web/lib/services/remotion.ts | 431 + apps/web/lib/services/research.ts | 536 + apps/web/lib/services/sanity-upload.ts | 71 + apps/web/lib/services/trend-discovery.ts | 1128 + apps/web/lib/services/video-pipeline.ts | 380 + apps/web/lib/sponsor/email-service.ts | 49 + apps/web/lib/sponsor/gemini-intent.ts | 96 + apps/web/lib/sponsor/gemini-outreach.ts | 113 + apps/web/lib/sponsor/sponsor-bridge.ts | 66 + apps/web/lib/sponsor/stripe-service.ts | 120 + apps/web/lib/sponsorship-schema.ts | 21 + apps/web/lib/stripe.types.ts | 364 + apps/web/lib/supabase/client.ts | 18 + apps/web/lib/supabase/server.ts | 63 + apps/web/lib/types.ts | 39 + apps/web/lib/types/config.ts | 94 + apps/web/lib/types/dashboard.ts | 17 + apps/web/lib/types/engine-config.ts | 79 + .../web/lib}/types/video-analytics.ts | 0 apps/web/lib/utils.ts | 31 + apps/web/lib/utils/audio-timestamps.ts | 153 + apps/web/lib/x-social.ts | 157 + apps/web/lib/youtube-stats.ts | 367 + apps/web/lib/youtube-upload.ts | 150 + apps/web/next-env.d.ts | 6 + apps/web/next.config.ts | 20 + apps/web/package-lock.json | 20472 ---------------- apps/web/package.json | 163 +- apps/web/playwright.config.ts | 43 + apps/web/postcss.config.js | 5 + apps/web/postcss.config.mjs | 3 - apps/web/proxy.ts | 73 + apps/web/public/.assetsignore | 1 - apps/web/public/ads.txt | 1 + apps/web/public/favicon.svg | 3 - apps/web/public/sanity-icons/apple-icon.png | Bin 0 -> 3682 bytes apps/web/public/sanity-icons/icon.ico | Bin 0 -> 4286 bytes apps/web/public/sanity-icons/icon.png | Bin 0 -> 10466 bytes apps/web/remotion/Root.tsx | 98 + apps/web/remotion/components/CTAScene.tsx | 177 + .../remotion/components/CodeMorphScene.tsx | 388 + .../components/ComparisonGridScene.tsx | 351 + .../remotion/components/DynamicListScene.tsx | 214 + apps/web/remotion/components/HookScene.tsx | 227 + .../remotion/components/InfographicScene.tsx | 236 + .../components/IsometricMockupScene.tsx | 666 + apps/web/remotion/components/Scene.tsx | 84 + apps/web/remotion/components/SceneRouter.tsx | 107 + apps/web/remotion/components/SponsorSlot.tsx | 148 + apps/web/remotion/compositions/MainVideo.tsx | 114 + apps/web/remotion/compositions/ShortVideo.tsx | 107 + apps/web/remotion/constants.ts | 169 + apps/web/remotion/entry.ts | 4 + apps/web/remotion/index.ts | 33 + apps/web/remotion/types.ts | 190 + apps/web/sanity-typegen.json | 5 + apps/web/sanity.cli.ts | 9 + apps/web/sanity/extract.json | 12564 ++++++++++ apps/web/sanity/lib/api.ts | 33 + apps/web/sanity/lib/client.ts | 23 + apps/web/sanity/lib/demo.ts | 59 + apps/web/sanity/lib/fetch.ts | 57 + apps/web/sanity/lib/image.ts | 9 + apps/web/sanity/lib/live.ts | 13 + apps/web/sanity/lib/queries.ts | 265 + apps/web/sanity/lib/resolveHref.ts | 17 + apps/web/sanity/lib/token.ts | 7 + apps/web/sanity/lib/utils.ts | 31 + apps/web/sanity/types.ts | 10473 ++++++++ apps/web/schema.json | 12140 +++++++++ apps/web/scripts/migration/README.md | 203 + .../web/scripts/migration/cleanup-orphans.mjs | 165 + apps/web/scripts/migration/env-example.txt | 14 + apps/web/scripts/migration/migrate.mjs | 1019 + .../scripts/migration/migration-output.log | 53 + apps/web/scripts/migration/package.json | 23 + apps/web/scripts/migration/phase4-output.log | 941 + apps/web/scripts/sanity-post.js | 356 + apps/web/scripts/sanity-update-posts.ts | 28 + apps/web/src/assets/fonts/Inter-Bold.ttf | Bin 420428 -> 0 bytes apps/web/src/assets/fonts/Inter-Regular.ttf | Bin 411640 -> 0 bytes apps/web/src/components/Avatar.astro | 35 - apps/web/src/components/Badge.astro | 37 - apps/web/src/components/Button.astro | 39 - apps/web/src/components/Container.astro | 19 - apps/web/src/components/ContentCard.astro | 62 - .../src/components/ContentCardCompact.astro | 46 - .../src/components/ContentCardFeatured.astro | 77 - apps/web/src/components/DraftModeToggle.astro | 51 - apps/web/src/components/Footer.astro | 148 - apps/web/src/components/Header.astro | 258 - apps/web/src/components/Pagination.astro | 56 - apps/web/src/components/PersonDetail.astro | 143 - apps/web/src/components/SocialMeta.astro | 58 - apps/web/src/components/Tag.astro | 23 - apps/web/src/components/ThemeScript.astro | 21 - apps/web/src/components/ThemeToggle.astro | 46 - .../src/components/course/LessonPlayer.tsx | 223 - apps/web/src/env.d.ts | 17 - apps/web/src/layouts/BaseLayout.astro | 75 - apps/web/src/lib/auth-client.ts | 7 - apps/web/src/lib/auth.ts | 32 - apps/web/src/lib/db.ts | 5 - apps/web/src/lib/og-utils.ts | 429 - apps/web/src/lib/queries.ts | 328 - apps/web/src/lib/schema.ts | 67 - apps/web/src/lib/youtube.ts | 23 - apps/web/src/middleware.ts | 99 - apps/web/src/pages/404.astro | 27 - apps/web/src/pages/[slug].astro | 69 - apps/web/src/pages/api/auth/[...all].ts | 14 - .../src/pages/api/draft-mode/allow-enable.ts | 29 - apps/web/src/pages/api/draft-mode/disable.ts | 21 - apps/web/src/pages/api/draft-mode/enable.ts | 118 - apps/web/src/pages/api/og/blog.png.ts | 48 - apps/web/src/pages/api/og/course.png.ts | 48 - apps/web/src/pages/api/og/default.png.ts | 46 - apps/web/src/pages/api/og/podcast.png.ts | 50 - apps/web/src/pages/author/[slug].astro | 34 - apps/web/src/pages/authors.astro | 60 - apps/web/src/pages/blog.astro | 85 - apps/web/src/pages/course/[slug].astro | 174 - .../course/[slug]/lesson/[lessonSlug].astro | 94 - apps/web/src/pages/courses.astro | 82 - apps/web/src/pages/courses/rss.xml.ts | 42 - apps/web/src/pages/dashboard/index.astro | 40 - apps/web/src/pages/feeds.astro | 72 - apps/web/src/pages/guest/[slug].astro | 34 - apps/web/src/pages/guests.astro | 60 - apps/web/src/pages/index.astro | 180 - apps/web/src/pages/login.astro | 35 - .../podcast/[podcastTypeSlug]/rss.xml.ts | 66 - apps/web/src/pages/podcast/[slug].astro | 296 - apps/web/src/pages/podcasts.astro | 86 - apps/web/src/pages/post/[slug].astro | 165 - apps/web/src/pages/rss.xml.ts | 38 - apps/web/src/pages/sitemap.xml.ts | 79 - apps/web/src/pages/sponsor/[slug].astro | 34 - apps/web/src/pages/sponsors.astro | 60 - apps/web/src/scripts/visual-editing.ts | 87 - apps/web/src/styles/global.css | 289 - apps/web/src/utils/sanity.ts | 164 - apps/web/src/utils/xml.ts | 16 - apps/web/supabase/.gitkeep | 0 apps/web/supabase/.temp/cli-latest | 1 + apps/web/supabase/.temp/gotrue-version | 1 + apps/web/supabase/.temp/pooler-url | 1 + apps/web/supabase/.temp/postgres-version | 1 + apps/web/supabase/.temp/project-ref | 1 + apps/web/supabase/.temp/rest-version | 1 + apps/web/supabase/.temp/storage-migration | 1 + apps/web/supabase/.temp/storage-version | 1 + apps/web/supabase/config.toml | 54 + .../supabase/migrations/001_youtube_stats.sql | 50 + .../migrations/002_cron_schedules.sql | 141 + .../20250101000000_create_dashboard_users.sql | 41 + apps/web/tsconfig.json | 43 +- apps/web/vercel.json | 3 + apps/web/wrangler.toml | 53 - package.json | 4 +- pnpm-lock.yaml | 11865 ++++++--- pnpm-workspace.yaml | 13 + 418 files changed, 96375 insertions(+), 29580 deletions(-) create mode 100644 apps/sanity/extract.json delete mode 100644 apps/web/.dev.vars.example create mode 100644 apps/web/.eslintignore create mode 100644 apps/web/.prettierignore delete mode 100644 apps/web/README.md create mode 100644 apps/web/app/(dashboard)/dashboard/actions.ts create mode 100644 apps/web/app/(dashboard)/dashboard/auth/callback/route.ts create mode 100644 apps/web/app/(dashboard)/dashboard/config/config-form.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/config/page.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/content/actions.ts create mode 100644 apps/web/app/(dashboard)/dashboard/content/content-ideas-table.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/content/page.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/login/page.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/page.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/pipeline/page.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/review/[id]/page.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/review/[id]/review-detail-client.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/review/actions.ts create mode 100644 apps/web/app/(dashboard)/dashboard/review/page.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/settings/page.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/settings/settings-form.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/sponsors/actions.ts create mode 100644 apps/web/app/(dashboard)/dashboard/sponsors/page.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/sponsors/sponsor-leads-table.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/sponsors/sponsor-pool-table.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/videos/actions.ts create mode 100644 apps/web/app/(dashboard)/dashboard/videos/page.tsx create mode 100644 apps/web/app/(dashboard)/dashboard/videos/videos-table.tsx create mode 100644 apps/web/app/(dashboard)/layout.tsx create mode 100644 apps/web/app/(main)/(author)/author/[slug]/page.tsx create mode 100644 apps/web/app/(main)/(author)/authors/page.tsx create mode 100644 apps/web/app/(main)/(author)/authors/page/[num]/page.tsx create mode 100644 apps/web/app/(main)/(author)/authors/page/page.tsx create mode 100644 apps/web/app/(main)/(guest)/guest/[slug]/page.tsx create mode 100644 apps/web/app/(main)/(guest)/guests/page.tsx create mode 100644 apps/web/app/(main)/(guest)/guests/page/[num]/page.tsx create mode 100644 apps/web/app/(main)/(guest)/guests/page/page.tsx create mode 100644 apps/web/app/(main)/(podcast)/podcast/Podcast.tsx create mode 100644 apps/web/app/(main)/(podcast)/podcast/[slug]/page.tsx create mode 100644 apps/web/app/(main)/(podcast)/podcast/picks.tsx create mode 100644 apps/web/app/(main)/(podcast)/podcast/preview/[token]/page.tsx create mode 100644 apps/web/app/(main)/(podcast)/podcasts/page.tsx create mode 100644 apps/web/app/(main)/(podcast)/podcasts/page/[num]/page.tsx create mode 100644 apps/web/app/(main)/(podcast)/podcasts/page/page.tsx create mode 100644 apps/web/app/(main)/(podcast)/podcasts/rss.json/route.ts create mode 100644 apps/web/app/(main)/(podcast)/podcasts/rss.xml/route.ts create mode 100644 apps/web/app/(main)/(post)/blog/page.tsx create mode 100644 apps/web/app/(main)/(post)/blog/page/[num]/page.tsx create mode 100644 apps/web/app/(main)/(post)/blog/page/page.tsx create mode 100644 apps/web/app/(main)/(post)/blog/rss.json/route.ts create mode 100644 apps/web/app/(main)/(post)/blog/rss.xml/route.ts create mode 100644 apps/web/app/(main)/(post)/post/[slug]/page.tsx create mode 100644 apps/web/app/(main)/(sponsor)/sponsor/[slug]/page.tsx create mode 100644 apps/web/app/(main)/(sponsor)/sponsors/page.tsx create mode 100644 apps/web/app/(main)/(sponsor)/sponsors/page/[num]/page.tsx create mode 100644 apps/web/app/(main)/(sponsor)/sponsors/page/page.tsx create mode 100644 apps/web/app/(main)/(top-level-pages)/[slug]/page.tsx create mode 100644 apps/web/app/(main)/(top-level-pages)/pro/page.tsx create mode 100644 apps/web/app/(main)/(top-level-pages)/search/page.tsx create mode 100644 apps/web/app/(main)/(top-level-pages)/sponsorships/page.tsx create mode 100644 apps/web/app/(main)/(top-level-pages)/sponsorships/sponsorship-form.tsx create mode 100644 apps/web/app/(main)/icon.svg create mode 100644 apps/web/app/(main)/layout.tsx create mode 100644 apps/web/app/(main)/meta-pixel.tsx create mode 100644 apps/web/app/(main)/page.tsx create mode 100644 apps/web/app/(sponsor-portal)/layout.tsx create mode 100644 apps/web/app/(sponsor-portal)/portal/page.tsx create mode 100644 apps/web/app/api/algolia/route.tsx create mode 100644 apps/web/app/api/auth/logout/route.tsx create mode 100644 apps/web/app/api/auth/session/route.tsx create mode 100644 apps/web/app/api/auth/session/verify/route.tsx create mode 100644 apps/web/app/api/cron/check-renders/route.ts create mode 100644 apps/web/app/api/cron/check-research/route.ts create mode 100644 apps/web/app/api/cron/ingest/route.ts create mode 100644 apps/web/app/api/cron/route.tsx create mode 100644 apps/web/app/api/cron/sponsor-outreach/route.ts create mode 100644 apps/web/app/api/dashboard/activity/route.ts create mode 100644 apps/web/app/api/dashboard/config/route.ts create mode 100644 apps/web/app/api/dashboard/metrics/route.ts create mode 100644 apps/web/app/api/dashboard/pipeline/route.ts create mode 100644 apps/web/app/api/dashboard/review/route.ts create mode 100644 apps/web/app/api/dashboard/settings/route.ts create mode 100644 apps/web/app/api/devto/route.tsx create mode 100644 apps/web/app/api/draft-mode/disable/route.tsx create mode 100644 apps/web/app/api/draft-mode/enable/route.tsx create mode 100644 apps/web/app/api/generate-preview-token/route.ts create mode 100644 apps/web/app/api/get-preview-content/route.ts create mode 100644 apps/web/app/api/hashnode/route.tsx create mode 100644 apps/web/app/api/sponsor/opt-out/route.ts create mode 100644 apps/web/app/api/sponsorship/route.ts create mode 100644 apps/web/app/api/sponsorship/sponsorship-template.tsx create mode 100644 apps/web/app/api/verify-turnstile.ts create mode 100644 apps/web/app/api/webhooks/sanity-content/route.ts create mode 100644 apps/web/app/api/webhooks/sanity-distribute/route.ts create mode 100644 apps/web/app/api/webhooks/sanity-revalidate/route.ts create mode 100644 apps/web/app/api/webhooks/sponsor-inbound/route.ts create mode 100644 apps/web/app/api/webhooks/stripe-sponsor/route.ts create mode 100644 apps/web/app/api/youtube/rss.xml/route.tsx create mode 100644 apps/web/app/api/youtube/views/route.tsx create mode 100644 apps/web/app/globals.css create mode 100644 apps/web/app/sitemap.ts delete mode 100644 apps/web/astro.config.mjs create mode 100644 apps/web/biome.json create mode 100644 apps/web/components.json create mode 100644 apps/web/components/algolia-dialog.tsx create mode 100644 apps/web/components/algolia-search.tsx create mode 100644 apps/web/components/analytics.tsx create mode 100644 apps/web/components/animated-hero.tsx create mode 100644 apps/web/components/app-sidebar.tsx create mode 100644 apps/web/components/avatar.tsx create mode 100644 apps/web/components/badge-pro.tsx create mode 100644 apps/web/components/become-sponsor-popup.tsx create mode 100644 apps/web/components/block-code-btn.tsx create mode 100644 apps/web/components/block-code.tsx create mode 100644 apps/web/components/block-image.tsx create mode 100644 apps/web/components/block-table.tsx create mode 100644 apps/web/components/bookmark.tsx create mode 100644 apps/web/components/breadrumb-links.tsx create mode 100644 apps/web/components/cloudflare-turnstile.tsx create mode 100644 apps/web/components/codepen-embed.tsx create mode 100644 apps/web/components/codesandbox-embed.tsx create mode 100644 apps/web/components/cookies-provider-client.tsx create mode 100644 apps/web/components/cookies-provider.tsx create mode 100644 apps/web/components/cover-image.tsx create mode 100644 apps/web/components/cover-media.tsx create mode 100644 apps/web/components/cover-video.tsx create mode 100644 apps/web/components/date.tsx create mode 100644 apps/web/components/disable-draft-mode.tsx create mode 100644 apps/web/components/footer.tsx create mode 100644 apps/web/components/google-ad-banner.tsx create mode 100644 apps/web/components/html-embed.tsx create mode 100644 apps/web/components/icons.tsx create mode 100644 apps/web/components/icons/aj-alt.tsx create mode 100644 apps/web/components/icons/aj-dark.tsx create mode 100644 apps/web/components/icons/aj-headphones-alt.tsx create mode 100644 apps/web/components/icons/aj-headphones.tsx create mode 100644 apps/web/components/icons/aj-light.tsx create mode 100644 apps/web/components/icons/aj-primary-alt.tsx create mode 100644 apps/web/components/icons/aj-primary.tsx create mode 100644 apps/web/components/icons/checkout-arrow.tsx create mode 100644 apps/web/components/icons/dribble.svg create mode 100644 apps/web/components/mode-toggle.tsx create mode 100644 apps/web/components/more-content.tsx create mode 100644 apps/web/components/more-header.tsx create mode 100644 apps/web/components/nav-header.tsx create mode 100644 apps/web/components/nav-link.tsx create mode 100644 apps/web/components/nav-main.tsx create mode 100644 apps/web/components/nav-user.tsx create mode 100644 apps/web/components/onboarding.tsx create mode 100644 apps/web/components/page-refresh-button.tsx create mode 100644 apps/web/components/paginate-list.tsx create mode 100644 apps/web/components/pipeline-status.tsx create mode 100644 apps/web/components/player-context.tsx create mode 100644 apps/web/components/player-floating.tsx create mode 100644 apps/web/components/player-play-button.tsx create mode 100644 apps/web/components/podcast-open-apple.tsx create mode 100644 apps/web/components/podcast-open-spotify.tsx create mode 100644 apps/web/components/podcast-open-youtube.tsx create mode 100644 apps/web/components/podmatch-badge.tsx create mode 100644 apps/web/components/portable-text.tsx create mode 100644 apps/web/components/pro-benefits.tsx create mode 100644 apps/web/components/quote-embed.tsx create mode 100644 apps/web/components/recent-activity.tsx create mode 100644 apps/web/components/section-cards-live.tsx create mode 100644 apps/web/components/section-cards.tsx create mode 100644 apps/web/components/site-header.tsx create mode 100644 apps/web/components/sponsor-card.tsx create mode 100644 apps/web/components/theme-provider.tsx create mode 100644 apps/web/components/twitter-embed.tsx create mode 100644 apps/web/components/ui/accordion.tsx create mode 100644 apps/web/components/ui/alert-dialog.tsx create mode 100644 apps/web/components/ui/alert.tsx create mode 100644 apps/web/components/ui/aspect-ratio.tsx create mode 100644 apps/web/components/ui/avatar.tsx create mode 100644 apps/web/components/ui/badge.tsx create mode 100644 apps/web/components/ui/breadcrumb.tsx create mode 100644 apps/web/components/ui/button.tsx create mode 100644 apps/web/components/ui/calendar.tsx create mode 100644 apps/web/components/ui/card.tsx create mode 100644 apps/web/components/ui/carousel.tsx create mode 100644 apps/web/components/ui/chart.tsx create mode 100644 apps/web/components/ui/checkbox.tsx create mode 100644 apps/web/components/ui/collapsible.tsx create mode 100644 apps/web/components/ui/command.tsx create mode 100644 apps/web/components/ui/context-menu.tsx create mode 100644 apps/web/components/ui/dialog.tsx create mode 100644 apps/web/components/ui/drawer.tsx create mode 100644 apps/web/components/ui/dropdown-menu.tsx create mode 100644 apps/web/components/ui/form.tsx create mode 100644 apps/web/components/ui/hover-card.tsx create mode 100644 apps/web/components/ui/input-otp.tsx create mode 100644 apps/web/components/ui/input.tsx create mode 100644 apps/web/components/ui/label.tsx create mode 100644 apps/web/components/ui/menubar.tsx create mode 100644 apps/web/components/ui/navigation-menu.tsx create mode 100644 apps/web/components/ui/pagination.tsx create mode 100644 apps/web/components/ui/popover.tsx create mode 100644 apps/web/components/ui/progress.tsx create mode 100644 apps/web/components/ui/radio-group.tsx create mode 100644 apps/web/components/ui/resizable.tsx create mode 100644 apps/web/components/ui/scroll-area.tsx create mode 100644 apps/web/components/ui/select.tsx create mode 100644 apps/web/components/ui/separator.tsx create mode 100644 apps/web/components/ui/sheet.tsx create mode 100644 apps/web/components/ui/sidebar.tsx create mode 100644 apps/web/components/ui/skeleton.tsx create mode 100644 apps/web/components/ui/slider.tsx create mode 100644 apps/web/components/ui/sonner.tsx create mode 100644 apps/web/components/ui/switch.tsx create mode 100644 apps/web/components/ui/table.tsx create mode 100644 apps/web/components/ui/tabs.tsx create mode 100644 apps/web/components/ui/textarea.tsx create mode 100644 apps/web/components/ui/toggle-group.tsx create mode 100644 apps/web/components/ui/toggle.tsx create mode 100644 apps/web/components/ui/tooltip.tsx create mode 100644 apps/web/components/user-buy.tsx create mode 100644 apps/web/components/user-go-pro-button.tsx create mode 100644 apps/web/components/user-go-pro.tsx create mode 100644 apps/web/components/user-related.tsx create mode 100644 apps/web/components/user-socials.tsx create mode 100644 apps/web/components/youtube-embed.tsx create mode 100644 apps/web/components/youtube-short-embed.tsx create mode 100644 apps/web/components/youtube-short.tsx create mode 100644 apps/web/components/youtube-shorts.tsx create mode 100644 apps/web/components/youtube.tsx delete mode 100644 apps/web/drizzle.config.ts create mode 100644 apps/web/e2e/dashboard.spec.ts create mode 100644 apps/web/e2e/smoke.spec.ts create mode 100644 apps/web/hooks/use-mobile.ts create mode 100644 apps/web/lib/block-content-to-markdown.d.ts create mode 100644 apps/web/lib/config.ts create mode 100644 apps/web/lib/gemini-metadata.ts create mode 100644 apps/web/lib/gemini.ts create mode 100644 apps/web/lib/hooks.ts create mode 100644 apps/web/lib/prism.ts create mode 100644 apps/web/lib/resend-notify.ts create mode 100644 apps/web/lib/rss.ts create mode 100644 apps/web/lib/sanity-write-client.ts create mode 100644 apps/web/lib/sanity/dashboard.ts create mode 100644 apps/web/lib/services/elevenlabs.ts create mode 100644 apps/web/lib/services/gcs.ts create mode 100644 apps/web/lib/services/gemini-infographics.ts create mode 100644 apps/web/lib/services/gemini-research.ts create mode 100644 apps/web/lib/services/notebooklm/auth.ts create mode 100644 apps/web/lib/services/notebooklm/client.ts create mode 100644 apps/web/lib/services/notebooklm/index.ts create mode 100644 apps/web/lib/services/notebooklm/rpc.ts create mode 100644 apps/web/lib/services/notebooklm/types.ts create mode 100644 apps/web/lib/services/pexels.ts create mode 100644 apps/web/lib/services/remotion-deploy.ts create mode 100644 apps/web/lib/services/remotion.ts create mode 100644 apps/web/lib/services/research.ts create mode 100644 apps/web/lib/services/sanity-upload.ts create mode 100644 apps/web/lib/services/trend-discovery.ts create mode 100644 apps/web/lib/services/video-pipeline.ts create mode 100644 apps/web/lib/sponsor/email-service.ts create mode 100644 apps/web/lib/sponsor/gemini-intent.ts create mode 100644 apps/web/lib/sponsor/gemini-outreach.ts create mode 100644 apps/web/lib/sponsor/sponsor-bridge.ts create mode 100644 apps/web/lib/sponsor/stripe-service.ts create mode 100644 apps/web/lib/sponsorship-schema.ts create mode 100644 apps/web/lib/stripe.types.ts create mode 100644 apps/web/lib/supabase/client.ts create mode 100644 apps/web/lib/supabase/server.ts create mode 100644 apps/web/lib/types.ts create mode 100644 apps/web/lib/types/config.ts create mode 100644 apps/web/lib/types/dashboard.ts create mode 100644 apps/web/lib/types/engine-config.ts rename {lib => apps/web/lib}/types/video-analytics.ts (100%) create mode 100644 apps/web/lib/utils.ts create mode 100644 apps/web/lib/utils/audio-timestamps.ts create mode 100644 apps/web/lib/x-social.ts create mode 100644 apps/web/lib/youtube-stats.ts create mode 100644 apps/web/lib/youtube-upload.ts create mode 100644 apps/web/next-env.d.ts create mode 100644 apps/web/next.config.ts delete mode 100644 apps/web/package-lock.json create mode 100644 apps/web/playwright.config.ts create mode 100644 apps/web/postcss.config.js delete mode 100644 apps/web/postcss.config.mjs create mode 100644 apps/web/proxy.ts delete mode 100644 apps/web/public/.assetsignore create mode 100644 apps/web/public/ads.txt delete mode 100644 apps/web/public/favicon.svg create mode 100644 apps/web/public/sanity-icons/apple-icon.png create mode 100644 apps/web/public/sanity-icons/icon.ico create mode 100644 apps/web/public/sanity-icons/icon.png create mode 100644 apps/web/remotion/Root.tsx create mode 100644 apps/web/remotion/components/CTAScene.tsx create mode 100644 apps/web/remotion/components/CodeMorphScene.tsx create mode 100644 apps/web/remotion/components/ComparisonGridScene.tsx create mode 100644 apps/web/remotion/components/DynamicListScene.tsx create mode 100644 apps/web/remotion/components/HookScene.tsx create mode 100644 apps/web/remotion/components/InfographicScene.tsx create mode 100644 apps/web/remotion/components/IsometricMockupScene.tsx create mode 100644 apps/web/remotion/components/Scene.tsx create mode 100644 apps/web/remotion/components/SceneRouter.tsx create mode 100644 apps/web/remotion/components/SponsorSlot.tsx create mode 100644 apps/web/remotion/compositions/MainVideo.tsx create mode 100644 apps/web/remotion/compositions/ShortVideo.tsx create mode 100644 apps/web/remotion/constants.ts create mode 100644 apps/web/remotion/entry.ts create mode 100644 apps/web/remotion/index.ts create mode 100644 apps/web/remotion/types.ts create mode 100644 apps/web/sanity-typegen.json create mode 100644 apps/web/sanity.cli.ts create mode 100644 apps/web/sanity/extract.json create mode 100644 apps/web/sanity/lib/api.ts create mode 100644 apps/web/sanity/lib/client.ts create mode 100644 apps/web/sanity/lib/demo.ts create mode 100644 apps/web/sanity/lib/fetch.ts create mode 100644 apps/web/sanity/lib/image.ts create mode 100644 apps/web/sanity/lib/live.ts create mode 100644 apps/web/sanity/lib/queries.ts create mode 100644 apps/web/sanity/lib/resolveHref.ts create mode 100644 apps/web/sanity/lib/token.ts create mode 100644 apps/web/sanity/lib/utils.ts create mode 100644 apps/web/sanity/types.ts create mode 100644 apps/web/schema.json create mode 100644 apps/web/scripts/migration/README.md create mode 100644 apps/web/scripts/migration/cleanup-orphans.mjs create mode 100644 apps/web/scripts/migration/env-example.txt create mode 100644 apps/web/scripts/migration/migrate.mjs create mode 100644 apps/web/scripts/migration/migration-output.log create mode 100644 apps/web/scripts/migration/package.json create mode 100644 apps/web/scripts/migration/phase4-output.log create mode 100644 apps/web/scripts/sanity-post.js create mode 100644 apps/web/scripts/sanity-update-posts.ts delete mode 100644 apps/web/src/assets/fonts/Inter-Bold.ttf delete mode 100644 apps/web/src/assets/fonts/Inter-Regular.ttf delete mode 100644 apps/web/src/components/Avatar.astro delete mode 100644 apps/web/src/components/Badge.astro delete mode 100644 apps/web/src/components/Button.astro delete mode 100644 apps/web/src/components/Container.astro delete mode 100644 apps/web/src/components/ContentCard.astro delete mode 100644 apps/web/src/components/ContentCardCompact.astro delete mode 100644 apps/web/src/components/ContentCardFeatured.astro delete mode 100644 apps/web/src/components/DraftModeToggle.astro delete mode 100644 apps/web/src/components/Footer.astro delete mode 100644 apps/web/src/components/Header.astro delete mode 100644 apps/web/src/components/Pagination.astro delete mode 100644 apps/web/src/components/PersonDetail.astro delete mode 100644 apps/web/src/components/SocialMeta.astro delete mode 100644 apps/web/src/components/Tag.astro delete mode 100644 apps/web/src/components/ThemeScript.astro delete mode 100644 apps/web/src/components/ThemeToggle.astro delete mode 100644 apps/web/src/components/course/LessonPlayer.tsx delete mode 100644 apps/web/src/env.d.ts delete mode 100644 apps/web/src/layouts/BaseLayout.astro delete mode 100644 apps/web/src/lib/auth-client.ts delete mode 100644 apps/web/src/lib/auth.ts delete mode 100644 apps/web/src/lib/db.ts delete mode 100644 apps/web/src/lib/og-utils.ts delete mode 100644 apps/web/src/lib/queries.ts delete mode 100644 apps/web/src/lib/schema.ts delete mode 100644 apps/web/src/lib/youtube.ts delete mode 100644 apps/web/src/middleware.ts delete mode 100644 apps/web/src/pages/404.astro delete mode 100644 apps/web/src/pages/[slug].astro delete mode 100644 apps/web/src/pages/api/auth/[...all].ts delete mode 100644 apps/web/src/pages/api/draft-mode/allow-enable.ts delete mode 100644 apps/web/src/pages/api/draft-mode/disable.ts delete mode 100644 apps/web/src/pages/api/draft-mode/enable.ts delete mode 100644 apps/web/src/pages/api/og/blog.png.ts delete mode 100644 apps/web/src/pages/api/og/course.png.ts delete mode 100644 apps/web/src/pages/api/og/default.png.ts delete mode 100644 apps/web/src/pages/api/og/podcast.png.ts delete mode 100644 apps/web/src/pages/author/[slug].astro delete mode 100644 apps/web/src/pages/authors.astro delete mode 100644 apps/web/src/pages/blog.astro delete mode 100644 apps/web/src/pages/course/[slug].astro delete mode 100644 apps/web/src/pages/course/[slug]/lesson/[lessonSlug].astro delete mode 100644 apps/web/src/pages/courses.astro delete mode 100644 apps/web/src/pages/courses/rss.xml.ts delete mode 100644 apps/web/src/pages/dashboard/index.astro delete mode 100644 apps/web/src/pages/feeds.astro delete mode 100644 apps/web/src/pages/guest/[slug].astro delete mode 100644 apps/web/src/pages/guests.astro delete mode 100644 apps/web/src/pages/index.astro delete mode 100644 apps/web/src/pages/login.astro delete mode 100644 apps/web/src/pages/podcast/[podcastTypeSlug]/rss.xml.ts delete mode 100644 apps/web/src/pages/podcast/[slug].astro delete mode 100644 apps/web/src/pages/podcasts.astro delete mode 100644 apps/web/src/pages/post/[slug].astro delete mode 100644 apps/web/src/pages/rss.xml.ts delete mode 100644 apps/web/src/pages/sitemap.xml.ts delete mode 100644 apps/web/src/pages/sponsor/[slug].astro delete mode 100644 apps/web/src/pages/sponsors.astro delete mode 100644 apps/web/src/scripts/visual-editing.ts delete mode 100644 apps/web/src/styles/global.css delete mode 100644 apps/web/src/utils/sanity.ts delete mode 100644 apps/web/src/utils/xml.ts create mode 100644 apps/web/supabase/.gitkeep create mode 100644 apps/web/supabase/.temp/cli-latest create mode 100644 apps/web/supabase/.temp/gotrue-version create mode 100644 apps/web/supabase/.temp/pooler-url create mode 100644 apps/web/supabase/.temp/postgres-version create mode 100644 apps/web/supabase/.temp/project-ref create mode 100644 apps/web/supabase/.temp/rest-version create mode 100644 apps/web/supabase/.temp/storage-migration create mode 100644 apps/web/supabase/.temp/storage-version create mode 100644 apps/web/supabase/config.toml create mode 100644 apps/web/supabase/migrations/001_youtube_stats.sql create mode 100644 apps/web/supabase/migrations/002_cron_schedules.sql create mode 100644 apps/web/supabase/migrations/20250101000000_create_dashboard_users.sql create mode 100644 apps/web/vercel.json delete mode 100644 apps/web/wrangler.toml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c937ba60..1c81e474 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,4 +1,4 @@ -name: Deploy CodingCat.dev +name: Deploy Sanity Studio on: push: @@ -23,23 +23,6 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - - name: Install wrangler - run: pnpm add -Dw wrangler - - - name: Build - run: pnpm --filter @codingcatdev/web build - env: - SANITY_PROJECT_ID: ${{ vars.SANITY_STUDIO_PROJECT_ID }} - SANITY_DATASET: ${{ vars.SANITY_STUDIO_DATASET }} - PUBLIC_SANITY_STUDIO_URL: https://${{ vars.SANITY_STUDIO_HOSTNAME }}.sanity.studio - - - name: Deploy to Cloudflare - run: pnpm exec wrangler deploy - working-directory: apps/web - env: - CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} - CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} - - name: Deploy Sanity Studio run: npx sanity deploy -y working-directory: apps/sanity @@ -65,22 +48,6 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - - name: Install wrangler - run: pnpm add -Dw wrangler - - - name: Build - run: pnpm --filter @codingcatdev/web build - env: - SANITY_PROJECT_ID: ${{ vars.SANITY_STUDIO_PROJECT_ID }} - SANITY_DATASET: ${{ vars.SANITY_STUDIO_DATASET }} - - - name: Deploy to Cloudflare - run: pnpm exec wrangler deploy --env production - working-directory: apps/web - env: - CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} - CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} - - name: Deploy Sanity Studio run: npx sanity deploy -y working-directory: apps/sanity diff --git a/.gitignore b/.gitignore index 2059b78a..c14bd61f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ node_modules/ # build output dist/ +.next/ # astro .astro/ diff --git a/apps/sanity/extract.json b/apps/sanity/extract.json new file mode 100644 index 00000000..102eb6dc --- /dev/null +++ b/apps/sanity/extract.json @@ -0,0 +1,14884 @@ +[ + { + "type": "type", + "name": "sanity.imageAsset.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "sanity.imageAsset" + } + }, + { + "type": "type", + "name": "coverImage", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "media" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + } + } + }, + { + "type": "type", + "name": "socials", + "value": { + "type": "object", + "attributes": { + "bluesky": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "codepen": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "devto": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "discord": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "dribble": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "facebook": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "github": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "instagram": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "lastfm": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "linkedin": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "email": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "mastodon": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "medium": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "polywork": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "stackoverflow": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "substack": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "tiktok": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "twitch": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "twitter": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + } + }, + { + "type": "type", + "name": "link", + "value": { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + } + } + }, + { + "type": "type", + "name": "sanity.fileAsset.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "sanity.fileAsset" + } + }, + { + "type": "type", + "name": "videoCloudinary", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.fileAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "videoCloudinary.media" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "file" + } + } + } + } + }, + { + "type": "type", + "name": "statistics", + "value": { + "type": "object", + "attributes": { + "youtube": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "youtube" + }, + "optional": true + } + } + } + }, + { + "type": "type", + "name": "youtube", + "value": { + "type": "object", + "attributes": { + "commentCount": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "favoriteCount": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "likeCount": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "viewCount": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + } + } + } + }, + { + "type": "type", + "name": "ogImage", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "ogImage.media" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + } + } + }, + { + "type": "type", + "name": "guid", + "value": { + "type": "object", + "attributes": { + "id": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "isPermaLink": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + } + } + }, + { + "type": "type", + "name": "itunes", + "value": { + "type": "object", + "attributes": { + "summary": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "explicit": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "duration": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "season": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "episode": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "episodeType": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "image": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "itunes.image" + }, + "optional": true + } + } + } + }, + { + "type": "type", + "name": "itunes.image", + "value": { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + } + }, + { + "type": "type", + "name": "post.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "post" + } + }, + { + "type": "type", + "name": "podcast.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "podcast" + } + }, + { + "type": "type", + "name": "page.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "page" + } + }, + { + "type": "type", + "name": "author.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "author" + } + }, + { + "type": "type", + "name": "sponsor.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "sponsor" + } + }, + { + "type": "type", + "name": "lesson.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "lesson" + } + }, + { + "name": "course", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "course" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "coverImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "coverImage" + }, + "optional": true + }, + "date": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "excerpt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "featured": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "code" + } + }, + { + "type": "object", + "attributes": { + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtube" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "shorts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtubeShorts" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codepen" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codesandbox" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "id": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "twitter" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "html": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "htmlBlock" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "quote" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "table" + } + } + ] + } + }, + "optional": true + }, + "videoCloudinary": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "videoCloudinary" + }, + "optional": true + }, + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "author": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "author.reference" + } + } + }, + "optional": true + }, + "sponsor": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sponsor.reference" + } + } + }, + "optional": true + }, + "devto": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "hashnode": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "statistics": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "statistics" + }, + "optional": true + }, + "stripeProduct": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "sections": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "lesson": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "lesson.reference" + } + } + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "section" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + } + } + }, + { + "name": "lesson", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "lesson" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "coverImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "coverImage" + }, + "optional": true + }, + "date": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "excerpt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "featured": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "code" + } + }, + { + "type": "object", + "attributes": { + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtube" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "shorts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtubeShorts" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codepen" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codesandbox" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "id": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "twitter" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "html": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "htmlBlock" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "quote" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "table" + } + } + ] + } + }, + "optional": true + }, + "videoCloudinary": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "videoCloudinary" + }, + "optional": true + }, + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "author": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "author.reference" + } + } + }, + "optional": true + }, + "sponsor": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sponsor.reference" + } + } + }, + "optional": true + }, + "devto": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "hashnode": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "statistics": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "statistics" + }, + "optional": true + }, + "locked": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + } + }, + { + "type": "type", + "name": "category.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "category" + } + }, + { + "name": "short", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "short" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "thumbnail": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + } + }, + "optional": true + }, + "parentEpisode": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "podcast.reference" + }, + "optional": true + }, + "publishedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "duration": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "categories": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "category.reference" + } + } + }, + "optional": true + } + } + }, + { + "name": "sanity.imageCrop", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.imageCrop" + } + }, + "top": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "bottom": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "left": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "right": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + } + } + } + }, + { + "name": "sanity.imageHotspot", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.imageHotspot" + } + }, + "x": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "y": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "height": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "width": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + } + } + } + }, + { + "name": "slug", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "slug" + } + }, + "current": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "source": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + } + }, + { + "name": "category", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "category" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "description": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "color": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + { + "name": "sponsorPool", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sponsorPool" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "companyName": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "contactName": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "contactEmail": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "website": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "category": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "source": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "curated" + }, + { + "type": "string", + "value": "enriched" + } + ] + }, + "optional": true + }, + "relevanceScore": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "lastContactedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "optedOut": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "notes": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + { + "type": "type", + "name": "automatedVideo.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "automatedVideo" + } + }, + { + "name": "videoAnalytics", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "videoAnalytics" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "contentRef": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "automatedVideo.reference" + } + ] + }, + "optional": true + }, + "contentType": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "post" + }, + { + "type": "string", + "value": "podcast" + }, + { + "type": "string", + "value": "automatedVideo" + } + ] + }, + "optional": true + }, + "youtubeId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "youtubeShortId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "viewCount": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "likeCount": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "commentCount": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "favoriteCount": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "lastFetchedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + { + "name": "mediaAsset", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "mediaAsset" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "image": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + } + }, + "optional": true + }, + "source": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "simpleicons" + }, + { + "type": "string", + "value": "brandfetch" + }, + { + "type": "string", + "value": "serper" + }, + { + "type": "string", + "value": "screenshot" + }, + { + "type": "string", + "value": "gemini" + }, + { + "type": "string", + "value": "pexels" + }, + { + "type": "string", + "value": "manual" + } + ] + }, + "optional": true + }, + "attribution": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "license": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "cc0" + }, + { + "type": "string", + "value": "cc-by" + }, + { + "type": "string", + "value": "cc-by-sa" + }, + { + "type": "string", + "value": "fair-use" + }, + { + "type": "string", + "value": "proprietary" + }, + { + "type": "string", + "value": "unknown" + } + ] + }, + "optional": true + }, + "brandOverlayApplied": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "originalUrl": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "tags": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + } + } + }, + { + "type": "type", + "name": "contentIdea.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "contentIdea" + } + }, + { + "type": "type", + "name": "mediaAsset.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "mediaAsset" + } + }, + { + "type": "type", + "name": "sponsorLead.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "sponsorLead" + } + }, + { + "name": "automatedVideo", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "automatedVideo" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "contentIdea": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "contentIdea.reference" + }, + "optional": true + }, + "script": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "hook": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "scenes": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "sceneNumber": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "narration": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "visualDescription": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "bRollKeywords": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "durationEstimate": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "sceneType": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "narration" + }, + { + "type": "string", + "value": "code" + }, + { + "type": "string", + "value": "list" + }, + { + "type": "string", + "value": "comparison" + }, + { + "type": "string", + "value": "mockup" + } + ] + }, + "optional": true + }, + "imagePrompts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "code": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "snippet": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "language": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "typescript" + }, + { + "type": "string", + "value": "javascript" + }, + { + "type": "string", + "value": "jsx" + }, + { + "type": "string", + "value": "tsx" + }, + { + "type": "string", + "value": "css" + }, + { + "type": "string", + "value": "html" + }, + { + "type": "string", + "value": "json" + }, + { + "type": "string", + "value": "bash" + } + ] + }, + "optional": true + }, + "highlightLines": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "number" + } + }, + "optional": true + } + } + }, + "optional": true + }, + "list": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "items": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "icon": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + "optional": true + }, + "comparison": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "leftLabel": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "rightLabel": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "rows": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "left": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "right": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + } + } + }, + "optional": true + }, + "mockup": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "deviceType": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "browser" + }, + { + "type": "string", + "value": "phone" + }, + { + "type": "string", + "value": "terminal" + } + ] + }, + "optional": true + }, + "screenContent": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + "optional": true + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "cta": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + "optional": true + }, + "scriptQualityScore": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "status": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "draft" + }, + { + "type": "string", + "value": "researching" + }, + { + "type": "string", + "value": "research_complete" + }, + { + "type": "string", + "value": "generating_media" + }, + { + "type": "string", + "value": "generating_audio" + }, + { + "type": "string", + "value": "assembling_video" + }, + { + "type": "string", + "value": "quality_gate" + }, + { + "type": "string", + "value": "pending_review" + }, + { + "type": "string", + "value": "approved" + }, + { + "type": "string", + "value": "publishing" + }, + { + "type": "string", + "value": "published" + }, + { + "type": "string", + "value": "rejected" + }, + { + "type": "string", + "value": "archived" + }, + { + "type": "string", + "value": "script_ready" + }, + { + "type": "string", + "value": "audio_gen" + }, + { + "type": "string", + "value": "video_gen" + }, + { + "type": "string", + "value": "rendering" + }, + { + "type": "string", + "value": "uploading" + }, + { + "type": "string", + "value": "flagged" + }, + { + "type": "string", + "value": "infographics_generating" + }, + { + "type": "string", + "value": "enriching" + } + ] + }, + "optional": true + }, + "qualityScore": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "qualityIssues": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "reviewedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "reviewedBy": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "mediaAssets": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "mediaAsset.reference" + } + } + }, + "optional": true + }, + "shorts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "startScene": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "endScene": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "videoUrl": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "thumbnailUrl": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "thumbnailHorizontal": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + } + }, + "optional": true + }, + "thumbnailVertical": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + } + }, + "optional": true + }, + "blogPostId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "socialPosts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "platform": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "youtube" + }, + { + "type": "string", + "value": "twitter" + }, + { + "type": "string", + "value": "linkedin" + }, + { + "type": "string", + "value": "tiktok" + }, + { + "type": "string", + "value": "instagram" + }, + { + "type": "string", + "value": "bluesky" + } + ] + }, + "optional": true + }, + "postId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "postUrl": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "postedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "workflowId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "r2Prefix": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "audioFile": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.fileAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "file" + } + } + } + }, + "optional": true + }, + "audioUrl": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "videoFile": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.fileAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "file" + } + } + } + }, + "optional": true + }, + "videoUrl": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "shortFile": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.fileAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "file" + } + } + } + }, + "optional": true + }, + "shortUrl": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "infographics": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "alt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "caption": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "infographicsHorizontal": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "image": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + } + }, + "optional": true + }, + "prompt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "sceneNumber": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "infographicsVertical": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "image": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + } + }, + "optional": true + }, + "prompt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "sceneNumber": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "renderData": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "mainRenderId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "shortRenderId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "bucketName": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "startedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + "optional": true + }, + "youtubeId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "youtubeShortId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "scheduledPublishAt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "sponsorSlot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sponsorLead.reference" + }, + "optional": true + }, + "researchNotebookId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "researchTaskId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "researchInteractionId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "researchData": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "infographicArtifactIds": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "trendScore": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "trendSources": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "flaggedReason": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "distributionLog": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "step": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "status": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "success" + }, + { + "type": "string", + "value": "failed" + }, + { + "type": "string", + "value": "skipped" + } + ] + }, + "optional": true + }, + "error": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "timestamp": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "result": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + } + } + }, + { + "name": "sponsorLead", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sponsorLead" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "companyName": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "contactName": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "contactEmail": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "source": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "inbound" + }, + { + "type": "string", + "value": "outbound" + } + ] + }, + "optional": true + }, + "status": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "new" + }, + { + "type": "string", + "value": "contacted" + }, + { + "type": "string", + "value": "replied" + }, + { + "type": "string", + "value": "negotiating" + }, + { + "type": "string", + "value": "booked" + }, + { + "type": "string", + "value": "paid" + } + ] + }, + "optional": true + }, + "intent": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "rateCard": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "stripeInvoiceId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "bookedSlot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "automatedVideo.reference" + }, + "optional": true + }, + "sponsorDocId": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sponsor.reference" + }, + "optional": true + }, + "threadId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "lastEmailAt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "notes": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + { + "name": "contentIdea", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "contentIdea" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "sourceUrl": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "summary": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "topics": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "collectedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "status": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "new" + }, + { + "type": "string", + "value": "approved" + }, + { + "type": "string", + "value": "rejected" + } + ] + }, + "optional": true + }, + "reasonRejected": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + { + "name": "sponsorshipRequest", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sponsorshipRequest" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "fullName": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "email": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "companyName": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "sponsorshipTier": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "message": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + { + "name": "previewSession", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "previewSession" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "token": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "documentId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "expiresAt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + { + "name": "sponsor", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sponsor" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "coverImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "coverImage" + }, + "optional": true + }, + "date": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "excerpt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "featured": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "code" + } + }, + { + "type": "object", + "attributes": { + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtube" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "shorts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtubeShorts" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codepen" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codesandbox" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "id": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "twitter" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "html": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "htmlBlock" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "quote" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "table" + } + } + ] + } + }, + "optional": true + }, + "ogTitle": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "ogDescription": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "ogImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "ogImage" + }, + "optional": true + }, + "twitterCardType": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "summary_large_image" + }, + { + "type": "string", + "value": "summary" + } + ] + }, + "optional": true + }, + "noIndex": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + { + "name": "author", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "author" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "coverImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "coverImage" + }, + "optional": true + }, + "date": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "excerpt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "featured": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "code" + } + }, + { + "type": "object", + "attributes": { + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtube" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "shorts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtubeShorts" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codepen" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codesandbox" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "id": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "twitter" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "html": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "htmlBlock" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "quote" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "table" + } + } + ] + } + }, + "optional": true + }, + "socials": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "socials" + }, + "optional": true + }, + "websites": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "site": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "link": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "link" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "site" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + } + } + }, + { + "name": "post", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "post" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "coverImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "coverImage" + }, + "optional": true + }, + "date": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "excerpt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "featured": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "code" + } + }, + { + "type": "object", + "attributes": { + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtube" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "shorts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtubeShorts" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codepen" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codesandbox" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "id": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "twitter" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "html": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "htmlBlock" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "quote" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "table" + } + } + ] + } + }, + "optional": true + }, + "videoCloudinary": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "videoCloudinary" + }, + "optional": true + }, + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "author": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "author.reference" + } + } + }, + "optional": true + }, + "sponsor": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sponsor.reference" + } + } + }, + "optional": true + }, + "devto": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "hashnode": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "statistics": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "statistics" + }, + "optional": true + }, + "ogTitle": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "ogDescription": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "ogImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "ogImage" + }, + "optional": true + }, + "twitterCardType": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "summary_large_image" + }, + { + "type": "string", + "value": "summary" + } + ] + }, + "optional": true + }, + "noIndex": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "categories": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "category.reference" + } + } + }, + "optional": true + } + } + }, + { + "type": "type", + "name": "podcastType.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "podcastType" + } + }, + { + "type": "type", + "name": "guest.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "guest" + } + }, + { + "type": "type", + "name": "podcastSeries.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "podcastSeries" + } + }, + { + "type": "type", + "name": "short.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "short" + } + }, + { + "name": "podcast", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "podcast" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "coverImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "coverImage" + }, + "optional": true + }, + "date": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "excerpt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "featured": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "code" + } + }, + { + "type": "object", + "attributes": { + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtube" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "shorts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtubeShorts" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codepen" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codesandbox" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "id": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "twitter" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "html": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "htmlBlock" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "quote" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "table" + } + } + ] + } + }, + "optional": true + }, + "videoCloudinary": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "videoCloudinary" + }, + "optional": true + }, + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "author": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "author.reference" + } + } + }, + "optional": true + }, + "sponsor": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sponsor.reference" + } + } + }, + "optional": true + }, + "devto": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "hashnode": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "statistics": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "statistics" + }, + "optional": true + }, + "ogTitle": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "ogDescription": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "ogImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "ogImage" + }, + "optional": true + }, + "twitterCardType": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "summary_large_image" + }, + { + "type": "string", + "value": "summary" + } + ] + }, + "optional": true + }, + "noIndex": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "podcastType": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "podcastType.reference" + }, + "optional": true + }, + "season": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "episode": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "recordingDate": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "guest": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "guest.reference" + } + } + }, + "optional": true + }, + "pick": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "user": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "guest.reference" + }, + { + "type": "inline", + "name": "author.reference" + } + ] + }, + "optional": true + }, + "name": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "site": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "spotify": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "podcastRssEpisode" + }, + "optional": true + }, + "thumbnail": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + } + }, + "optional": true + }, + "duration": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "chapters": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "timestamp": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "seconds": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "series": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "podcastSeries.reference" + }, + "optional": true + }, + "seriesOrder": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "listenLinks": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "spotify": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "apple": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "overcast": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "pocketCasts": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "rss": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + "optional": true + }, + "transcript": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "contentType": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "interview" + }, + { + "type": "string", + "value": "solo" + }, + { + "type": "string", + "value": "tutorial" + }, + { + "type": "string", + "value": "news" + }, + { + "type": "string", + "value": "review" + } + ] + }, + "optional": true + }, + "relatedShorts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "short.reference" + } + } + }, + "optional": true + }, + "relatedBlogPost": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "post.reference" + }, + "optional": true + } + } + }, + { + "name": "podcastSeries", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "podcastSeries" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "description": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "coverImage": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + } + }, + "optional": true + }, + "youtubePlaylistId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "isActive": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + } + }, + { + "name": "podcastRssEpisode", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "podcastRssEpisode" + } + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "description": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "link": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "guid": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "guid" + }, + "optional": true + }, + "pubDate": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "enclosures": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "length": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "type": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "enclosure" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "itunes": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "itunes" + }, + "optional": true + } + } + } + }, + { + "name": "guest", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "guest" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "coverImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "coverImage" + }, + "optional": true + }, + "date": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "excerpt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "featured": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "code" + } + }, + { + "type": "object", + "attributes": { + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtube" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "shorts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtubeShorts" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codepen" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codesandbox" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "id": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "twitter" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "html": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "htmlBlock" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "quote" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "table" + } + } + ] + } + }, + "optional": true + }, + "socials": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "socials" + }, + "optional": true + }, + "websites": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "site": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "link": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "link" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "site" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "company": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "role": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + { + "name": "podcastType", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "podcastType" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "coverImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "coverImage" + }, + "optional": true + }, + "date": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "excerpt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "featured": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "code" + } + }, + { + "type": "object", + "attributes": { + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtube" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "shorts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtubeShorts" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codepen" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codesandbox" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "id": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "twitter" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "html": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "htmlBlock" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "quote" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "table" + } + } + ] + } + }, + "optional": true + } + } + }, + { + "name": "page", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "page" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "coverImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "coverImage" + }, + "optional": true + }, + "date": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "slug": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + }, + "excerpt": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "featured": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "code" + } + }, + { + "type": "object", + "attributes": { + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtube" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "shorts": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "youtubeShorts" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codepen" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "codesandbox" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "id": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "twitter" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "html": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "htmlBlock" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "content": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + }, + { + "type": "string", + "value": "h1" + }, + { + "type": "string", + "value": "h2" + }, + { + "type": "string", + "value": "h3" + }, + { + "type": "string", + "value": "h4" + }, + { + "type": "string", + "value": "h5" + }, + { + "type": "string", + "value": "h6" + }, + { + "type": "string", + "value": "blockquote" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "bullet" + }, + { + "type": "string", + "value": "number" + } + ] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blank": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "reference": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "inline", + "name": "post.reference" + }, + { + "type": "inline", + "name": "podcast.reference" + }, + { + "type": "inline", + "name": "page.reference" + } + ] + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "internalLink" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + ] + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "quote" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "table" + } + } + ] + } + }, + "optional": true + }, + "videoCloudinary": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "videoCloudinary" + }, + "optional": true + }, + "youtube": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "author": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "author.reference" + } + } + }, + "optional": true + }, + "sponsor": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sponsor.reference" + } + } + }, + "optional": true + }, + "devto": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "hashnode": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "statistics": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "statistics" + }, + "optional": true + }, + "ogTitle": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "ogDescription": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "ogImage": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "ogImage" + }, + "optional": true + }, + "twitterCardType": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "summary_large_image" + }, + { + "type": "string", + "value": "summary" + } + ] + }, + "optional": true + }, + "noIndex": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + } + }, + { + "name": "engineConfig", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "engineConfig" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "autoPublish": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "qualityThreshold": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "reviewTimeoutDays": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "reviewNotification": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "email" + }, + { + "type": "string", + "value": "slack" + }, + { + "type": "string", + "value": "webhook" + } + ] + }, + "optional": true + }, + "maxIdeasPerRun": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "stuckTimeoutMinutes": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "longFormPerWeek": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "shortsPerDay": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "blogsPerWeek": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "newsletterFrequency": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "weekly" + }, + { + "type": "string", + "value": "biweekly" + }, + { + "type": "string", + "value": "monthly" + } + ] + }, + "optional": true + }, + "publishDays": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "contentCategories": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "trendSources": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "topicFocus": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "rssFeeds": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "name": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "trendSourcesEnabled": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "hn": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "devto": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "blogs": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "youtube": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "github": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + } + }, + "optional": true + }, + "dedupWindowDays": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "geminiModel": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "infographicModel": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "infographicPromptPrefix": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "systemInstruction": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "deepResearchAgent": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "deepResearchPromptTemplate": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "enableDeepResearch": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "enableHorizontalInfographics": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "thumbnailEnabled": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "infographicInstructions": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "targetVideoDurationSec": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "sceneCountMin": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "sceneCountMax": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "elevenLabsVoiceId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "youtubeEnabled": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "twitterEnabled": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "linkedinEnabled": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "tiktokEnabled": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "instagramEnabled": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "blueskyEnabled": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "newsletterEnabled": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "youtubeUploadVisibility": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "private" + }, + { + "type": "string", + "value": "unlisted" + }, + { + "type": "string", + "value": "public" + } + ] + }, + "optional": true + }, + "youtubeChannelId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "youtubeDescriptionTemplate": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "youtubeDefaultTags": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "notificationEmails": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "resendFromEmail": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "cooldownDays": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "rateCardTiers": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "name": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "description": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "price": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "outreachEmailTemplate": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "maxOutreachPerRun": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "brandPrimary": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "brandBackground": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "brandText": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "awsRegion": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "remotionFunctionName": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "remotionServeUrl": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "gcsBucketName": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "gcsProjectId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + }, + { + "name": "settings", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "settings" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "description": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "href": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "link" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "navLinks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "path": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "sideOnly": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "ogImage": { + "type": "objectAttribute", + "value": { + "type": "object", + "attributes": { + "asset": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageAsset.reference" + }, + "optional": true + }, + "media": { + "type": "objectAttribute", + "value": { + "type": "unknown" + }, + "optional": true + }, + "hotspot": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageHotspot" + }, + "optional": true + }, + "crop": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageCrop" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "image" + } + } + } + }, + "optional": true + } + } + }, + { + "name": "row", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "row" + } + }, + "cells": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + } + } + } + }, + { + "name": "table", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "table" + } + }, + "rows": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "row" + } + } + }, + "optional": true + } + } + } + }, + { + "name": "code", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "code" + } + }, + "language": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "filename": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "code": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "highlightedLines": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "number" + } + }, + "optional": true + } + } + } + }, + { + "name": "media.tag", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "media.tag" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "name": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "slug" + }, + "optional": true + } + } + }, + { + "name": "sanity.assist.instructionTask", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.assist.instructionTask" + } + }, + "path": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "instructionKey": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "started": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "updated": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "info": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + } + }, + { + "name": "sanity.assist.task.status", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.assist.task.status" + } + }, + "tasks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sanity.assist.instructionTask" + } + } + }, + "optional": true + } + } + } + }, + { + "name": "sanity.assist.schemaType.annotations", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.assist.schemaType.annotations" + } + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "fields": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sanity.assist.schemaType.field" + } + } + }, + "optional": true + } + } + } + }, + { + "name": "sanity.assist.output.type", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.assist.output.type" + } + }, + "type": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + } + }, + { + "name": "sanity.assist.output.field", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.assist.output.field" + } + }, + "path": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + } + }, + { + "type": "type", + "name": "assist.instruction.context.reference", + "value": { + "type": "object", + "attributes": { + "_ref": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "reference" + } + }, + "_weak": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + }, + "dereferencesTo": "assist.instruction.context" + } + }, + { + "name": "sanity.assist.instruction.context", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.assist.instruction.context" + } + }, + "reference": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "assist.instruction.context.reference" + }, + "optional": true + } + } + } + }, + { + "name": "assist.instruction.context", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "assist.instruction.context" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "context": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "null" + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + }, + "optional": true + } + } + }, + { + "name": "sanity.assist.instruction.userInput", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.assist.instruction.userInput" + } + }, + "message": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "description": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + } + }, + { + "name": "sanity.assist.instruction.prompt", + "type": "type", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "children": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "marks": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "string" + } + }, + "optional": true + }, + "text": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "span" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sanity.assist.instruction.fieldRef" + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sanity.assist.instruction.context" + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sanity.assist.instruction.userInput" + } + } + ] + } + }, + "optional": true + }, + "style": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [ + { + "type": "string", + "value": "normal" + } + ] + }, + "optional": true + }, + "listItem": { + "type": "objectAttribute", + "value": { + "type": "union", + "of": [] + }, + "optional": true + }, + "markDefs": { + "type": "objectAttribute", + "value": { + "type": "null" + }, + "optional": true + }, + "level": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "block" + } + } + }, + "rest": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + } + } + } + } + }, + { + "name": "sanity.assist.instruction.fieldRef", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.assist.instruction.fieldRef" + } + }, + "path": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + } + }, + { + "name": "sanity.assist.instruction", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.assist.instruction" + } + }, + "prompt": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.assist.instruction.prompt" + }, + "optional": true + }, + "icon": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "userId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "createdById": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "output": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "union", + "of": [ + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sanity.assist.output.field" + } + }, + { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sanity.assist.output.type" + } + } + ] + } + }, + "optional": true + } + } + } + }, + { + "name": "sanity.assist.schemaType.field", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.assist.schemaType.field" + } + }, + "path": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "instructions": { + "type": "objectAttribute", + "value": { + "type": "array", + "of": { + "type": "object", + "attributes": { + "_key": { + "type": "objectAttribute", + "value": { + "type": "string" + } + } + }, + "rest": { + "type": "inline", + "name": "sanity.assist.instruction" + } + } + }, + "optional": true + } + } + } + }, + { + "name": "sanity.imagePaletteSwatch", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.imagePaletteSwatch" + } + }, + "background": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "foreground": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "population": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + } + }, + { + "name": "sanity.imagePalette", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.imagePalette" + } + }, + "darkMuted": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imagePaletteSwatch" + }, + "optional": true + }, + "lightVibrant": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imagePaletteSwatch" + }, + "optional": true + }, + "darkVibrant": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imagePaletteSwatch" + }, + "optional": true + }, + "vibrant": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imagePaletteSwatch" + }, + "optional": true + }, + "dominant": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imagePaletteSwatch" + }, + "optional": true + }, + "lightMuted": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imagePaletteSwatch" + }, + "optional": true + }, + "muted": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imagePaletteSwatch" + }, + "optional": true + } + } + } + }, + { + "name": "sanity.imageDimensions", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.imageDimensions" + } + }, + "height": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "width": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "aspectRatio": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + } + } + } + }, + { + "name": "sanity.imageMetadata", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.imageMetadata" + } + }, + "location": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "geopoint" + }, + "optional": true + }, + "dimensions": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageDimensions" + }, + "optional": true + }, + "palette": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imagePalette" + }, + "optional": true + }, + "lqip": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "blurHash": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "thumbHash": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "hasAlpha": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + }, + "isOpaque": { + "type": "objectAttribute", + "value": { + "type": "boolean" + }, + "optional": true + } + } + } + }, + { + "name": "sanity.fileAsset", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.fileAsset" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "originalFilename": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "label": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "description": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "altText": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "sha1hash": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "extension": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "mimeType": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "size": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "assetId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "uploadId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "path": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "source": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.assetSourceData" + }, + "optional": true + } + } + }, + { + "name": "sanity.assetSourceData", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.assetSourceData" + } + }, + "name": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "id": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + } + } + } + }, + { + "name": "sanity.imageAsset", + "type": "document", + "attributes": { + "_id": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "sanity.imageAsset" + } + }, + "_createdAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_updatedAt": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "_rev": { + "type": "objectAttribute", + "value": { + "type": "string" + } + }, + "originalFilename": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "label": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "title": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "description": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "altText": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "sha1hash": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "extension": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "mimeType": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "size": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "assetId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "uploadId": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "path": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "url": { + "type": "objectAttribute", + "value": { + "type": "string" + }, + "optional": true + }, + "metadata": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.imageMetadata" + }, + "optional": true + }, + "source": { + "type": "objectAttribute", + "value": { + "type": "inline", + "name": "sanity.assetSourceData" + }, + "optional": true + } + } + }, + { + "name": "geopoint", + "type": "type", + "value": { + "type": "object", + "attributes": { + "_type": { + "type": "objectAttribute", + "value": { + "type": "string", + "value": "geopoint" + } + }, + "lat": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "lng": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + }, + "alt": { + "type": "objectAttribute", + "value": { + "type": "number" + }, + "optional": true + } + } + } + } +] diff --git a/apps/sanity/package.json b/apps/sanity/package.json index 9db0ee1e..2fbec41b 100644 --- a/apps/sanity/package.json +++ b/apps/sanity/package.json @@ -6,7 +6,8 @@ "dev": "sanity dev", "build": "sanity build", "deploy": "sanity deploy", - "typegen": "sanity schema extract --path=./extract.json && sanity typegen generate" + "typegen:extract": "sanity schema extract --path=./extract.json --workspace production", + "typegen": "pnpm run typegen:extract" }, "dependencies": { "@codingcatdev/sanity-plugin-podcast-rss": "^1.0.0", diff --git a/apps/sanity/sanity.config.ts b/apps/sanity/sanity.config.ts index bdc63e6d..81ad148a 100644 --- a/apps/sanity/sanity.config.ts +++ b/apps/sanity/sanity.config.ts @@ -60,11 +60,11 @@ const apiVersion = process.env.SANITY_STUDIO_API_VERSION || "2025-09-30"; const presentationEnabled = process.env.SANITY_STUDIO_DISABLE_PRESENTATION !== "true"; -// Use local Astro dev server for presentation preview when running Studio locally +// Use local Next.js dev server for presentation preview when running Studio locally const isLocal = typeof import.meta !== "undefined" && (import.meta as unknown as { env?: { DEV?: boolean } }).env?.DEV; -const localPreviewOrigin = "http://localhost:4321"; +const localPreviewOrigin = "http://localhost:3000"; // ── Shared helpers ─────────────────────────────────────────────────── function resolveHref(type: string, slug?: string): string | undefined { diff --git a/apps/sanity/schemas/singletons/engineConfig.ts b/apps/sanity/schemas/singletons/engineConfig.ts index 953e15f1..9c570a9f 100644 --- a/apps/sanity/schemas/singletons/engineConfig.ts +++ b/apps/sanity/schemas/singletons/engineConfig.ts @@ -104,6 +104,16 @@ export default defineType({ initialValue: 1, validation: (rule) => rule.min(1).max(10), }), + defineField({ + name: 'stuckTimeoutMinutes', + title: 'Stuck Timeout Minutes', + type: 'number', + fieldset: 'pipelineControl', + description: + 'Minutes before a pipeline document is considered stuck and auto-flagged', + initialValue: 30, + validation: (rule) => rule.min(5).max(120), + }), // ─── Content Cadence ───────────────────────────────────────────────── defineField({ diff --git a/apps/web/.dev.vars.example b/apps/web/.dev.vars.example deleted file mode 100644 index 48475b5f..00000000 --- a/apps/web/.dev.vars.example +++ /dev/null @@ -1,15 +0,0 @@ -# Runtime secrets for Cloudflare Worker (wrangler dev / preview). -# Copy to .dev.vars and fill in. In production, set via: wrangler secret put - -# Sanity — viewer token for draft mode / Presentation tool -SANITY_API_READ_TOKEN= -# Optional: set to enable "Turn on draft mode" from site (visit /api/draft-mode/allow-enable?secret=THIS once per session) -# SANITY_PREVIEW_DEV_SECRET= - -# better-auth -BETTER_AUTH_SECRET= -BETTER_AUTH_URL=http://localhost:4321 - -# Google OAuth (better-auth social login) -GOOGLE_CLIENT_ID= -GOOGLE_CLIENT_SECRET= diff --git a/apps/web/.env.example b/apps/web/.env.example index edd325a1..24c919a3 100644 --- a/apps/web/.env.example +++ b/apps/web/.env.example @@ -1,13 +1,69 @@ -# Build-time env (Astro/Vite). Copy to .env or .env.local. -# Runtime secrets live in .dev.vars (see .dev.vars.example). +# ============================================================================= +# codingcat.dev — Environment Variables +# ============================================================================= +# Copy this file to .env.local and fill in the values. +# See: https://nextjs.org/docs/app/building-your-application/configuring/environment-variables +# Variables prefixed with NEXT_PUBLIC_ are exposed to the browser. +# All other variables are server-only. +# ============================================================================= -# Sanity — used at build; defaults exist in code -SANITY_PROJECT_ID=hfh83o0w -SANITY_DATASET=production +# ----------------------------------------------------------------------------- +# Public (client-side) variables — NEXT_PUBLIC_* +# ----------------------------------------------------------------------------- -# Optional: Visual Editing (local or dev site) -# PUBLIC_SANITY_VISUAL_EDITING_ENABLED=true -# PUBLIC_SANITY_STUDIO_URL=http://localhost:3333 +# Sanity CMS — project configuration +NEXT_PUBLIC_SANITY_PROJECT_ID= # Sanity project ID (from sanity.io/manage) +NEXT_PUBLIC_SANITY_DATASET= # Sanity dataset name (e.g. "prod") +NEXT_PUBLIC_SANITY_API_VERSION= # Sanity API version date (e.g. "2024-01-01") -# Optional: Auth base URL (defaults to http://localhost:4321) -# PUBLIC_APP_URL=http://localhost:4321 +# Site URLs +NEXT_PUBLIC_BASE_URL= # Canonical base URL (e.g. "https://codingcat.dev") +NEXT_PUBLIC_VERCEL_URL= # Vercel preview URL (auto-set by Vercel) + +# Algolia search — public keys +NEXT_PUBLIC_ALGOLIA_APP_ID= # Algolia application ID +NEXT_PUBLIC_ALGOLIA_INDEX= # Algolia index name + +# Analytics +NEXT_PUBLIC_FB_PIXEL_ID= # Facebook Pixel tracking ID + +# Preview mode +NEXT_PUBLIC_PREVIEW_TOKEN_SECRET= # Secret token for Sanity preview mode + +# ----------------------------------------------------------------------------- +# Server-only variables +# ----------------------------------------------------------------------------- + +# Sanity CMS — API tokens +SANITY_API_READ_TOKEN= # Sanity read token (viewer role) +SANITY_API_WRITE_TOKEN= # Sanity write token (editor role) + +# Algolia search — admin keys +PRIVATE_ALGOLIA_ADMIN_API_KEY= # Algolia admin API key (server-side indexing) +PRIVATE_ALGOLIA_WEBOOK_SECRET= # Shared secret for Algolia webhook verification + +# Syndication +PRIVATE_SYNDICATE_WEBOOK_SECRET= # Shared secret for syndication webhook verification +PRIVATE_DEVTO= # Dev.to API key (cross-posting) +PRIVATE_HASHNODE= # Hashnode API key (cross-posting) + +# Cloudflare Turnstile (bot protection) +CLOUDFLARE_TURNSTILE_SECRET_KEY= # Turnstile server-side secret key + +# Cron / scheduled jobs +CRON_SECRET= # Secret for authenticating cron job requests + +# YouTube integration +YOUTUBE_API_KEY= # YouTube Data API v3 key +YOUTUBE_CHANNEL_ID= # YouTube channel ID to fetch videos from +YOUTUBE_UPLOAD_VISIBILITY= # YouTube upload privacy: "public", "private", or "unlisted" (default: "private") + +# Vercel +VERCEL_PROJECT_PRODUCTION_URL= # Production URL (auto-set by Vercel) + +# ----------------------------------------------------------------------------- +# Supabase +# ----------------------------------------------------------------------------- +NEXT_PUBLIC_SUPABASE_URL= # Supabase project URL (e.g. "https://xxx.supabase.co") +NEXT_PUBLIC_SUPABASE_ANON_KEY= # Supabase anonymous/public key +SUPABASE_SERVICE_ROLE_KEY= # Supabase service role key (server-only, bypasses RLS) diff --git a/apps/web/.eslintignore b/apps/web/.eslintignore new file mode 100644 index 00000000..30764a1a --- /dev/null +++ b/apps/web/.eslintignore @@ -0,0 +1,2 @@ +# Ignoring generated files +./sanity.types.ts diff --git a/apps/web/.prettierignore b/apps/web/.prettierignore new file mode 100644 index 00000000..1509c4cd --- /dev/null +++ b/apps/web/.prettierignore @@ -0,0 +1,3 @@ +# Ignoring generated files +./sanity.types.ts +./schema.json diff --git a/apps/web/README.md b/apps/web/README.md deleted file mode 100644 index 27815d7a..00000000 --- a/apps/web/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# CodingCat.dev — Astro 6 Migration - -Fresh Astro 6 project replacing the Next.js site. Deployed to Cloudflare Workers. - -## Stack - -- **Framework:** Astro 6 (SSR mode) -- **Deployment:** Cloudflare Workers via `@astrojs/cloudflare` -- **CMS:** Sanity via `@sanity/astro` -- **Auth:** better-auth + Drizzle + Cloudflare D1 -- **Search:** Sanity Dataset Embeddings -- **Styling:** Tailwind CSS v4 + shadcn/ui -- **Interactive Islands:** React via `@astrojs/react` - -## Getting Started - -From repo root: - -```bash -pnpm install -pnpm --filter @codingcatdev/web dev -``` - -Or from `apps/web`: - -```bash -pnpm install && pnpm dev -``` - -For Cloudflare Workers preview: `pnpm preview` (from `apps/web`). - -## Environment Variables - -- **Build:** Copy `.env.example` to `.env` or `.env.local`. Sanity project/dataset have defaults; optional vars are commented. -- **Runtime (local):** Copy `.dev.vars.example` to `.dev.vars` and set secrets (Sanity token, better-auth, Google OAuth). In production, set these via `wrangler secret put `. - -## Deployment - -```bash -npm run deploy -``` - -Requires `wrangler` CLI authenticated with Cloudflare. diff --git a/apps/web/app/(dashboard)/dashboard/actions.ts b/apps/web/app/(dashboard)/dashboard/actions.ts new file mode 100644 index 00000000..a06586c9 --- /dev/null +++ b/apps/web/app/(dashboard)/dashboard/actions.ts @@ -0,0 +1,10 @@ +"use server"; + +import { redirect } from "next/navigation"; +import { createClient } from "@/lib/supabase/server"; + +export async function signOut() { + const supabase = await createClient(); + await supabase.auth.signOut(); + redirect("/dashboard/login"); +} diff --git a/apps/web/app/(dashboard)/dashboard/auth/callback/route.ts b/apps/web/app/(dashboard)/dashboard/auth/callback/route.ts new file mode 100644 index 00000000..e64179f8 --- /dev/null +++ b/apps/web/app/(dashboard)/dashboard/auth/callback/route.ts @@ -0,0 +1,20 @@ +import { createClient } from "@/lib/supabase/server"; +import { NextResponse } from "next/server"; + +export async function GET(request: Request) { + const { searchParams, origin } = new URL(request.url); + const code = searchParams.get("code"); + const next = searchParams.get("next") ?? "/dashboard"; + + if (code) { + const supabase = await createClient(); + const { error } = await supabase.auth.exchangeCodeForSession(code); + if (!error) { + return NextResponse.redirect(`${origin}${next}`); + } + } + + return NextResponse.redirect( + `${origin}/dashboard/login?error=Could+not+authenticate`, + ); +} diff --git a/apps/web/app/(dashboard)/dashboard/config/config-form.tsx b/apps/web/app/(dashboard)/dashboard/config/config-form.tsx new file mode 100644 index 00000000..01e50f02 --- /dev/null +++ b/apps/web/app/(dashboard)/dashboard/config/config-form.tsx @@ -0,0 +1,597 @@ +"use client"; + +import { useState } from "react"; +import { toast } from "sonner"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Button } from "@/components/ui/button"; +import { Textarea } from "@/components/ui/textarea"; +import { Badge } from "@/components/ui/badge"; +import { Separator } from "@/components/ui/separator"; +import { Loader2, Save, Plus, Trash2, X } from "lucide-react"; +import type { EngineConfig } from "@/lib/types/engine-config"; + +const ALL_DAYS = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + +interface ConfigFormProps { + initialConfig: EngineConfig; +} + +export function ConfigForm({ initialConfig }: ConfigFormProps) { + const [config, setConfig] = useState(initialConfig); + const [saving, setSaving] = useState(false); + const [newCategory, setNewCategory] = useState(""); + + const update = (key: K, value: EngineConfig[K]) => { + setConfig((prev) => ({ ...prev, [key]: value })); + }; + + const handleSave = async () => { + setSaving(true); + try { + const res = await fetch("/api/dashboard/config", { + method: "PUT", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(config), + }); + if (res.ok) { + toast.success("Config saved. Changes propagate within 5 minutes."); + } else { + const data = await res.json(); + toast.error(data.error || "Failed to save config"); + } + } catch { + toast.error("Failed to save config"); + } finally { + setSaving(false); + } + }; + + const toggleDay = (day: string) => { + const days = config.publishDays || []; + update( + "publishDays", + days.includes(day) ? days.filter((d) => d !== day) : [...days, day] + ); + }; + + const addCategory = () => { + const trimmed = newCategory.trim(); + if (!trimmed || (config.contentCategories || []).includes(trimmed)) return; + update("contentCategories", [...(config.contentCategories || []), trimmed]); + setNewCategory(""); + }; + + const removeCategory = (cat: string) => { + update( + "contentCategories", + (config.contentCategories || []).filter((c) => c !== cat) + ); + }; + + const updateTier = ( + index: number, + field: "name" | "description" | "price", + value: string | number + ) => { + const tiers = [...(config.rateCardTiers || [])]; + tiers[index] = { ...tiers[index], [field]: value }; + update("rateCardTiers", tiers); + }; + + const addTier = () => { + update("rateCardTiers", [ + ...(config.rateCardTiers || []), + { name: "", description: "", price: 0 }, + ]); + }; + + const removeTier = (index: number) => { + update( + "rateCardTiers", + (config.rateCardTiers || []).filter((_, i) => i !== index) + ); + }; + + return ( +
+ {/* Pipeline Control */} + + + Pipeline Control + + Control auto-publishing, quality gates, and pipeline limits. + + + +
+ + +
+
+ + + update("qualityThreshold", Number(e.target.value)) + } + className="w-full accent-primary" + /> +
+
+
+ + + update("reviewTimeoutDays", Number(e.target.value)) + } + /> +
+
+ + + update("maxIdeasPerRun", Number(e.target.value)) + } + /> +
+
+
+
+ + {/* Content Cadence */} + + + Content Cadence + + How much content to produce and when to publish. + + + +
+
+ + + update("longFormPerWeek", Number(e.target.value)) + } + /> +
+
+ + + update("shortsPerDay", Number(e.target.value)) + } + /> +
+
+ + + update("blogsPerWeek", Number(e.target.value)) + } + /> +
+
+ +
+ +
+ {ALL_DAYS.map((day) => ( + toggleDay(day)} + > + {day} + + ))} +
+
+ +
+ +
+ {(config.contentCategories || []).map((cat) => ( + + {cat} + + + ))} +
+
+ setNewCategory(e.target.value)} + onKeyDown={(e) => { + if (e.key === "Enter") { + e.preventDefault(); + addCategory(); + } + }} + className="flex-1" + /> + +
+
+
+
+ + {/* AI & Generation */} + + + AI & Generation + + Model selection and system instructions for content generation. + + + +
+
+ + update("geminiModel", e.target.value)} + placeholder="gemini-2.0-flash" + /> +
+
+ + update("infographicModel", e.target.value)} + placeholder="imagen-3.0-generate-002" + /> +
+
+
+ +