base on Your Next SaaS Template or Boilerplate ! A magic trip start with `bun create saasfly` . The more stars, the more surprises
<div align="center" width="100%">
<img src="./saasfly-logo.svg" width="128" alt="" />
</div>
# Saasfly </br>
<a href="https://trendshift.io/repositories/8929" target="_blank"><img src="https://trendshift.io/api/badge/repositories/8929" alt="saasfly%2Fsaasfly | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
[![GitHub Actions Workflow Status][check-workflow-badge]][check-workflow-badge-link] [![GitHub License][github-license-badge]][github-license-badge-link] [![Discord][discord-badge]][discord-badge-link] [![Saasfly][made-by-nextify-badge]][made-by-nextify-badge-link]
[![Chinese](https://img.shields.io/badge/-Chinese-red.svg)](README_zh.md)
[![German](https://img.shields.io/badge/-German-yellow.svg)](README_de.md)
[![Vietnamese](https://img.shields.io/badge/-Vietnamese-yellow.svg)](README_vi.md) </br>
![COMMIT_ACTIVITY](https://img.shields.io/github/commit-activity/m/saasfly/saasfly?style=for-the-badge">)
[![Visitors](https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Fgithub.com%2Fsaasfly%2Fsaasfly&labelColor=%23f47373&countColor=%23263759)](https://visitorbadge.io/status?path=https%3A%2F%2Fgithub.com%2Fsaasfly%2Fsaasfly)
An easy-to-use and enterprise-grade Next.js boilerplate.
You don't need to buy templates anymore; Saasfly provides a complete, open-source solution for building SaaS applications quickly and easily.
> **[Nextify](https://nextify.ltd)** provides a complete Enterprise SaaS solution. Contact us at [
[email protected]](mailto:
[email protected]) if you're interested in discussing your project, or if you'd simply like to have a conversation with us, please feel free to reach out.
> โค๏ธ We provide **free technical support and deployment services to non-profit organizations**.
>
> ๐ All profits obtained from our open source projects will be **entirely dedicated to supporting open source initiatives and charitable causes**.
## โก Live Demo
Try it out for yourself!
Demo Server (Location: Washington - USA): <https://show.saasfly.io>
See more documentation at <https://document.saasfly.io>
## ๐ Star History
[![Star History Chart](https://api.star-history.com/svg?repos=saasfly/saasfly&type=Timeline)](https://star-history.com/#saasfly/saasfly&Timeline)
## Sponsors
<table>
<tr >
<td>
<a href="https://www.twillot.com/">
<picture>
<img alt="Take Control of All Your Twitter Assets" src="/twillot.png">
</picture>
</a>
</td>
<tr >
<td >
<a href="mailto:
[email protected]">
Add your logo here
</a>
</td>
</tr>
</table>
## ๐ Getting Started
### ๐ฑ One Click Template
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fsaasfly%2Fsaasfly&env=NEXT_PUBLIC_APP_URL,NEXTAUTH_URL,NEXTAUTH_SECRET,STRIPE_API_KEY,STRIPE_WEBHOOK_SECRET,POSTGRES_URL,GITHUB_CLIENT_ID,GITHUB_CLIENT_SECRET,RESEND_API_KEY,RESEND_FROM&install-command=bun%20install&build-command=bun%20run%20build&root-directory=apps%2Fnextjs)
### ๐ Prerequisites
Before you start, make sure you have the following installed:
1. [Bun](https://bun.sh/) & [Node.js](https://nodejs.org/) & [Git](https://git-scm.com/)
1. Linux
```bash
curl -sL https://gist.github.com/tianzx/874662fb204d32390bc2f2e9e4d2df0a/raw -o ~/downloaded_script.sh && chmod +x ~/downloaded_script.sh && source ~/downloaded_script.sh
```
2. MacOS
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install git
brew install oven-sh/bun/bun
brew install nvm
```
2. [PostgreSQL](https://www.postgresql.org/)
1. You can use Vercel Postgres or a local PostgreSQL server(add POSTGRES_URL env in .env.local)
```bash
POSTGRES_URL = ''
```
### Installation
To get started with this boilerplate, we offer two options:
1. Use the `bun create` command(๐Strongly recommend๐):
```bash
bun create saasfly
```
2. Manually clone the repository:
```bash
git clone https://github.com/saasfly/saasfly.git
cd saasfly
bun install
```
### Setup
Follow these steps to set up your project:
1. Set up the environment variables:
```bash
cp .env.example .env.local
// (you must have a database prepared before running this command)
bun db:push
```
2. Run the development server:
```bash
bun run dev:web
```
3. Open [http://localhost:3000](http://localhost:3000) in your browser to see the result.
4. (Optional alpha)`bun run tailwind-config-viewer` Open [http://localhost:3333](http://localhost:3333) in your browser to see your Tailwind CSS configuration
## ๐ฅบ Project Roadmap
1. Admin Dashboard Page (in alpha !!!)
2. only provide static page now and we plan to integrate with headless arch
3. You can provide your admin account and change **ADMIN_EMAIL="
[email protected],
[email protected]"** in .env.local and access host:port/admin/dashboard
4. Based on security concerns, we will not provide online demos for the time being.
2. Consider integrating Payload CMS.
## โญ Features
### ๐ญ Frameworks
- **[Next.js](https://nextjs.org/)** - The React Framework for the Web (with **App Directory**)
- **[NextAuth.js](https://next-auth.js.org/)** - Authentication for Next.js
- **[Kysely](https://kysely.dev/)** - The type-safe SQL query builder for TypeScript
- **[Prisma](https://www.prisma.io/)** - Next-generation ORM for Node.js and TypeScript, used as a schema management tool
- **[React-email](https://react.email/)** - A React renderer for creating beautiful emails using React components
### ๐ฎ Platforms
- **[Vercel](https://vercel.com/)** โ Deploy your Next.js app with ease
- **[Stripe](https://stripe.com/)** โ Payment processing for internet businesses
- **[Resend](https://resend.com/)** โ Email marketing platform for developers
### ๐ฏ Enterprise Features
- **[i18n](https://nextjs.org/docs/app/building-your-application/routing/internationalization)** - Support for internationalization
- **[SEO](https://nextjs.org/docs/app/building-your-application/optimizing/metadata)** - Search engine optimization
- **[MonoRepo](https://turbo.build/)** - Monorepo for better code management
- **[T3 Env](https://env.t3.gg/)** - Manage your environment variables with ease
### ๐ฐ Data Fetching
- **[trpc](https://trpc.io/)** โ End-to-end typesafe APIs made easy
- **[tanstack/react-query](https://react-query.tanstack.com/)** โ Hooks for fetching, caching and updating asynchronous data in React
### ๐ฒ Global State Management
- **[Zustand](https://zustand.surge.sh/)** โ Small, fast and scalable state management for React
### ๐ UI
- **[Tailwind CSS](https://tailwindcss.com/)** โ Utility-first CSS framework for rapid UI development
- **[Shadcn/ui](https://ui.shadcn.com/)** โ Re-usable components built using Radix UI and Tailwind CSS
- **[Framer Motion](https://framer.com/motion)** โ Motion library for React to animate components with ease
- **[Lucide](https://lucide.dev/)** โ Beautifully simple, pixel-perfect icons
- **[next/font](https://nextjs.org/docs/basic-features/font-optimization)** โ Optimize custom fonts and remove external network requests for improved performance
### ๐ด Code Quality
- **[TypeScript](https://www.typescriptlang.org/)** โ Static type checker for end-to-end type safety
- **[Prettier](https://prettier.io/)** โ Opinionated code formatter for consistent code style
- **[ESLint](https://eslint.org/)** โ Pluggable linter for Next.js and TypeScript
- **[Husky](https://typicode.github.io/husky)** โ Git hooks made easy
### ๐ Performance
- **[Vercel Analytics](https://vercel.com/analytics)** โ Real-time performance metrics for your Next.js app
- **[bun.sh](https://bun.sh/)** โ npm alternative for faster and more reliable package management
### ๐ Database
- **[PostgreSQL](https://www.postgresql.org/)** โ The world's most advanced open source database
## ๐ฆ Apps and Packages
- `web`: The main Next.js application
- `ui`: Shared UI components
- `db`: Database schema and utilities
- `auth`: Authentication utilities
- `email`: Email templates and utilities
## ๐ License
This project is licensed under the MIT License. For more information, see the [LICENSE](./LICENSE) file.
## ๐ Credits
This project was inspired by shadcn's [Taxonomy](https://github.com/shadcn-ui/taxonomy) and t3-oss's [create-t3-turbo](https://github.com/t3-oss/create-t3-turbo).
## ๐จโ๐ป Contributors
<a href="https://github.com/saasfly/saasfly/graphs/contributors">
<img src="https://contrib.rocks/image?repo=saasfly/saasfly" />
</a>
Made with [contrib.rocks](https://contrib.rocks).
<!-- Badges and links -->
[check-workflow-badge]: https://img.shields.io/github/actions/workflow/status/saasfly/saasfly/ci.yml?label=ci
[github-license-badge]: https://img.shields.io/badge/License-MIT-green.svg
[discord-badge]: https://img.shields.io/discord/1204690198382911488?color=7b8dcd&link=https%3A%2F%2Fsaasfly.io%2Fdiscord
[made-by-nextify-badge]: https://img.shields.io/badge/made_by-nextify-blue?color=FF782B&link=https://nextify.ltd/
[check-workflow-badge-link]: https://github.com/saasfly/saasfly/actions/workflows/check.yml
[github-license-badge-link]: https://github.com/saasfly/saasfly/blob/main/LICENSE
[discord-badge-link]: https://discord.gg/8SwSX43wnD
[made-by-nextify-badge-link]: https://nextify.ltd
", Assign "at most 3 tags" to the expected json: {"id":"8929","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"