diff --git a/bun.lock b/bun.lock index 199a4c26..d12b58d8 100644 --- a/bun.lock +++ b/bun.lock @@ -1805,7 +1805,7 @@ "@types/mysql": ["@types/mysql@2.15.27", "", { "dependencies": { "@types/node": "*" } }, "sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA=="], - "@types/node": ["@types/node@25.0.10", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg=="], + "@types/node": ["@types/node@25.1.0", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA=="], "@types/normalize-package-data": ["@types/normalize-package-data@2.4.4", "", {}, "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="], diff --git a/internal/site/app/(public)/layout.tsx b/internal/site/app/(public)/layout.tsx index 8d436dc4..cdac856d 100644 --- a/internal/site/app/(public)/layout.tsx +++ b/internal/site/app/(public)/layout.tsx @@ -5,12 +5,30 @@ import { LogoBlink } from "@/components/icons"; import { ThemeProvider } from "@/components/theme-provider"; import { Button } from "@/components/ui/button"; import { Geist } from "next/font/google"; -import Head from "next/head"; +import localFont from "next/font/local"; import Link from "next/link"; import type { ReactNode } from "react"; import { useEffect, useState } from "react"; import "./styles.css"; +// Load LayGrotesk via next/font/local for proper preloading +const layGrotesk = localFont({ + src: [ + { + path: "../../public/fonts/LayGrotesk-Regular.woff2", + weight: "400", + style: "normal", + }, + { + path: "../../public/fonts/LayGrotesk-Medium.woff2", + weight: "500", + style: "normal", + }, + ], + display: "swap", + variable: "--font-laygrotesk", +}); + // Keep Geist as fallback font const geist = Geist({ subsets: ["latin"], @@ -120,152 +138,134 @@ export default function Layout({ children }: { children: ReactNode }) { }, [isMobileMenuOpen]); return ( - <> -
- {/* Preload LayGrotesk fonts for faster loading */} - - - -{fieldErrors.email}
@@ -145,22 +126,17 @@ export function SignupForm({ redirect }: { redirect?: string }) { placeholder="Enter your password" className={cn( "w-full", - fieldErrors.password && touched.password + fieldErrors.password ? "border-red-500 focus-visible:ring-red-500 dark:border-red-500 dark:focus-visible:ring-red-500" : "" )} minLength={8} - onChange={handlePasswordChange} - onBlur={handlePasswordBlur} + onChange={clearPasswordError} /> - {fieldErrors.password && touched.password ? ( + {fieldErrors.password && ({fieldErrors.password}
- ) : ( -- Password must be at least 8 characters long -
)}+ Let's create your first admin account +
+{error}
++ © {new Date().getFullYear()} Coder Technologies, Inc. +
+