Skip to content

Commit

Permalink
initial import
Browse files Browse the repository at this point in the history
  • Loading branch information
collinschaafsma committed Sep 2, 2024
0 parents commit ef08377
Show file tree
Hide file tree
Showing 121 changed files with 16,799 additions and 0 deletions.
46 changes: 46 additions & 0 deletions .cursorrules
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
You are an expert in TypeScript, Node.js, Next.js App Router, React, Shadcn UI, Radix UI and Tailwind.

Code Style and Structure

- Write concise, technical TypeScript code with accurate examples.
- Use functional and declarative programming patterns; avoid classes.
- Prefer iteration and modularization over code duplication.
- Use descriptive variable names with auxiliary verbs (e.g., isLoading, hasError).

Naming Conventions

- Use lowercase with dashes for directories (e.g., components/auth-wizard).
- Favor named exports for components.

TypeScript Usage

- Use TypeScript for all code.
- Avoid enums; use maps instead.
- Use functional components with TypeScript interfaces.

Syntax and Formatting

- Use the "function" keyword for pure functions.
- Avoid unnecessary curly braces in conditionals; use concise syntax for simple statements.
- Use declarative JSX.

UI and Styling

- Use Shadcn UI, Radix, and Tailwind for components and styling.
- Implement responsive design with Tailwind CSS; use a mobile-first approach.

Performance Optimization

- Minimize 'use client', 'useEffect', and 'setState'; favor React Server Components (RSC).
- Use dynamic loading for non-critical components.
- Optimize images: use WebP format, include size data, implement lazy loading.

Key Conventions

- Optimize Web Vitals (LCP, CLS, FID).
- Limit 'use client':
- Favor server components and Next.js SSR.
- Use only for Web API access in small components.
- Avoid for data fetching or state management.

Follow Next.js docs for Data Fetching, Rendering, and Routing.
50 changes: 50 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
NEXT_PUBLIC_APP_NAME=Acme
NEXT_PUBLIC_APP_DESCRIPTION="Acme app description"
NEXT_PUBLIC_ENABLE_COMING_SOON="false"
# @your-twitter-handle
NEXT_PUBLIC_TWITTER_CREATOR=
# set to "true" to allow promotion codes at checkout
NEXT_PUBLIC_ALLOW_PROMOTION_CODES="false"


# begin auth related env vars
# required for next auth sign in with email (resend provider) (magic link)
AUTH_EMAIL_FROM="Acme <[email protected]>"
# required for next auth, this should be a random string of at least 32 characters
# you can use `openssl` to generate a random string
# openssl rand -base64 32
AUTH_SECRET=
# required for google oauth provider
AUTH_GOOGLE_ID=
AUTH_GOOGLE_SECRET=
# end auth related env vars

# database related env vars
POSTGRES_URL=

# posthog related env vars (found in your posthog project settings)
NEXT_PUBLIC_POSTHOG_KEY=
NEXT_PUBLIC_POSTHOG_HOST=https://us.i.posthog.com
NEXT_PUBLIC_POSTHOG_UI_HOST=https://us.posthog.com

# resend api key (found in https://resend.com/api-keys)
# required for newsletter functionality, sign in via email (magic link)
RESEND_API_KEY=
# the audience id for your newsletter (create your newsletter audience in resned https://resend.com/audiences)
# required for newsletter functionality
RESEND_NEWSLETTER_AUDIENCE_ID=

# stripe related env vars
# test keys https://dashboard.stripe.com/test/apikeys
# live keys https://dashboard.stripe.com/apikeys
# test webhooks https://dashboard.stripe.com/test/webhooks
# live webhooks https://dashboard.stripe.com/webhooks
STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=

# sentry related env vars (sentry.io)
NEXT_PUBLIC_SENTRY_DSN=
SENTRY_AUTH_TOKEN=
SENTRY_ORG=
SENTRY_PROJECT=
5 changes: 5 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.env
.vscode/
.next/
node_modules/
*.json
25 changes: 25 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"$schema": "https://json.schemastore.org/eslintrc",
"root": true,
"extends": [
"next/core-web-vitals",
"prettier",
"plugin:tailwindcss/recommended"
],
"plugins": ["tailwindcss"],
"rules": {
"tailwindcss/no-custom-classname": "off"
},
"settings": {
"tailwindcss": {
"callees": ["cn", "cva"],
"config": "tailwind.config.ts"
}
},
"overrides": [
{
"files": ["*.ts", "*.tsx"],
"parser": "@typescript-eslint/parser"
}
]
}
37 changes: 37 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env*.local
.env

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
lts/iron
6 changes: 6 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.env
*.json
.vscode
dist
.next
node_modules
33 changes: 33 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
},
"editor.formatOnSave": true,
"[sql]": {
"editor.formatOnSave": false
},
"editor.rulers": [120],
"editor.tabCompletion": "on",
"editor.tabSize": 2,
"editor.trimAutoWhitespace": true,
"files.exclude": {
"**/.DS_Store": true,
"**/.git": true,
"**/.hg": true,
"**/.svn": true,
"**/CVS": true,
"**/.gitkeep": true
},
"files.insertFinalNewline": true,
"files.trimFinalNewlines": true,
"files.trimTrailingWhitespace": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"tailwindCSS.experimental.classRegex": [
"[a-zA-Z]ClassName?=\\s*(?:\"|')([^(?:\"|')]*)",
["classnames\\(([^)]*)\\)", "'([^']*)'"],
"className\\:\\s*(?:\"|')([^(?:\"|')]*)"
],
"search.exclude": {
"**/.next": true
},
}
61 changes: 61 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# StartStack.io License Agreement

**Last Updated: 2024-08-26**

This License Agreement ("Agreement") is between you ("Licensee") and Schaafsma LLC, the owner of StartStack.io ("Licensor"). By purchasing, downloading, or using the StartStack.io SaaS template ("Template"), you agree to be bound by the terms of this Agreement. If you do not agree to these terms, do not purchase, download, or use the Template.

## 1. Grant of License

Subject to the terms of this Agreement, Licensor grants you a non-exclusive, non-transferable, and non-sublicensable license to use the Template for your own personal or commercial projects.

## 2. Permitted Uses

You may:

- Use the Template for creating websites, web applications, or software for yourself or your clients.
- Modify the Template to suit your needs.
- Distribute the Template as part of your own completed projects to your clients, provided that the Template is not the primary selling point of the project.

## 3. Prohibited Uses

You may not:

- Resell, sublicense, or redistribute the Template, or any modified version of the Template, as a stand-alone product.
- Use the Template in a way that competes with StartStack.io or any of its products.
- Share, publish, or otherwise distribute the Template, or any portion thereof, in a way that allows others to download, extract, or reuse the Template as a stand-alone product.

## 4. Ownership

The Template is the intellectual property of Schaafsma LLC. This Agreement does not transfer any ownership rights to you. All rights not expressly granted to you under this Agreement are reserved by Licensor.

## 5. Updates

Licensor may provide updates or enhancements to the Template. You are entitled to receive such updates for the duration of the original license, unless otherwise stated.

## 6. Termination

This license is effective until terminated. Your rights under this license will terminate automatically if you fail to comply with any of its terms. Upon termination, you must cease all use of the Template and destroy all copies, full or partial, of the Template.

## 7. No Warranty

The Template is provided "as is" without any warranties, express or implied, including but not limited to warranties of merchantability, fitness for a particular purpose, or non-infringement. Licensor does not warrant that the Template will meet your requirements or that the operation of the Template will be uninterrupted or error-free.

## 9. Limitation of Liability

In no event shall Licensor be liable for any damages, including but not limited to direct, indirect, incidental, or consequential damages arising out of the use or inability to use the Template, even if Licensor has been advised of the possibility of such damages.

## 10. Governing Law

This Agreement shall be governed by and construed in accordance with the laws of United States of America /Colorado, without regard to its conflict of law principles. Any disputes arising out of or in connection with this Agreement shall be resolved in the courts of United States of America / Colorado.

## 11. Severability

If any provision of this Agreement is found to be invalid or unenforceable, the remaining provisions shall remain in full force and effect.

## 12. Entire Agreement

This Agreement constitutes the entire agreement between you and Licensor with respect to the Template and supersedes all prior agreements or understandings, whether written or oral.

## 13. Contact Information

For any questions regarding this License Agreement, please contact [email protected].
Loading

0 comments on commit ef08377

Please sign in to comment.