-
+
+
+
+
);
diff --git a/apps/webapp/app/components/layout/onboarding-layout.tsx b/apps/webapp/app/components/layout/onboarding-layout.tsx
new file mode 100644
index 0000000..92dd7eb
--- /dev/null
+++ b/apps/webapp/app/components/layout/onboarding-layout.tsx
@@ -0,0 +1,26 @@
+import { Button } from "../ui";
+import Logo from "../logo/logo";
+import { Theme, useTheme } from "remix-themes";
+
+export function LoginPageLayout({ children }: { children: React.ReactNode }) {
+ return (
+
+ );
+}
diff --git a/apps/webapp/app/components/sidebar/nav-user.tsx b/apps/webapp/app/components/sidebar/nav-user.tsx
index 3898d80..cb162f9 100644
--- a/apps/webapp/app/components/sidebar/nav-user.tsx
+++ b/apps/webapp/app/components/sidebar/nav-user.tsx
@@ -39,7 +39,7 @@ export function NavUser({ user }: { user: ExtendedUser }) {
- Harshith Mullapudi
+ {user.displayName}
{user.email}
diff --git a/apps/webapp/app/models/user.server.ts b/apps/webapp/app/models/user.server.ts
index c5fa807..8fe6093 100644
--- a/apps/webapp/app/models/user.server.ts
+++ b/apps/webapp/app/models/user.server.ts
@@ -200,22 +200,20 @@ export async function getUserByEmail(email: User["email"]) {
export function updateUser({
id,
- name,
- email,
marketingEmails,
referralSource,
-}: Pick & {
+ onboardingComplete,
+}: Pick & {
marketingEmails?: boolean;
referralSource?: string;
}) {
return prisma.user.update({
where: { id },
data: {
- name,
- email,
marketingEmails,
referralSource,
confirmedBasicDetails: true,
+ onboardingComplete,
},
});
}
diff --git a/apps/webapp/app/routes/_index.tsx b/apps/webapp/app/routes/_index.tsx
index 08c715a..5455396 100644
--- a/apps/webapp/app/routes/_index.tsx
+++ b/apps/webapp/app/routes/_index.tsx
@@ -2,7 +2,11 @@ import { redirect, type MetaFunction } from "@remix-run/node";
import { type LoaderFunctionArgs } from "@remix-run/server-runtime";
import { requireUser } from "~/services/session.server";
-import { confirmBasicDetailsPath, dashboardPath } from "~/utils/pathBuilder";
+import {
+ confirmBasicDetailsPath,
+ dashboardPath,
+ onboardingPath,
+} from "~/utils/pathBuilder";
export const meta: MetaFunction = () => {
return [
@@ -17,6 +21,8 @@ export const loader = async ({ request }: LoaderFunctionArgs) => {
//you have to confirm basic details before you can do anything
if (!user.confirmedBasicDetails) {
return redirect(confirmBasicDetailsPath());
+ } else if (!user.onboardingComplete) {
+ return redirect(onboardingPath());
} else {
return redirect(dashboardPath());
}
diff --git a/apps/webapp/app/routes/api.v1.add.tsx b/apps/webapp/app/routes/api.v1.add.tsx
index 3c27617..2fcc5b1 100644
--- a/apps/webapp/app/routes/api.v1.add.tsx
+++ b/apps/webapp/app/routes/api.v1.add.tsx
@@ -1,10 +1,10 @@
import { json } from "@remix-run/node";
-import { createActionApiRoute } from "~/services/routeBuilders/apiBuilder.server";
+import { createHybridActionApiRoute } from "~/services/routeBuilders/apiBuilder.server";
import { addToQueue } from "~/lib/ingest.server";
import { IngestBodyRequest } from "~/trigger/ingest/ingest";
-const { action, loader } = createActionApiRoute(
+const { action, loader } = createHybridActionApiRoute(
{
body: IngestBodyRequest,
allowJWT: true,
diff --git a/apps/webapp/app/routes/api.v1.integration_account.tsx b/apps/webapp/app/routes/api.v1.integration_account.tsx
index 529f856..396cc93 100644
--- a/apps/webapp/app/routes/api.v1.integration_account.tsx
+++ b/apps/webapp/app/routes/api.v1.integration_account.tsx
@@ -56,7 +56,7 @@ const { action, loader } = createHybridActionApiRoute(
workspace?.id,
);
- if (!setupResult || !setupResult.accountId) {
+ if (!setupResult.account || !setupResult.account.id) {
return json(
{ error: "Failed to setup integration with the provided API key" },
{ status: 400 },
@@ -64,7 +64,7 @@ const { action, loader } = createHybridActionApiRoute(
}
await tasks.trigger("scheduler", {
- integrationAccountId: setupResult?.id,
+ integrationAccountId: setupResult?.account?.id,
});
return json({ success: true, setupResult });
diff --git a/apps/webapp/app/routes/confirm-basic-details.tsx b/apps/webapp/app/routes/confirm-basic-details.tsx
index 56815ea..70b567a 100644
--- a/apps/webapp/app/routes/confirm-basic-details.tsx
+++ b/apps/webapp/app/routes/confirm-basic-details.tsx
@@ -1,6 +1,10 @@
import { z } from "zod";
import { useActionData } from "@remix-run/react";
-import { type ActionFunctionArgs, json } from "@remix-run/node";
+import {
+ type ActionFunctionArgs,
+ json,
+ type LoaderFunctionArgs,
+} from "@remix-run/node";
import { useForm } from "@conform-to/react";
import { getFieldsetConstraint, parse } from "@conform-to/zod";
import { LoginPageLayout } from "~/components/layout/login-page-layout";
@@ -14,10 +18,11 @@ import {
import { Button } from "~/components/ui";
import { Input } from "~/components/ui/input";
import { useState } from "react";
-import { requireUserId } from "~/services/session.server";
+import { requireUser, requireUserId } from "~/services/session.server";
import { redirectWithSuccessMessage } from "~/models/message.server";
import { rootPath } from "~/utils/pathBuilder";
import { createWorkspace } from "~/models/workspace.server";
+import { typedjson } from "remix-typedjson";
const schema = z.object({
workspaceName: z
@@ -55,6 +60,14 @@ export async function action({ request }: ActionFunctionArgs) {
}
}
+export const loader = async ({ request }: LoaderFunctionArgs) => {
+ const user = await requireUser(request);
+
+ return typedjson({
+ user,
+ });
+};
+
export default function ConfirmBasicDetails() {
const lastSubmission = useActionData();
diff --git a/apps/webapp/app/routes/home.integration.$slug.tsx b/apps/webapp/app/routes/home.integration.$slug.tsx
index 1e422e4..75aae0b 100644
--- a/apps/webapp/app/routes/home.integration.$slug.tsx
+++ b/apps/webapp/app/routes/home.integration.$slug.tsx
@@ -164,7 +164,7 @@ export default function IntegrationDetail() {
]}
/>
-
+
{
const user = await requireUser(request);
const workspace = await requireWorkpace(request);
- return typedjson(
- {
- user,
- workspace,
- },
- {
- headers: {
- "Set-Cookie": await commitSession(await clearRedirectTo(request)),
+ //you have to confirm basic details before you can do anything
+ if (!user.confirmedBasicDetails) {
+ return redirect(confirmBasicDetailsPath());
+ } else if (!user.onboardingComplete) {
+ return redirect(onboardingPath());
+ } else {
+ return typedjson(
+ {
+ user,
+ workspace,
},
- },
- );
+ {
+ headers: {
+ "Set-Cookie": await commitSession(await clearRedirectTo(request)),
+ },
+ },
+ );
+ }
};
export default function Home() {
diff --git a/apps/webapp/app/routes/login._index.tsx b/apps/webapp/app/routes/login._index.tsx
index 2d8a300..ac1c992 100644
--- a/apps/webapp/app/routes/login._index.tsx
+++ b/apps/webapp/app/routes/login._index.tsx
@@ -57,10 +57,12 @@ export default function LoginPage() {
return (
-
+
- Login to your account
- Create an account or login
+ Welcome back
+
+ Create an account or login
+
@@ -69,7 +71,7 @@ export default function LoginPage() {
{data.showGoogleAuth && (