From 5526d46ae24f0bb2757e3aa1010cebf3f7490665 Mon Sep 17 00:00:00 2001 From: Matthew Lipski Date: Thu, 19 Jun 2025 10:33:44 +0200 Subject: [PATCH 01/16] Added home and about pages --- .../(home)}/community/Community.tsx | 8 +- .../(home)}/community/Contributors.tsx | 12 +- .../(home)}/community/JoinButton.tsx | 2 +- .../(home)}/community/SponsorCard.tsx | 2 +- .../(home)}/community/Sponsors.tsx | 46 ++--- .../pages/landing => app/(home)}/faq/FAQ.tsx | 4 +- .../(home)}/features/FeatureCard.tsx | 8 +- .../(home)}/features/Features.tsx | 20 +-- .../landing => app/(home)}/gradients.css | 9 +- .../landing => app/(home)}/hero/Demo.tsx | 33 ++-- .../(home)}/hero/DemoEditor.tsx | 0 fumadocs/app/(home)/hero/Hero.tsx | 22 +++ .../landing => app/(home)}/hero/Text.tsx | 7 +- .../landing => app/(home)}/hero/styles.css | 0 .../landing => app/(home)}/letter/Letter.tsx | 10 +- fumadocs/app/(home)/page.tsx | 49 +++--- .../pages/landing => app/(home)}/styles.css | 0 fumadocs/app/about/layout.tsx | 7 + fumadocs/app/about/page.tsx | 41 +++++ .../{components/pages => app}/pricing/faq.tsx | 0 fumadocs/app/pricing/page.tsx | 6 +- .../pages => app}/pricing/tiers.tsx | 0 fumadocs/components/CTAButton.tsx | 2 +- .../{pages/landing/shared => }/FadeIn.tsx | 0 fumadocs/components/Footer.tsx | 163 ++++++++++++++++++ fumadocs/components/GitHubButton.tsx | 18 ++ .../{pages/landing/shared => }/Headings.tsx | 2 +- .../{pages/landing/shared => }/Section.tsx | 2 +- .../landing/shared => }/gradients.module.css | 0 .../components/pages/landing/hero/Hero.tsx | 31 ---- fumadocs/components/pages/landing/index.tsx | 34 ---- .../pages/landing/shared/CTAButton.tsx | 26 --- fumadocs/content/meta.json | 2 +- fumadocs/content/pages/about.mdx | 49 ++++++ fumadocs/package.json | 1 + fumadocs/source.config.ts | 4 + pnpm-lock.yaml | 8 + 37 files changed, 422 insertions(+), 206 deletions(-) rename fumadocs/{components/pages/landing => app/(home)}/community/Community.tsx (65%) rename fumadocs/{components/pages/landing => app/(home)}/community/Contributors.tsx (91%) rename fumadocs/{components/pages/landing => app/(home)}/community/JoinButton.tsx (90%) rename fumadocs/{components/pages/landing => app/(home)}/community/SponsorCard.tsx (84%) rename fumadocs/{components/pages/landing => app/(home)}/community/Sponsors.tsx (56%) rename fumadocs/{components/pages/landing => app/(home)}/faq/FAQ.tsx (95%) rename fumadocs/{components/pages/landing => app/(home)}/features/FeatureCard.tsx (73%) rename fumadocs/{components/pages/landing => app/(home)}/features/Features.tsx (79%) rename fumadocs/{components/pages/landing => app/(home)}/gradients.css (96%) rename fumadocs/{components/pages/landing => app/(home)}/hero/Demo.tsx (52%) rename fumadocs/{components/pages/landing => app/(home)}/hero/DemoEditor.tsx (100%) create mode 100644 fumadocs/app/(home)/hero/Hero.tsx rename fumadocs/{components/pages/landing => app/(home)}/hero/Text.tsx (83%) rename fumadocs/{components/pages/landing => app/(home)}/hero/styles.css (100%) rename fumadocs/{components/pages/landing => app/(home)}/letter/Letter.tsx (86%) rename fumadocs/{components/pages/landing => app/(home)}/styles.css (100%) create mode 100644 fumadocs/app/about/layout.tsx create mode 100644 fumadocs/app/about/page.tsx rename fumadocs/{components/pages => app}/pricing/faq.tsx (100%) rename fumadocs/{components/pages => app}/pricing/tiers.tsx (100%) rename fumadocs/components/{pages/landing/shared => }/FadeIn.tsx (100%) create mode 100644 fumadocs/components/Footer.tsx create mode 100644 fumadocs/components/GitHubButton.tsx rename fumadocs/components/{pages/landing/shared => }/Headings.tsx (96%) rename fumadocs/components/{pages/landing/shared => }/Section.tsx (88%) rename fumadocs/components/{pages/landing/shared => }/gradients.module.css (100%) delete mode 100644 fumadocs/components/pages/landing/hero/Hero.tsx delete mode 100644 fumadocs/components/pages/landing/index.tsx delete mode 100644 fumadocs/components/pages/landing/shared/CTAButton.tsx create mode 100644 fumadocs/content/pages/about.mdx diff --git a/fumadocs/components/pages/landing/community/Community.tsx b/fumadocs/app/(home)/community/Community.tsx similarity index 65% rename from fumadocs/components/pages/landing/community/Community.tsx rename to fumadocs/app/(home)/community/Community.tsx index e0da85e5fa..f17a69c923 100644 --- a/fumadocs/components/pages/landing/community/Community.tsx +++ b/fumadocs/app/(home)/community/Community.tsx @@ -1,8 +1,8 @@ import { FC } from "react"; -import { Contributors } from "@/components/pages/landing/community/Contributors"; -import { Section } from "@/components/pages/landing/shared/Section"; -import { Sponsors } from "@/components/pages/landing/community/Sponsors"; -import { SectionIntro } from "@/components/pages/landing/shared/Headings"; +import { Contributors } from "@/app/(home)/community/Contributors"; +import { Section } from "@/components/Section"; +import { Sponsors } from "@/app/(home)/community/Sponsors"; +import { SectionIntro } from "@/components/Headings"; export const Community: FC = () => (
diff --git a/fumadocs/components/pages/landing/community/Contributors.tsx b/fumadocs/app/(home)/community/Contributors.tsx similarity index 91% rename from fumadocs/components/pages/landing/community/Contributors.tsx rename to fumadocs/app/(home)/community/Contributors.tsx index a1015612e7..2d27f66563 100644 --- a/fumadocs/components/pages/landing/community/Contributors.tsx +++ b/fumadocs/app/(home)/community/Contributors.tsx @@ -1,9 +1,9 @@ import Image from "next/image"; import Link from "next/link"; -import { DiscordIcon, GitHubIcon } from "nextra/icons"; -import { SectionSubHeader } from "@/components/pages/landing/shared/Headings"; -import { JoinButton } from "@/components/pages/landing/community/JoinButton"; -import { FadeIn } from "@/components/pages/landing/shared/FadeIn"; +// import { DiscordIcon, GitHubIcon } from "nextra/icons"; +import { SectionSubHeader } from "@/components/Headings"; +import { JoinButton } from "@/app/(home)/community/JoinButton"; +import { FadeIn } from "@/components/FadeIn"; // TODO: Use GitHub API function fetchContributors(): { username: string; avatarUrl: string }[] { @@ -114,7 +114,7 @@ export const Contributors = () => ( subtext={ "Join the community of BlockNote developers by contributing code and supporting the project." } - icon={GitHubIcon} + icon={() =>
GitHub
} linkTitle={"See our repository"} linkUrl={"https://github.com/TypeCellOS/BlockNote"} /> @@ -123,7 +123,7 @@ export const Contributors = () => ( subtext={ "Ask questions, discuss features, and share your work with other BlockNote users on Discord." } - icon={DiscordIcon} + icon={() =>
Discord
} linkTitle={"Join our Server"} linkUrl={"https://discord.gg/Qc2QTTH5dF"} /> diff --git a/fumadocs/components/pages/landing/community/JoinButton.tsx b/fumadocs/app/(home)/community/JoinButton.tsx similarity index 90% rename from fumadocs/components/pages/landing/community/JoinButton.tsx rename to fumadocs/app/(home)/community/JoinButton.tsx index 619e36893e..b52b80f58c 100644 --- a/fumadocs/components/pages/landing/community/JoinButton.tsx +++ b/fumadocs/app/(home)/community/JoinButton.tsx @@ -13,7 +13,7 @@ export const JoinButton = (props: { return (
diff --git a/fumadocs/components/pages/landing/community/SponsorCard.tsx b/fumadocs/app/(home)/community/SponsorCard.tsx similarity index 84% rename from fumadocs/components/pages/landing/community/SponsorCard.tsx rename to fumadocs/app/(home)/community/SponsorCard.tsx index d4140861c1..e0740c1cdf 100644 --- a/fumadocs/components/pages/landing/community/SponsorCard.tsx +++ b/fumadocs/app/(home)/community/SponsorCard.tsx @@ -14,7 +14,7 @@ export function SponsorCard(props: SponsorCardProps) { return ( {props.thumbnail && ( -
+
Try it out ); } -function TryHereImage() { - return ( - <> - - - - ); -} +const DemoEditor = dynamic(() => import("@/app/(home)/hero/DemoEditor"), { + ssr: false, +}); -const DemoEditor = dynamic( - () => import("@/components/pages/landing/hero/DemoEditor"), - { - ssr: false, - }, -); +export function Demo() { + const { resolvedTheme } = useTheme(); -export function Demo(props: { theme?: "light" | "dark" }) { return (
- +
- +
); } diff --git a/fumadocs/components/pages/landing/hero/DemoEditor.tsx b/fumadocs/app/(home)/hero/DemoEditor.tsx similarity index 100% rename from fumadocs/components/pages/landing/hero/DemoEditor.tsx rename to fumadocs/app/(home)/hero/DemoEditor.tsx diff --git a/fumadocs/app/(home)/hero/Hero.tsx b/fumadocs/app/(home)/hero/Hero.tsx new file mode 100644 index 0000000000..69bf537563 --- /dev/null +++ b/fumadocs/app/(home)/hero/Hero.tsx @@ -0,0 +1,22 @@ +import { Section } from "@/components/Section"; +import { Text } from "@/app/(home)/hero/Text"; +import { Demo } from "@/app/(home)/hero/Demo"; +import { FadeIn } from "@/components/FadeIn"; + +import "./styles.css"; + +export function Hero() { + return ( +
+ + + + +
+ ); +} diff --git a/fumadocs/components/pages/landing/hero/Text.tsx b/fumadocs/app/(home)/hero/Text.tsx similarity index 83% rename from fumadocs/components/pages/landing/hero/Text.tsx rename to fumadocs/app/(home)/hero/Text.tsx index 1a36c220ea..6f6aa8fd06 100644 --- a/fumadocs/components/pages/landing/hero/Text.tsx +++ b/fumadocs/app/(home)/hero/Text.tsx @@ -1,8 +1,5 @@ -import { - HeroText, - SectionSubtext, -} from "@/components/pages/landing/shared/Headings"; -import CTAButton from "@/components/pages/landing/shared/CTAButton"; +import { HeroText, SectionSubtext } from "@/components/Headings"; +import CTAButton from "@/components/CTAButton"; export function Text() { return ( diff --git a/fumadocs/components/pages/landing/hero/styles.css b/fumadocs/app/(home)/hero/styles.css similarity index 100% rename from fumadocs/components/pages/landing/hero/styles.css rename to fumadocs/app/(home)/hero/styles.css diff --git a/fumadocs/components/pages/landing/letter/Letter.tsx b/fumadocs/app/(home)/letter/Letter.tsx similarity index 86% rename from fumadocs/components/pages/landing/letter/Letter.tsx rename to fumadocs/app/(home)/letter/Letter.tsx index b26a0dfaf6..22c59713cf 100644 --- a/fumadocs/components/pages/landing/letter/Letter.tsx +++ b/fumadocs/app/(home)/letter/Letter.tsx @@ -1,9 +1,9 @@ import cn from "classnames"; -import CTAButton from "@/components/pages/landing/shared/CTAButton"; -import { Section } from "@/components/pages/landing/shared/Section"; -import { FadeIn } from "@/components/pages/landing/shared/FadeIn"; -import { HeroText } from "@/components/pages/landing/shared/Headings"; -import gradients from "@/components/pages/landing/shared/gradients.module.css"; +import CTAButton from "@/components/CTAButton"; +import { Section } from "@/components/Section"; +import { FadeIn } from "@/components/FadeIn"; +import { HeroText } from "@/components/Headings"; +import gradients from "@/components/gradients.module.css"; export function Letter() { return ( diff --git a/fumadocs/app/(home)/page.tsx b/fumadocs/app/(home)/page.tsx index fd5381ae59..f06f1c5829 100644 --- a/fumadocs/app/(home)/page.tsx +++ b/fumadocs/app/(home)/page.tsx @@ -1,27 +1,32 @@ -import Link from "next/link"; +import { FadeIn } from "@/components/FadeIn"; +import { FAQ } from "./faq/FAQ"; +import { Community } from "./community/Community"; +import { Features } from "./features/Features"; +import { Hero } from "./hero/Hero"; +import { Letter } from "./letter/Letter"; -export default function HomePage() { +import "./gradients.css"; + +export default function Home() { return ( -
-

Hello World

-

- You can open{" "} - - /docs - {" "} - and see the documentation. -

-

- You can open{" "} - - /examples - {" "} - and see the examples. -

+
+ + +
+ + + +
+ + + +
+ + + +
+ +
); } diff --git a/fumadocs/components/pages/landing/styles.css b/fumadocs/app/(home)/styles.css similarity index 100% rename from fumadocs/components/pages/landing/styles.css rename to fumadocs/app/(home)/styles.css diff --git a/fumadocs/app/about/layout.tsx b/fumadocs/app/about/layout.tsx new file mode 100644 index 0000000000..e0f4458b9e --- /dev/null +++ b/fumadocs/app/about/layout.tsx @@ -0,0 +1,7 @@ +import { HomeLayout } from "fumadocs-ui/layouts/home"; +import type { ReactNode } from "react"; +import { baseOptions } from "@/app/layout.config"; + +export default function Layout({ children }: { children: ReactNode }) { + return {children}; +} diff --git a/fumadocs/app/about/page.tsx b/fumadocs/app/about/page.tsx new file mode 100644 index 0000000000..6ab86eac01 --- /dev/null +++ b/fumadocs/app/about/page.tsx @@ -0,0 +1,41 @@ +import { source } from "@/lib/source/pages"; +import { getMDXComponents } from "@/util/mdx-components"; +import { DocsBody, DocsDescription, DocsTitle } from "fumadocs-ui/page"; +import { notFound } from "next/navigation"; + +export default async function Page() { + const page = source.getPage(["about"]); + console.log(source.getPageTree()); + if (!page) { + notFound(); + } + const MDXContent = page.data.body; + + return ( +
+ {page.data.title} + + {page.data.description} + + + + +
+ ); +} + +export async function generateStaticParams() { + return source.generateParams(); +} + +export async function generateMetadata() { + const page = source.getPage(["thanks"]); + if (!page) { + notFound(); + } + + return { + title: page.data.title, + description: page.data.description, + }; +} diff --git a/fumadocs/components/pages/pricing/faq.tsx b/fumadocs/app/pricing/faq.tsx similarity index 100% rename from fumadocs/components/pages/pricing/faq.tsx rename to fumadocs/app/pricing/faq.tsx diff --git a/fumadocs/app/pricing/page.tsx b/fumadocs/app/pricing/page.tsx index dcb69b4599..9b96e0dc10 100644 --- a/fumadocs/app/pricing/page.tsx +++ b/fumadocs/app/pricing/page.tsx @@ -1,6 +1,6 @@ -import { SectionSubHeader } from "@/components/pages/landing/shared/Headings"; -import { FAQ } from "@/components/pages/pricing/faq"; -import { Tiers, Tier } from "@/components/pages/pricing/tiers"; +import { SectionSubHeader } from "@/components/Headings"; +import { FAQ } from "@/app/pricing/faq"; +import { Tiers, Tier } from "@/app/pricing/tiers"; const tiers: Tier[] = [ // { diff --git a/fumadocs/components/pages/pricing/tiers.tsx b/fumadocs/app/pricing/tiers.tsx similarity index 100% rename from fumadocs/components/pages/pricing/tiers.tsx rename to fumadocs/app/pricing/tiers.tsx diff --git a/fumadocs/components/CTAButton.tsx b/fumadocs/components/CTAButton.tsx index 24b0226864..56fc65291c 100644 --- a/fumadocs/components/CTAButton.tsx +++ b/fumadocs/components/CTAButton.tsx @@ -11,7 +11,7 @@ export default function CTAButton(props: { return (
diff --git a/fumadocs/components/pages/landing/shared/FadeIn.tsx b/fumadocs/components/FadeIn.tsx similarity index 100% rename from fumadocs/components/pages/landing/shared/FadeIn.tsx rename to fumadocs/components/FadeIn.tsx diff --git a/fumadocs/components/Footer.tsx b/fumadocs/components/Footer.tsx new file mode 100644 index 0000000000..d92d9a8706 --- /dev/null +++ b/fumadocs/components/Footer.tsx @@ -0,0 +1,163 @@ +import cn from "classnames"; +import Link from "next/link"; +import type { ReactElement, ReactNode } from "react"; +// import { Logo } from "./Logo"; +function FooterLink({ href, children }: { href: string; children: ReactNode }) { + const classes = + "text-sm text-[#666666] dark:text-[#888888] no-underline betterhover:hover:text-gray-700 betterhover:hover:dark:text-white transition"; + if (href.startsWith("http")) { + return ( + + {children} + + ); + } + return ( + + {children} + + ); +} + +function FooterHeader({ children }: { children: ReactNode }) { + return

{children}

; +} + +const navigation = { + general: [ + { name: "Documentation", href: "/docs" }, + { name: "Examples", href: "/examples" }, + { + name: "Releases", + href: "https://github.com/TypeCellOS/BlockNote/releases", + }, + ], + + community: [ + { + name: "GitHub", + href: "https://github.com/TypeCellOS/BlockNote", + }, + { + name: "Discord", + href: "https://discord.com/invite/Qc2QTTH5dF", + }, + ], + collaborate: () => [ + { name: "Partner with us", href: `/about#partner-with-us` }, + { + name: "Sponsorships", + href: `/about#sponsorships`, + }, + { + name: "Contribute", + href: `/about#contribute`, + }, + ], +}; + +export function FooterContent() { + return ( +
+ +
+
+
+ {/* Subscribe to our newsletter */} + {/* */} +

+ BlockNote is an extensible React rich text editor with support for + block-based editing, collaboration and comes with ready-to-use + customizable UI components. +

+ {/* */} +
+
+
+
+ Learn +
    + {navigation.general.map((item) => ( +
  • + {item.name} +
  • + ))} +
+
+
+ Collaborate +
    + {navigation.collaborate().map((item) => ( +
  • + {item.name} +
  • + ))} +
+
+
+ Community +
    + {navigation.community.map((item) => ( +
  • + {item.name} +
  • + ))} +
+
+
+ Legal +
    +
  • + + Terms & Conditions + +
  • +
  • + + Privacy Policy + +
  • +
+
+
+
+
+ +
+
+

+ © {new Date().getFullYear()} BlockNote maintainers. All + rights reserved. +

+
+
+
+
+ ); +} + +export function Footer({ menu }: { menu?: boolean }): ReactElement { + return ( +
+ {/*
*/} + {/*
+ +
+
*/} +
+ +
+
+ ); +} diff --git a/fumadocs/components/GitHubButton.tsx b/fumadocs/components/GitHubButton.tsx new file mode 100644 index 0000000000..6e3a611ad3 --- /dev/null +++ b/fumadocs/components/GitHubButton.tsx @@ -0,0 +1,18 @@ +"use client"; + +import GHB from "react-github-btn"; + +export default function GitHubButton() { + return ( + + Star + + ); +} diff --git a/fumadocs/components/pages/landing/shared/Headings.tsx b/fumadocs/components/Headings.tsx similarity index 96% rename from fumadocs/components/pages/landing/shared/Headings.tsx rename to fumadocs/components/Headings.tsx index 790317bd15..57c533d088 100644 --- a/fumadocs/components/pages/landing/shared/Headings.tsx +++ b/fumadocs/components/Headings.tsx @@ -1,6 +1,6 @@ import cn from "classnames"; import gradients from "./gradients.module.css"; -import { FadeIn } from "@/components/pages/landing/shared/FadeIn"; +import { FadeIn } from "@/components/FadeIn"; import { ReactNode } from "react"; export function HeroText({ diff --git a/fumadocs/components/pages/landing/shared/Section.tsx b/fumadocs/components/Section.tsx similarity index 88% rename from fumadocs/components/pages/landing/shared/Section.tsx rename to fumadocs/components/Section.tsx index 68c1079042..3701e19b48 100644 --- a/fumadocs/components/pages/landing/shared/Section.tsx +++ b/fumadocs/components/Section.tsx @@ -1,4 +1,4 @@ -import { FadeIn } from "@/components/pages/landing/shared/FadeIn"; +import { FadeIn } from "@/components/FadeIn"; import { ReactNode } from "react"; export function Section(props: { diff --git a/fumadocs/components/pages/landing/shared/gradients.module.css b/fumadocs/components/gradients.module.css similarity index 100% rename from fumadocs/components/pages/landing/shared/gradients.module.css rename to fumadocs/components/gradients.module.css diff --git a/fumadocs/components/pages/landing/hero/Hero.tsx b/fumadocs/components/pages/landing/hero/Hero.tsx deleted file mode 100644 index db7c930915..0000000000 --- a/fumadocs/components/pages/landing/hero/Hero.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { useTheme } from "nextra-theme-docs"; -import { Section } from "@/components/pages/landing/shared/Section"; -import { Text } from "@/components/pages/landing/hero/Text"; -import { Demo } from "@/components/pages/landing/hero/Demo"; -import { FadeIn } from "@/components/pages/landing/shared/FadeIn"; - -import "./styles.css"; - -export function Hero() { - const { theme } = useTheme(); - - return ( -
- - - - -
- ); -} diff --git a/fumadocs/components/pages/landing/index.tsx b/fumadocs/components/pages/landing/index.tsx deleted file mode 100644 index d8f3b4a07d..0000000000 --- a/fumadocs/components/pages/landing/index.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Community } from "@/components/pages/landing/community/Community"; -import { FadeIn } from "@/components/pages/landing/shared/FadeIn"; -import { Hero } from "@/components/pages/landing/hero/Hero"; -import { Features } from "@/components/pages/landing/features/Features"; -import { Letter } from "@/components/pages/landing/letter/Letter"; -import { FAQ } from "@/components/pages/landing/faq/FAQ"; -import "@/components/pages/landing/gradients.css"; -import "@/components/pages/landing/styles.css"; - -export function BlockNoteHome() { - return ( - <> -
- - -
- - - -
- - - -
- - - -
- - -
- - ); -} diff --git a/fumadocs/components/pages/landing/shared/CTAButton.tsx b/fumadocs/components/pages/landing/shared/CTAButton.tsx deleted file mode 100644 index 54b31e195b..0000000000 --- a/fumadocs/components/pages/landing/shared/CTAButton.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import Link from "next/link"; -import { ReactNode } from "react"; - -export default function CTAButton(props: { - href: string; - hoverGlow?: boolean; - color?: "default" | "pro"; - size?: "small" | "large"; - children: ReactNode; -}) { - return ( -
- - {props.children} - - {props.hoverGlow && ( -
- )} -
- ); -} diff --git a/fumadocs/content/meta.json b/fumadocs/content/meta.json index a99ac6c64e..e26440dba8 100644 --- a/fumadocs/content/meta.json +++ b/fumadocs/content/meta.json @@ -1,3 +1,3 @@ { - "pages": ["docs", "examples", "pages"] + "pages": ["docs", "examples", "pages", "about"] } diff --git a/fumadocs/content/pages/about.mdx b/fumadocs/content/pages/about.mdx new file mode 100644 index 0000000000..96a0921242 --- /dev/null +++ b/fumadocs/content/pages/about.mdx @@ -0,0 +1,49 @@ +--- +title: About BlockNote +description: BlockNote is an open source project led by Matthew Lipski, Nick Perez, and Yousef El-Dardiry. It's made possible by our partners, sponsors, and community members. +imageTitle: About BlockNote +--- + +import GitHubButton from "@/components/GitHubButton"; +import CTAButton from "@/components/CTAButton"; + +## Partner with us + +We love working with companies to help them integrate BlockNote into their product and build custom solutions. +If you're interested in working with us, shoot an email to team@blocknotejs.org. + +
+ +

Get in touch

+
+
+ +## Subscriptions & Pro Features + +Several individuals and organizations are sponsoring our work. If you're using BlockNote, the easiest way to support the project is by subscribing to BlockNote Pro. Subscribing also gets you **priority support** from the core team. + +Subscribing to BlockNote Pro lets you access code for pro examples and get additional support from the BlockNote team. Find out more about BlockNote Pro subscriptions on the [pricing page](/pricing). + +One of our sponsors is the renowned NLNet foundation who are on a mission to support an open internet, and protect the privacy and security of internet users. [Check them out](https://www.nlnet.nl). + +BlockNote is built on top of [ProseMirror](https://prosemirror.net/) - another great project worth supporting. + +## Contribute + +Another great way to contribute is by becoming a Community member on Discord, help answering community questions and contribute to the codebase and documentation on GitHub. +The community also greatly benefits from [examples](/examples), so don't hesitate to share useful code snippets! + +Also, check out the full list of contributors [on GitHub](https://github.com/TypeCellOS/BlockNote/graphs/contributors). + +

+ + Star + +

diff --git a/fumadocs/package.json b/fumadocs/package.json index b7f9b24100..0c908fba17 100644 --- a/fumadocs/package.json +++ b/fumadocs/package.json @@ -83,6 +83,7 @@ "pg": "8.15.5", "react": "^19.1.0", "react-dom": "^19.1.0", + "react-github-btn": "^1.4.0", "react-icons": "^5.5.0", "remark": "15.0.1", "remark-gfm": "^4.0.1", diff --git a/fumadocs/source.config.ts b/fumadocs/source.config.ts index 347a43940f..431042d3b1 100644 --- a/fumadocs/source.config.ts +++ b/fumadocs/source.config.ts @@ -13,6 +13,10 @@ export const pages = defineDocs({ dir: "content/pages", }); +export const about = defineDocs({ + dir: "content/about", +}); + export default defineConfig({ mdxOptions: { // MDX options diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fc4d3f53e8..9a1042ae5e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3332,6 +3332,9 @@ importers: react-dom: specifier: ^19.1.0 version: 19.1.0(react@19.1.0) + react-github-btn: + specifier: ^1.4.0 + version: 1.4.0(react@19.1.0) react-icons: specifier: ^5.5.0 version: 5.5.0(react@19.1.0) @@ -30943,6 +30946,11 @@ snapshots: github-buttons: 2.29.1 react: 18.3.1 + react-github-btn@1.4.0(react@19.1.0): + dependencies: + github-buttons: 2.29.1 + react: 19.1.0 + react-hook-form@7.54.2(react@18.3.1): dependencies: react: 18.3.1 From 3f62ac90e3e26a723b5358d25618b3f5c7e8b818 Mon Sep 17 00:00:00 2001 From: Matthew Lipski <50169049+matthewlipski@users.noreply.github.com> Date: Mon, 23 Jun 2025 20:01:52 +0200 Subject: [PATCH 02/16] docs: Examples, footer, and remaining pages (#1784) * Added examples card grid and fixed demo styling * Added footer + remaining pages, cleaned up files --- fumadocs/.gitignore | 2 +- fumadocs/app/(home)/layout.tsx | 14 +- fumadocs/app/docs/layout.tsx | 2 + fumadocs/app/examples/layout.tsx | 2 + fumadocs/app/layout.config.tsx | 19 ++- .../app/{about => pages/[[...slug]]}/page.tsx | 15 +- fumadocs/app/{about => pages}/layout.tsx | 8 +- fumadocs/app/pricing/layout.tsx | 8 +- fumadocs/app/thanks/layout.tsx | 7 - fumadocs/app/thanks/page.tsx | 40 ------ fumadocs/auth.ts | 2 +- fumadocs/components/CTAButton.tsx | 2 +- fumadocs/components/Footer.tsx | 30 ++-- fumadocs/components/Logo.tsx | 10 ++ fumadocs/components/ThemedExample.tsx | 24 ++++ fumadocs/components/ThemedImage.tsx | 19 --- fumadocs/components/example.tsx | 73 +++++----- .../content/examples/DynamicExampleCards.tsx | 5 + fumadocs/content/examples/ExampleCards.tsx | 98 +++++++++++++ fumadocs/content/examples/ai/meta.json | 4 + fumadocs/content/examples/backend/meta.json | 9 ++ fumadocs/content/examples/basic/meta.json | 18 +++ .../content/examples/collaboration/meta.json | 10 ++ .../content/examples/custom-schema/meta.json | 10 ++ .../content/examples/extensions/meta.json | 1 + fumadocs/content/examples/index.mdx | 4 +- .../examples/interoperability/meta.json | 12 ++ fumadocs/content/examples/meta.json | 6 +- fumadocs/content/examples/theming/meta.json | 12 ++ .../content/examples/ui-components/meta.json | 20 +++ fumadocs/content/meta.json | 3 - fumadocs/content/pages/privacy-policy.mdx | 133 ++++++++++++++++++ .../content/pages/terms-and-conditions.mdx | 123 ++++++++++++++++ fumadocs/source.config.ts | 33 ++++- fumadocs/util/mdx-components.tsx | 2 - 35 files changed, 637 insertions(+), 143 deletions(-) rename fumadocs/app/{about => pages/[[...slug]]}/page.tsx (70%) rename fumadocs/app/{about => pages}/layout.tsx (59%) delete mode 100644 fumadocs/app/thanks/layout.tsx delete mode 100644 fumadocs/app/thanks/page.tsx create mode 100644 fumadocs/components/Logo.tsx create mode 100644 fumadocs/components/ThemedExample.tsx delete mode 100644 fumadocs/components/ThemedImage.tsx create mode 100644 fumadocs/content/examples/DynamicExampleCards.tsx create mode 100644 fumadocs/content/examples/ExampleCards.tsx create mode 100644 fumadocs/content/examples/ai/meta.json create mode 100644 fumadocs/content/examples/backend/meta.json create mode 100644 fumadocs/content/examples/basic/meta.json create mode 100644 fumadocs/content/examples/collaboration/meta.json create mode 100644 fumadocs/content/examples/custom-schema/meta.json create mode 100644 fumadocs/content/examples/extensions/meta.json create mode 100644 fumadocs/content/examples/interoperability/meta.json create mode 100644 fumadocs/content/examples/theming/meta.json create mode 100644 fumadocs/content/examples/ui-components/meta.json delete mode 100644 fumadocs/content/meta.json create mode 100644 fumadocs/content/pages/privacy-policy.mdx create mode 100644 fumadocs/content/pages/terms-and-conditions.mdx diff --git a/fumadocs/.gitignore b/fumadocs/.gitignore index f81e4c0d20..44ff55dbb2 100644 --- a/fumadocs/.gitignore +++ b/fumadocs/.gitignore @@ -40,6 +40,6 @@ next-env.d.ts # Sentry Config File .env.sentry-build-plugin -/content/examples/*/ +/content/examples/**/*.mdx /components/example/generated/ /.source/ \ No newline at end of file diff --git a/fumadocs/app/(home)/layout.tsx b/fumadocs/app/(home)/layout.tsx index 1dd4684d0c..be3b25ef89 100644 --- a/fumadocs/app/(home)/layout.tsx +++ b/fumadocs/app/(home)/layout.tsx @@ -1,7 +1,13 @@ -import type { ReactNode } from 'react'; -import { HomeLayout } from 'fumadocs-ui/layouts/home'; -import { baseOptions } from '@/app/layout.config'; +import type { ReactNode } from "react"; +import { HomeLayout } from "fumadocs-ui/layouts/home"; +import { baseOptions } from "@/app/layout.config"; +import { Footer } from "@/components/Footer"; export default function Layout({ children }: { children: ReactNode }) { - return {children}; + return ( + + {children} +