AI prompts
base on https://map.sistilli.dev/public/coding/SaaS+Boilerplate ## Intro
I ([Anthony Sistilli](https://links.sistilli.dev/)) created this boilerplate to save tech founders time when starting a new SaaS. It's meant to be a quick starting point that you can edit & deploy, allowing you to focus on the more important things like building your product and talking to users.
You can read more about the philosophy behind this boilerplate, and startups & coding in general on my [mind map](https://map.sistilli.dev/public/coding/SaaS+Boilerplate).
Also, here is the the accompanying [Figma design file](https://www.figma.com/community/file/1366853311251031961).
Feel free to [buy me a coffee :)](https://buymeacoffee.com/anthonysistilli)
## What the boilerplate looks like
[Desktop preview](https://i.imgur.com/IO9p3DM.png)
[Mobile preview](https://i.imgur.com/X5OE8W7.png)
## Run the project
```bash
npm i
npm run dev
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
Make sure you have the [eslint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) and [prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) extensions installed on vscode.
## Tech stack
I chose to build this on [Next 14](https://nextjs.org/blog/next-14) (NextJS + React) since that's what I normally use for my projects.
For the UI components, I use [shadcn](https://ui.shadcn.com/) - it's super lightweight, looks great out of the box, and has easy to edit components. It uses tailwindcss under the hood. It should be easy to rip out if you have a different UI library you'd like to use. One thing to note is I created a custom Typography components to match my [Figma](https://www.figma.com/community/file/1366853311251031961) designs a bit better. You'll also want to replace the `src/app/global.css` with your custom theme styles from shadcn if you don't want to use mine. Note I added a new variant called `minor` here to match with my [Figma](https://www.figma.com/community/file/1366853311251031961).
I use a specific ESLINT config I created for myself, based on some best practices. I disable a lot of rules I find useless, so feel free to mess with that.
For the design decisions & example landing pages for inspiration, you can read about them on my [mind map](https://map.sistilli.dev/public/startups/concepts/SaaS+Landing+Page+Design+Standards).
## Things you need to replace
In no particular order, here are the things you should look into changing to make the site your own:
- Change the images on the site (including the social image embedded when sharing the url, saved as `opengraph-image.png`)
- Change all the copywriting and text on the homepage
- Change the terms of service & privacy policy to yours
- Add whatever you want to your header by modifying the `items` array in `header.tsx`
- Replace the theme in `src/app/global.css` with your own shadcn theme, which you can [generate here](https://ui.shadcn.com/themes) by choosing your colors and clicking `copy code`. Note I created a new color called `minor` which isn't native to shadcn, so you may need to add a replacement for that on some typographys
- Replace the SEO metadata and titles in `layout.tsx`
- Replace all the links with whatever you want
- There's also a husky integration I added, feel free to set that up by running `npx husky install`
## Next steps to build a SaaS from this repo
If you're building a full SaaS off of this repo, here's what you should look into doing next, depending on what you need:
- If you need any environment variables, create a `.env.local` and use them in standard NextJS style
- Create the login / signup logic. I'd personally recommend using [Supabase <> NextJS's integration](https://supabase.com/docs/guides/auth/quickstarts/nextjs), since it's super simple and quick to setup
- Logic to show different header items for someone logged in vs someone not (if your app needs it)
- Additional components if you're modifying the homepage
- If you're SaaS has already launched, you can add more elements to the landing page like customer testimonials, demos, etc. A full list of things I'd recommend is [here](https://map.sistilli.dev/public/startups/concepts/SaaS+Landing+Page+Design+Standards)
- Code the rest of your SaaS!
- Create more designs on figma (see section below)
## Design on Figma
I have the accompanying [Figma file here](https://www.figma.com/community/file/1366853311251031961) so you can fork it and build out your SaaS from it while keeping the styles consistent.
If you're a developer that's new to Figma, [here's my crashcourse on Figma for developers](https://www.youtube.com/watch?v=Vw_XmufXCCI).
If you ended up changing the shadcn theme, you can modify the color variables on Figma to match your code. Same for typography variants.
## Deploy on Vercel
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
Basically:
1. Clone the repo, and push your changes up
2. Log into your Vercel account
3. Create a new project, link your repo, and it will auto deploy
Depending on what you modify, you may have build issues what prevent your site from deploying, but generally it should work out of the box. Any issues that do come up are usually super obvious and easy to solve by looking at the build failure logs.
I'd also recommend buying a domain on a platform like Cloudflare, and configuring it to point to Vercel. [Docs about that here.](https://vercel.com/docs/integrations/external-platforms/cloudflare)
## Join our community & say thanks
You can join our [Tech Founder's Discord](https://discord.gg/JNc6uPUqUU), and check out my other [socials](https://links.sistilli.dev/).
Also, if you're a tech founder like myself, feel free to subscribe on [Youtube](https://www.youtube.com/@anthonysistilli), and check out my [mind map](https://map.sistilli.dev/public/coding/SaaS+Boilerplate) where I write about startups, coding, and other things.
## Contribute
If you have any suggestions or changes, feel free to create a PR!
", Assign "at most 3 tags" to the expected json: {"id":"9946","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"