diff --git a/app/(dashboard)/dashboard/activity/page.tsx b/app/(dashboard)/dashboard/activity/page.tsx index 68ada969..618fa783 100644 --- a/app/(dashboard)/dashboard/activity/page.tsx +++ b/app/(dashboard)/dashboard/activity/page.tsx @@ -73,7 +73,7 @@ export default async function ActivityPage() { return (
-

+

Activity Log

@@ -91,15 +91,15 @@ export default async function ActivityPage() { return (
  • -
    - +
    +
    -

    +

    {formattedAction} {log.ipAddress && ` from IP ${log.ipAddress}`}

    -

    +

    {getRelativeTime(new Date(log.timestamp))}

    @@ -110,10 +110,10 @@ export default async function ActivityPage() { ) : (
    -

    +

    No activity yet

    -

    +

    When you perform actions like signing in or updating your account, they'll appear here.

    diff --git a/app/(dashboard)/dashboard/general/page.tsx b/app/(dashboard)/dashboard/general/page.tsx index 48434aac..e883842b 100644 --- a/app/(dashboard)/dashboard/general/page.tsx +++ b/app/(dashboard)/dashboard/general/page.tsx @@ -37,7 +37,7 @@ export default function GeneralPage() { return (
    -

    +

    General Settings

    diff --git a/app/(dashboard)/dashboard/layout.tsx b/app/(dashboard)/dashboard/layout.tsx index 4879d257..99d4d5d9 100644 --- a/app/(dashboard)/dashboard/layout.tsx +++ b/app/(dashboard)/dashboard/layout.tsx @@ -24,7 +24,7 @@ export default function DashboardLayout({ return (
    {/* Mobile header */} -
    +
    Settings
    @@ -41,7 +41,10 @@ export default function DashboardLayout({
    {/* Sidebar */}
    diff --git a/app/(dashboard)/page.tsx b/app/(dashboard)/page.tsx index 690bf75f..15c96995 100644 --- a/app/(dashboard)/page.tsx +++ b/app/(dashboard)/page.tsx @@ -9,11 +9,11 @@ export default function HomePage() {
    -

    +

    Build Your SaaS Faster Than Ever

    -

    +

    Launch your SaaS product in record time with our powerful, ready-to-use template. Packed with modern technologies and essential integrations. @@ -37,7 +37,7 @@ export default function HomePage() {

    -
    +
    @@ -50,10 +50,10 @@ export default function HomePage() {
    -

    +

    Next.js and React

    -

    +

    Leverage the power of modern web technologies for optimal performance and developer experience.

    @@ -65,10 +65,10 @@ export default function HomePage() {
    -

    +

    Postgres and Drizzle ORM

    -

    +

    Robust database solution with an intuitive ORM for efficient data management and scalability.

    @@ -80,10 +80,10 @@ export default function HomePage() {
    -

    +

    Stripe Integration

    -

    +

    Seamless payment processing and subscription management with industry-leading Stripe integration.

    @@ -93,14 +93,14 @@ export default function HomePage() {
    -
    +
    -

    +

    Ready to launch your SaaS?

    -

    +

    Our template provides everything you need to get your SaaS up and running quickly. Don't waste time on boilerplate - focus on what makes your product unique. diff --git a/app/(dashboard)/pricing/page.tsx b/app/(dashboard)/pricing/page.tsx index 234cbf5e..400b0898 100644 --- a/app/(dashboard)/pricing/page.tsx +++ b/app/(dashboard)/pricing/page.tsx @@ -67,13 +67,13 @@ function PricingCard({ }) { return (

    -

    {name}

    -

    +

    {name}

    +

    with {trialDays} day free trial

    -

    +

    ${price / 100}{' '} - + per user / {interval}

    @@ -81,7 +81,7 @@ function PricingCard({ {features.map((feature, index) => (
  • - {feature} + {feature}
  • ))} diff --git a/app/(dashboard)/terminal.tsx b/app/(dashboard)/terminal.tsx index 49fade2f..e2a13feb 100644 --- a/app/(dashboard)/terminal.tsx +++ b/app/(dashboard)/terminal.tsx @@ -32,7 +32,7 @@ export function Terminal() { }; return ( -
    +
    diff --git a/app/(login)/login.tsx b/app/(login)/login.tsx index 2a2461a9..e6512d9f 100644 --- a/app/(login)/login.tsx +++ b/app/(login)/login.tsx @@ -10,6 +10,8 @@ import { CircleIcon, Loader2 } from 'lucide-react'; import { signIn, signUp } from './actions'; import { ActionState } from '@/lib/auth/middleware'; +const inputSharedStyles = 'appearance-none rounded-full relative block w-full px-3 py-2 border placeholder-gray-500 text-foreground/90 focus:outline-none focus:ring-orange-500 focus:border-orange-500 focus:z-10 sm:text-sm appearance-none rounded-full relative block w-full px-3 py-2 border placeholder-gray-500 text-foreground/90 focus:outline-none focus:ring-orange-500 focus:border-orange-500 focus:z-10 sm:text-sm'; + export function Login({ mode = 'signin' }: { mode?: 'signin' | 'signup' }) { const searchParams = useSearchParams(); const redirect = searchParams.get('redirect'); @@ -21,12 +23,12 @@ export function Login({ mode = 'signin' }: { mode?: 'signin' | 'signup' }) { ); return ( -
    +
    -

    +

    {mode === 'signin' ? 'Sign in to your account' : 'Create your account'} @@ -41,7 +43,7 @@ export function Login({ mode = 'signin' }: { mode?: 'signin' | 'signup' }) {
    @@ -53,7 +55,7 @@ export function Login({ mode = 'signin' }: { mode?: 'signin' | 'signup' }) { autoComplete="email" required maxLength={50} - className="appearance-none rounded-full relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-orange-500 focus:border-orange-500 focus:z-10 sm:text-sm" + className={inputSharedStyles} placeholder="Enter your email" />
    @@ -62,7 +64,7 @@ export function Login({ mode = 'signin' }: { mode?: 'signin' | 'signup' }) {
    @@ -77,7 +79,7 @@ export function Login({ mode = 'signin' }: { mode?: 'signin' | 'signup' }) { required minLength={8} maxLength={100} - className="appearance-none rounded-full relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 focus:outline-none focus:ring-orange-500 focus:border-orange-500 focus:z-10 sm:text-sm" + className={inputSharedStyles} placeholder="Enter your password" />
    @@ -110,10 +112,10 @@ export function Login({ mode = 'signin' }: { mode?: 'signin' | 'signup' }) {
    -
    +
    - + {mode === 'signin' ? 'New to our platform?' : 'Already have an account?'} @@ -126,7 +128,7 @@ export function Login({ mode = 'signin' }: { mode?: 'signin' | 'signup' }) { href={`${mode === 'signin' ? '/sign-up' : '/sign-in'}${ redirect ? `?redirect=${redirect}` : '' }${priceId ? `&priceId=${priceId}` : ''}`} - className="w-full flex justify-center py-2 px-4 border border-gray-300 rounded-full shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-orange-500" + className="w-full flex justify-center py-2 px-4 border rounded-full shadow-sm text-sm font-medium text-foreground/70 bg-background hover:bg-background/20 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-orange-500" > {mode === 'signin' ? 'Create an account' diff --git a/app/layout.tsx b/app/layout.tsx index 16f89bb7..b173f640 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -3,6 +3,7 @@ import type { Metadata, Viewport } from 'next'; import { Manrope } from 'next/font/google'; import { UserProvider } from '@/lib/auth'; import { getUser } from '@/lib/db/queries'; +import { cookies } from 'next/headers' export const metadata: Metadata = { title: 'Next.js SaaS Starter', @@ -20,14 +21,29 @@ export default function RootLayout({ }: { children: React.ReactNode; }) { + const storedTheme = cookies().get('next-sass-starter-theme')?.value let userPromise = getUser(); return ( - + +