From a0c4bce56e08d978cf8c95063b94fd4a58e022d4 Mon Sep 17 00:00:00 2001 From: Waleed Date: Wed, 12 Nov 2025 04:03:50 -0800 Subject: [PATCH] feat(studio): added 'studio' blog (#1927) * feat(blog): fundraise blog * added scaffolding and authors for everyone's articles * rename blog to studio * add blog post for multiplayer * add profile pic * Executor blog * mark emcn blog as draft * Fix x * v0.4.26 * fix(already-cancelled-sub): UI should allow restoring subscription * restore functionality fixed * fix Co-authored-by: Waleed Co-authored-by: Vikhyath Mondreti * fix(conflict): resolve merge conflict * fix(already-cancelled-sub): UI should allow restoring subscription * restore functionality fixed * fix Co-authored-by: Vikhyath Mondreti Co-authored-by: Siddharth Ganesan <33737564+Sg312@users.noreply.github.com> * fix(billing): should allow restoring subscription (#1728) (#1925) * fix(already-cancelled-sub): UI should allow restoring subscription * restore functionality fixed * fix Co-authored-by: Vikhyath Mondreti Co-authored-by: Siddharth Ganesan <33737564+Sg312@users.noreply.github.com> * cleanup blog --------- Co-authored-by: waleed Co-authored-by: Vikhyath Mondreti Co-authored-by: Siddharth Ganesan Co-authored-by: Siddharth Ganesan <33737564+Sg312@users.noreply.github.com> Co-authored-by: Vikhyath Mondreti --- apps/sim/app/(landing)/blog/page.tsx | 223 ------ apps/sim/app/(landing)/careers/page.tsx | 635 +++++++++--------- .../(landing)/components/footer/footer.tsx | 4 +- .../app/(landing)/components/legal-layout.tsx | 5 +- apps/sim/app/(landing)/components/nav/nav.tsx | 12 +- .../{blog => studio}/[slug]/page.tsx | 16 +- .../{blog => studio}/authors/[id]/page.tsx | 4 +- .../app/(landing)/{blog => studio}/head.tsx | 6 +- .../app/(landing)/{blog => studio}/layout.tsx | 2 +- apps/sim/app/(landing)/studio/page.tsx | 152 +++++ .../{blog => studio}/rss.xml/route.ts | 2 +- .../sitemap-images.xml/route.ts | 0 .../(landing)/{blog => studio}/tags/page.tsx | 4 +- apps/sim/app/theme-provider.tsx | 2 +- .../emails/careers-confirmation-email.tsx | 2 +- .../components/emcn/components/code/code.tsx | 1 + apps/sim/content/authors/adam.json | 7 + apps/sim/content/authors/emir.json | 2 +- apps/sim/content/authors/sid.json | 7 + apps/sim/content/authors/vik.json | 7 + apps/sim/content/authors/waleed.json | 2 +- apps/sim/content/blog/copilot/index.mdx | 101 +++ apps/sim/content/blog/emcn/index.mdx | 97 +++ apps/sim/content/blog/executor/index.mdx | 196 ++++++ apps/sim/content/blog/multiplayer/index.mdx | 181 +++++ .../blog/openai-vs-n8n-vs-sim/index.mdx | 18 +- apps/sim/content/blog/series-a/index.mdx | 63 ++ apps/sim/lib/blog/code.tsx | 12 + apps/sim/lib/blog/mdx.tsx | 74 +- apps/sim/lib/blog/registry.ts | 1 + apps/sim/lib/blog/schema.ts | 2 + apps/sim/lib/blog/seo.ts | 6 +- apps/sim/lib/environment.ts | 6 +- apps/sim/next.config.ts | 25 +- .../public/{blog => studio}/authors/emir.png | Bin apps/sim/public/studio/authors/sid.png | Bin 0 -> 126301 bytes apps/sim/public/studio/authors/vik.jpg | Bin 0 -> 12234 bytes apps/sim/public/studio/authors/waleed.png | Bin 0 -> 2490664 bytes apps/sim/public/studio/copilot/cover.png | Bin 0 -> 116799 bytes apps/sim/public/studio/emcn/cover.png | Bin 0 -> 92401 bytes apps/sim/public/studio/executor/cover.png | Bin 0 -> 596929 bytes .../public/studio/executor/edge-pruning.png | Bin 0 -> 128339 bytes apps/sim/public/studio/executor/hitl-loop.png | Bin 0 -> 222093 bytes .../public/studio/executor/loop-sentinels.png | Bin 0 -> 156655 bytes apps/sim/public/studio/multiplayer/cover.png | Bin 0 -> 985931 bytes .../openai-vs-n8n-vs-sim/copilot.png | Bin .../openai-vs-n8n-vs-sim/logs.png | Bin .../openai-vs-n8n-vs-sim/n8n.png | Bin .../openai-vs-n8n-vs-sim/openai.png | Bin .../openai-vs-n8n-vs-sim/sim.png | Bin .../openai-vs-n8n-vs-sim/templates.png | Bin .../openai-vs-n8n-vs-sim/widgets.png | Bin .../openai-vs-n8n-vs-sim/workflow.png | Bin apps/sim/public/studio/series-a/cover.png | Bin 0 -> 1043828 bytes apps/sim/public/studio/series-a/team.png | Bin 0 -> 10698937 bytes 55 files changed, 1290 insertions(+), 587 deletions(-) delete mode 100644 apps/sim/app/(landing)/blog/page.tsx rename apps/sim/app/(landing)/{blog => studio}/[slug]/page.tsx (92%) rename apps/sim/app/(landing)/{blog => studio}/authors/[id]/page.tsx (94%) rename apps/sim/app/(landing)/{blog => studio}/head.tsx (52%) rename apps/sim/app/(landing)/{blog => studio}/layout.tsx (92%) create mode 100644 apps/sim/app/(landing)/studio/page.tsx rename apps/sim/app/(landing)/{blog => studio}/rss.xml/route.ts (97%) rename apps/sim/app/(landing)/{blog => studio}/sitemap-images.xml/route.ts (100%) rename apps/sim/app/(landing)/{blog => studio}/tags/page.tsx (80%) create mode 100644 apps/sim/content/authors/adam.json create mode 100644 apps/sim/content/authors/sid.json create mode 100644 apps/sim/content/authors/vik.json create mode 100644 apps/sim/content/blog/copilot/index.mdx create mode 100644 apps/sim/content/blog/emcn/index.mdx create mode 100644 apps/sim/content/blog/executor/index.mdx create mode 100644 apps/sim/content/blog/multiplayer/index.mdx create mode 100644 apps/sim/content/blog/series-a/index.mdx create mode 100644 apps/sim/lib/blog/code.tsx rename apps/sim/public/{blog => studio}/authors/emir.png (100%) create mode 100644 apps/sim/public/studio/authors/sid.png create mode 100644 apps/sim/public/studio/authors/vik.jpg create mode 100644 apps/sim/public/studio/authors/waleed.png create mode 100644 apps/sim/public/studio/copilot/cover.png create mode 100644 apps/sim/public/studio/emcn/cover.png create mode 100644 apps/sim/public/studio/executor/cover.png create mode 100644 apps/sim/public/studio/executor/edge-pruning.png create mode 100644 apps/sim/public/studio/executor/hitl-loop.png create mode 100644 apps/sim/public/studio/executor/loop-sentinels.png create mode 100644 apps/sim/public/studio/multiplayer/cover.png rename apps/sim/public/{blog => studio}/openai-vs-n8n-vs-sim/copilot.png (100%) rename apps/sim/public/{blog => studio}/openai-vs-n8n-vs-sim/logs.png (100%) rename apps/sim/public/{blog => studio}/openai-vs-n8n-vs-sim/n8n.png (100%) rename apps/sim/public/{blog => studio}/openai-vs-n8n-vs-sim/openai.png (100%) rename apps/sim/public/{blog => studio}/openai-vs-n8n-vs-sim/sim.png (100%) rename apps/sim/public/{blog => studio}/openai-vs-n8n-vs-sim/templates.png (100%) rename apps/sim/public/{blog => studio}/openai-vs-n8n-vs-sim/widgets.png (100%) rename apps/sim/public/{blog => studio}/openai-vs-n8n-vs-sim/workflow.png (100%) create mode 100644 apps/sim/public/studio/series-a/cover.png create mode 100644 apps/sim/public/studio/series-a/team.png diff --git a/apps/sim/app/(landing)/blog/page.tsx b/apps/sim/app/(landing)/blog/page.tsx deleted file mode 100644 index e5c21d354c..0000000000 --- a/apps/sim/app/(landing)/blog/page.tsx +++ /dev/null @@ -1,223 +0,0 @@ -import Image from 'next/image' -import Link from 'next/link' -import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar' -import { getAllPostMeta } from '@/lib/blog/registry' -import { soehne } from '@/app/fonts/soehne/soehne' - -export const revalidate = 3600 - -export default async function BlogIndex({ - searchParams, -}: { - searchParams: Promise<{ page?: string; tag?: string }> -}) { - const { page, tag } = await searchParams - const pageNum = Math.max(1, Number(page || 1)) - const perPage = 20 - - const all = await getAllPostMeta() - const filtered = tag ? all.filter((p) => p.tags.includes(tag)) : all - const totalPages = Math.max(1, Math.ceil(filtered.length / perPage)) - const start = (pageNum - 1) * perPage - const posts = filtered.slice(start, start + perPage) - // Tag filter chips are intentionally disabled for now. - // const tags = await getAllTags() - const blogJsonLd = { - '@context': 'https://schema.org', - '@type': 'Blog', - name: 'Sim Blog', - url: 'https://sim.ai/blog', - description: 'Announcements, insights, and guides for building AI agent workflows.', - } - - const [featured, ...rest] = posts - - return ( -
-