|
7 | 7 |
|
8 | 8 | <p align="center">
|
9 | 9 | The <em>all-in-one</em> starter kit <br/>
|
10 |
| - for building platforms on Vercel. |
| 10 | + for building multi-tenant applications. |
11 | 11 | </p>
|
12 | 12 |
|
13 | 13 | <p align="center">
|
|
21 | 21 |
|
22 | 22 | ## Deploy Your Own
|
23 | 23 |
|
24 |
| -[Read the guide](https://vercel.com/guides/nextjs-multi-tenant-application) to learn how to deploy your own version of this template. |
| 24 | +Deploy your own version of this starter kit with Vercel. |
| 25 | + |
| 26 | +[](https://vercel.com/new/clone?demo-title=Platforms+Starter+Kit&demo-description=A+template+for+site+builders+and+low-code+tools.&demo-url=https%3A%2F%2Fdemo.vercel.pub%2F&demo-image=%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F40JwjdHlPr0Z575MPYbxUA%2Fd5903afc68cb34569a3886293414c37c%2FOG_Image.png&project-name=Platforms+Starter+Kit&repository-name=platforms-starter-kit&repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fplatforms&from=templates&env=NEXT_PUBLIC_ROOT_DOMAIN%2CNEXTAUTH_SECRET%2CAUTH_GITHUB_ID%2CAUTH_GITHUB_SECRET%2CAUTH_BEARER_TOKEN%2CPROJECT_ID_VERCEL%2CTEAM_ID_VERCEL%2COPENAI_API_KEY&envDescription=These+environment+variables+are+required+to+run+this+application.&envLink=https%3A%2F%2Fgithub.com%2Fvercel%2Fplatforms%2Fblob%2Fmain%2F.env.example&stores=[{"type":"postgres"},{"type":"blob"}]) |
| 27 | + |
| 28 | +You can also [read the guide](https://vercel.com/guides/nextjs-multi-tenant-application) to learn how to develop your own version of this template. |
25 | 29 |
|
26 | 30 | ## Introduction
|
27 | 31 |
|
@@ -51,8 +55,10 @@ Forget manually setting up CNAME records, wrestling with DNS, or making custom s
|
51 | 55 |
|
52 | 56 | - **Custom domains**: Subdomain and custom domains support with [Edge Functions](https://vercel.com/features/edge-functions) and the [Vercel Domains API](https://domains-api.vercel.app/).
|
53 | 57 | - **Static generation with ISR**: Performance without sacrificing personalization, by combining [Incremental Static Regeneration](https://vercel.com/docs/concepts/next.js/incremental-static-regeneration) (ISR) and [Middleware](https://vercel.com/docs/concepts/functions/edge-functions#middleware). ISR allows you to create new content (with custom domains) on demand without needing to redeploy your application.
|
| 58 | +- **AI-powered content creation**: AI powered WYSIWYG editor for a Notion-style writing experience with [Novel](https://novel.sh/) and OpenAI |
| 59 | +- **Personalized content**: With the App Router and Layouts, you can allow customers to set custom fonts, 404 pages, and favicon for their sites. |
54 | 60 | - **Uploading custom images**: Allow your customers to upload custom thumbnail images with [Vercel Blob](https://vercel.com/docs/storage/vercel-blob).
|
55 |
| -- **Static tweets**: Avoid [Cumulative Layout Shift](https://vercel.com/blog/core-web-vitals) (CLS) from the native Twitter embed by using our [static tweets implementation](https://static-tweets-tailwind.vercel.app/) (supports image, video, gif, poll, retweets, quote retweets, and more). |
| 61 | +- **Static tweets**: Avoid [Cumulative Layout Shift](https://vercel.com/blog/core-web-vitals) (CLS) from the native Twitter embed by using our [static tweets implementation](https://github.com/vercel-labs/react-tweet) (supports image, video, gif, poll, retweets, quote retweets, and more). |
56 | 62 |
|
57 | 63 | ## Examples of platforms
|
58 | 64 |
|
@@ -95,26 +101,12 @@ This working demo site was built using the Platforms Starter Kit and:
|
95 | 101 | - [Next.js](https://nextjs.org/) as the React framework
|
96 | 102 | - [Tailwind](https://tailwindcss.com/) for CSS styling
|
97 | 103 | - [Prisma](https://prisma.io/) as the ORM for database access
|
98 |
| -- [PlanetScale](https://planetscale.com/) as the database (MySQL) |
| 104 | +- [Novel](https://novel.sh/) for the WYSIWYG editor |
| 105 | +- [Vercel Postgres](https://vercel.com/storage/postgres) for the database |
| 106 | +- [Vercel Blob](https://vercel.com/storage-blob) for image uploads |
99 | 107 | - [NextAuth.js](https://next-auth.js.org/) for authentication
|
100 | 108 | - [Vercel](http://vercel.com/) for deployment
|
101 | 109 |
|
102 |
| -We also have another [example](https://github.com/vercel/examples/tree/main/solutions/platforms-slate-supabase) of the Platforms Starter Kit that uses Supabase for the database and Slate.js for the text editor. |
103 |
| - |
104 |
| -## Frequently Asked Questions |
105 |
| - |
106 |
| -- **Should we be generating static webpages with `getStaticProps` and `getStaticPaths` at build time? It doesn't seem to be very scalable.** |
107 |
| - |
108 |
| - For scale, we recommend using [Incremental Static Regeneration](https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration) instead. This basically means that instead of generating all pages at build time, you only specify a subset of pages and then generate the rest on the fly. Then when someone requests that page, all subsequent requests will be cached on the Vercel edge. You can also use [on-demand ISR](https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration#on-demand-revalidation) to programmatically invalidate caches per page every time someone makes a change to it, which is what we do [here](https://github.com/vercel/platforms/blob/1b2bd00055bbbdde8f2dcc89e0bdb2c3f8488f97/lib/api/post.ts#L243-L257). |
109 |
| - |
110 |
| -- **Is it wise to be using the `/_sites/[site]` path to serve all static pages/website? Wouldn't that lead to a significant amount of load on a single Next.js server?** |
111 |
| - |
112 |
| - The beauty about a serverless setup is you won’t have to worry about load since each request invokes a separate serverless function, and once it’s cached, you don’t invoke the server anymore (the page is served directly from the Vercel edge). Read more about the [Vercel Edge Network](https://vercel.com/docs/concepts/edge-network/overview) and [how caching works](https://vercel.com/docs/concepts/edge-network/caching). |
113 |
| - |
114 |
| -## Caveats |
115 |
| - |
116 |
| -- This template does not work with i18n, which is an [advanced feature in Next.js](https://nextjs.org/docs/advanced-features/i18n-routing). |
117 |
| - |
118 | 110 | ## Contributing
|
119 | 111 |
|
120 | 112 | - [Start a discussion](https://github.com/vercel/platforms/discussions) with a question, piece of feedback, or idea you want to share with the team.
|
|
0 commit comments