-
{capitalise(mode)}
+
);
diff --git a/packages/frontend/src/pages/Landing.tsx b/packages/frontend/src/pages/Landing.tsx
index 6fcb824..765a926 100644
--- a/packages/frontend/src/pages/Landing.tsx
+++ b/packages/frontend/src/pages/Landing.tsx
@@ -58,12 +58,12 @@ export default function Landing() {
>
Pricing
*/}
-
FAQ
-
+ */}
{!isLoading && user ? (
diff --git a/packages/shared/src/api-schemas.ts b/packages/shared/src/api-schemas.ts
index 883e9c0..b16c42c 100644
--- a/packages/shared/src/api-schemas.ts
+++ b/packages/shared/src/api-schemas.ts
@@ -412,6 +412,7 @@ export const UserUpdateRequestSchema = z.object({
.optional(),
avatarURL: z.string().url().nullable().optional(),
iconPreference: z.enum(["lucide", "pixel", "phosphor"]).optional(),
+ preferences: z.record(z.boolean()).optional(),
});
export type UserUpdateRequest = z.infer;
@@ -431,6 +432,7 @@ export const UserResponseSchema = z.object({
avatarURL: z.string().nullable(),
iconPreference: z.enum(["lucide", "pixel", "phosphor"]),
plan: z.string().nullable().optional(),
+ preferences: z.record(z.boolean()).optional(),
createdAt: z.string().nullable().optional(),
updatedAt: z.string().nullable().optional(),
});
diff --git a/packages/shared/src/schema.ts b/packages/shared/src/schema.ts
index c286cec..b895094 100644
--- a/packages/shared/src/schema.ts
+++ b/packages/shared/src/schema.ts
@@ -50,6 +50,10 @@ export const DEFAULT_FEATURES: Record = {
sprints: true,
};
+export const DEFAULT_USER_PREFERENCES: Record = {
+ assignByDefault: false,
+};
+
export const iconStyles = ["pixel", "lucide", "phosphor"] as const;
export type IconStyle = (typeof iconStyles)[number];
@@ -64,6 +68,10 @@ export const User = pgTable("User", {
plan: varchar({ length: 32 }).notNull().default("free"),
emailVerified: boolean().notNull().default(false),
emailVerifiedAt: timestamp({ withTimezone: false }),
+ preferences: json("preferences")
+ .$type>()
+ .notNull()
+ .default(DEFAULT_USER_PREFERENCES),
createdAt: timestamp({ withTimezone: false }).defaultNow(),
updatedAt: timestamp({ withTimezone: false }).defaultNow(),
});
@@ -227,7 +235,9 @@ export const SessionInsertSchema = createInsertSchema(Session);
export const TimedSessionSelectSchema = createSelectSchema(TimedSession);
export const TimedSessionInsertSchema = createInsertSchema(TimedSession);
-export type UserRecord = z.infer;
+export type UserRecord = z.infer & {
+ preferences: Record;
+};
export type UserInsert = z.infer;
export type OrganisationRecord = z.infer & {