分享我们基于 Next.js 的开源 SaaS 开发模板🚀

236 天前
 tianzx

🎉 Saasfly - 让构建现代化 SaaS 应用变得简单、高效、愉悦!

📢 项目简介

Saasfly 是一款完全免费、开源的企业级 Next.js 模板,专为创业团队和个人开发者量身打造。它集成了诸多开箱即用的特性,如国际化支持、SEO 优化、Monorepo 管理等,助您快速搭建现代化的 SaaS 应用。Saasfly 采用了业界领先的技术栈,在保证开发效率的同时,兼顾了代码质量和性能优化。

🌟 项目特色

🙌 社区互动

Saasfly 的成长离不开社区的支持。我们诚邀您参与到 Saasfly 的建设中来,无论是点赞 ⭐️、提 Issue 🐛,还是贡献代码 🎁,都是对我们莫大的鼓励。让我们携手打造更加优秀的 Saasfly!

👀 项目预览

想要近距离感受 Saasfly 的魅力?快来我们的 demo 站点体验一下吧!

🔗 相关链接

🚀 立即开始

使用 Saasfly 开启您的 SaaS 创业之旅,让 SaaS 开发变得前所未有的简单!给 Saasfly 一个 ⭐️,鼓励我们做得更好!

6517 次点击
所在节点    分享创造
46 条回复
hooych
236 天前
太棒啦
tianzx
236 天前
@hooych 十分感谢您的关注🙏
tomdddd
236 天前
@tianzx 目前基于 mdx 和 mdx-remote 魔改了下,但是确实没有 contentlayer 方便
isno
234 天前
这是干啥的啊? 没看懂。打开 demo ,里面咋是一个 k8s 集群呢?
tianzx
234 天前
@isno 主要是给初创公司和个人开发者提供一个基于 Next.js 快速开发模板,demo 是我们用来展示的这套技术默认启动后的样子,k8s 集群是我们展示一个默认的增删改查的实现,感谢关注🙏
tianzx
234 天前
@isno 很早就关注了您的 theByteBook ,在做 k8s 全套解决方案的时候学习到了不少东西,再次感谢🙏
8520ccc
234 天前
跑不起来
tianzx
234 天前
@8520ccc 具体的报错有吗,项目强制依赖数据库,可以看下是这个原因吗,感谢关注🙏
8520ccc
234 天前
@tianzx 数据库设置了的,执行了后还可以看到数据库表的结构都建立好了,等会发报错吧
convolution
234 天前
登录有支持谷歌么?
tianzx
234 天前
@convolution 支持的,GitHubProvider({
clientId: env.GITHUB_CLIENT_ID,
clientSecret: env.GITHUB_CLIENT_SECRET,
}), 把这个换成对应 Google 的,或者加进去同时提供就可以了,感谢关注🙏
8520ccc
234 天前
root@code-server /saas# bun run build
$ turbo build
• Packages in scope: @saasfly/api, @saasfly/auth, @saasfly/common, @saasfly/db, @saasfly/eslint-config, @saasfly/nextjs, @saasfly/prettier-config, @saasfly/stripe, @saasfly/tailwind-config, @saasfly/typescript-config, @saasfly/ui
• Running build in 11 packages
• Remote caching disabled
@saasfly/nextjs:build: cache miss, executing 12d13155ec2e6d30
@saasfly/nextjs:build: $ contentlayer build && bun with-env next build
@saasfly/nextjs:build: Generated 9 documents in .contentlayer
@saasfly/nextjs:build: TypeError: The "code" argument must be of type number. Received an instance of Object
@saasfly/nextjs:build: at process.set [as exitCode] (node:internal/bootstrap/node:123:9)
@saasfly/nextjs:build: at Cli.runExit (/node_modules/clipanion/lib/advanced/Cli.js:232:26)
@saasfly/nextjs:build: at run (file:///node_modules/@contentlayer/cli/src/index.ts:39:3)
@saasfly/nextjs:build: at main (/node_modules/contentlayer/bin/cli.cjs:5:3) {
@saasfly/nextjs:build: code: 'ERR_INVALID_ARG_TYPE'
@saasfly/nextjs:build: }
@saasfly/nextjs:build: $ dotenv -e ../../.env.local -- next build
@saasfly/nextjs:build: ▲ Next.js 14.0.3
@saasfly/nextjs:build:
@saasfly/nextjs:build: ✓ Creating an optimized production build
@saasfly/nextjs:build: ✓ Compiled successfully
@saasfly/nextjs:build: Skipping validation of types
@saasfly/nextjs:build: Skipping linting
Collecting page data ..sa [VercelPostgresError]: VercelPostgresError - 'invalid_connection_string': This connection string is meant to be used with a direct connection. Make sure to use a pooled connection string or try `createClient()` instead.
@saasfly/nextjs:build: at su (/apps/nextjs/.next/server/chunks/406.js:18:5468)
@saasfly/nextjs:build: at sg (/apps/nextjs/.next/server/chunks/406.js:18:7411)
@saasfly/nextjs:build: at 15491 (/apps/nextjs/.next/server/app/api/webhooks/stripe/route.js:1:13596)
@saasfly/nextjs:build: at t (/apps/nextjs/.next/server/webpack-runtime.js:1:128)
@saasfly/nextjs:build: at 36577 (/apps/nextjs/.next/server/app/api/webhooks/stripe/route.js:1:14487)
@saasfly/nextjs:build: at t (/apps/nextjs/.next/server/webpack-runtime.js:1:128)
@saasfly/nextjs:build: at 75138 (/apps/nextjs/.next/server/app/api/webhooks/stripe/route.js:1:1028)
@saasfly/nextjs:build: at t (/apps/nextjs/.next/server/webpack-runtime.js:1:128)
@saasfly/nextjs:build: at r (/apps/nextjs/.next/server/app/api/webhooks/stripe/route.js:1:17593)
@saasfly/nextjs:build: at /apps/nextjs/.next/server/app/api/webhooks/stripe/route.js:1:17628 {
@saasfly/nextjs:build: code: 'invalid_connection_string'
@saasfly/nextjs:build: }

> Build error occurred
Error: Failed to collect page data for /api/webhooks/stripe
@saasfly/nextjs:build: at /node_modules/next/dist/build/utils.js:1217:15
@saasfly/nextjs:build: at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
@saasfly/nextjs:build: type: 'Error'
@saasfly/nextjs:build: }
@saasfly/nextjs:build: Collecting page data .error: script "with-env" exited with code 1
@saasfly/nextjs:build: error: script "build" exited with code 1
@saasfly/nextjs:build: ERROR: command finished with error: command (/apps/nextjs) /root/.bun/bin/bun run build exited (1)
@saasfly/nextjs#build: command (/apps/nextjs) /root/.bun/bin/bun run build exited (1)

Tasks: 0 successful, 1 total
Cached: 0 cached, 1 total
Time: 5.326s
Failed: @saasfly/nextjs#build

ERROR run failed: command exited (1)
error: script "build" exited with code 1
tianzx
234 天前
@8520ccc #32 你的.env.local 中的 POSTGRES_URL= 有配置正确吗 ? vercel 创建的 postgres://default:****@*******.us-east-1.aws.neon.tech:5432/verceldb?sslmode=require 大概是像这个样子
D2h0VL89HMAU417B
234 天前
提个建议
D2h0VL89HMAU417B
234 天前
不应该叫 Country
tianzx
234 天前
@zephyr1 #35 感谢指出,我现在改一下🙏
D2h0VL89HMAU417B
234 天前
@tianzx #36 还有个疑问,点击创建新的集群按钮后,即使我没有点击最后的 submit 按钮,控制台也会出现新的 Cluster ,不知道这里的逻辑是否正确。
tianzx
234 天前
@zephyr1 #37 为了方便起见,会在 create 的时候预先创建一部分默认的数据,当用户打开的时候就只需要修改自己需要的部分了,只是为了展示一种不同的实现,您可以根据自己的需求直接修改🙏
limuen
233 天前
fork 了,空了👀
wbrobot
233 天前
admin panel 有吗?想看看用户管理和设置这些

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1027248

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX