mirror of
https://github.com/wasp-lang/open-saas.git
synced 2025-11-25 20:07:52 +01:00
refactor Stripe webhook (#200)
* rename TierIds to PaymentPlanIds * refactor webhook and util functions * pass userDelegate to function * Update dbSeeds.ts * update app diff * Update template/app/src/server/stripe/stripeClient.ts Co-authored-by: Martin Šošić <Martinsos@users.noreply.github.com> * extract event handlers and more * Update AccountPage.tsx * address filips pro effective typescripting and stuff * Martin's attempt at consolidating types. * fix * fix webhook events and validation * small changes * put stripe event handlers back for marty merge * merge consilidated types from martin * move some types around * add docs for stripe api version * Update AccountPage.tsx * Update stripe.ts * update SubscriptionStatus type * Update actions.ts * add assertUnreachable util * more small changes * Update deploying.md * update accountPage and docs * update app_diff --------- Co-authored-by: Martin Šošić <Martinsos@users.noreply.github.com> Co-authored-by: Martin Sosic <sosic.martin@gmail.com>
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
@@ -11,6 +11,7 @@
|
||||
const [email, setEmail] = useState<string | undefined>(undefined);
|
||||
const [isAdminFilter, setIsAdminFilter] = useState<boolean | undefined>(undefined);
|
||||
const [statusOptions, setStatusOptions] = useState<SubscriptionStatusOptions[]>([]);
|
||||
const [statusOptions, setStatusOptions] = useState<SubscriptionStatus[]>([]);
|
||||
+ const [isDemoInfoVisible, setIsDemoInfoVisible] = useState(false);
|
||||
const { data, isLoading, error } = useQuery(getPaginatedUsers, {
|
||||
skip,
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
+ testimonials,
|
||||
+} from './contentSections';
|
||||
import DropdownUser from '../components/DropdownUser';
|
||||
-import { DOCS_URL } from '../../shared/constants';
|
||||
+import { DOCS_URL, GITHUB_URL } from '../../shared/constants';
|
||||
-import { DocsUrl } from '../../common';
|
||||
+import { DocsUrl, GithubUrl } from '../../common';
|
||||
import { UserMenuItems } from '../components/UserMenuItems';
|
||||
import DarkModeSwitcher from '../admin/components/DarkModeSwitcher';
|
||||
|
||||
@@ -137,14 +137,14 @@
|
||||
</p>
|
||||
<div className='mt-10 flex items-center justify-center gap-x-6'>
|
||||
<a
|
||||
href={DOCS_URL}
|
||||
href={DocsUrl}
|
||||
- className='rounded-md px-3.5 py-2.5 text-sm font-semibold text-gray-700 ring-1 ring-inset ring-gray-200 hover:ring-2 hover:ring-yellow-300 shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 dark:text-white'
|
||||
+ className='rounded-md px-6 py-4 text-sm font-semibold text-gray-700 ring-1 ring-inset ring-gray-200 hover:ring-2 hover:ring-yellow-300 shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 dark:text-white'
|
||||
>
|
||||
Get Started <span aria-hidden='true'>→</span>
|
||||
</a>
|
||||
+ <a
|
||||
+ href={GITHUB_URL}
|
||||
+ href={GithubUrl}
|
||||
+ className='group relative flex items-center justify-center rounded-md bg-gray-100 px-6 py-4 text-sm font-semibold shadow-sm ring-1 ring-inset ring-gray-200 dark:bg-gray-700 hover:ring-2 hover:ring-yellow-300 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600'
|
||||
+ >
|
||||
+ {/* <AiFillGithub size='1.25rem' className='mr-2' /> */}
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
--- template/app/src/client/landing-page/contentSections.ts
|
||||
+++ opensaas-sh/app/src/client/landing-page/contentSections.ts
|
||||
@@ -1,74 +1,150 @@
|
||||
-import { DOCS_URL, BLOG_URL } from '../../shared/constants';
|
||||
@@ -1,74 +1,126 @@
|
||||
-import { DocsUrl, BlogUrl } from '../../common';
|
||||
-import daBoiAvatar from '../static/da-boi.png';
|
||||
-import avatarPlaceholder from '../static/avatar-placeholder.png';
|
||||
import { routes } from 'wasp/client/router';
|
||||
+import { DOCS_URL, BLOG_URL, GITHUB_URL } from '../../shared/constants';
|
||||
+import daBoiAavatar from '../static/da-boi.png';
|
||||
-import { routes } from 'wasp/client/router';
|
||||
+import { DocsUrl, BlogUrl, GithubUrl } from '../../common';
|
||||
|
||||
export const navigation = [
|
||||
{ name: 'Features', href: '#features' },
|
||||
- { name: 'Pricing', href: routes.PricingPageRoute.build() },
|
||||
{ name: 'Documentation', href: DOCS_URL },
|
||||
{ name: 'Blog', href: BLOG_URL },
|
||||
{ name: 'Documentation', href: DocsUrl },
|
||||
{ name: 'Blog', href: BlogUrl },
|
||||
];
|
||||
export const features = [
|
||||
{
|
||||
@@ -22,7 +21,7 @@
|
||||
+ description:
|
||||
+ 'The repo and framework are 100% open-source, and so are the services wherever possible. Still missing something? Contribute!',
|
||||
icon: '🤝',
|
||||
href: DOCS_URL,
|
||||
href: DocsUrl,
|
||||
},
|
||||
{
|
||||
- name: 'Cool Feature #2',
|
||||
@@ -30,8 +29,8 @@
|
||||
+ name: 'DIY Auth, Done For You',
|
||||
+ description: 'Pre-configured full-stack Auth that you own. No 3rd-party services or hidden fees.',
|
||||
icon: '🔐',
|
||||
- href: DOCS_URL,
|
||||
+ href: DOCS_URL + '/guides/authentication/',
|
||||
- href: DocsUrl,
|
||||
+ href: DocsUrl + '/guides/authentication/',
|
||||
},
|
||||
{
|
||||
- name: 'Cool Feature #3',
|
||||
@@ -40,7 +39,7 @@
|
||||
+ description:
|
||||
+ 'Full support for TypeScript with auto-generated types that span the whole stack. Nothing to configure!',
|
||||
icon: '🥞',
|
||||
href: DOCS_URL,
|
||||
href: DocsUrl,
|
||||
},
|
||||
{
|
||||
- name: 'Cool Feature #4',
|
||||
@@ -49,56 +48,56 @@
|
||||
+ description:
|
||||
+ "No SaaS is complete without payments. That's why payments and the necessary webhooks are built-in.",
|
||||
icon: '💸',
|
||||
+ href: DOCS_URL + '/guides/stripe-integration/',
|
||||
+ href: DocsUrl + '/guides/stripe-integration/',
|
||||
+ },
|
||||
+ {
|
||||
+ name: 'Admin Dashboard',
|
||||
+ description: 'Graphs! Tables! Analytics w/ Plausible or Google! All in one place. Ooooooooooh.',
|
||||
+ icon: '📈',
|
||||
+ href: DOCS_URL + '/general/admin-dashboard/',
|
||||
+ href: DocsUrl + '/general/admin-dashboard/',
|
||||
+ },
|
||||
+ {
|
||||
+ name: 'Email Sending',
|
||||
+ description:
|
||||
+ 'Email sending built-in. Combine it with the cron jobs feature to easily send emails to your customers.',
|
||||
+ icon: '📧',
|
||||
+ href: DOCS_URL + '/guides/email-sending/',
|
||||
+ href: DocsUrl + '/guides/email-sending/',
|
||||
+ },
|
||||
+ {
|
||||
+ name: 'OpenAI API Implemented',
|
||||
+ description: 'Have a sweet AI-powered app concept? Get your idea shipped to potential customers in days!',
|
||||
+ icon: '🤖',
|
||||
+ href: DOCS_URL,
|
||||
+ href: DocsUrl,
|
||||
+ },
|
||||
+ {
|
||||
+ name: 'File Uploads with AWS',
|
||||
+ description: 'File upload examples with AWS S3 presigned URLs are included and fully documented!',
|
||||
+ icon: '📁',
|
||||
+ href: DOCS_URL + '/guides/file-uploading/',
|
||||
+ href: DocsUrl + '/guides/file-uploading/',
|
||||
+ },
|
||||
+ {
|
||||
+ name: 'Deploy Anywhere. Easily.',
|
||||
+ description:
|
||||
+ 'No vendor lock-in because you own all your code. Deploy yourself, or let Wasp deploy it for you with a single command.',
|
||||
+ icon: '🚀 ',
|
||||
+ href: DOCS_URL + '/guides/deploying/',
|
||||
+ href: DocsUrl + '/guides/deploying/',
|
||||
+ },
|
||||
+ {
|
||||
+ name: 'Blog w/ Astro',
|
||||
+ description:
|
||||
+ 'Built-in blog with the Astro framework. Write your posts in Markdown, and watch your SEO performance take off.',
|
||||
+ icon: '📝',
|
||||
+ href: DOCS_URL + '/start/guided-tour/',
|
||||
+ href: DocsUrl + '/start/guided-tour/',
|
||||
+ },
|
||||
+ {
|
||||
+ name: 'Complete Documentation & Support',
|
||||
+ description: "We don't leave you hanging. We have detailed docs and a Discord community to help!",
|
||||
+ icon: '🫂',
|
||||
href: DOCS_URL,
|
||||
href: DocsUrl,
|
||||
},
|
||||
];
|
||||
export const testimonials = [
|
||||
- {
|
||||
{
|
||||
- name: 'Da Boi',
|
||||
- role: 'Wasp Mascot',
|
||||
- avatarSrc: daBoiAvatar,
|
||||
@@ -118,28 +117,12 @@
|
||||
- avatarSrc: avatarPlaceholder,
|
||||
- socialUrl: '#',
|
||||
- quote: 'My cats love it!',
|
||||
+ // {
|
||||
+ // name: 'Jason Warner',
|
||||
+ // role: 'former CTO @ GitHub',
|
||||
+ // avatarSrc: 'https://pbs.twimg.com/profile_images/1538765024021258240/qXJBzw6U_400x400.jpg',
|
||||
+ // socialUrl: 'https://twitter.com/jasoncwarner',
|
||||
+ // quote:
|
||||
+ // "I've actually had a bunch of fun with [Wasp]... I loved Batman.js back in the day and getting some of those vibes.",
|
||||
+ // },
|
||||
+ {
|
||||
+ name: 'Max Khamrovskyi',
|
||||
+ role: 'Senior Eng @ Red Hat',
|
||||
+ avatarSrc: 'https://pbs.twimg.com/profile_images/1719397191205179392/V_QrGPSO_400x400.jpg',
|
||||
+ socialUrl: 'https://twitter.com/maksim36ua',
|
||||
+ quote: 'I used Wasp to build and sell my AI-augmented SaaS app for marketplace vendors within two months!',
|
||||
+ },
|
||||
+ // {
|
||||
+ // name: 'Da Boi',
|
||||
+ // role: 'Wasp Mascot',
|
||||
+ // avatarSrc: daBoiAavatar,
|
||||
+ // socialUrl: 'https://twitter.com/wasplang',
|
||||
+ // quote: "I don't even know how to code. I'm just a plushie.",
|
||||
+ // },
|
||||
+ {
|
||||
+ name: 'Tim Skaggs',
|
||||
+ role: 'Founder @ Antler US',
|
||||
@@ -147,13 +130,6 @@
|
||||
+ socialUrl: 'https://twitter.com/tskaggs',
|
||||
+ quote: 'Nearly done with a MVP in 3 days of part-time work... and deployed on Fly.io in 10 minutes.',
|
||||
+ },
|
||||
+ // {
|
||||
+ // name: 'Fecony',
|
||||
+ // role: 'Wasp Expert',
|
||||
+ // avatarSrc: 'https://pbs.twimg.com/profile_images/1560677466749943810/QIFuQMqU_400x400.jpg',
|
||||
+ // socialUrl: 'https://twitter.com/webrickony',
|
||||
+ // quote: 'My cats love it!',
|
||||
+ // },
|
||||
+ {
|
||||
+ name: 'Jonathan Cocharan',
|
||||
+ role: 'Entrepreneur',
|
||||
@@ -183,7 +159,7 @@
|
||||
];
|
||||
export const footerNavigation = {
|
||||
app: [
|
||||
+ { name: 'Github', href: GITHUB_URL },
|
||||
{ name: 'Documentation', href: DOCS_URL },
|
||||
{ name: 'Blog', href: BLOG_URL },
|
||||
+ { name: 'Github', href: GithubUrl },
|
||||
{ name: 'Documentation', href: DocsUrl },
|
||||
{ name: 'Blog', href: BlogUrl },
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user