Index: app/(app)/home/page.tsx
===================================================================
--- app/(app)/home/page.tsx	(revision 2e0a1389aa2e0d7b46373f6b174d549e2eedb893)
+++ app/(app)/home/page.tsx	(revision 2e0a1389aa2e0d7b46373f6b174d549e2eedb893)
@@ -0,0 +1,37 @@
+import { poppins } from '@/app/ui/fonts';
+
+export default function Page() {
+    return (
+        <>
+            <main
+                className="
+                    flex-1
+                    flex
+                    flex-col
+                    items-center
+                    justify-center 
+                    md:justify-center
+                    px-4
+                    mt-[-80]
+                "
+            >
+                <h1
+                    className={`${poppins.className} 
+                        text-[40px] 
+                        leading-tight
+                        tracking-tight
+                        font-semibold 
+                        text-center
+                        mb-10 
+                        text-white 
+                        antialiased
+                    `}
+                >
+                    Welcome to<br />
+                    FEiN
+                </h1>
+
+            </main>
+        </>
+    );
+}
Index: app/(app)/layout.tsx
===================================================================
--- app/(app)/layout.tsx	(revision 2e0a1389aa2e0d7b46373f6b174d549e2eedb893)
+++ app/(app)/layout.tsx	(revision 2e0a1389aa2e0d7b46373f6b174d549e2eedb893)
@@ -0,0 +1,21 @@
+import { auth } from '@/auth';
+import { redirect } from 'next/navigation';
+
+export default async function AppLayout({
+    children,
+}: {
+    children: React.ReactNode;
+}) {
+    const session = await auth();
+
+    if (!session) {
+        redirect('/login?callbackUrl=/home');
+    }
+
+    return (
+        <div className="flex-1 flex flex-col">
+            {children}
+        </div>
+        /* bottom nav goes here later */
+    );
+}
Index: app/lib/actions.ts
===================================================================
--- app/lib/actions.ts	(revision e42f2490002210e112884745aae6355a567277d4)
+++ app/lib/actions.ts	(revision 2e0a1389aa2e0d7b46373f6b174d549e2eedb893)
@@ -3,8 +3,8 @@
 import { z } from 'zod';
 import { revalidatePath } from 'next/cache';
-import { redirect } from 'next/navigation';
 import postgres from 'postgres';
 import { signIn } from '@/auth';
 import { AuthError } from 'next-auth';
+import { redirect } from 'next/navigation';
 
 const sql = postgres(process.env.POSTGRES_URL!, { ssl: 'require' });
@@ -15,12 +15,18 @@
 ) {
     try {
-        await signIn('credentials', formData);
+        const redirectTo =
+            (formData.get('redirectTo') as string) || '/home';
+
+        await signIn('credentials', {
+            ...Object.fromEntries(formData),
+            redirectTo,
+        });
     } catch (error) {
         if (error instanceof AuthError) {
             switch (error.type) {
                 case 'CredentialsSignin':
-                    return 'Invalid credentials.';
+                    return 'Invalid email or password.';
                 default:
-                    return 'Something went wrong.';
+                    return 'Something went wrong. Please try again.';
             }
         }
Index: app/ui/login-form.tsx
===================================================================
--- app/ui/login-form.tsx	(revision e42f2490002210e112884745aae6355a567277d4)
+++ app/ui/login-form.tsx	(revision 2e0a1389aa2e0d7b46373f6b174d549e2eedb893)
@@ -15,5 +15,5 @@
 export default function LoginForm() {
   const searchParams = useSearchParams();
-  const callbackUrl = searchParams.get('callbackUrl') || '/dashboard';
+  const callbackUrl = searchParams.get('callbackUrl') || '/home';
   const [errorMessage, formAction, isPending] = useActionState(
     authenticate,
Index: app/ui/register-form.tsx
===================================================================
--- app/ui/register-form.tsx	(revision e42f2490002210e112884745aae6355a567277d4)
+++ app/ui/register-form.tsx	(revision 2e0a1389aa2e0d7b46373f6b174d549e2eedb893)
@@ -16,5 +16,5 @@
 export default function RegisterForm() {
   const searchParams = useSearchParams();
-  const callbackUrl = searchParams.get('callbackUrl') || '/dashboard';
+  const callbackUrl = searchParams.get('callbackUrl') || '/home';
   const [errorMessage, formAction, isPending] = useActionState(
     register,
