Merge branch 'release'
@ -84,14 +84,14 @@ Let’s get started with installing Node.js first. At the moment, Wasp requires
|
||||
|
||||
But first things first, let’s start with Node.js. In WSL, run:
|
||||
|
||||
```jsx
|
||||
```bash
|
||||
sudo apt install nodejs
|
||||
```
|
||||
|
||||
in order to install Node on your Linux environment. Next up is NVM. I suggest going to https://github.com/nvm-sh/nvm and getting the latest install script from there. The current download is:
|
||||
|
||||
```bash
|
||||
curl -o- [https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh](https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh) | bash
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
|
||||
```
|
||||
|
||||
After this, we have both Node.js and NVM set up in our system.
|
||||
@ -101,7 +101,7 @@ After this, we have both Node.js and NVM set up in our system.
|
||||
Next up is installing Wasp on our Linux environment. Wasp installation is also pretty straightforward and easy. So just copy and paste this command:
|
||||
|
||||
```bash
|
||||
curl -sSL [https://get.wasp-lang.dev/installer.sh](https://get.wasp-lang.dev/installer.sh) | sh
|
||||
curl -sSL https://get.wasp-lang.dev/installer.sh | sh
|
||||
```
|
||||
|
||||
and wait for the installer to finish up its thing. Great! But, if you did your WSL setup from 0, you will notice the following warning underneath: It looks like '/home/boris/.local/bin' is not on your PATH! You will not be able to invoke wasp from the terminal by its name.
|
||||
|
107
web/blog/2024-01-23-wasp-launch-week-five.md
Normal file
@ -0,0 +1,107 @@
|
||||
---
|
||||
title: 'Wasp Launch Week #5: Waspnado 🐝 🌪️'
|
||||
authors: [matijasos]
|
||||
image: /img/lw5/lw5-banner.png
|
||||
tags: [launch-week, update]
|
||||
---
|
||||
|
||||
import Link from '@docusaurus/Link';
|
||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||
|
||||
import InBlogCta from './components/InBlogCta';
|
||||
import WaspIntro from './_wasp-intro.md';
|
||||
import ImgWithCaption from './components/ImgWithCaption'
|
||||
|
||||
<ImgWithCaption
|
||||
alt="Launch Week 5 is here"
|
||||
source="img/lw5/lw5-banner.png"
|
||||
/>
|
||||
|
||||
New Year, New Wasp! That's we at first wanted to use as motto for this launch, but then I bought a DALL-E subscription and typed in "*Waspnado, but with plushies*". The rest is history.
|
||||
|
||||
**TL;DR** - Wasp is getting dangerously close to 10,000 stars on GitHub and our Discord community is shy of 2,000 members! We're seeing more and more users building and deploying cool apps, both AI-powered, but also good old SaaS-es. Another thing we still have to get used to is getting nice messages from you, such as this one:
|
||||
|
||||
<ImgWithCaption
|
||||
alt="Nice testimonial"
|
||||
source="img/lw5/nice-testimonial.png"
|
||||
/>
|
||||
|
||||
Thank you! This means a lot to us and reassures our that we are on the right path. Now, without the further ado, let's dive in and see what awaits us this week (a tornado of new features, of course):
|
||||
|
||||
## Day 1: Wasp Auth 2.0
|
||||
|
||||
[Auth](/docs/auth/overview) is one Wasp's flagship, and most popular features. All you need to do is add providers you want to use in Wasp config file (e.g. email, Google, or GitHub) and poof - **Wasp will magically create a full-stack auth for you, from the database models to the UI components that you can simply import and use**. Here's an 1-minute tour:
|
||||
|
||||
<div className='video-container'>
|
||||
<iframe src="https://www.youtube.com/embed/Qiro77q-ulI?si=y8Rejsbjb1HJC6FA" frameborder="1" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
|
||||
</div>
|
||||
|
||||
And the best part - **this all works without any 3rd party services**! This is all your code that runs on your infrastructure, and you don't have to pay for it, no matter how many users you have. Pretty neat, huh?
|
||||
|
||||
This is all old news, so what's new? I won't spoil too much, but we might have made it even easier to use (no more manually defining data models), plus it now might use a popular library that starts with "*L*" (and ends with "*ucia*") under the hood. I won't say anything more!
|
||||
|
||||
**Read more about it:**
|
||||
- [Twitter thread introing Wasp Auth 2.0](https://twitter.com/WaspLang/status/1749830729448481254)
|
||||
|
||||
## Day 2: Wasp, restructured - `package.json` is back! 🏗️
|
||||
|
||||
<ImgWithCaption
|
||||
alt="Pinocchio"
|
||||
source="img/lw5/real-framework.gif"
|
||||
caption="Yes, Wasp, you are a real framework now!"
|
||||
/>
|
||||
|
||||
This is a big one, and the most complex feature we'll be shipping this week! We've been designing Wasp from day 1 to work nicely with other pieces of the stack, such as React and Node.js. But, some decisions we made in the process on how all these work together weren't the most elegant, both for you as users and us as developers of the framework.
|
||||
|
||||
With these changes, **Wasp will feel much more like a "real" framework that you are used to** - you will be able to use `npm install`, access your `package.json`, `tsconfig`, and more!
|
||||
|
||||
## Day 3: Wasp AI aka MAGE now lives in your CLI! 🤖 📟
|
||||
|
||||
[MAGE](https://usemage.ai/) is an AI-powered, full-stack, React and Node.js web app generator powered by Wasp. All it takes is writing a short description and that's it - you will get a complete codebase you can download, run locally, adjust to your wishes and deploy!
|
||||
|
||||
It is one of our most successful products [that has been used to kickstart over 30,000 applications](https://dev.to/wasp/how-we-built-a-gpt-web-app-generator-for-react-nodejs-from-idea-to-25000-apps-in-4-months-1aol)!
|
||||
|
||||
<ImgWithCaption
|
||||
alt="MAGE in action - browser"
|
||||
source="img/lw5/mage-hiw.gif"
|
||||
/>
|
||||
|
||||
So far, you could access MAGE only through it's web interface, hosted at https://usemage.ai/. This is super handy to get started quickly, but what if you already have Wasp installed on your computer, or you want more control over the generation (e.g. use GPT-4 exclusively)? That's when running MAGE from you CLI comes into play! Here's how it works:
|
||||
|
||||
<div className='video-container'>
|
||||
<iframe src="https://www.youtube.com/embed/0cuNS3ji_II?si=QfM9nWHH9zWFuNIU" frameborder="1" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
|
||||
</div>
|
||||
|
||||
This is also the foundation for adding more advanced features to MAGE in the future, like interactive debugging.
|
||||
|
||||
## Day 4: Open SaaS - freedom to the boilerplate!
|
||||
|
||||
<ImgWithCaption
|
||||
alt="Open SaaS revolution"
|
||||
source="img/lw5/open_saas_freedom.png"
|
||||
/>
|
||||
|
||||
Remember seeing the boilerplate starters costing more than $300, just to start your side project, and then you still have to maintain all that code? Well, we do, and we say no more!
|
||||
|
||||
All the best things in the world are free, and there aren't much better things than **a feature-rich, production-grade boilerplate starter for React & Node.js with admin dashboard, Stripe and OpenAI integration and more - 100% free and open source!** (love is a close second)
|
||||
|
||||
You can check it out at https://opensaas.sh/ and give it a star on https://github.com/wasp-lang/open-saas - more details coming soon!
|
||||
|
||||
## Day 5 - New Year, New Wasp!
|
||||
|
||||
<ImgWithCaption
|
||||
alt="Say my name"
|
||||
source="img/lw5/say-my-name.gif"
|
||||
/>
|
||||
|
||||
On the last day of the Launch Week, we're not presenting another feature, but rather a new brand for Wasp (don't worry, Da Boi stays). It will be shorter, sleeker and even easier to remember. Stay tuned and see what this is all about!
|
||||
|
||||
## Stay in the loop
|
||||
|
||||
<ImgWithCaption
|
||||
alt="dont leave"
|
||||
source="img/lw5/dont-leave.gif"
|
||||
/>
|
||||
|
||||
Every day, we'll update this page with the latest announcement of the day - to stay in the loop, [follow us on Twitter/X](https://twitter.com/WaspLang) and [join our Discord](https://discord.gg/rzdnErX) - see you there!
|
||||
|
@ -0,0 +1,240 @@
|
||||
---
|
||||
title: 'Open SaaS: our free, open-source SaaS starter'
|
||||
authors: [vinny]
|
||||
image: /img/open-saas/open-saas-ph.png
|
||||
tags: [saas, boilerplate, react, nodejs]
|
||||
---
|
||||
|
||||
import ImgWithCaption from './components/ImgWithCaption'
|
||||
|
||||
## Presenting Open SaaS 🎉
|
||||
|
||||
We’re really excited to present [Open SaaS](https://opensaas.sh), the totally free, open-source, production-grade SaaS boilerplate for React, NodeJS, and Prisma.
|
||||
|
||||
Check out the promo video here:
|
||||
|
||||
<iframe width="560" height="315" src="https://www.youtube.com/embed/rfO5SbLfyFE?si=IqTfhVk7DV5VsiaL" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
|
||||
|
||||
Open SaaS has got all the features of those paid SaaS starters you’ve been seeing lately, except its entirely **free** and **open-source**.
|
||||
|
||||
We felt that paying $300-$2,000 for some boilerplate code that you need to manage yourself was crazy. On top of that, many of these boilerplates rely heavily on 3rd-party services. Add on hosting and other fees, and you’re looking at spending quite a bit of money just to get your idea out there into the world.
|
||||
|
||||
That’s why with Open SaaS we made a conscious decision to try and use open-source and free services whenever possible. For example, our hosted demo app and its admin dashboard on [OpenSaaS.sh](http://OpenSaaS.sh) are powered by a self-hosted version of Plausible analytics. Want the same features in your SaaS? Well, Open SaaS has got it preconfigured for you!
|
||||
|
||||
Also, the [Wasp framework](https://wasp.sh), which Open SaaS uses, does the job of building out a number of features for you, like Auth and Cron Jobs, so that you don’t have to pay a 3rd-party service or code it entirely yourself (we’ll explain this in more detail later).
|
||||
|
||||
## Before we start...
|
||||
|
||||
<a href="https://www.producthunt.com/posts/open-saas?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-open-saas" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=436467&theme=light" alt="Open SaaS - Open-source & 100% free React & Node.js SaaS starter! | Product Hunt" /></a>
|
||||
|
||||
Open SaaS is [live on Product Hunt](https://www.producthunt.com/posts/open-saas) right now! Come support our free, open-source initiative 🙏
|
||||
|
||||
[![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wppn8mlby0p7h1f8xl6w.png)](https://www.producthunt.com/posts/open-saas)
|
||||
|
||||
|
||||
## Why we built it… and then gave it away for free
|
||||
|
||||
The initial feedback in [our pre-release](https://devhunt.org/tool/open-saas) has been largely positive, but we’ve also gotten some questions like:
|
||||
- “Is it going to stay free?”
|
||||
- “What’s your motivation for open-sourcing this?”
|
||||
|
||||
So we thought we’d go ahead and answer these to start.
|
||||
|
||||
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5rac9o1rxgrwfx51mc50.png)
|
||||
|
||||
First, yes it is 100% free and open-source and will stay that way.
|
||||
|
||||
Second, we believe that the collective knowledge of a community of developers, indiehackers, and solopreneurs will produce a better boilerplate than an individual or small group. When you buy a SaaS starter from some developer, you’re already getting an opinionated stack, then on top of that you’re also getting an app built the way they think is best — and that may not always be the best *for you.*
|
||||
|
||||
Third, [Open SaaS](https://opensaas.sh) is a project by [Wasp](https://wasp.sh), an open-source React + NodeJS + Prisma full-stack framework with superpowers. We, the Wasp team, believe that Wasp is very well suited for creating SaaS apps quickly and efficiently, and we want this template to prove it. Plus, as developers, we’ve learned so much from other open-source projects, and Wasp itself is an open-source project.
|
||||
|
||||
Basically, we love the open-source philosophy and we want to pay it forward. 🙏
|
||||
|
||||
So it’s our hope that we can provide a seriously valuable asset to the developer community while spreading the word about our open-source, full-stack framework. And we’d love to see the community contribute to it so that it will grow and become the best SaaS boilerplate out there.
|
||||
|
||||
## What Open SaaS is Made Of
|
||||
|
||||
We put a lot of hard work into Open SaaS, including the [documentation](https://docs.opensaas.sh), so that developers can get a SaaS app launched confidently and easily.
|
||||
|
||||
We’ve also spent some time checking out other free, open-source SaaS starters, and wanted to make sure Open SaaS has all the right features of a production-ready starter, without the bloat. And we think we’ve accomplished that for the most part, although we will continue to add features and improve on it with time.
|
||||
|
||||
Here are the main features at the moment:
|
||||
|
||||
- 🔐 Authentication (email verified, google, github)
|
||||
- 📩 Emailing (sendgrid, emailgun, SMTP)
|
||||
- 📈 Admin Dashboard (plausible or google analytics)
|
||||
- 🤑 Stripe payments (just add your subscription product IDs)
|
||||
- ⌨️ End-to-end Typesafety (no configuration necessary)
|
||||
- 🤖 OpenAI integrated (AI-powered example apps)
|
||||
- 📖 Blog w/ Astro
|
||||
- 🚀 Deploy anywhere
|
||||
- 📄 Full Documentation & Community Support
|
||||
|
||||
It’s worth going into some detail about each of these features, so let’s do it.
|
||||
|
||||
### Auth
|
||||
|
||||
|
||||
[![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wbistoghxrxft9zxxra1.png)](https://www.producthunt.com/posts/open-saas)
|
||||
|
||||
Thanks to Wasp, Open SaaS ships with a number of possible Auth methods:
|
||||
|
||||
- username and password (simplest/easiest for dev testing)
|
||||
- email verified w/ password reset
|
||||
- Google and/or Github social login
|
||||
|
||||
Here’s where Wasp really shines, because all it takes to set up your full-stack Auth and get pre-configured UI components is this:
|
||||
|
||||
```jsx
|
||||
//main.wasp
|
||||
app SaaSTemplate {
|
||||
auth: {
|
||||
userEntity: User,
|
||||
methods: {
|
||||
usernameAndPassword: {},
|
||||
google: {},
|
||||
gitHub: {},
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Seriously. That’s it!
|
||||
|
||||
Just make sure you’ve set up your social auth and have your API keys, as well as your `User` and `ExternalAuth` entities defined, and you’re good to go. And don’t worry, that part is all documented and explained in detail in the [Open SaaS Docs](https://docs.opensaas.sh).
|
||||
|
||||
On top of that, Open SaaS comes preconfigured with some examples on how to customize and create some really powerful auth flows.
|
||||
|
||||
### Admin Dashboard & Analytics
|
||||
|
||||
[![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4mm6s1c3txxgm49e2k7w.png)](https://www.producthunt.com/posts/open-saas)
|
||||
|
||||
By leveraging [Wasp’s Jobs feature](https://wasp-lang.dev/docs/advanced/jobs), Open SaaS pulls data from Plausible’s or Google’s Site Analytics (your choice!) and Stripe’s Data APIs every hour and saves them to our database. This data is then shown on our Admin Dashboard (go to [OpenSaaS.sh](https://OpenSaaS.sh) to see it in action). The nice part is, to get access to this data for your own app, all you have to do is follow our guide on getting your analytics API keys, insert the provided script, and you’re good to go!
|
||||
|
||||
Again, Wasp makes this whole process really easy. With the function for querying the APIs and getting the data we need already defined for you, Open SaaS then uses a Wasp Job within the `main.wasp` config file:
|
||||
|
||||
```jsx
|
||||
job dailyStatsJob {
|
||||
executor: PgBoss,
|
||||
perform: {
|
||||
fn: import { calculateDailyStats } from "@server/workers/calculateDailyStats.js"
|
||||
},
|
||||
schedule: {
|
||||
cron: "0 * * * *"
|
||||
},
|
||||
entities: [User, DailyStats, Logs, PageViewSource]
|
||||
}
|
||||
```
|
||||
|
||||
And that’s it! Wasp takes care of setting up and running the cron job for you.
|
||||
|
||||
### Stripe Payments
|
||||
|
||||
[![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ugy3mx9xo1d9i9vfysr7.png)](https://www.producthunt.com/posts/open-saas)
|
||||
|
||||
If you’re a developer that’s never built your own SaaS before, then integrating with a payments processor like Stripe is probably one of the few challenges you’ll face.
|
||||
|
||||
This was the case for me when I built my first SaaS, [CoverLetterGPT.xyz](https://coverlettergpt.xyz). That was actually one of my main motivators for building it; to learn how to intergrate Stripe payments into an app, as well as the OpenAI API.
|
||||
|
||||
And even though Stripe is well known for having great documentation, the process can still be daunting. You have to:
|
||||
|
||||
- create the correct product type
|
||||
- set up webhook endpoints
|
||||
- tell Stripe to send the correct webhook events to you
|
||||
- consume the events correctly
|
||||
- deal with recurring and failed payments
|
||||
- test it all correctly via the CLI before going live
|
||||
|
||||
That’s why having Stripe subscription payments set up for you is such a win.
|
||||
|
||||
But even more important than that, is having the whole process conveniently documented for you! Which is why Open SaaS offers you convenient [Stripe guides in our documentation](https://docs.opensaas.sh) 🙂
|
||||
|
||||
[![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uehwot350u3dl02s4w7r.png)](https://www.producthunt.com/posts/open-saas)
|
||||
|
||||
### End-to-End Typesafety
|
||||
|
||||
Open SaaS was built with Typescript, and because it’s a full-stack app, type safety from the back-end to the front-end can be a real lifesaver. I mean, some [opinionated stacks](https://create.t3.gg/) have gotten hugely popular on this basis.
|
||||
|
||||
Luckily, Wasp gives you end-to-end Typesafety out-of-the-box (nothing to configure!), so it was easy for Open SaaS to take advantage of it.
|
||||
|
||||
Here’s an example:
|
||||
|
||||
1. Make Wasp aware of your server action:
|
||||
|
||||
```tsx
|
||||
// main.wasp
|
||||
|
||||
action getResponse {
|
||||
fn: import { getResponse } from "@server/actions.js",
|
||||
entities: [Response]
|
||||
}
|
||||
```
|
||||
|
||||
2. Type and Implement your server action.
|
||||
|
||||
```tsx
|
||||
// src/srever/actions.ts
|
||||
|
||||
type RespArgs = {
|
||||
hours: string;
|
||||
};
|
||||
|
||||
const getResponse: GetResponse<RespArgs, string> = async ({ hours }) => { }
|
||||
```
|
||||
|
||||
3. Import it and call it on the client.
|
||||
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0fah81r1g4bg3vdqapju.png)
|
||||
Client-side types will be inferred correctly!
|
||||
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7n04yh6de9slhhnjrgf3.png)
|
||||
|
||||
### AI-powered Example App (w/ OpenAI API)
|
||||
|
||||
[![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zbbc2gkxbxjl3q2y01a3.png)](https://www.producthunt.com/posts/open-saas)
|
||||
|
||||
AI is making new app ideas possible, which is partly why we’re seeing a resurgence in developer interest in creating SaaS apps. As I mentioned above, the first SaaS app I built, [CoverLetterGPT](https://coverlettergpt.xyz), is one of those “GPT Wrappers”, and I’m proud to say it makes a nice passive income of ~$350 MRR (monthly recurring revenue).
|
||||
|
||||
I personally believe we’re in a sweet spot in software development where there exists a lot of potential to develop new, profitable AI-powered apps, especially by "indiehackers" and "solopreneurs".
|
||||
|
||||
This is why Open SaaS features an AI scheduling assistant demo app. You input your tasks for along with their alotted time, and the AI Scheduler creates a detailed plan for your day.
|
||||
|
||||
[![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j4suf7g9jm5w93ri3bqx.png)](https://www.producthunt.com/posts/open-saas)
|
||||
|
||||
Under the hood, this is using OpenAI’s API to assign each task a priority, and break them up into detailed sub-tasks, including coffee breaks! It’s also leverages OpenAI’s function calling feature to return the response back in a user-defined JSON object, so that the client can consume it correctly every time. Also, we're planning on adding open-source LLMs in the future, so stay tuned!
|
||||
|
||||
The demo AI Scheduler is there to help developers learn how to use the OpenAI API effectively, and to spark some creative SaaS app ideas!
|
||||
|
||||
### Deploy Anywhere. Easily.
|
||||
|
||||
A lot of the popular SaaS starters out there use hosting-dependent frameworks, which means you're stuck relying on one provider for deployments. While these can be easy options, it may not always be the best for your app.
|
||||
|
||||
Wasp gives you endless possibilities for deploying your full-stack app:
|
||||
|
||||
- One-command deploy to [Fly.io](http://Fly.io) with `wasp deploy`
|
||||
- Use `wasp build` and deploy the Dockerfiles and client wherever you like!
|
||||
|
||||
The great thing about `wasp deploy`, is that it automatically generates and deploys your database, server, and client, as well as sets up your environment variables for you.
|
||||
|
||||
Open SaaS also has built in environment variable and constants validators to make sure that you’ve got everything correctly set up for deployment, as well as deployment guides in the docs
|
||||
|
||||
[![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fihbij250xtbdtjbjoks.png)](https://www.producthunt.com/posts/open-saas)
|
||||
|
||||
In the end, you own your code and are free to deploy it wherever, without vendor lock-in.
|
||||
|
||||
## Help us, help you
|
||||
|
||||
<a href="https://www.producthunt.com/posts/open-saas?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-open-saas" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=436467&theme=light" alt="Open SaaS - Open-source & 100% free React & Node.js SaaS starter! | Product Hunt"/></a>
|
||||
|
||||
Wanna support our free, open-source initiative? Then go show us some support [on Product Hunt](https://www.producthunt.com/posts/open-saas) right now! 🙏
|
||||
|
||||
[![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wppn8mlby0p7h1f8xl6w.png)](https://www.producthunt.com/posts/open-saas)
|
||||
|
||||
## Now Go Build your SaaS!
|
||||
|
||||
We hope that Open SaaS empowers more developers to ship their ideas and side-projects. And we also hope to get some feedback and input from developers so we can make this the best SaaS boilerplate starter out there.
|
||||
|
||||
So, please, if you have any comments or catch any bugs, submit [an issue here](https://github.com/wasp-lang/open-saas/issues).
|
||||
|
||||
And if you’re finding Open SaaS and/or Wasp useful, the easiest way to support is by throwing us a star:
|
||||
|
||||
- Star the [Open SaaS repo](https://github.com/wasp-lang/open-saas)
|
||||
|
@ -9,7 +9,8 @@ const Announcement = () => {
|
||||
let history = useHistory()
|
||||
|
||||
const handleLink = () => {
|
||||
window.open('https://magic-app-generator.wasp-lang.dev/')
|
||||
// window.open('https://magic-app-generator.wasp-lang.dev/')
|
||||
window.open('https://www.producthunt.com/posts/open-saas')
|
||||
//history.push('/blog/2023/06/30/tutorial-jam')
|
||||
//history.push('/#signup')
|
||||
|
||||
@ -40,7 +41,7 @@ const Announcement = () => {
|
||||
`}
|
||||
>
|
||||
<span className="item-center flex gap-2 px-3">
|
||||
<span>Try our GPT-Powered Web App Starter!</span>
|
||||
<span>Our free SaaS starter is live on Product Hunt!</span>
|
||||
</span>
|
||||
|
||||
<span className="hidden items-center space-x-2 px-3 lg:flex">
|
||||
@ -50,7 +51,8 @@ const Announcement = () => {
|
||||
hover:bg-neutral-600
|
||||
`}
|
||||
>
|
||||
Generate your app 🤖 →
|
||||
{/* Generate your app 🤖 → */}
|
||||
Support Open SaaS 🙏 →
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
|
@ -59,11 +59,6 @@ const Index = () => {
|
||||
content="Develop full-stack web apps without boilerplate."
|
||||
/>
|
||||
<meta property="twitter:image" content={coverPhotoAbsoluteUrl} />
|
||||
|
||||
<script
|
||||
id="wasp-langdev-2392a8eb"
|
||||
src="https://letsask.ai/widget.js"
|
||||
></script>
|
||||
</Head>
|
||||
<Nav />
|
||||
<div className="min-h-screen">
|
||||
|
BIN
web/static/img/lw5/dont-leave.gif
Normal file
After Width: | Height: | Size: 3.6 MiB |
BIN
web/static/img/lw5/lw5-banner.png
Normal file
After Width: | Height: | Size: 3.1 MiB |
BIN
web/static/img/lw5/mage-hiw.gif
Normal file
After Width: | Height: | Size: 7.8 MiB |
BIN
web/static/img/lw5/nice-testimonial.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
web/static/img/lw5/open_saas_freedom.png
Normal file
After Width: | Height: | Size: 2.3 MiB |
BIN
web/static/img/lw5/real-boy.gif
Normal file
After Width: | Height: | Size: 410 KiB |
BIN
web/static/img/lw5/real-framework.gif
Normal file
After Width: | Height: | Size: 345 KiB |
BIN
web/static/img/lw5/say-my-name.gif
Normal file
After Width: | Height: | Size: 2.5 MiB |
BIN
web/static/img/open-saas/open-saas-ph.png
Normal file
After Width: | Height: | Size: 230 KiB |