diff --git a/apps/web/.env.development.example b/apps/web/.env.development.example
index 56c7bf0..a1c9eb0 100644
--- a/apps/web/.env.development.example
+++ b/apps/web/.env.development.example
@@ -24,6 +24,7 @@ RESEND_API_KEY=
# Formbase
ALLOW_SIGNIN_SIGNUP=true
+SKIP_EMAIL_VERIFICATION=true
# Analytics (optional)
UMAMI_TRACKING_ID=
diff --git a/apps/web/next-env.d.ts b/apps/web/next-env.d.ts
index 9edff1c..c4b7818 100644
--- a/apps/web/next-env.d.ts
+++ b/apps/web/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/types/routes.d.ts";
+import "./.next/dev/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/apps/web/src/app/(auth)/signup/signup.tsx b/apps/web/src/app/(auth)/signup/signup.tsx
index b282ea4..9a84c9f 100644
--- a/apps/web/src/app/(auth)/signup/signup.tsx
+++ b/apps/web/src/app/(auth)/signup/signup.tsx
@@ -1,14 +1,14 @@
'use client';
-import { type FormEvent, useState } from 'react';
+import { useState } from 'react';
import Link from 'next/link';
import { useRouter } from 'next/navigation';
+import type { FormEvent } from 'react';
+
import { IconBrandGithub, IconBrandGoogleFilled } from '@tabler/icons-react';
import { signUp } from '@formbase/auth/client';
-
-import { Logo } from '../_components/logo';
import { Button } from '@formbase/ui/primitives/button';
import { Input } from '@formbase/ui/primitives/input';
import { Label } from '@formbase/ui/primitives/label';
@@ -18,6 +18,8 @@ import { LoadingButton } from '~/components/loading-button';
import { PasswordInput } from '~/components/password-input';
import { useSocialAuth } from '~/lib/hooks/use-social-auth';
+import { Logo } from '../_components/logo';
+
export function Signup() {
const router = useRouter();
const [formError, setFormError] = useState(null);
@@ -50,7 +52,7 @@ export function Signup() {
});
if (error) {
- setFormError(error.message);
+ setFormError(error.message ?? 'An error occurred');
return;
}
@@ -180,6 +182,7 @@ export function Signup() {
) : null}
diff --git a/apps/web/src/app/(auth)/verify-email/page.tsx b/apps/web/src/app/(auth)/verify-email/page.tsx
index 43edb5a..43ae86c 100644
--- a/apps/web/src/app/(auth)/verify-email/page.tsx
+++ b/apps/web/src/app/(auth)/verify-email/page.tsx
@@ -1,9 +1,9 @@
import { redirect } from 'next/navigation';
import { getSession } from '@formbase/auth/server';
+import { env } from '@formbase/env';
import { Logo } from '../_components/logo';
-
import { VerifyEmail } from './verify-code';
export const metadata = {
@@ -25,7 +25,7 @@ export default async function VerifyEmailPage({
redirect('/login');
}
- if (session?.user.emailVerified) {
+ if (session?.user.emailVerified || env.SKIP_EMAIL_VERIFICATION) {
redirect('/dashboard');
}
@@ -50,7 +50,7 @@ export default async function VerifyEmailPage({
<>Use the verification link from your email to continue.>
)}
-
+
);
diff --git a/apps/web/src/app/(landing)/_components/header.tsx b/apps/web/src/app/(landing)/_components/header.tsx
index 982002d..56a1281 100644
--- a/apps/web/src/app/(landing)/_components/header.tsx
+++ b/apps/web/src/app/(landing)/_components/header.tsx
@@ -1,10 +1,9 @@
import Link from 'next/link';
-import { FunctionSquare } from 'lucide-react';
-
import { type User } from '@formbase/auth';
import { env } from '@formbase/env';
+import { Logo } from '../../(auth)/_components/logo';
import { MobileNavigation } from './mobile-navigation';
const routes = [{ name: 'Docs', href: 'https://docs.formbase.dev' }] as const;
@@ -18,19 +17,19 @@ export const Header = ({ user }: LandingHeaderProps) => {
return (
-