From 98667dac15235a937d9effbce218aa2a50466108 Mon Sep 17 00:00:00 2001 From: Gautam-Hegde Date: Mon, 22 Jan 2024 12:03:14 +0530 Subject: [PATCH 01/12] chore: code tidy --- .../src/components/(dashboard)/layout/verify-email-banner.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/web/src/components/(dashboard)/layout/verify-email-banner.tsx b/apps/web/src/components/(dashboard)/layout/verify-email-banner.tsx index 24e47c186..43eab21c5 100644 --- a/apps/web/src/components/(dashboard)/layout/verify-email-banner.tsx +++ b/apps/web/src/components/(dashboard)/layout/verify-email-banner.tsx @@ -4,7 +4,7 @@ import { useEffect, useState } from 'react'; import { AlertTriangle } from 'lucide-react'; -import { ONE_SECOND } from '@documenso/lib/constants/time'; +import { ONE_DAY, ONE_SECOND } from '@documenso/lib/constants/time'; import { trpc } from '@documenso/trpc/react'; import { Button } from '@documenso/ui/primitives/button'; import { @@ -65,7 +65,7 @@ export const VerifyEmailBanner = ({ email }: VerifyEmailBannerProps) => { if (emailVerificationDialogLastShown) { const lastShownTimestamp = parseInt(emailVerificationDialogLastShown); - if (Date.now() - lastShownTimestamp < 24 * 60 * 60 * 1000) { + if (Date.now() - lastShownTimestamp < ONE_DAY) { return; } } From 6e22eff5a14905a337fdf5b51aa2a0fe88708fb8 Mon Sep 17 00:00:00 2001 From: Gautam-Hegde Date: Tue, 23 Jan 2024 00:02:04 +0530 Subject: [PATCH 02/12] feat: command grp border --- packages/ui/primitives/command.tsx | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/ui/primitives/command.tsx b/packages/ui/primitives/command.tsx index cbc306c66..5f1ebe2e4 100644 --- a/packages/ui/primitives/command.tsx +++ b/packages/ui/primitives/command.tsx @@ -96,7 +96,10 @@ const CommandGroup = React.forwardRef< className, )} {...props} - /> + > +
+ {props.children} + )); CommandGroup.displayName = CommandPrimitive.Group.displayName; From 41843691e807b59efe1dd3ac1fec2b34e80fd1df Mon Sep 17 00:00:00 2001 From: Catalin Pit <25515812+catalinpit@users.noreply.github.com> Date: Fri, 8 Mar 2024 13:44:25 +0200 Subject: [PATCH 03/12] feat: add website cta --- apps/marketing/contentlayer.config.ts | 1 + .../src/app/(marketing)/blog/[post]/page.tsx | 4 +++ .../src/components/(marketing)/CTA.tsx | 26 +++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 apps/marketing/src/components/(marketing)/CTA.tsx diff --git a/apps/marketing/contentlayer.config.ts b/apps/marketing/contentlayer.config.ts index f1ba82b89..10999a408 100644 --- a/apps/marketing/contentlayer.config.ts +++ b/apps/marketing/contentlayer.config.ts @@ -12,6 +12,7 @@ export const BlogPost = defineDocumentType(() => ({ authorName: { type: 'string', required: true }, authorImage: { type: 'string', required: false }, authorRole: { type: 'string', required: true }, + cta: { type: 'boolean', required: false, default: true }, }, computedFields: { href: { type: 'string', resolve: (post) => `/${post._raw.flattenedPath}` }, diff --git a/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx b/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx index 14b8b2d8f..240e8576f 100644 --- a/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx +++ b/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx @@ -7,6 +7,8 @@ import { ChevronLeft } from 'lucide-react'; import type { MDXComponents } from 'mdx/types'; import { useMDXComponent } from 'next-contentlayer/hooks'; +import CTA from '~/components/(marketing)/CTA'; + export const dynamic = 'force-dynamic'; export const generateMetadata = ({ params }: { params: { post: string } }) => { @@ -89,6 +91,8 @@ export default function BlogPostPage({ params }: { params: { post: string } }) { Back to all posts + + {post.cta && } ); } diff --git a/apps/marketing/src/components/(marketing)/CTA.tsx b/apps/marketing/src/components/(marketing)/CTA.tsx new file mode 100644 index 000000000..b1b1e8603 --- /dev/null +++ b/apps/marketing/src/components/(marketing)/CTA.tsx @@ -0,0 +1,26 @@ +import Link from 'next/link'; + +import { Button } from '@documenso/ui/primitives/button'; + +// import { cn } from '@documenso/ui/lib/utils'; + +export default function CTA() { + return ( +
+

+ Join the Open Document Signing Movement +

+ +

+ Create your account and start using state-of-the-art document signing. Open and beautiful + signing is within your grasp. +

+ + +
+ ); +} From 61ca34eee17074d7025e00eea865d41f46c4686a Mon Sep 17 00:00:00 2001 From: Catalin Pit <25515812+catalinpit@users.noreply.github.com> Date: Fri, 8 Mar 2024 13:46:22 +0200 Subject: [PATCH 04/12] removed unused cn --- apps/marketing/src/components/(marketing)/CTA.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/marketing/src/components/(marketing)/CTA.tsx b/apps/marketing/src/components/(marketing)/CTA.tsx index b1b1e8603..92198a0f1 100644 --- a/apps/marketing/src/components/(marketing)/CTA.tsx +++ b/apps/marketing/src/components/(marketing)/CTA.tsx @@ -2,8 +2,6 @@ import Link from 'next/link'; import { Button } from '@documenso/ui/primitives/button'; -// import { cn } from '@documenso/ui/lib/utils'; - export default function CTA() { return (
From 0fdb7f7a8d6f80f74cada410c825b4bc000dc5fe Mon Sep 17 00:00:00 2001 From: Catalin Pit <25515812+catalinpit@users.noreply.github.com> Date: Fri, 8 Mar 2024 15:30:08 +0200 Subject: [PATCH 05/12] fix: changed to card component --- .../src/components/(marketing)/CTA.tsx | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/apps/marketing/src/components/(marketing)/CTA.tsx b/apps/marketing/src/components/(marketing)/CTA.tsx index 92198a0f1..d7ce572e1 100644 --- a/apps/marketing/src/components/(marketing)/CTA.tsx +++ b/apps/marketing/src/components/(marketing)/CTA.tsx @@ -1,24 +1,26 @@ import Link from 'next/link'; +import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app'; import { Button } from '@documenso/ui/primitives/button'; +import { Card, CardContent } from '@documenso/ui/primitives/card'; export default function CTA() { return ( -
-

- Join the Open Document Signing Movement -

+ + +

Join the Open Signing Movement

-

- Create your account and start using state-of-the-art document signing. Open and beautiful - signing is within your grasp. -

+

+ Create your account and start using state-of-the-art document signing. Open and beautiful + signing is within your grasp. +

- -
+ + + ); } From e8b209eb822e9c8280be689599f2ec1ec624adf1 Mon Sep 17 00:00:00 2001 From: Catalin Pit <25515812+catalinpit@users.noreply.github.com> Date: Fri, 8 Mar 2024 15:46:44 +0200 Subject: [PATCH 06/12] fix: fixed cta component --- .../src/app/(marketing)/blog/[post]/page.tsx | 81 +++---- .../src/app/(marketing)/open/page.tsx | 212 +++++++++--------- .../src/components/(marketing)/CTA.tsx | 8 +- 3 files changed, 153 insertions(+), 148 deletions(-) diff --git a/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx b/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx index 240e8576f..917045e5a 100644 --- a/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx +++ b/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx @@ -44,55 +44,56 @@ export default function BlogPostPage({ params }: { params: { post: string } }) { const MDXContent = useMDXComponent(post.body.code); return ( -
-
- +
+
+
+ -

{post.title}

+

{post.title}

-
-
- {post.authorImage && ( - {`Image - )} -
+
+
+ {post.authorImage && ( + {`Image + )} +
-
-

{post.authorName}

-

{post.authorRole}

+
+

{post.authorName}

+

{post.authorRole}

+
-
- + - {post.tags.length > 0 && ( -
    - {post.tags.map((tag, i) => ( -
  • - {tag} -
  • - ))} -
- )} + {post.tags.length > 0 && ( +
    + {post.tags.map((tag, i) => ( +
  • + {tag} +
  • + ))} +
+ )} -
- - - - Back to all posts - +
+ + + Back to all posts + +
{post.cta && } -
+
); } diff --git a/apps/marketing/src/app/(marketing)/open/page.tsx b/apps/marketing/src/app/(marketing)/open/page.tsx index 8fef81134..842d91ff8 100644 --- a/apps/marketing/src/app/(marketing)/open/page.tsx +++ b/apps/marketing/src/app/(marketing)/open/page.tsx @@ -7,6 +7,7 @@ import { getUserMonthlyGrowth } from '@documenso/lib/server-only/user/get-user-m import { FUNDING_RAISED } from '~/app/(marketing)/open/data'; import { MetricCard } from '~/app/(marketing)/open/metric-card'; import { SalaryBands } from '~/app/(marketing)/open/salary-bands'; +import CTA from '~/components/(marketing)/CTA'; import { BarMetric } from './bar-metrics'; import { CapTable } from './cap-table'; @@ -141,114 +142,117 @@ export default async function OpenPage() { const MONTHLY_USERS = await getUserMonthlyGrowth(); return ( -
-
-

Open Startup

+
+
+
+

Open Startup

-

- All our metrics, finances, and learnings are public. We believe in transparency and want - to share our journey with you. You can read more about why here:{' '} - - Announcing Open Metrics - -

-
- -
-
- - - - -
- - - - - - - - - - - data={EARLY_ADOPTERS_DATA} - metricKey="earlyAdopters" - title="Early Adopters" - label="Early Adopters" - className="col-span-12 lg:col-span-6" - extraInfo={} - /> - - - data={STARGAZERS_DATA} - metricKey="stars" - title="Github: Total Stars" - label="Stars" - className="col-span-12 lg:col-span-6" - /> - - - data={STARGAZERS_DATA} - metricKey="mergedPRs" - title="Github: Total Merged PRs" - label="Merged PRs" - chartHeight={300} - className="col-span-12 lg:col-span-6" - /> - - - data={STARGAZERS_DATA} - metricKey="forks" - title="Github: Total Forks" - label="Forks" - chartHeight={300} - className="col-span-12 lg:col-span-6" - /> - - - data={STARGAZERS_DATA} - metricKey="openIssues" - title="Github: Total Open Issues" - label="Open Issues" - chartHeight={300} - className="col-span-12 lg:col-span-6" - /> - - - - - - -
-

Where's the rest?

- -

- We're still working on getting all our metrics together. We'll update this page as soon - as we have more to share. +

+ All our metrics, finances, and learnings are public. We believe in transparency and want + to share our journey with you. You can read more about why here:{' '} + + Announcing Open Metrics +

+ +
+
+ + + + +
+ + + + + + + + + + + data={EARLY_ADOPTERS_DATA} + metricKey="earlyAdopters" + title="Early Adopters" + label="Early Adopters" + className="col-span-12 lg:col-span-6" + extraInfo={} + /> + + + data={STARGAZERS_DATA} + metricKey="stars" + title="Github: Total Stars" + label="Stars" + className="col-span-12 lg:col-span-6" + /> + + + data={STARGAZERS_DATA} + metricKey="mergedPRs" + title="Github: Total Merged PRs" + label="Merged PRs" + chartHeight={300} + className="col-span-12 lg:col-span-6" + /> + + + data={STARGAZERS_DATA} + metricKey="forks" + title="Github: Total Forks" + label="Forks" + chartHeight={300} + className="col-span-12 lg:col-span-6" + /> + + + data={STARGAZERS_DATA} + metricKey="openIssues" + title="Github: Total Open Issues" + label="Open Issues" + chartHeight={300} + className="col-span-12 lg:col-span-6" + /> + + + + + + +
+

Where's the rest?

+ +

+ We're still working on getting all our metrics together. We'll update this page as + soon as we have more to share. +

+
+
+
); } diff --git a/apps/marketing/src/components/(marketing)/CTA.tsx b/apps/marketing/src/components/(marketing)/CTA.tsx index d7ce572e1..dee5e5fae 100644 --- a/apps/marketing/src/components/(marketing)/CTA.tsx +++ b/apps/marketing/src/components/(marketing)/CTA.tsx @@ -6,16 +6,16 @@ import { Card, CardContent } from '@documenso/ui/primitives/card'; export default function CTA() { return ( - - + +

Join the Open Signing Movement

-

+

Create your account and start using state-of-the-art document signing. Open and beautiful signing is within your grasp.

-
- + setEnteredUsername('')}> @@ -103,17 +109,44 @@ export const DeleteAccountDialog = ({ className, user }: DeleteAccountDialogProp , along with all of your completed documents, signatures, and all other resources belonging to your Account. + {!hasTwoFactorAuthentication && ( + + Please type {username} to confirm. + + )} + {!hasTwoFactorAuthentication && ( +
+ setEnteredUsername(e.target.value)} + onPaste={(e) => e.preventDefault()} + /> +
+ )} - + {!hasTwoFactorAuthentication && ( + + )}
From b4332257627b442929d43bc41d1975ee1784d370 Mon Sep 17 00:00:00 2001 From: Gautam Hegde <85569489+Gautam-Hegde@users.noreply.github.com> Date: Fri, 8 Mar 2024 22:12:05 +0530 Subject: [PATCH 08/12] Update command.tsx --- packages/ui/primitives/command.tsx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/ui/primitives/command.tsx b/packages/ui/primitives/command.tsx index a36ae8fdc..89777d417 100644 --- a/packages/ui/primitives/command.tsx +++ b/packages/ui/primitives/command.tsx @@ -96,10 +96,7 @@ const CommandGroup = React.forwardRef< className, )} {...props} - > -
- {props.children} - + /> )); CommandGroup.displayName = CommandPrimitive.Group.displayName; From bbcb90d8a5c08c5337d2ae774b277cb4d9f3fff4 Mon Sep 17 00:00:00 2001 From: Adithya Krishna Date: Mon, 11 Mar 2024 15:00:58 +0530 Subject: [PATCH 09/12] chore: updated url regex Signed-off-by: Adithya Krishna --- packages/lib/constants/url-regex.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/lib/constants/url-regex.ts b/packages/lib/constants/url-regex.ts index 259ce070d..1dfb70ad3 100644 --- a/packages/lib/constants/url-regex.ts +++ b/packages/lib/constants/url-regex.ts @@ -1,2 +1,2 @@ export const URL_REGEX = - /^(https?):\/\/(?:www\.)?[a-zA-Z0-9-]+\.[a-zA-Z0-9()]{2,}(?:\/[a-zA-Z0-9-._?&=/]*)?$/i; + /^(https?):\/\/(?:www\.)?(?:[a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.[a-zA-Z0-9()]{2,}(?:\/[a-zA-Z0-9-._?&=/]*)?$/i; From efb90ca5fb6748c6aa409516c2e6a669b495f220 Mon Sep 17 00:00:00 2001 From: Gautam-Hegde Date: Mon, 11 Mar 2024 23:17:11 +0530 Subject: [PATCH 10/12] chore: use email confirmation --- .../settings/profile/delete-account-dialog.tsx | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx b/apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx index 2cb60f4a7..72a61d5ed 100644 --- a/apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx +++ b/apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx @@ -30,9 +30,9 @@ export const DeleteAccountDialog = ({ className, user }: DeleteAccountDialogProp const { toast } = useToast(); const hasTwoFactorAuthentication = user.twoFactorEnabled; - const username = user.name!; + const userEmail = user.email; - const [enteredUsername, setEnteredUsername] = useState(''); + const [enteredEmail, setEnteredEmail] = useState(''); const { mutateAsync: deleteAccount, isLoading: isDeletingAccount } = trpc.profile.deleteAccount.useMutation(); @@ -82,7 +82,7 @@ export const DeleteAccountDialog = ({ className, user }: DeleteAccountDialogProp
- setEnteredUsername('')}> + setEnteredEmail('')}> @@ -111,7 +111,7 @@ export const DeleteAccountDialog = ({ className, user }: DeleteAccountDialogProp {!hasTwoFactorAuthentication && ( - Please type {username} to confirm. + Please type {userEmail} to confirm. )} @@ -120,9 +120,8 @@ export const DeleteAccountDialog = ({ className, user }: DeleteAccountDialogProp
setEnteredUsername(e.target.value)} - onPaste={(e) => e.preventDefault()} + value={enteredEmail} + onChange={(e) => setEnteredEmail(e.target.value)} />
)} @@ -133,7 +132,7 @@ export const DeleteAccountDialog = ({ className, user }: DeleteAccountDialogProp onClick={onDeleteAccount} loading={isDeletingAccount} variant="outline" - disabled={hasTwoFactorAuthentication || enteredUsername !== username} + disabled={hasTwoFactorAuthentication || enteredEmail !== userEmail} > {isDeletingAccount ? ( 'Deleting account...' From f6c2b6c1c5a439199585198b4fce2245483f9e58 Mon Sep 17 00:00:00 2001 From: Lucas Smith Date: Tue, 12 Mar 2024 01:52:16 +0000 Subject: [PATCH 11/12] fix: minor updates --- .../src/app/(marketing)/blog/[post]/page.tsx | 5 +++-- apps/marketing/src/app/(marketing)/open/page.tsx | 5 +++-- .../(marketing)/{CTA.tsx => call-to-action.tsx} | 13 +++++++++---- 3 files changed, 15 insertions(+), 8 deletions(-) rename apps/marketing/src/components/(marketing)/{CTA.tsx => call-to-action.tsx} (77%) diff --git a/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx b/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx index 917045e5a..bd5fdb2da 100644 --- a/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx +++ b/apps/marketing/src/app/(marketing)/blog/[post]/page.tsx @@ -7,7 +7,7 @@ import { ChevronLeft } from 'lucide-react'; import type { MDXComponents } from 'mdx/types'; import { useMDXComponent } from 'next-contentlayer/hooks'; -import CTA from '~/components/(marketing)/CTA'; +import { CallToAction } from '~/components/(marketing)/call-to-action'; export const dynamic = 'force-dynamic'; @@ -93,7 +93,8 @@ export default function BlogPostPage({ params }: { params: { post: string } }) { Back to all posts - {post.cta && } + + {post.cta && }
); } diff --git a/apps/marketing/src/app/(marketing)/open/page.tsx b/apps/marketing/src/app/(marketing)/open/page.tsx index 842d91ff8..10ab71aa7 100644 --- a/apps/marketing/src/app/(marketing)/open/page.tsx +++ b/apps/marketing/src/app/(marketing)/open/page.tsx @@ -7,7 +7,7 @@ import { getUserMonthlyGrowth } from '@documenso/lib/server-only/user/get-user-m import { FUNDING_RAISED } from '~/app/(marketing)/open/data'; import { MetricCard } from '~/app/(marketing)/open/metric-card'; import { SalaryBands } from '~/app/(marketing)/open/salary-bands'; -import CTA from '~/components/(marketing)/CTA'; +import { CallToAction } from '~/components/(marketing)/call-to-action'; import { BarMetric } from './bar-metrics'; import { CapTable } from './cap-table'; @@ -252,7 +252,8 @@ export default async function OpenPage() {
- + + ); } diff --git a/apps/marketing/src/components/(marketing)/CTA.tsx b/apps/marketing/src/components/(marketing)/call-to-action.tsx similarity index 77% rename from apps/marketing/src/components/(marketing)/CTA.tsx rename to apps/marketing/src/components/(marketing)/call-to-action.tsx index dee5e5fae..3d1f51b23 100644 --- a/apps/marketing/src/components/(marketing)/CTA.tsx +++ b/apps/marketing/src/components/(marketing)/call-to-action.tsx @@ -4,9 +4,14 @@ import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app'; import { Button } from '@documenso/ui/primitives/button'; import { Card, CardContent } from '@documenso/ui/primitives/card'; -export default function CTA() { +type CallToActionProps = { + className?: string; + utmSource?: string; +}; + +export const CallToAction = ({ className, utmSource = 'generic-cta' }: CallToActionProps) => { return ( - +

Join the Open Signing Movement

@@ -16,11 +21,11 @@ export default function CTA() {

); -} +}; From d3f4e20f1cb76da91a68590e6de3880cd923fb2a Mon Sep 17 00:00:00 2001 From: Lucas Smith Date: Tue, 12 Mar 2024 02:57:22 +0000 Subject: [PATCH 12/12] fix: update styling and e2e test --- .../profile/delete-account-dialog.tsx | 44 ++++++++----------- .../app-tests/e2e/test-delete-user.spec.ts | 2 + 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx b/apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx index 72a61d5ed..2e1087380 100644 --- a/apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx +++ b/apps/web/src/app/(dashboard)/settings/profile/delete-account-dialog.tsx @@ -19,6 +19,7 @@ import { DialogTrigger, } from '@documenso/ui/primitives/dialog'; import { Input } from '@documenso/ui/primitives/input'; +import { Label } from '@documenso/ui/primitives/label'; import { useToast } from '@documenso/ui/primitives/use-toast'; export type DeleteAccountDialogProps = { @@ -30,7 +31,6 @@ export const DeleteAccountDialog = ({ className, user }: DeleteAccountDialogProp const { toast } = useToast(); const hasTwoFactorAuthentication = user.twoFactorEnabled; - const userEmail = user.email; const [enteredEmail, setEnteredEmail] = useState(''); @@ -86,6 +86,7 @@ export const DeleteAccountDialog = ({ className, user }: DeleteAccountDialogProp + Delete Account @@ -109,43 +110,34 @@ export const DeleteAccountDialog = ({ className, user }: DeleteAccountDialogProp , along with all of your completed documents, signatures, and all other resources belonging to your Account. - {!hasTwoFactorAuthentication && ( - - Please type {userEmail} to confirm. - - )} {!hasTwoFactorAuthentication && (
+ + setEnteredEmail(e.target.value)} />
)} - {!hasTwoFactorAuthentication && ( - - )} +
diff --git a/packages/app-tests/e2e/test-delete-user.spec.ts b/packages/app-tests/e2e/test-delete-user.spec.ts index beae6eb09..6eb72bad9 100644 --- a/packages/app-tests/e2e/test-delete-user.spec.ts +++ b/packages/app-tests/e2e/test-delete-user.spec.ts @@ -16,6 +16,8 @@ test('delete user', async ({ page }) => { }); await page.getByRole('button', { name: 'Delete Account' }).click(); + await page.getByLabel('Confirm Email').fill(user.email); + await expect(page.getByRole('button', { name: 'Confirm Deletion' })).not.toBeDisabled(); await page.getByRole('button', { name: 'Confirm Deletion' }).click(); await page.waitForURL(`${WEBAPP_BASE_URL}/signin`);