diff --git a/apps/web/package.json b/apps/web/package.json
index 162ba5b..44d24e9 100644
--- a/apps/web/package.json
+++ b/apps/web/package.json
@@ -6,7 +6,8 @@
"typecheck": "tsc --noEmit",
"build": "next build",
"build:web": "next build",
- "dev": "next dev -p 8082",
+ "dev": "concurrently \"next dev -p 8082\" \"npm run stripe:webhook\"",
+ "stripe:webhook": "stripe listen --forward-to localhost:8082/api/stripe/webhook",
"lint": "next lint",
"start": "next start",
"db:typegen": "npx supabase gen types typescript --local --schema public > src/types/supabase.ts"
@@ -48,7 +49,6 @@
"@t3-oss/env-nextjs": "^0.2.1",
"@tailwindcss/typography": "^0.5.9",
"@tanstack/react-query": "^5.40.0",
- "@tanstack/react-query-devtools": "^4.36.1",
"@tippyjs/react": "^4.2.6",
"@tiptap/extension-code-block-lowlight": "^2.1.13",
"@tiptap/extension-heading": "^2.0.3",
@@ -133,6 +133,7 @@
"@typescript-eslint/eslint-plugin": "^5.56.0",
"@typescript-eslint/parser": "^5.56.0",
"autoprefixer": "^10.4.14",
+ "concurrently": "^9.0.1",
"eslint": "^8.36.0",
"eslint-config-next": "^13.4.1",
"postcss": "^8.4.21",
diff --git a/apps/web/src/pages/sign-in.tsx b/apps/web/src/pages/sign-in.tsx
index fabb7c4..096d6ad 100644
--- a/apps/web/src/pages/sign-in.tsx
+++ b/apps/web/src/pages/sign-in.tsx
@@ -80,38 +80,44 @@ export default function SignIn() {
return (
-
+
- {loading && (
+ {loading ? (
+ ) : (
+
)}
-
-
-
- Forgot your password?
-
-
- Don't have an account?
-
-
);
}
diff --git a/package-lock.json b/package-lock.json
index 9f3600f..7d122f4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,7 +20,8 @@
"sugar-high": "^0.6.1",
"tsx": "^4.7.1",
"web": "^0.1.0",
- "zenblog": "^0.2.1"
+ "zenblog": "^0.2.1",
+ "zod": "^3.23.8"
},
"devDependencies": {
"@turbo/gen": "^1.9.7",
@@ -179,7 +180,6 @@
"@t3-oss/env-nextjs": "^0.2.1",
"@tailwindcss/typography": "^0.5.9",
"@tanstack/react-query": "^5.40.0",
- "@tanstack/react-query-devtools": "^4.36.1",
"@tippyjs/react": "^4.2.6",
"@tiptap/extension-code-block-lowlight": "^2.1.13",
"@tiptap/extension-heading": "^2.0.3",
@@ -264,6 +264,7 @@
"@typescript-eslint/eslint-plugin": "^5.56.0",
"@typescript-eslint/parser": "^5.56.0",
"autoprefixer": "^10.4.14",
+ "concurrently": "^9.0.1",
"eslint": "^8.36.0",
"eslint-config-next": "^13.4.1",
"postcss": "^8.4.21",
@@ -751,6 +752,31 @@
"node": ">= 0.8"
}
},
+ "apps/web/node_modules/concurrently": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.0.1.tgz",
+ "integrity": "sha512-wYKvCd/f54sTXJMSfV6Ln/B8UrfLBKOYa+lzc6CHay3Qek+LorVSBdMVfyewFhRbH0Rbabsk4D+3PL/VjQ5gzg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.2",
+ "lodash": "^4.17.21",
+ "rxjs": "^7.8.1",
+ "shell-quote": "^1.8.1",
+ "supports-color": "^8.1.1",
+ "tree-kill": "^1.2.2",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "conc": "dist/bin/concurrently.js",
+ "concurrently": "dist/bin/concurrently.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
+ }
+ },
"apps/web/node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -889,6 +915,21 @@
"node": ">= 0.8"
}
},
+ "apps/web/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
"apps/web/node_modules/toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
@@ -897,14 +938,6 @@
"node": ">=0.6"
}
},
- "apps/web/node_modules/zod": {
- "version": "3.22.5",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.5.tgz",
- "integrity": "sha512-HqnGsCdVZ2xc0qWPLdO25WnseXThh0kEYKIdV5F/hTHO75hNZFp8thxSeHhiPrHZKrFTo1SOgkAj9po5bexZlw==",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
"apps/website": {
"name": "@zendo/website",
"version": "0.1.0",
@@ -8289,77 +8322,6 @@
"tailwindcss": ">=3.0.0 || insiders"
}
},
- "node_modules/@tanstack/match-sorter-utils": {
- "version": "8.8.4",
- "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.8.4.tgz",
- "integrity": "sha512-rKH8LjZiszWEvmi01NR72QWZ8m4xmXre0OOwlRGnjU01Eqz/QnN+cqpty2PJ0efHblq09+KilvyR7lsbzmXVEw==",
- "dependencies": {
- "remove-accents": "0.4.2"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/kentcdodds"
- }
- },
- "node_modules/@tanstack/query-core": {
- "version": "4.36.1",
- "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.36.1.tgz",
- "integrity": "sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==",
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
- }
- },
- "node_modules/@tanstack/react-query": {
- "version": "4.36.1",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.36.1.tgz",
- "integrity": "sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==",
- "peer": true,
- "dependencies": {
- "@tanstack/query-core": "4.36.1",
- "use-sync-external-store": "^1.2.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-native": "*"
- },
- "peerDependenciesMeta": {
- "react-dom": {
- "optional": true
- },
- "react-native": {
- "optional": true
- }
- }
- },
- "node_modules/@tanstack/react-query-devtools": {
- "version": "4.36.1",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-4.36.1.tgz",
- "integrity": "sha512-WYku83CKP3OevnYSG8Y/QO9g0rT75v1om5IvcWUwiUZJ4LanYGLVCZ8TdFG5jfsq4Ej/lu2wwDAULEUnRIMBSw==",
- "dependencies": {
- "@tanstack/match-sorter-utils": "^8.7.0",
- "superjson": "^1.10.0",
- "use-sync-external-store": "^1.2.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/tannerlinsley"
- },
- "peerDependencies": {
- "@tanstack/react-query": "^4.36.1",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/@tanstack/react-virtual": {
"version": "3.8.3",
"resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.8.3.tgz",
diff --git a/package.json b/package.json
index fa8cb36..fe3b47b 100644
--- a/package.json
+++ b/package.json
@@ -48,7 +48,8 @@
"sugar-high": "^0.6.1",
"tsx": "^4.7.1",
"web": "^0.1.0",
- "zenblog": "^0.2.1"
+ "zenblog": "^0.2.1",
+ "zod": "^3.23.8"
},
"engines": {
"node": ">=18.0.0",