From ecc9dc63eac4e38a1e689d044a614006954d177e Mon Sep 17 00:00:00 2001 From: Mythie Date: Thu, 29 Feb 2024 13:22:21 +1100 Subject: [PATCH] feat: the rest of the owl --- apps/marketing/src/app/(marketing)/layout.tsx | 42 +- .../app/(marketing)/singleplayer/client.tsx | 2 +- apps/marketing/src/app/not-found.tsx | 2 +- .../src/components/(marketing)/callout.tsx | 2 +- .../src/components/(marketing)/header.tsx | 16 +- .../src/components/(marketing)/hero.tsx | 39 +- .../(marketing)/mobile-navigation.tsx | 12 +- .../components/(marketing)/pricing-table.tsx | 11 +- .../single-player-mode-success.tsx | 2 +- .../src/components/(marketing)/widget.tsx | 9 +- .../profile/claim-profile-alert-dialog.tsx | 2 +- .../web/src/app/(teams)/t/[teamUrl]/error.tsx | 2 +- .../src/app/(teams)/t/[teamUrl]/not-found.tsx | 2 +- .../src/app/(unauthenticated)/signup/page.tsx | 63 +-- .../src/app/(unauthenticated)/signup/view.tsx | 80 +++ .../claim-username-card.tsx | 93 ---- .../(dashboard)/layout/new/new-header.tsx | 87 ---- .../layout/new/new-mobile-hamburger.tsx | 20 - .../layout/new/new-mobile-navigation.tsx | 151 ------ .../forms/public-profile-claim-dialog.tsx | 25 +- apps/web/src/components/forms/signup.tsx | 4 +- apps/web/src/components/forms/v2/signup.tsx | 463 ++++++++++++++++++ .../web/src/components/partials/not-found.tsx | 2 +- .../components/ui/user-profile-skeleton.tsx | 29 +- .../src/components/ui/user-profile-timur.tsx | 87 ++++ packages/assets/images/Timur.png | Bin 9163 -> 0 bytes packages/assets/images/timur.png | Bin 0 -> 83747 bytes packages/lib/constants/feature-flags.ts | 1 + packages/lib/errors/app-error.ts | 2 + packages/lib/server-only/user/create-user.ts | 21 +- .../server-only/user/update-public-profile.ts | 4 +- packages/trpc/server/auth-router/router.ts | 21 +- packages/trpc/server/auth-router/schema.ts | 1 + packages/trpc/server/profile-router/router.ts | 18 + packages/trpc/server/profile-router/schema.ts | 9 +- packages/ui/primitives/announcement-bar.tsx | 32 -- 36 files changed, 828 insertions(+), 528 deletions(-) create mode 100644 apps/web/src/app/(unauthenticated)/signup/view.tsx delete mode 100644 apps/web/src/components/(dashboard)/claim-username-card/claim-username-card.tsx delete mode 100644 apps/web/src/components/(dashboard)/layout/new/new-header.tsx delete mode 100644 apps/web/src/components/(dashboard)/layout/new/new-mobile-hamburger.tsx delete mode 100644 apps/web/src/components/(dashboard)/layout/new/new-mobile-navigation.tsx create mode 100644 apps/web/src/components/forms/v2/signup.tsx create mode 100644 apps/web/src/components/ui/user-profile-timur.tsx delete mode 100644 packages/assets/images/Timur.png create mode 100644 packages/assets/images/timur.png delete mode 100644 packages/ui/primitives/announcement-bar.tsx diff --git a/apps/marketing/src/app/(marketing)/layout.tsx b/apps/marketing/src/app/(marketing)/layout.tsx index ab9de03d5..c5f761853 100644 --- a/apps/marketing/src/app/(marketing)/layout.tsx +++ b/apps/marketing/src/app/(marketing)/layout.tsx @@ -5,9 +5,10 @@ import React, { useEffect, useState } from 'react'; import Image from 'next/image'; import { usePathname } from 'next/navigation'; -import backgroundPattern from '@documenso/assets/images/background-lw-2.png'; +import launchWeekTwoImage from '@documenso/assets/images/background-lw-2.png'; +import { useFeatureFlags } from '@documenso/lib/client-only/providers/feature-flag'; +import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app'; import { cn } from '@documenso/ui/lib/utils'; -import { AnnouncementBar } from '@documenso/ui/primitives/announcement-bar'; import { Footer } from '~/components/(marketing)/footer'; import { Header } from '~/components/(marketing)/header'; @@ -20,6 +21,10 @@ export default function MarketingLayout({ children }: MarketingLayoutProps) { const [scrollY, setScrollY] = useState(0); const pathname = usePathname(); + const { getFlag } = useFeatureFlags(); + + const showProfilesAnnouncementBar = getFlag('marketing_profiles_announcement_bar'); + useEffect(() => { const onScroll = () => { setScrollY(window.scrollY); @@ -41,14 +46,31 @@ export default function MarketingLayout({ children }: MarketingLayoutProps) { 'bg-background/50 backdrop-blur-md': scrollY > 5, })} > -
- background pattern -
- + {showProfilesAnnouncementBar && ( +
+
+ Launch Week 2 +
+ +
+ Claim your documenso public profile username now!{' '} + documenso.com/u/yourname +
+ + Claim Now + +
+
+
+ )} +
diff --git a/apps/marketing/src/app/(marketing)/singleplayer/client.tsx b/apps/marketing/src/app/(marketing)/singleplayer/client.tsx index 9f1ebb289..4c1162599 100644 --- a/apps/marketing/src/app/(marketing)/singleplayer/client.tsx +++ b/apps/marketing/src/app/(marketing)/singleplayer/client.tsx @@ -191,7 +191,7 @@ export const SinglePlayerClient = () => {

Create a{' '} diff --git a/apps/marketing/src/app/not-found.tsx b/apps/marketing/src/app/not-found.tsx index a54f8ea34..d85cdb62f 100644 --- a/apps/marketing/src/app/not-found.tsx +++ b/apps/marketing/src/app/not-found.tsx @@ -43,7 +43,7 @@ export default function NotFound() {

diff --git a/apps/marketing/src/components/(marketing)/header.tsx b/apps/marketing/src/components/(marketing)/header.tsx index 038185031..915c13852 100644 --- a/apps/marketing/src/components/(marketing)/header.tsx +++ b/apps/marketing/src/components/(marketing)/header.tsx @@ -9,6 +9,7 @@ import Link from 'next/link'; import LogoImage from '@documenso/assets/logo.png'; import { useFeatureFlags } from '@documenso/lib/client-only/providers/feature-flag'; import { cn } from '@documenso/ui/lib/utils'; +import { Button } from '@documenso/ui/primitives/button'; import { HamburgerMenu } from './mobile-hamburger'; import { MobileNavigation } from './mobile-navigation'; @@ -68,21 +69,18 @@ export const Header = ({ className, ...props }: HeaderProps) => { Sign in - - + +
{ > Claim Community Plan - -80% + $30/mo @@ -191,32 +191,41 @@ export const Hero = ({ className, ...props }: HeroProps) => { Documenso Supporter Pledge

- Our mission is to create an open signing infrastructure that empowers the world. We - believe openness and cooperation are the way every business should be conducted. + Our mission is to create an open signing infrastructure that empowers the world, + enabling businesses to embrace openness, cooperation, and transparency. We believe + that signing, as a fundamental act, should embody these values. By offering an + open-source signing solution, we aim to make document signing accessible, transparent, + and trustworthy.

- By creating an open source signing solution we want to bring these values to - businesses' most fundamental act: signing. Document Signing should be open and - transparent, as should all trust based products. + Through our platform, called Documenso, we strive to earn your trust by allowing + self-hosting and providing complete visibility into its inner workings. We value + inclusivity and foster an environment where diverse perspectives and contributions are + welcomed, even though we may not implement them all.

- We aim to earn this trust by enabling everyone to self-host Documenso and inspect it’s - inner workings. We openly share our source, knowledge, and progress while creating - Documenso. + At Documenso, we envision a web-enabled future for business and contracts, and we are + committed to being the leading provider of open signing infrastructure. By combining + exceptional product design with open-source principles, we aim to deliver a robust and + well-designed application that exceeds your expectations.

- Exceptional products are the results of exceptional communities and we strive to - create an inclusive, creative environment, open to all who choose to support our - mission. We value the inputs, contributions, and perspectives of everyone in our - community, even though we can't apply them all. + We understand that exceptional products are born from exceptional communities, and we + invite you to join our open-source community. Your contributions, whether technical or + non-technical, will help shape the future of signing. Together, we can create a better + future for everyone.

- We are building the next generation of trust software and community the way it’s meant - to be: Beautifully designed and open for all to join. + Today we invite you to join us on this journey: By signing this mission statement you + signal your support of Documenso's mission{' '} + + (in a non-legally binding, but heartfelt way) + {' '} + and lock in the community plan for forever, including everything we build this year.

diff --git a/apps/marketing/src/components/(marketing)/mobile-navigation.tsx b/apps/marketing/src/components/(marketing)/mobile-navigation.tsx index 1c71da78a..434b30053 100644 --- a/apps/marketing/src/components/(marketing)/mobile-navigation.tsx +++ b/apps/marketing/src/components/(marketing)/mobile-navigation.tsx @@ -47,11 +47,11 @@ export const MENU_NAVIGATION_LINKS = [ text: 'Privacy', }, { - href: 'https://app.documenso.com/signin', + href: 'https://app.documenso.com/signin?utm_source=marketing-header', text: 'Sign in', }, { - href: 'https://app.documenso.com/signup', + href: 'https://app.documenso.com/signup?utm_source=marketing-header', text: 'Sign up', }, ]; @@ -108,13 +108,7 @@ export const MobileNavigation = ({ isMenuOpen, onMenuOpenChange }: MobileNavigat onClick={() => handleMenuItemClick()} target={target} > - {href === 'https://app.documenso.com/signup' ? ( - - {text} - - ) : ( - text - )} + {text} ))} diff --git a/apps/marketing/src/components/(marketing)/pricing-table.tsx b/apps/marketing/src/components/(marketing)/pricing-table.tsx index 748f7307f..ab35bcc90 100644 --- a/apps/marketing/src/components/(marketing)/pricing-table.tsx +++ b/apps/marketing/src/components/(marketing)/pricing-table.tsx @@ -83,7 +83,11 @@ export const PricingTable = ({ className, ...props }: PricingTableProps) => {

@@ -114,7 +118,10 @@ export const PricingTable = ({ className, ...props }: PricingTableProps) => {

diff --git a/apps/marketing/src/components/(marketing)/single-player-mode/single-player-mode-success.tsx b/apps/marketing/src/components/(marketing)/single-player-mode/single-player-mode-success.tsx index d8a8e2c53..32983d1f3 100644 --- a/apps/marketing/src/components/(marketing)/single-player-mode/single-player-mode-success.tsx +++ b/apps/marketing/src/components/(marketing)/single-player-mode/single-player-mode-success.tsx @@ -86,7 +86,7 @@ export const SinglePlayerModeSuccess = ({

Create a{' '} diff --git a/apps/marketing/src/components/(marketing)/widget.tsx b/apps/marketing/src/components/(marketing)/widget.tsx index 88b7f47c9..15e3fbdeb 100644 --- a/apps/marketing/src/components/(marketing)/widget.tsx +++ b/apps/marketing/src/components/(marketing)/widget.tsx @@ -208,7 +208,7 @@ export const Widget = ({ className, children, ...props }: WidgetProps) => { -

diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/error.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/error.tsx index 2c31195f9..1e1eb9921 100644 --- a/apps/web/src/app/(teams)/t/[teamUrl]/error.tsx +++ b/apps/web/src/app/(teams)/t/[teamUrl]/error.tsx @@ -34,7 +34,7 @@ export default function ErrorPage({ error }: ErrorProps) {
-
-
-
-
- -
- NDA.pdf - - Like to discuss about my work? - -
-
- -
- - - - - - - ); -} diff --git a/apps/web/src/components/(dashboard)/layout/new/new-header.tsx b/apps/web/src/components/(dashboard)/layout/new/new-header.tsx deleted file mode 100644 index 66036359c..000000000 --- a/apps/web/src/components/(dashboard)/layout/new/new-header.tsx +++ /dev/null @@ -1,87 +0,0 @@ -'use client'; - -import type { HTMLAttributes } from 'react'; -import { useState } from 'react'; - -import Image from 'next/image'; -import Link from 'next/link'; - -import LogoImage from '@documenso/assets/logo.png'; -import { cn } from '@documenso/ui/lib/utils'; - -import { NewHamburgerMenu } from './new-mobile-hamburger'; -import { NewMobileNavigation } from './new-mobile-navigation'; - -export type HeaderProps = HTMLAttributes; - -export const NewHeader = ({ className, ...props }: HeaderProps) => { - const [isHamburgerMenuOpen, setIsHamburgerMenuOpen] = useState(false); - - return ( -
-
- setIsHamburgerMenuOpen(false)}> - Documenso Logo - -
- -
- - Pricing - - - - Blog - - - - Open Startup - - - - Sign in - - - - Sign up - - -
- - setIsHamburgerMenuOpen((v) => !v)} - isMenuOpen={isHamburgerMenuOpen} - /> - -
- ); -}; diff --git a/apps/web/src/components/(dashboard)/layout/new/new-mobile-hamburger.tsx b/apps/web/src/components/(dashboard)/layout/new/new-mobile-hamburger.tsx deleted file mode 100644 index 8b7666df4..000000000 --- a/apps/web/src/components/(dashboard)/layout/new/new-mobile-hamburger.tsx +++ /dev/null @@ -1,20 +0,0 @@ -'use client'; - -import { Menu, X } from 'lucide-react'; - -import { Button } from '@documenso/ui/primitives/button'; - -export interface HamburgerMenuProps { - isMenuOpen: boolean; - onToggleMenuOpen?: () => void; -} - -export const NewHamburgerMenu = ({ isMenuOpen, onToggleMenuOpen }: HamburgerMenuProps) => { - return ( -
- -
- ); -}; diff --git a/apps/web/src/components/(dashboard)/layout/new/new-mobile-navigation.tsx b/apps/web/src/components/(dashboard)/layout/new/new-mobile-navigation.tsx deleted file mode 100644 index 0d104eeb6..000000000 --- a/apps/web/src/components/(dashboard)/layout/new/new-mobile-navigation.tsx +++ /dev/null @@ -1,151 +0,0 @@ -'use client'; - -import Image from 'next/image'; -import Link from 'next/link'; - -import { motion, useReducedMotion } from 'framer-motion'; -import { FaXTwitter } from 'react-icons/fa6'; -import { LiaDiscord } from 'react-icons/lia'; -import { LuGithub } from 'react-icons/lu'; - -import LogoImage from '@documenso/assets/logo.png'; -import { Sheet, SheetContent } from '@documenso/ui/primitives/sheet'; - -export type MobileNavigationProps = { - isMenuOpen: boolean; - onMenuOpenChange?: (_value: boolean) => void; -}; - -export const MENU_NAVIGATION_LINKS = [ - { - href: 'https://documenso.com/singleplayer', - text: 'Singleplayer', - }, - { - href: 'https://documenso.com/blog', - text: 'Blog', - }, - { - href: 'https://documenso.com/pricing', - text: 'Pricing', - }, - { - href: 'https://documenso.com/open', - text: 'Open Startup', - }, - { - href: 'https://status.documenso.com', - text: 'Status', - }, - { - href: 'mailto:support@documenso.com', - text: 'Support', - target: '_blank', - }, - { - href: 'https://documenso.com/privacy', - text: 'Privacy', - }, - { - href: '/signin', - text: 'Sign in', - }, - { - href: '/signup', - text: 'Sign up', - }, -]; - -export const NewMobileNavigation = ({ isMenuOpen, onMenuOpenChange }: MobileNavigationProps) => { - const shouldReduceMotion = useReducedMotion(); - - const handleMenuItemClick = () => { - onMenuOpenChange?.(false); - }; - - return ( - - - - Documenso Logo - - - - {MENU_NAVIGATION_LINKS.map(({ href, text, target }) => ( - - handleMenuItemClick()} - target={target} - > - {href === 'https://app.documenso.com/signup' ? ( - - {text} - - ) : ( - text - )} - - - ))} - - -
- - - - - - - - - - - -
-
-
- ); -}; diff --git a/apps/web/src/components/forms/public-profile-claim-dialog.tsx b/apps/web/src/components/forms/public-profile-claim-dialog.tsx index 54a602dee..dbd52fd27 100644 --- a/apps/web/src/components/forms/public-profile-claim-dialog.tsx +++ b/apps/web/src/components/forms/public-profile-claim-dialog.tsx @@ -9,6 +9,7 @@ import { useForm } from 'react-hook-form'; import { z } from 'zod'; import profileClaimTeaserImage from '@documenso/assets/images/profile-claim-teaser.png'; +import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app'; import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error'; import type { User } from '@documenso/prisma/client'; import { trpc } from '@documenso/trpc/react'; @@ -35,7 +36,14 @@ import { useToast } from '@documenso/ui/primitives/use-toast'; import { UserProfileSkeleton } from '../ui/user-profile-skeleton'; export const ZClaimPublicProfileFormSchema = z.object({ - url: z.string().trim().min(1, { message: 'Please enter a valid URL slug.' }), + url: z + .string() + .trim() + .toLowerCase() + .min(1, { message: 'Please enter a valid username.' }) + .regex(/^[a-z0-9-]+$/, { + message: 'Username can only container alphanumeric characters and dashes.', + }), }); export type TClaimPublicProfileFormSchema = z.infer; @@ -57,6 +65,8 @@ export const ClaimPublicProfileDialogForm = ({ const [claimed, setClaimed] = useState(false); + const baseUrl = new URL(NEXT_PUBLIC_WEBAPP_URL() ?? 'http://localhost:3000'); + const form = useForm({ values: { url: user.url || '', @@ -82,12 +92,17 @@ export const ClaimPublicProfileDialogForm = ({ if (error.code === AppErrorCode.PROFILE_URL_TAKEN) { form.setError('url', { type: 'manual', - message: 'This URL is already taken', + message: 'This username is already taken', + }); + } else if (error.code === AppErrorCode.PREMIUM_PROFILE_URL) { + form.setError('url', { + type: 'manual', + message: error.message, }); } else if (error.code !== AppErrorCode.UNKNOWN_ERROR) { toast({ title: 'An error occurred', - description: err.message, + description: error.userMessage ?? error.message, variant: 'destructive', }); } else { @@ -131,7 +146,7 @@ export const ClaimPublicProfileDialogForm = ({ name="url" render={({ field }) => ( - Public profile URL + Public profile username @@ -140,7 +155,7 @@ export const ClaimPublicProfileDialogForm = ({
- documenso.com/u/{field.value || ''} + {baseUrl.host}/u/{field.value || ''}
)} diff --git a/apps/web/src/components/forms/signup.tsx b/apps/web/src/components/forms/signup.tsx index 0ec562d7d..9b39c31db 100644 --- a/apps/web/src/components/forms/signup.tsx +++ b/apps/web/src/components/forms/signup.tsx @@ -61,7 +61,7 @@ export const SignUpForm = ({ className, initialEmail, isGoogleSSOEnabled }: Sign const router = useRouter(); const searchParams = useSearchParams(); - const src = searchParams?.get('src') ?? null; + const utmSrc = searchParams?.get('utm_source') ?? null; const form = useForm({ values: { @@ -93,7 +93,7 @@ export const SignUpForm = ({ className, initialEmail, isGoogleSSOEnabled }: Sign analytics.capture('App: User Sign Up', { email, timestamp: new Date().toISOString(), - custom_campaign_params: { src }, + custom_campaign_params: { src: utmSrc }, }); } catch (err) { if (err instanceof TRPCClientError && err.data?.code === 'BAD_REQUEST') { diff --git a/apps/web/src/components/forms/v2/signup.tsx b/apps/web/src/components/forms/v2/signup.tsx new file mode 100644 index 000000000..713bde4b4 --- /dev/null +++ b/apps/web/src/components/forms/v2/signup.tsx @@ -0,0 +1,463 @@ +'use client'; + +import { useState } from 'react'; + +import Image from 'next/image'; +import Link from 'next/link'; +import { useRouter, useSearchParams } from 'next/navigation'; + +import { zodResolver } from '@hookform/resolvers/zod'; +import { AnimatePresence, motion } from 'framer-motion'; +import { signIn } from 'next-auth/react'; +import { useForm } from 'react-hook-form'; +import { FcGoogle } from 'react-icons/fc'; +import { z } from 'zod'; + +import communityCardsImage from '@documenso/assets/images/community-cards.png'; +import { useAnalytics } from '@documenso/lib/client-only/hooks/use-analytics'; +import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app'; +import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error'; +import { TRPCClientError } from '@documenso/trpc/client'; +import { trpc } from '@documenso/trpc/react'; +import { ZPasswordSchema } from '@documenso/trpc/server/auth-router/schema'; +import { cn } from '@documenso/ui/lib/utils'; +import { Button } from '@documenso/ui/primitives/button'; +import { + Form, + FormControl, + FormField, + FormItem, + FormLabel, + FormMessage, +} from '@documenso/ui/primitives/form/form'; +import { Input } from '@documenso/ui/primitives/input'; +import { PasswordInput } from '@documenso/ui/primitives/password-input'; +import { SignaturePad } from '@documenso/ui/primitives/signature-pad'; +import { useToast } from '@documenso/ui/primitives/use-toast'; + +import { UserProfileSkeleton } from '~/components/ui/user-profile-skeleton'; +import { UserProfileTimur } from '~/components/ui/user-profile-timur'; + +const SIGN_UP_REDIRECT_PATH = '/documents'; + +type SignUpStep = 'BASIC_DETAILS' | 'CLAIM_USERNAME'; + +export const ZSignUpFormV2Schema = z + .object({ + name: z.string().trim().min(1, { message: 'Please enter a valid name.' }), + email: z.string().email().min(1), + password: ZPasswordSchema, + signature: z.string().min(1, { message: 'We need your signature to sign documents' }), + url: z + .string() + .trim() + .toLowerCase() + .min(1, { message: 'We need a username to create your profile' }) + .regex(/^[a-z0-9-]+$/, { + message: 'Username can only container alphanumeric characters and dashes.', + }), + }) + .refine( + (data) => { + const { name, email, password } = data; + return !password.includes(name) && !password.includes(email.split('@')[0]); + }, + { + message: 'Password should not be common or based on personal information', + }, + ); + +export type TSignUpFormV2Schema = z.infer; + +export type SignUpFormV2Props = { + className?: string; + initialEmail?: string; + isGoogleSSOEnabled?: boolean; +}; + +export const SignUpFormV2 = ({ + className, + initialEmail, + isGoogleSSOEnabled, +}: SignUpFormV2Props) => { + const { toast } = useToast(); + const analytics = useAnalytics(); + const router = useRouter(); + const searchParams = useSearchParams(); + + const [step, setStep] = useState('BASIC_DETAILS'); + + const utmSrc = searchParams?.get('utm_source') ?? null; + + const baseUrl = new URL(NEXT_PUBLIC_WEBAPP_URL() ?? 'http://localhost:3000'); + + const form = useForm({ + values: { + name: '', + email: initialEmail ?? '', + password: '', + signature: '', + url: '', + }, + mode: 'onBlur', + resolver: zodResolver(ZSignUpFormV2Schema), + }); + + const isSubmitting = form.formState.isSubmitting; + + const name = form.watch('name'); + const url = form.watch('url'); + + // To continue we need to make sure name, email, password and signature are valid + const canContinue = + form.formState.dirtyFields.name && + form.formState.errors.name === undefined && + form.formState.dirtyFields.email && + form.formState.errors.email === undefined && + form.formState.dirtyFields.password && + form.formState.errors.password === undefined && + form.formState.dirtyFields.signature && + form.formState.errors.signature === undefined; + + console.log({ formSTate: form.formState }); + + const { mutateAsync: signup } = trpc.auth.signup.useMutation(); + + const onFormSubmit = async ({ name, email, password, signature, url }: TSignUpFormV2Schema) => { + try { + await signup({ name, email, password, signature, url }); + + router.push(`/unverified-account`); + + toast({ + title: 'Registration Successful', + description: + 'You have successfully registered. Please verify your account by clicking on the link you received in the email.', + duration: 5000, + }); + + analytics.capture('App: User Sign Up', { + email, + timestamp: new Date().toISOString(), + custom_campaign_params: { src: utmSrc }, + }); + } catch (err) { + const error = AppError.parseError(err); + + if (error.code === AppErrorCode.PROFILE_URL_TAKEN) { + form.setError('url', { + type: 'manual', + message: 'This username has already been taken', + }); + } else if (error.code === AppErrorCode.PREMIUM_PROFILE_URL) { + form.setError('url', { + type: 'manual', + message: error.message, + }); + } else if (err instanceof TRPCClientError && err.data?.code === 'BAD_REQUEST') { + toast({ + title: 'An error occurred', + description: err.message, + variant: 'destructive', + }); + } else { + toast({ + title: 'An unknown error occurred', + description: + 'We encountered an unknown error while attempting to sign you up. Please try again later.', + variant: 'destructive', + }); + } + } + }; + + const onSignUpWithGoogleClick = async () => { + try { + await signIn('google', { callbackUrl: SIGN_UP_REDIRECT_PATH }); + } catch (err) { + toast({ + title: 'An unknown error occurred', + description: + 'We encountered an unknown error while attempting to sign you Up. Please try again later.', + variant: 'destructive', + }); + } + }; + + return ( +
+
+
+ community-cards +
+ +
+ +
+
+ User profiles are coming soon! +
+ + + {step === 'BASIC_DETAILS' ? ( + + + + ) : ( + + + + )} + + +
+
+
+ +
+ {step === 'BASIC_DETAILS' && ( +
+

Create a new account

+ +

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

+
+ )} + + {step === 'CLAIM_USERNAME' && ( +
+

Claim your username now

+ +

+ You will get notified & be able to set up your documenso public profile when we launch + the feature. +

+
+ )} + +
+ +
+ + {step === 'BASIC_DETAILS' && ( +
+ ( + + Full Name + + + + + + )} + /> + + ( + + Email Address + + + + + + )} + /> + + ( + + Password + + + + + + + + )} + /> + + ( + + Sign Here + + onChange(v ?? '')} + /> + + + + + )} + /> + + {isGoogleSSOEnabled && ( + <> +
+
+ Or +
+
+ + + + )} + +

+ Already have an account?{' '} + + Sign in instead + +

+
+ )} + + {step === 'CLAIM_USERNAME' && ( +
+ ( + + Public profile username + + + + + + + +
+ {baseUrl.host}/u/{field.value || ''} +
+
+ )} + /> +
+ )} + +
+ {step === 'BASIC_DETAILS' && ( +

+ Basic details 1/2 +

+ )} + + {step === 'CLAIM_USERNAME' && ( +

+ Claim username 2/2 +

+ )} + +
+ +
+
+ +
+ {/* Go back button, disabled if step is basic details */} + + + {/* Continue button */} + {step === 'BASIC_DETAILS' && ( + + )} + + {/* Sign up button */} + {step === 'CLAIM_USERNAME' && ( + + )} +
+
+ +
+
+ ); +}; diff --git a/apps/web/src/components/partials/not-found.tsx b/apps/web/src/components/partials/not-found.tsx index dc059a324..b80c6fea8 100644 --- a/apps/web/src/components/partials/not-found.tsx +++ b/apps/web/src/components/partials/not-found.tsx @@ -46,7 +46,7 @@ export default function NotFoundPartial({ children }: NotFoundPartialProps) {
+
+
+ ))} +
+ + + ); +}; diff --git a/packages/assets/images/Timur.png b/packages/assets/images/Timur.png deleted file mode 100644 index 8f901044e61a4d6e2744457a260bcd8e6c158c19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9163 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 KMNUMnLSTY?hzSz_ literal 0 HcmV?d00001 diff --git a/packages/lib/constants/feature-flags.ts b/packages/lib/constants/feature-flags.ts index ac476bc70..ebd09c73a 100644 --- a/packages/lib/constants/feature-flags.ts +++ b/packages/lib/constants/feature-flags.ts @@ -25,6 +25,7 @@ export const LOCAL_FEATURE_FLAGS: Record = { app_teams: true, app_document_page_view_history_sheet: false, marketing_header_single_player_mode: false, + marketing_profiles_announcement_bar: true, } as const; /** diff --git a/packages/lib/errors/app-error.ts b/packages/lib/errors/app-error.ts index bc2db70c2..f43f9c3ba 100644 --- a/packages/lib/errors/app-error.ts +++ b/packages/lib/errors/app-error.ts @@ -19,6 +19,7 @@ export enum AppErrorCode { 'SCHEMA_FAILED' = 'SchemaFailed', 'TOO_MANY_REQUESTS' = 'TooManyRequests', 'PROFILE_URL_TAKEN' = 'ProfileUrlTaken', + 'PREMIUM_PROFILE_URL' = 'PremiumProfileUrl', } const genericErrorCodeToTrpcErrorCodeMap: Record = { @@ -34,6 +35,7 @@ const genericErrorCodeToTrpcErrorCodeMap: Record = { [AppErrorCode.SCHEMA_FAILED]: 'INTERNAL_SERVER_ERROR', [AppErrorCode.TOO_MANY_REQUESTS]: 'TOO_MANY_REQUESTS', [AppErrorCode.PROFILE_URL_TAKEN]: 'BAD_REQUEST', + [AppErrorCode.PREMIUM_PROFILE_URL]: 'BAD_REQUEST', }; export const ZAppErrorJsonSchema = z.object({ diff --git a/packages/lib/server-only/user/create-user.ts b/packages/lib/server-only/user/create-user.ts index 1852dc12e..dbcec9efb 100644 --- a/packages/lib/server-only/user/create-user.ts +++ b/packages/lib/server-only/user/create-user.ts @@ -7,15 +7,17 @@ import { IdentityProvider, Prisma, TeamMemberInviteStatus } from '@documenso/pri import { IS_BILLING_ENABLED } from '../../constants/app'; import { SALT_ROUNDS } from '../../constants/auth'; +import { AppError, AppErrorCode } from '../../errors/app-error'; export interface CreateUserOptions { name: string; email: string; password: string; signature?: string | null; + url?: string; } -export const createUser = async ({ name, email, password, signature }: CreateUserOptions) => { +export const createUser = async ({ name, email, password, signature, url }: CreateUserOptions) => { const hashedPassword = await hash(password, SALT_ROUNDS); const userExists = await prisma.user.findFirst({ @@ -28,6 +30,22 @@ export const createUser = async ({ name, email, password, signature }: CreateUse throw new Error('User already exists'); } + if (url) { + const urlExists = await prisma.user.findFirst({ + where: { + url, + }, + }); + + if (urlExists) { + throw new AppError( + AppErrorCode.PROFILE_URL_TAKEN, + 'Profile username is taken', + 'The profile username is already taken', + ); + } + } + const user = await prisma.user.create({ data: { name, @@ -35,6 +53,7 @@ export const createUser = async ({ name, email, password, signature }: CreateUse password: hashedPassword, signature, identityProvider: IdentityProvider.DOCUMENSO, + url, }, }); diff --git a/packages/lib/server-only/user/update-public-profile.ts b/packages/lib/server-only/user/update-public-profile.ts index 0aebe3ecf..f70f02cf2 100644 --- a/packages/lib/server-only/user/update-public-profile.ts +++ b/packages/lib/server-only/user/update-public-profile.ts @@ -23,8 +23,8 @@ export const updatePublicProfile = async ({ userId, url }: UpdatePublicProfileOp if (isUrlTaken) { throw new AppError( AppErrorCode.PROFILE_URL_TAKEN, - 'Profile URL is taken', - 'The profile URL is already taken', + 'Profile username is taken', + 'The profile username is already taken', ); } diff --git a/packages/trpc/server/auth-router/router.ts b/packages/trpc/server/auth-router/router.ts index 65fe8d296..3f199ac11 100644 --- a/packages/trpc/server/auth-router/router.ts +++ b/packages/trpc/server/auth-router/router.ts @@ -1,6 +1,8 @@ import { TRPCError } from '@trpc/server'; import { env } from 'next-runtime-env'; +import { IS_BILLING_ENABLED } from '@documenso/lib/constants/app'; +import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error'; import { ErrorCode } from '@documenso/lib/next-auth/error-codes'; import { compareSync } from '@documenso/lib/server-only/auth/hash'; import { createUser } from '@documenso/lib/server-only/user/create-user'; @@ -21,14 +23,29 @@ export const authRouter = router({ }); } - const { name, email, password, signature } = input; + const { name, email, password, signature, url } = input; - const user = await createUser({ name, email, password, signature }); + if ((true || IS_BILLING_ENABLED()) && url && url.length <= 6) { + throw new AppError( + AppErrorCode.PREMIUM_PROFILE_URL, + 'Only subscribers can have a username shorter than 6 characters', + ); + } + + const user = await createUser({ name, email, password, signature, url }); await sendConfirmationToken({ email: user.email }); return user; } catch (err) { + console.log(err); + + const error = AppError.parseError(err); + + if (error.code !== AppErrorCode.UNKNOWN_ERROR) { + throw AppError.parseErrorToTRPCError(error); + } + let message = 'We were unable to create your account. Please review the information you provided and try again.'; diff --git a/packages/trpc/server/auth-router/schema.ts b/packages/trpc/server/auth-router/schema.ts index dbe42a25c..9cab2b415 100644 --- a/packages/trpc/server/auth-router/schema.ts +++ b/packages/trpc/server/auth-router/schema.ts @@ -21,6 +21,7 @@ export const ZSignUpMutationSchema = z.object({ email: z.string().email(), password: ZPasswordSchema, signature: z.string().min(1, { message: 'A signature is required.' }), + url: z.string().optional(), }); export type TSignUpMutationSchema = z.infer; diff --git a/packages/trpc/server/profile-router/router.ts b/packages/trpc/server/profile-router/router.ts index 2b83caa84..f9f409aa6 100644 --- a/packages/trpc/server/profile-router/router.ts +++ b/packages/trpc/server/profile-router/router.ts @@ -1,6 +1,8 @@ import { TRPCError } from '@trpc/server'; +import { IS_BILLING_ENABLED } from '@documenso/lib/constants/app'; import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error'; +import { getSubscriptionsByUserId } from '@documenso/lib/server-only/subscription/get-subscriptions-by-user-id'; import { deleteUser } from '@documenso/lib/server-only/user/delete-user'; import { findUserSecurityAuditLogs } from '@documenso/lib/server-only/user/find-user-security-audit-logs'; import { forgotPassword } from '@documenso/lib/server-only/user/forgot-password'; @@ -11,6 +13,7 @@ import { updatePassword } from '@documenso/lib/server-only/user/update-password' import { updateProfile } from '@documenso/lib/server-only/user/update-profile'; import { updatePublicProfile } from '@documenso/lib/server-only/user/update-public-profile'; import { extractNextApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata'; +import { SubscriptionStatus } from '@documenso/prisma/client'; import { adminProcedure, authenticatedProcedure, procedure, router } from '../trpc'; import { @@ -83,6 +86,21 @@ export const profileRouter = router({ try { const { url } = input; + if (IS_BILLING_ENABLED() && url.length <= 6) { + const subscriptions = await getSubscriptionsByUserId({ + userId: ctx.user.id, + }).then((subscriptions) => + subscriptions.filter((s) => s.status === SubscriptionStatus.ACTIVE), + ); + + if (subscriptions.length === 0) { + throw new AppError( + AppErrorCode.PREMIUM_PROFILE_URL, + 'Only subscribers can have a username shorter than 6 characters', + ); + } + } + const user = await updatePublicProfile({ userId: ctx.user.id, url, diff --git a/packages/trpc/server/profile-router/schema.ts b/packages/trpc/server/profile-router/schema.ts index ecee47f34..dc62f83ba 100644 --- a/packages/trpc/server/profile-router/schema.ts +++ b/packages/trpc/server/profile-router/schema.ts @@ -17,7 +17,14 @@ export const ZUpdateProfileMutationSchema = z.object({ }); export const ZUpdatePublicProfileMutationSchema = z.object({ - url: z.string().min(1), + url: z + .string() + .trim() + .toLowerCase() + .min(1, { message: 'Please enter a valid username.' }) + .regex(/^[a-z0-9-]+$/, { + message: 'Username can only container alphanumeric characters and dashes.', + }), }); export const ZUpdatePasswordMutationSchema = z.object({ diff --git a/packages/ui/primitives/announcement-bar.tsx b/packages/ui/primitives/announcement-bar.tsx deleted file mode 100644 index aadd17047..000000000 --- a/packages/ui/primitives/announcement-bar.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import Link from 'next/link'; - -import { cn } from '../lib/utils'; - -interface AnnouncementBarProps { - isShown: boolean; - className: string; -} - -export const AnnouncementBar: React.FC = ({ isShown, className }) => { - return ( - isShown && ( -
-
- Claim your documenso public profile URL now!{' '} - documenso.com/u/yourname -
- -
-
- Claim now -
-
-
- ) - ); -};