Skip to content

Commit 7567afb

Browse files
committed
Merge branch 'main' into filip-tscofnig-rework
2 parents 5dd5a50 + cc943df commit 7567afb

File tree

272 files changed

+11737
-6020
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

272 files changed

+11737
-6020
lines changed

.github/workflows/blog-deployment.yml

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -17,50 +17,58 @@ jobs:
1717
runs-on: ubuntu-latest
1818
if: github.event_name == 'pull_request'
1919
steps:
20-
- name: Checkout code
21-
uses: actions/checkout@v3
20+
- name: Checkout code
21+
uses: actions/checkout@v3
2222

23-
- name: Setup Node.js
24-
uses: actions/setup-node@v3
25-
with:
26-
node-version: '18'
23+
- name: Setup Node.js
24+
uses: actions/setup-node@v3
25+
with:
26+
node-version: 'lts/*'
2727

28-
- name: Install dependencies
29-
working-directory: ./opensaas-sh/blog
30-
run: npm install
28+
- name: Install dependencies
29+
working-directory: ./opensaas-sh/blog
30+
run: npm install
3131

32-
- name: Build site
33-
working-directory: ./opensaas-sh/blog
34-
run: npm run build
32+
- name: Generate LLM files
33+
working-directory: ./opensaas-sh/blog
34+
run: npm run generate-llm-files
35+
36+
- name: Build site
37+
working-directory: ./opensaas-sh/blog
38+
run: npm run build
3539

3640
deploy:
3741
runs-on: ubuntu-latest
3842
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
3943
steps:
40-
- name: Checkout code
41-
uses: actions/checkout@v3
44+
- name: Checkout code
45+
uses: actions/checkout@v3
46+
47+
- name: Setup Node.js
48+
uses: actions/setup-node@v3
49+
with:
50+
node-version: 'lts/*'
4251

43-
- name: Setup Node.js
44-
uses: actions/setup-node@v3
45-
with:
46-
node-version: '18'
52+
- name: Install dependencies
53+
working-directory: ./opensaas-sh/blog
54+
run: npm install
4755

48-
- name: Install dependencies
49-
working-directory: ./opensaas-sh/blog
50-
run: npm install
56+
- name: Generate LLM files
57+
working-directory: ./opensaas-sh/blog
58+
run: npm run generate-llm-files
5159

52-
- name: Build site
53-
working-directory: ./opensaas-sh/blog
54-
run: npm run build
60+
- name: Build site
61+
working-directory: ./opensaas-sh/blog
62+
run: npm run build
5563

56-
- name: Deploy to Netlify
57-
uses: nwtgck/actions-netlify@v2
58-
with:
59-
publish-dir: './opensaas-sh/blog/dist'
60-
production-branch: main
61-
github-token: ${{ secrets.GITHUB_TOKEN }}
62-
deploy-message: "Deploy from GitHub Actions"
63-
env:
64-
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
65-
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
66-
timeout-minutes: 1
64+
- name: Deploy to Netlify
65+
uses: nwtgck/actions-netlify@v2
66+
with:
67+
publish-dir: './opensaas-sh/blog/dist'
68+
production-branch: main
69+
github-token: ${{ secrets.GITHUB_TOKEN }}
70+
deploy-message: 'Deploy from GitHub Actions'
71+
env:
72+
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
73+
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
74+
timeout-minutes: 1

.github/workflows/e2e-tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ on:
1010

1111
env:
1212
WASP_TELEMETRY_DISABLE: 1
13-
WASP_VERSION: 0.16.3
13+
WASP_VERSION: 0.17.0
1414

1515
jobs:
1616
test:
@@ -24,7 +24,7 @@ jobs:
2424
id: setup-node
2525
uses: actions/setup-node@v4
2626
with:
27-
node-version: '20'
27+
node-version: '22'
2828

2929
- name: Docker setup
3030
uses: docker/setup-buildx-action@v3

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
## Welcome to your new SaaS App! 🎉
2-
<a href="https://www.producthunt.com/posts/open-saas?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-open&#0045;saas" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=436467&theme=light" alt="Open&#0032;SaaS - Open&#0045;source&#0032;&#0038;&#0032;100&#0037;&#0032;free&#0032;React&#0032;&#0038;&#0032;Node&#0046;js&#0032;SaaS&#0032;starter&#0033; | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
2+
<a href="https://www.producthunt.com/products/open-saas?embed=true&utm_source=badge-featured&utm_medium=badge&utm_source=badge-open&#0045;saas&#0045;2" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=991058&theme=neutral&t=1753776395137" alt="Open&#0032;SaaS - The&#0032;open&#0045;source&#0032;SaaS&#0032;boilerplate&#0032;with&#0032;superpowers&#0033; | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
33

4-
https://github.com/wasp-lang/open-saas/assets/70215737/5ff289b1-12b9-4b46-aa90-a6a3122de93e
4+
https://github.com/user-attachments/assets/3856276b-23e9-455e-a564-b5f26f4f0e98
55

66
You've decided to build a SaaS app with the Open SaaS template. Great choice!
77

@@ -21,21 +21,21 @@ The template itself is built on top of some very powerful tools and frameworks,
2121

2222
- 🐝 [Wasp](https://wasp.sh) - a full-stack React, NodeJS, Prisma framework with superpowers
2323
- 🚀 [Astro](https://starlight.astro.build/) - Astro's lightweight "Starlight" template for documentation and blog
24-
- 💸 [Stripe](https://stripe.com) or [Lemon Squeezy](https://lemonsqueezy.com/) - for products and payments
24+
- 💸 [Stripe](https://stripe.com) or [Lemon Squeezy](https://lemonsqueezy.com/) (with Polar.sh and Paddle coming soon!) - for products and payments
25+
- 💅 [ShadCN UI](https://tailwindcss.com) - for components & styling (plus admin dashboard!)
26+
- 🤖 [AI-Ready](https://docs.opensaas.sh/) - full set of Cursor rules & llms-full.txt for ai-assisted coding
2527
- 📈 [Plausible](https://plausible.io) or [Google](https://analytics.google.com/) Analytics
2628
- 🤖 [OpenAI](https://openai.com) - OpenAI API w/ function calling example
2729
- 📦 [AWS S3](https://aws.amazon.com/s3/) - for file uploads
2830
- 📧 [SendGrid](https://sendgrid.com), [MailGun](https://mailgun.com), or SMTP - for email sending
29-
- 💅 [TailwindCSS](https://tailwindcss.com) - for styling
30-
- 🧑‍💼 [TailAdmin](https://tailadmin.com/) - admin dashboard & components for TailwindCSS
3131
- 🧪 [Playwright](https://playwright.dev) - end-to-end tests with Playwright
3232

3333
Because we're using Wasp as the full-stack framework, we can leverage a lot of its features to build our SaaS in record time, including:
3434

3535
- 🔐 [Full-stack Authentication](https://wasp.sh/docs/auth/overview) - Email verified + social Auth in a few lines of code.
3636
-[End-to-end Type Safety](https://wasp.sh/docs/data-model/operations/overview) - Type your backend functions and get inferred types on the front-end automatically, without the need to install or configure any third-party libraries. Oh, and type-safe Links, too!
3737
- 🤖 [Jobs](https://wasp.sh/docs/advanced/jobs) - Run cron jobs in the background or set up queues simply by defining a function in the config file.
38-
- 🚀 [One-command Deploy](https://wasp.sh/docs/advanced/deployment/overview) - Easily deploy via the CLI to [Fly.io](https://fly.io), or to other providers like [Railway](https://railway.app) and [Netlify](https://netlify.com).
38+
- 🚀 [One-command Deploy](https://wasp.sh/docs/advanced/deployment/overview) - Easily deploy your DB, Server, & Client with one commaned to [Railway](https://railway.app) or [Fly.io](https://fly.io) via the CLI. Or deploy manually to any other hosting serivce of your choice.
3939

4040
You also get access to Wasp's diverse, helpful community if you get stuck or need help.
4141
- 🤝 [Wasp Discord](https://discord.gg/aCamt5wCpS)

opensaas-sh/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# We can't ignore `app/` because it messes up our patch/diff procedure (check
2+
# the README for more info on this)
3+
# app/

opensaas-sh/README.md

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,10 @@ If you're running the `patch.sh` or `diff.sh` scripts on Mac, you need to instal
2626
- `gpatch`,
2727
- and `diffutils`.
2828

29-
You should also create aliases for `realpath` and `patch`:
30-
3129
```sh
3230
brew install coreutils # contains grealpath
3331
brew install gpatch
3432
brew install diffutils
35-
36-
echo 'alias realpath="grealpath"' >> ~/.zshrc
37-
echo 'alias patch="gpatch"' >> ~/.zshrc
38-
source ~/.zshrc
3933
```
4034

4135
Make sure not to commit `app/` to git. It is currently (until we resolve this) not added to .gitignore because that messes up diffing for us.

opensaas-sh/app_diff/README.md.diff

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
--- template/app/README.md
22
+++ opensaas-sh/app/README.md
3-
@@ -1,12 +1,25 @@
3+
@@ -1,6 +1,8 @@
44
-# <YOUR_APP_NAME>
55
+# opensaas.sh (demo) app
66

@@ -9,6 +9,10 @@
99
+
1010
+It is deployed to https://opensaas.sh and serves both as a landing page for Open Saas and as a demo app.
1111

12+
## UI Components
13+
14+
@@ -8,9 +10,20 @@
15+
1216
## Development
1317

1418
+### .env files

opensaas-sh/app_diff/deletions

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
src/client/static/avatar-placeholder.webp
2-
src/client/static/da-boi.webp
3-
src/client/static/open-saas-banner.webp
4-
src/landing-page/logos/SalesforceLogo.tsx
1+
src/client/static/open-saas-banner-dark.png
2+
src/client/static/open-saas-banner-light.png
3+
src/landing-page/components/Hero.tsx
4+
src/landing-page/contentSections.ts
55
src/payment/lemonSqueezy/checkoutUtils.ts
66
src/payment/lemonSqueezy/paymentDetails.ts
77
src/payment/lemonSqueezy/paymentProcessor.ts
Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,25 @@
11
--- template/app/fly-client.toml
22
+++ opensaas-sh/app/fly-client.toml
3-
@@ -0,0 +1,25 @@
4-
+# fly.toml app configuration file generated for open-saas-wasp-sh-client on 2023-12-04T12:34:07+01:00
3+
@@ -0,0 +1,22 @@
4+
+# fly.toml app configuration file generated for open-saas-wasp-sh-client on 2025-07-18T17:12:02+02:00
55
+#
66
+# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
77
+#
88
+
9-
+app = "open-saas-wasp-sh-client"
10-
+primary_region = "ams"
9+
+app = 'open-saas-wasp-sh-client'
10+
+primary_region = 'ams'
1111
+
1212
+[build]
1313
+
1414
+[http_service]
1515
+ internal_port = 8043
1616
+ force_https = true
17-
+ auto_stop_machines = true
17+
+ auto_stop_machines = 'stop'
1818
+ auto_start_machines = true
1919
+ min_machines_running = 0
20-
+ processes = ["app"]
21-
+
22-
+[http_service.http_options.response]
23-
+ pristine = true
20+
+ processes = ['app']
2421
+
2522
+[[vm]]
26-
+ cpu_kind = "shared"
23+
+ memory = '1gb'
24+
+ cpu_kind = 'shared'
2725
+ cpus = 1
28-
+ memory_mb = 1024
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
--- template/app/fly-server.toml
22
+++ opensaas-sh/app/fly-server.toml
33
@@ -0,0 +1,22 @@
4-
+# fly.toml app configuration file generated for open-saas-wasp-sh-server on 2023-12-04T12:33:59+01:00
4+
+# fly.toml app configuration file generated for open-saas-wasp-sh-server on 2025-07-18T17:11:52+02:00
55
+#
66
+# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
77
+#
88
+
9-
+app = "open-saas-wasp-sh-server"
10-
+primary_region = "ams"
9+
+app = 'open-saas-wasp-sh-server'
10+
+primary_region = 'ams'
1111
+
1212
+[build]
1313
+
1414
+[http_service]
1515
+ internal_port = 8080
1616
+ force_https = true
17-
+ auto_stop_machines = true
17+
+ auto_stop_machines = 'stop'
1818
+ auto_start_machines = true
1919
+ min_machines_running = 1
20-
+ processes = ["app"]
20+
+ processes = ['app']
2121
+
2222
+[[vm]]
23-
+ cpu_kind = "shared"
23+
+ memory = '1gb'
24+
+ cpu_kind = 'shared'
2425
+ cpus = 1
25-
+ memory_mb = 1024
26-
\ No newline at end of file

opensaas-sh/app_diff/main.wasp.diff

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
--- template/app/main.wasp
22
+++ opensaas-sh/app/main.wasp
3-
@@ -3,30 +3,30 @@
4-
version: "^0.16.0"
3+
@@ -3,31 +3,32 @@
4+
version: "^0.17.0"
55
},
66

77
- title: "My Open SaaS App",
88
+ title: "Open SaaS",
99

1010
head: [
11+
"<link rel='icon' href='/favicon.ico' />",
1112
"<meta charset='utf-8' />",
1213
- "<meta name='description' content='Your apps main description and features.' />",
1314
- "<meta name='author' content='Your (App) Name' />",
@@ -27,7 +28,7 @@
2728
- "<meta name='twitter:image' content='https://your-saas-app.com/public-banner.webp' />",
2829
+ "<meta property='og:title' content='Open SaaS' />",
2930
+ "<meta property='og:url' content='https://opensaas.sh' />",
30-
+ "<meta property='og:description' content='Free, open-source SaaS boilerplate starter for React & NodeJS.' />",
31+
+ "<meta property='og:description' content='Free, open-source SaaS boilerplate starter for React & NodeJS. Powered by Wasp.' />",
3132
+ "<meta property='og:image' content='https://opensaas.sh/public-banner.webp' />",
3233
+
3334
+ "<meta name=\"twitter:title\" content=\"Open SaaS\" />",
@@ -43,12 +44,13 @@
4344
- // via the Cookie Consent component after the user clicks the "Accept" cookies button.
4445
- "<script defer data-domain='<your-site-id>' src='https://plausible.io/js/script.js'></script>", // for production
4546
- "<script defer data-domain='<your-site-id>' src='https://plausible.io/js/script.local.js'></script>", // for development
47+
+
4648
+ "<script defer data-domain='opensaas.sh' data-api='/waspara/wasp/event' src='/waspara/wasp/script.js'></script>",
4749
+ "<script defer src='/piggy.js'></script>",
4850
],
4951

5052
// 🔐 Auth out of the box! https://wasp.sh/docs/auth/overview
51-
@@ -38,7 +38,7 @@
53+
@@ -39,7 +40,7 @@
5254
email: {
5355
fromField: {
5456
name: "Open SaaS App",
@@ -57,7 +59,7 @@
5759
},
5860
emailVerification: {
5961
clientRoute: EmailVerificationRoute,
60-
@@ -50,21 +50,18 @@
62+
@@ -51,21 +52,18 @@
6163
},
6264
userSignupFields: import { getEmailUserFields } from "@src/auth/userSignupFields",
6365
},
@@ -91,7 +93,7 @@
9193
},
9294
onAuthFailedRedirectTo: "/login",
9395
onAuthSucceededRedirectTo: "/demo-app",
94-
@@ -86,11 +83,11 @@
96+
@@ -87,11 +85,11 @@
9597
// NOTE: "Dummy" provider is just for local development purposes.
9698
// Make sure to check the server logs for the email confirmation url (it will not be sent to an address)!
9799
// Once you are ready for production, switch to e.g. "SendGrid" or "Mailgun" providers. Check out https://docs.opensaas.sh/guides/email-sending/ .
@@ -105,7 +107,7 @@
105107
},
106108
},
107109
}
108-
@@ -206,9 +203,9 @@
110+
@@ -207,9 +205,9 @@
109111
}
110112

111113
api paymentsWebhook {
@@ -117,3 +119,11 @@
117119
httpRoute: (POST, "/payments-webhook")
118120
}
119121
//#endregion
122+
@@ -281,7 +279,6 @@
123+
component: import AdminCalendar from "@src/admin/elements/calendar/CalendarPage"
124+
}
125+
126+
-
127+
route AdminUIButtonsRoute { path: "/admin/ui/buttons", to: AdminUIButtonsPage }
128+
page AdminUIButtonsPage {
129+
authRequired: true,

0 commit comments

Comments
 (0)