clean up ai code. looks pretty good
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
|
||||
import { Button } from '@gib/ui/button';
|
||||
@@ -15,15 +16,18 @@ export function CTA() {
|
||||
everything pre-configured.
|
||||
</p>
|
||||
<div className="flex flex-col justify-center gap-3 sm:flex-row">
|
||||
<Button size="lg" asChild>
|
||||
<Link href="/sign-in">Get Started Free</Link>
|
||||
</Button>
|
||||
<Button size="lg" variant="outline" asChild>
|
||||
<Link
|
||||
href="https://git.gbrown.org/gib/convex-monorepo"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
<Image
|
||||
src='/misc/gitea/gitea.svg'
|
||||
alt='Gitea'
|
||||
width={20}
|
||||
height={20}
|
||||
/>
|
||||
View Source Code
|
||||
</Link>
|
||||
</Button>
|
||||
@@ -40,7 +44,7 @@ export function CTA() {
|
||||
<br />
|
||||
cd convex-monorepo
|
||||
<br />
|
||||
bun install
|
||||
bun i
|
||||
</code>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2,7 +2,7 @@ import { Card, CardContent, CardHeader, CardTitle } from '@gib/ui/card';
|
||||
|
||||
const features = [
|
||||
{
|
||||
title: 'Turborepo Monorepo',
|
||||
title: 'Turborepo',
|
||||
description:
|
||||
'Efficient build system with intelligent caching. Share code between web and mobile apps seamlessly.',
|
||||
icon: '⚡',
|
||||
@@ -76,8 +76,8 @@ export function Features() {
|
||||
<div className="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
|
||||
{features.map((feature) => (
|
||||
<Card key={feature.title} className="border-border/40">
|
||||
<CardHeader>
|
||||
<div className="mb-2 text-4xl">{feature.icon}</div>
|
||||
<CardHeader className='flex items-center gap-2'>
|
||||
<div className="mb-2 text-3xl">{feature.icon}</div>
|
||||
<CardTitle className="text-xl">{feature.title}</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
import Link from 'next/link';
|
||||
|
||||
import { Button } from '@gib/ui/button';
|
||||
import { Kanit } from 'next/font/google';
|
||||
|
||||
const kanitSans = Kanit({
|
||||
subsets: ['latin'],
|
||||
weight: ['400', '500', '600', '700'],
|
||||
});
|
||||
|
||||
export function Hero() {
|
||||
return (
|
||||
@@ -13,10 +18,10 @@ export function Hero() {
|
||||
</div>
|
||||
|
||||
{/* Heading */}
|
||||
<h1 className="from-foreground to-foreground/70 bg-gradient-to-br bg-clip-text text-4xl font-bold tracking-tight text-transparent sm:text-5xl md:text-6xl lg:text-7xl">
|
||||
<h1 className="from-foreground to-foreground/70 bg-linear-to-br bg-clip-text text-4xl font-bold tracking-tight text-transparent sm:text-5xl md:text-6xl lg:text-7xl">
|
||||
Build Full-Stack Apps with{' '}
|
||||
<span className="to-accent-foreground bg-gradient-to-r from-[#281A65] via-[#363354] bg-clip-text text-transparent dark:from-[#bec8e6] dark:via-[#F0EEE4] dark:to-[#FFF8E7]">
|
||||
Convex Monorepo
|
||||
<span className={`${kanitSans.className} to-accent-foreground bg-linear-to-r from-[#281A65] via-[#363354] bg-clip-text text-transparent dark:from-[#bec8e6] dark:via-[#F0EEE4] dark:to-[#FFF8E7] sm:text-6xl md:text-7xl lg:text-8xl`}>
|
||||
convex monorepo
|
||||
</span>
|
||||
</h1>
|
||||
|
||||
|
||||
@@ -1,4 +1,10 @@
|
||||
import Link from 'next/link';
|
||||
import { Kanit } from 'next/font/google';
|
||||
|
||||
const kanitSans = Kanit({
|
||||
subsets: ['latin'],
|
||||
weight: ['400', '500', '600', '700'],
|
||||
});
|
||||
|
||||
export default function Footer() {
|
||||
return (
|
||||
@@ -7,11 +13,13 @@ export default function Footer() {
|
||||
<div className="grid gap-8 md:grid-cols-4">
|
||||
{/* Brand */}
|
||||
<div className="md:col-span-2">
|
||||
<h3 className="mb-2 text-lg font-bold">Convex Monorepo</h3>
|
||||
<h3 className={`mb-2 text-3xl font-bold ${kanitSans.className}`}>convex monorepo</h3>
|
||||
<p className="text-muted-foreground text-sm">
|
||||
A production-ready Turborepo starter with Next.js, Expo, and
|
||||
self-hosted Convex backend. Built for developers who want complete
|
||||
control.
|
||||
a self-hosted Convex backend, including Convex Auth with a
|
||||
custom useSend email provider to ensure everything can be
|
||||
self-hosted. Built for developers who want complete control
|
||||
without sacrificing ease of use.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -26,7 +34,7 @@ export default function Footer() {
|
||||
rel="noopener noreferrer"
|
||||
className="text-muted-foreground hover:text-foreground transition-colors"
|
||||
>
|
||||
GitHub Repository
|
||||
Gitea Repository
|
||||
</Link>
|
||||
</li>
|
||||
<li>
|
||||
@@ -100,9 +108,8 @@ export default function Footer() {
|
||||
rel="noopener noreferrer"
|
||||
className="hover:text-foreground font-medium transition-colors"
|
||||
>
|
||||
Gib
|
||||
Gib.
|
||||
</Link>
|
||||
. Open source under MIT License.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -3,54 +3,65 @@
|
||||
import type { ComponentProps } from 'react';
|
||||
import Image from 'next/image';
|
||||
import Link from 'next/link';
|
||||
import { Kanit } from 'next/font/google';
|
||||
import { Coffee, Server, Wrench } from 'lucide-react';
|
||||
|
||||
const kanitSans = Kanit({
|
||||
subsets: ['latin'],
|
||||
weight: ['400', '500', '600', '700'],
|
||||
});
|
||||
|
||||
import { Controls } from './controls';
|
||||
|
||||
export default function Header(headerProps: ComponentProps<'header'>) {
|
||||
return (
|
||||
<header
|
||||
className="border-border/40 bg-background/95 supports-[backdrop-filter]:bg-background/60 sticky top-0 z-50 w-full border-b backdrop-blur"
|
||||
className="border-border/40 bg-background/95 supports-backdrop-filter:bg-background/60 sticky top-0 z-50 w-full border-b backdrop-blur"
|
||||
{...headerProps}
|
||||
>
|
||||
<div className="container mx-auto flex h-16 items-center justify-between px-4 md:px-6">
|
||||
{/* Logo */}
|
||||
<Link
|
||||
href="/"
|
||||
className="flex items-center gap-2 transition-opacity hover:opacity-80"
|
||||
className="flex items-center gap-2 transition-opacity hover:opacity-80 to-accent-foreground bg-linear-to-r from-[#281A65] via-[#363354] bg-clip-text text-transparent dark:from-[#bec8e6] dark:via-[#F0EEE4] dark:to-[#FFF8E7]"
|
||||
>
|
||||
<Image
|
||||
src="/favicon.ico"
|
||||
src="/misc/convex/convex-symbol-white.svg"
|
||||
alt="Convex Monorepo"
|
||||
width={32}
|
||||
height={32}
|
||||
className="h-8 w-8"
|
||||
width={50}
|
||||
height={50}
|
||||
className='invert dark:invert-0'
|
||||
/>
|
||||
<span className="hidden text-lg font-bold sm:inline-block">
|
||||
Convex Monorepo
|
||||
<span className={`hidden lg:text-5xl lg:inline mb-3 font-extrabold ${kanitSans.className}`}>
|
||||
convex monorepo
|
||||
</span>
|
||||
</Link>
|
||||
|
||||
{/* Navigation */}
|
||||
<nav className="hidden items-center gap-6 text-sm font-medium md:flex">
|
||||
<nav className="hidden items-center gap-6 text-base font-medium md:flex">
|
||||
<Link
|
||||
href="/#features"
|
||||
className="text-foreground/60 hover:text-foreground transition-colors"
|
||||
className="text-foreground/60 hover:text-foreground transition-colors flex gap-2 items-center"
|
||||
>
|
||||
<Wrench width={18} height={18} />
|
||||
Features
|
||||
</Link>
|
||||
<Link
|
||||
href="/#tech-stack"
|
||||
className="text-foreground/60 hover:text-foreground transition-colors"
|
||||
className="text-foreground/60 hover:text-foreground transition-colors flex gap-2 items-center"
|
||||
>
|
||||
Tech Stack
|
||||
<Server width={18} height={18} />
|
||||
Stack
|
||||
</Link>
|
||||
<Link
|
||||
href="https://git.gbrown.org/gib/convex-monorepo"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
className="text-foreground/60 hover:text-foreground transition-colors"
|
||||
className="text-foreground/60 hover:text-foreground transition-colors flex gap-2 items-center"
|
||||
>
|
||||
GitHub
|
||||
|
||||
<Coffee width={20} height={20} />
|
||||
Repository
|
||||
</Link>
|
||||
</nav>
|
||||
|
||||
|
||||
@@ -35,10 +35,10 @@ export const generateMetadata = (): Metadata => {
|
||||
},
|
||||
icons: {
|
||||
icon: [
|
||||
{ url: '/favicon.ico', type: 'image/x-icon', sizes: 'any' },
|
||||
{ url: '/favicon.png', type: 'image/png', sizes: 'any' },
|
||||
{
|
||||
url: '/favicon.ico',
|
||||
type: 'image/x-icon',
|
||||
url: '/favicon-light.png',
|
||||
type: 'image/png',
|
||||
sizes: 'any',
|
||||
media: '(prefers-color-scheme: dark)',
|
||||
},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { banSuspiciousIPs } from '@/lib/middleware/ban-sus-ips';
|
||||
import { banSuspiciousIPs } from '@/lib/proxy/ban-sus-ips';
|
||||
import {
|
||||
convexAuthNextjsMiddleware,
|
||||
createRouteMatcher,
|
||||
Reference in New Issue
Block a user