Template
Changes before I try out opencode for landing page.
This commit is contained in:
1 parent
321fecb5e1
commit
4a27ac162a
15 files changed
+250
-180
No files matched your search
@@ -1 +1 @@
|
||||
[["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32"],{"key":"33","value":"34"},{"key":"35","value":"36"},{"key":"37","value":"38"},{"key":"39","value":"40"},{"key":"41","value":"42"},{"key":"43","value":"44"},{"key":"45","value":"46"},{"key":"47","value":"48"},{"key":"49","value":"50"},{"key":"51","value":"52"},{"key":"53","value":"54"},{"key":"55","value":"56"},{"key":"57","value":"58"},{"key":"59","value":"60"},{"key":"61","value":"62"},{"key":"63","value":"64"},{"key":"65","value":"66"},{"key":"67","value":"68"},{"key":"69","value":"70"},{"key":"71","value":"72"},{"key":"73","value":"74"},{"key":"75","value":"76"},{"key":"77","value":"78"},{"key":"79","value":"80"},{"key":"81","value":"82"},{"key":"83","value":"84"},{"key":"85","value":"86"},{"key":"87","value":"88"},{"key":"89","value":"90"},{"key":"91","value":"92"},{"key":"93","value":"94"},{"key":"95","value":"96"},"/home/gib/Documents/Code/convex-monorepo/apps/next/public/misc/auth/gibs_auth_wide_header.png",{"size":74049,"mtime":1768226576453,"hash":"97"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/(auth)/sign-in/page.tsx",{"size":16469,"mtime":1768239263791,"hash":"98","data":"99"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/(auth)/profile/layout.tsx",{"size":276,"mtime":1768236979857,"hash":"100","data":"101"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/(auth)/forgot-password/page.tsx",{"size":10607,"mtime":1768239263673,"hash":"102","data":"103"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/profile/avatar-upload.tsx",{"size":6845,"mtime":1768239263940,"hash":"104","data":"105"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/profile/header.tsx",{"size":775,"mtime":1768239263951,"hash":"106","data":"107"},"/home/gib/Documents/Code/convex-monorepo/apps/next/postcss.config.js",{"size":63,"mtime":1766225879000,"hash":"108","data":"109"},"/home/gib/Documents/Code/convex-monorepo/apps/next/public/favicon.ico",{"size":103027,"mtime":1766225172000,"hash":"110"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/layout.tsx",{"size":1711,"mtime":1768186401942,"hash":"111","data":"112"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/providers/ConvexClientProvider.tsx",{"size":462,"mtime":1768239264017,"hash":"113","data":"114"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/(auth)/sign-in/layout.tsx",{"size":274,"mtime":1768236849421,"hash":"115","data":"116"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/profile/user-info.tsx",{"size":4103,"mtime":1768239264007,"hash":"117","data":"118"},"/home/gib/Documents/Code/convex-monorepo/apps/next/public/t3-icon.svg",{"size":923,"mtime":1766225172000,"hash":"119"},"/home/gib/Documents/Code/convex-monorepo/apps/next/.cache/.prettiercache",{"size":2439,"mtime":1768171236840,"hash":"120"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/(auth)/forgot-password/layout.tsx",{"size":298,"mtime":1768236967188,"hash":"121","data":"122"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/profile/index.tsx",{"size":230,"mtime":1768238412936,"hash":"123","data":"124"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/profile/sign-out.tsx",{"size":613,"mtime":1768239263988,"hash":"125","data":"126"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/providers/index.tsx",{"size":63,"mtime":1768171856108,"hash":"127","data":"128"},"/home/gib/Documents/Code/convex-monorepo/apps/next/next.config.js",{"size":1898,"mtime":1768239263537,"hash":"129","data":"130"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/lib/metadata.ts",{"size":3088,"mtime":1768239264052,"hash":"131","data":"132"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/lib/middleware/ban-sus-ips.ts",{"size":4894,"mtime":1768226323845,"hash":"133","data":"134"},"/home/gib/Documents/Code/convex-monorepo/apps/next/package.json",{"size":1484,"mtime":1768173526007,"hash":"135","data":"136"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/middleware.ts",{"size":1124,"mtime":1768239264082,"hash":"137","data":"138"},"/home/gib/Documents/Code/convex-monorepo/apps/next/tsconfig.json",{"size":297,"mtime":1766225936000,"hash":"139","data":"140"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/(auth)/profile/page.tsx",{"size":797,"mtime":1768239263701,"hash":"141","data":"142"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/buttons/gibs-auth.tsx",{"size":1074,"mtime":1768239263891,"hash":"143","data":"144"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/styles.css",{"size":595,"mtime":1768186094852,"hash":"145","data":"146"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/buttons/index.tsx",{"size":52,"mLine truncated
|
||||
[["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34"],{"key":"35","value":"36"},{"key":"37","value":"38"},{"key":"39","value":"40"},{"key":"41","value":"42"},{"key":"43","value":"44"},{"key":"45","value":"46"},{"key":"47","value":"48"},{"key":"49","value":"50"},{"key":"51","value":"52"},{"key":"53","value":"54"},{"key":"55","value":"56"},{"key":"57","value":"58"},{"key":"59","value":"60"},{"key":"61","value":"62"},{"key":"63","value":"64"},{"key":"65","value":"66"},{"key":"67","value":"68"},{"key":"69","value":"70"},{"key":"71","value":"72"},{"key":"73","value":"74"},{"key":"75","value":"76"},{"key":"77","value":"78"},{"key":"79","value":"80"},{"key":"81","value":"82"},{"key":"83","value":"84"},{"key":"85","value":"86"},{"key":"87","value":"88"},{"key":"89","value":"90"},{"key":"91","value":"92"},{"key":"93","value":"94"},{"key":"95","value":"96"},{"key":"97","value":"98"},{"key":"99","value":"100"},{"key":"101","value":"102"},"/home/gib/Documents/Code/convex-monorepo/apps/next/public/t3-icon.svg",{"size":923,"mtime":1766225172000,"hash":"103"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/buttons/gibs-auth.tsx",{"size":1081,"mtime":1768318294545,"data":"104"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/profile/reset-password.tsx",{"size":5817,"mtime":1768320378696,"data":"105"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/middleware.ts",{"size":1119,"mtime":1768320173356,"data":"106"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/env.js",{"size":1676,"mtime":1768155639474,"data":"107"},"/home/gib/Documents/Code/convex-monorepo/apps/next/public/favicon.ico",{"size":103027,"mtime":1766225172000,"hash":"108"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/buttons/index.tsx",{"size":52,"mtime":1768188510000,"data":"109"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/profile/sign-out.tsx",{"size":602,"mtime":1768240489000,"data":"110"},"/home/gib/Documents/Code/convex-monorepo/apps/next/postcss.config.js",{"size":63,"mtime":1766225879000,"hash":"111","data":"112"},"/home/gib/Documents/Code/convex-monorepo/apps/next/next.config.js",{"size":1898,"mtime":1768239263000,"hash":"113","data":"114"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/providers/index.tsx",{"size":63,"mtime":1768171856000,"data":"115"},"/home/gib/Documents/Code/convex-monorepo/apps/next/public/misc/auth/gibs-auth-logo.png",{"size":865044,"mtime":1744295935000},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/profile/index.tsx",{"size":230,"mtime":1768238412000,"data":"116"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/profile/user-info.tsx",{"size":4258,"mtime":1768240393000,"data":"117"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/layout/auth/profile/header.tsx",{"size":777,"mtime":1768240220000,"data":"118"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/page.tsx",{"size":177,"mtime":1768320378505,"hash":"119","data":"120"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/lib/middleware/ban-sus-ips.ts",{"size":4894,"mtime":1768226323000,"data":"121"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/layout.tsx",{"size":1711,"mtime":1768186401000,"hash":"122","data":"123"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/styles.css",{"size":595,"mtime":1768186094000,"hash":"124","data":"125"},"/home/gib/Documents/Code/convex-monorepo/apps/next/.cache/.prettiercache",{"size":2439,"mtime":1768155639511},"/home/gib/Documents/Code/convex-monorepo/apps/next/public/misc/auth/gibs_auth_wide_header.png",{"size":74049,"mtime":1768226576000},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/(auth)/forgot-password/page.tsx",{"size":10607,"mtime":1768239263000,"data":"126"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/(auth)/profile/page.tsx",{"size":797,"mtime":1768239263000,"data":"127"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/components/providers/ConvexClientProvider.tsx",{"size":462,"mtime":1768239264000,"data":"128"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/lib/metadata.ts",{"size":3088,"mtime":1768239264000,"data":"129"},"/home/gib/Documents/Code/convex-monorepo/apps/next/package.json",{"size":1484,"mtime":1768173526000,"hash":"130","data":"131"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/(auth)/forgot-password/layout.tsx",{"size":298,"mtime":1768236967000,"data":"132"},"/home/gib/Documents/Code/convex-monorepo/apps/next/src/app/(auth)/profile/layout.tsx",{"size":276,"mtime":1768236979000,"data":"133"},"/home/gib/Documents/Code/convex-monorepo/apps/next/tsconfig.json",{"size":297,"mtime":1766225936000,"hash":"134","data":"135"},"/home/gib/Documents/Code/convex-monorepo/aLine truncated
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 845 KiB |
@@ -7,8 +7,8 @@ import { ConvexClientProvider } from '@/components/providers';
|
||||
import { generateMetadata } from '@/lib/metadata';
|
||||
import { ConvexAuthNextjsServerProvider } from '@convex-dev/auth/nextjs/server';
|
||||
import PlausibleProvider from 'next-plausible';
|
||||
|
||||
import { ThemeProvider, Toaster } from '@gib/ui';
|
||||
import Header from '@/components/layout/header';
|
||||
|
||||
export const metadata: Metadata = generateMetadata();
|
||||
|
||||
@@ -50,6 +50,7 @@ const RootLayout = ({
|
||||
disableTransitionOnChange
|
||||
>
|
||||
<ConvexClientProvider>
|
||||
<Header />
|
||||
{children}
|
||||
<Toaster />
|
||||
</ConvexClientProvider>
|
||||
|
||||
@@ -2,9 +2,7 @@
|
||||
|
||||
const Home = async () => {
|
||||
return (
|
||||
<main
|
||||
className='flex min-h-screen items-center justify-center'
|
||||
>
|
||||
<main className="flex min-h-screen items-center justify-center">
|
||||
Hello!
|
||||
</main>
|
||||
);
|
||||
|
||||
@@ -26,15 +26,15 @@ export const GibsAuthSignInButton = ({
|
||||
className="text-lg font-semibold"
|
||||
{...buttonProps}
|
||||
>
|
||||
<div className="my-auto flex flex-col space-x-1">
|
||||
<p>{type === 'signIn' ? 'Sign In' : 'Sign Up'} with</p>
|
||||
<div className="my-auto flex flex-row space-x-1">
|
||||
<Image
|
||||
src={'/misc/auth/gibs_auth_wide_header.png'}
|
||||
src={'/misc/auth/gibs-auth-logo.png'}
|
||||
className=""
|
||||
alt="Gib's Auth"
|
||||
width={100}
|
||||
height={100}
|
||||
width={30}
|
||||
height={30}
|
||||
/>
|
||||
<p>{type === 'signIn' ? 'Sign In' : 'Sign Up'} with Gib's Auth</p>
|
||||
</div>
|
||||
</Button>
|
||||
);
|
||||
|
||||
@@ -106,84 +106,84 @@ export const ResetPasswordForm = ({ preloadedUser }: ResetFormProps) => {
|
||||
// TO DO: Make a function to get provider type from user.
|
||||
return (
|
||||
//user.provider !== 'password'
|
||||
!user?.email
|
||||
) ? (
|
||||
<div />
|
||||
) : (
|
||||
<>
|
||||
<Separator />
|
||||
<CardHeader>
|
||||
<CardTitle className="text-2xl">Change Password</CardTitle>
|
||||
<CardDescription>
|
||||
Update your password to keep your account secure
|
||||
</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<Form {...form}>
|
||||
<form
|
||||
onSubmit={form.handleSubmit(handleSubmit)}
|
||||
className="space-y-6"
|
||||
>
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="currentPassword"
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Current Password</FormLabel>
|
||||
<FormControl>
|
||||
<Input type="password" {...field} />
|
||||
</FormControl>
|
||||
<FormDescription>
|
||||
Enter your current password.
|
||||
</FormDescription>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="newPassword"
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>New Password</FormLabel>
|
||||
<FormControl>
|
||||
<Input type="password" {...field} />
|
||||
</FormControl>
|
||||
<FormDescription>
|
||||
Enter your new password. Must be at least 8 characters.
|
||||
</FormDescription>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="confirmPassword"
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Confirm Password</FormLabel>
|
||||
<FormControl>
|
||||
<Input type="password" {...field} />
|
||||
</FormControl>
|
||||
<FormDescription>
|
||||
Please re-enter your new password to confirm.
|
||||
</FormDescription>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
<div className="flex justify-center">
|
||||
<SubmitButton
|
||||
className="w-2/3 text-[1.0rem] lg:w-1/3"
|
||||
disabled={loading}
|
||||
pendingText="Updating Password..."
|
||||
>
|
||||
Update Password
|
||||
</SubmitButton>
|
||||
</div>
|
||||
</form>
|
||||
</Form>
|
||||
</CardContent>
|
||||
</>
|
||||
!user?.email ? (
|
||||
<div />
|
||||
) : (
|
||||
<>
|
||||
<Separator />
|
||||
<CardHeader>
|
||||
<CardTitle className="text-2xl">Change Password</CardTitle>
|
||||
<CardDescription>
|
||||
Update your password to keep your account secure
|
||||
</CardDescription>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<Form {...form}>
|
||||
<form
|
||||
onSubmit={form.handleSubmit(handleSubmit)}
|
||||
className="space-y-6"
|
||||
>
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="currentPassword"
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Current Password</FormLabel>
|
||||
<FormControl>
|
||||
<Input type="password" {...field} />
|
||||
</FormControl>
|
||||
<FormDescription>
|
||||
Enter your current password.
|
||||
</FormDescription>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="newPassword"
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>New Password</FormLabel>
|
||||
<FormControl>
|
||||
<Input type="password" {...field} />
|
||||
</FormControl>
|
||||
<FormDescription>
|
||||
Enter your new password. Must be at least 8 characters.
|
||||
</FormDescription>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
<FormField
|
||||
control={form.control}
|
||||
name="confirmPassword"
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Confirm Password</FormLabel>
|
||||
<FormControl>
|
||||
<Input type="password" {...field} />
|
||||
</FormControl>
|
||||
<FormDescription>
|
||||
Please re-enter your new password to confirm.
|
||||
</FormDescription>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
)}
|
||||
/>
|
||||
<div className="flex justify-center">
|
||||
<SubmitButton
|
||||
className="w-2/3 text-[1.0rem] lg:w-1/3"
|
||||
disabled={loading}
|
||||
pendingText="Updating Password..."
|
||||
>
|
||||
Update Password
|
||||
</SubmitButton>
|
||||
</div>
|
||||
</form>
|
||||
</Form>
|
||||
</CardContent>
|
||||
</>
|
||||
)
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,49 @@
|
||||
'use client';
|
||||
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
import { cn } from '@gib/ui';
|
||||
import type { ComponentProps } from 'react';
|
||||
//import { Controls } from './controls';
|
||||
|
||||
export default function Header(headerProps: ComponentProps<'header'>) {
|
||||
return (
|
||||
<header
|
||||
className='w-full px-4 md:px-6 lg:px-20 my-8'
|
||||
{...headerProps}
|
||||
>
|
||||
<div className='flex items-center justify-between'>
|
||||
<div className='flex flex-1 justify-start'/>
|
||||
<div className='shrink-0'>
|
||||
<Link
|
||||
href='/'
|
||||
scroll={false}
|
||||
className='flex flex-row items-center justify-center px-4'
|
||||
>
|
||||
<Image
|
||||
src='/favicon.ico'
|
||||
alt='Convex Monorepo Logo'
|
||||
width={100}
|
||||
height={100}
|
||||
className='w-10 md:w-[120px]'
|
||||
/>
|
||||
<h1
|
||||
className='title-text text-base md:text-4xl lg:text-8xl
|
||||
bg-linear-to-r from-[#281A65] via-[#363354] to-accent-foreground
|
||||
dark:from-[#bec8e6] dark:via-[#F0EEE4] dark:to-[#FFF8E7]
|
||||
font-bold pl-2 md:pl-12 text-transparent bg-clip-text'
|
||||
>
|
||||
Convex Monorepo
|
||||
</h1>
|
||||
</Link>
|
||||
|
||||
</div>
|
||||
|
||||
<div className='flex-1 flex justfiy-end'>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
} from '@convex-dev/auth/nextjs/server';
|
||||
|
||||
const isSignInPage = createRouteMatcher(['/sign-in']);
|
||||
const isProtectedRoute = createRouteMatcher(['/', '/profile']);
|
||||
const isProtectedRoute = createRouteMatcher(['/profile']);
|
||||
|
||||
export default convexAuthNextjsMiddleware(
|
||||
async (request, { convexAuth }) => {
|
||||
|
||||
Reference in new issue
Block a user