From d37509338ea4a147b185fc9bd8da925a7d2eadfd Mon Sep 17 00:00:00 2001 From: Francisco Pessano Date: Sat, 7 Jun 2025 03:01:36 -0300 Subject: [PATCH] Added dark modes --- src/components/Dashboard.tsx | 526 +++++++++++++++++--------------- src/components/DebtCard.tsx | 260 ++++++++-------- src/components/DebtTimeline.tsx | 218 +++++++------ src/pages/index.astro | 395 ++++++++++++++++-------- src/pages/login.astro | 48 +-- src/pages/signup.astro | 48 +-- 6 files changed, 856 insertions(+), 639 deletions(-) diff --git a/src/components/Dashboard.tsx b/src/components/Dashboard.tsx index 947eca9..18bf3d5 100644 --- a/src/components/Dashboard.tsx +++ b/src/components/Dashboard.tsx @@ -1,275 +1,295 @@ -import React, { useEffect, useState } from 'react'; -import { supabase, type Debt } from '../lib/supabase'; -import { Button } from '@/components/ui/button'; -import { DebtCard } from './DebtCard'; -import { DebtTimeline } from './DebtTimeline'; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; -import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; -import { Badge } from '@/components/ui/badge'; -import { Separator } from '@/components/ui/separator'; -import { - DollarSign, - TrendingUp, - Mail, - CheckCircle, - AlertTriangle, - RefreshCw, - BarChart3, - LogOut -} from 'lucide-react'; +import React, { useEffect, useState } from "react"; +import { supabase, type Debt } from "../lib/supabase"; +import { Button } from "@/components/ui/button"; +import { DebtCard } from "./DebtCard"; +import { DebtTimeline } from "./DebtTimeline"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; +import { Badge } from "@/components/ui/badge"; +import { Separator } from "@/components/ui/separator"; +import { + DollarSign, + TrendingUp, + Mail, + CheckCircle, + AlertTriangle, + RefreshCw, + BarChart3, + LogOut, +} from "lucide-react"; export function Dashboard() { - const [debts, setDebts] = useState([]); - const [loading, setLoading] = useState(true); - const [stats, setStats] = useState({ - totalDebts: 0, - totalAmount: 0, - projectedSavings: 0, - settledCount: 0 - }); + const [debts, setDebts] = useState([]); + const [loading, setLoading] = useState(true); + const [stats, setStats] = useState({ + totalDebts: 0, + totalAmount: 0, + projectedSavings: 0, + settledCount: 0, + }); - useEffect(() => { - fetchDebts(); - setupRealtimeSubscription(); - }, []); + useEffect(() => { + fetchDebts(); + setupRealtimeSubscription(); + }, []); - useEffect(() => { - calculateStats(); - }, [debts]); + useEffect(() => { + calculateStats(); + }, [debts]); - const fetchDebts = async () => { - try { - const { data, error } = await supabase - .from('debts') - .select('*') - .order('created_at', { ascending: false }); + const fetchDebts = async () => { + try { + const { data, error } = await supabase + .from("debts") + .select("*") + .order("created_at", { ascending: false }); - if (error) throw error; - setDebts(data || []); - } catch (error) { - console.error('Error fetching debts:', error); - } finally { - setLoading(false); - } - }; + if (error) throw error; + setDebts(data || []); + } catch (error) { + console.error("Error fetching debts:", error); + } finally { + setLoading(false); + } + }; - const setupRealtimeSubscription = () => { - const subscription = supabase - .channel('debts_changes') - .on( - 'postgres_changes', - { - event: '*', - schema: 'public', - table: 'debts' - }, - (payload) => { - if (payload.eventType === 'INSERT') { - setDebts(prev => [payload.new as Debt, ...prev]); - } else if (payload.eventType === 'UPDATE') { - setDebts(prev => - prev.map(debt => - debt.id === payload.new.id ? payload.new as Debt : debt - ) - ); - } else if (payload.eventType === 'DELETE') { - setDebts(prev => prev.filter(debt => debt.id !== payload.old.id)); - } - } - ) - .subscribe(); + const setupRealtimeSubscription = () => { + const subscription = supabase + .channel("debts_changes") + .on( + "postgres_changes", + { + event: "*", + schema: "public", + table: "debts", + }, + (payload) => { + if (payload.eventType === "INSERT") { + setDebts((prev) => [payload.new as Debt, ...prev]); + } else if (payload.eventType === "UPDATE") { + setDebts((prev) => + prev.map((debt) => + debt.id === payload.new.id ? (payload.new as Debt) : debt + ) + ); + } else if (payload.eventType === "DELETE") { + setDebts((prev) => + prev.filter((debt) => debt.id !== payload.old.id) + ); + } + } + ) + .subscribe(); - return () => { - subscription.unsubscribe(); - }; - }; + return () => { + subscription.unsubscribe(); + }; + }; - const calculateStats = () => { - const totalDebts = debts.length; - const totalAmount = debts.reduce((sum, debt) => sum + debt.amount, 0); - const projectedSavings = debts.reduce((sum, debt) => sum + debt.projected_savings, 0); - const settledCount = debts.filter(debt => debt.status === 'settled').length; + const calculateStats = () => { + const totalDebts = debts.length; + const totalAmount = debts.reduce((sum, debt) => sum + debt.amount, 0); + const projectedSavings = debts.reduce( + (sum, debt) => sum + debt.projected_savings, + 0 + ); + const settledCount = debts.filter( + (debt) => debt.status === "settled" + ).length; - setStats({ - totalDebts, - totalAmount, - projectedSavings, - settledCount - }); - }; + setStats({ + totalDebts, + totalAmount, + projectedSavings, + settledCount, + }); + }; - const handleSignOut = async () => { - await supabase.auth.signOut(); - window.location.href = '/'; - }; + const handleSignOut = async () => { + await supabase.auth.signOut(); + window.location.href = "/"; + }; - const formatCurrency = (amount: number) => { - return new Intl.NumberFormat('en-US', { - style: 'currency', - currency: 'USD' - }).format(amount); - }; + const formatCurrency = (amount: number) => { + return new Intl.NumberFormat("en-US", { + style: "currency", + currency: "USD", + }).format(amount); + }; - const groupedDebts = { - all: debts, - active: debts.filter(debt => ['received', 'negotiating'].includes(debt.status)), - settled: debts.filter(debt => debt.status === 'settled'), - failed: debts.filter(debt => ['failed', 'opted_out'].includes(debt.status)) - }; + const groupedDebts = { + all: debts, + active: debts.filter((debt) => + ["received", "negotiating"].includes(debt.status) + ), + settled: debts.filter((debt) => debt.status === "settled"), + failed: debts.filter((debt) => + ["failed", "opted_out"].includes(debt.status) + ), + }; - if (loading) { - return ( -
-
- - Loading dashboard... -
-
- ); - } + if (loading) { + return ( +
+
+ + Loading dashboard... +
+
+ ); + } - return ( -
-
- {/* Header */} -
-
-

- - InboxNegotiator Dashboard -

-

- AI-powered debt resolution platform with real-time updates -

-
-
+ return ( +
+
+ {/* Header */} +
+
+

+ + InboxNegotiator Dashboard +

+

+ AI-powered debt resolution platform with real-time updates +

+
+
- {/* Stats Cards */} -
- - - Total Debts - - - -
{stats.totalDebts}
-

- Emails processed -

-
-
+ {/* Stats Cards */} +
+ + + Total Debts + + + +
{stats.totalDebts}
+

Emails processed

+
+
- - - Total Amount - - - -
{formatCurrency(stats.totalAmount)}
-

- Across all debts -

-
-
+ + + + Total Amount + + + + +
+ {formatCurrency(stats.totalAmount)} +
+

Across all debts

+
+
- - - Projected Savings - - - -
- {formatCurrency(stats.projectedSavings)} -
-

- From negotiations -

-
-
+ + + + Projected Savings + + + + +
+ {formatCurrency(stats.projectedSavings)} +
+

From negotiations

+
+
- - - Settled Cases - - - -
{stats.settledCount}
-

- Successfully resolved -

-
-
-
+ + + + Settled Cases + + + + +
{stats.settledCount}
+

+ Successfully resolved +

+
+
+
- {/* Main Content */} - - - - All Debts - - {groupedDebts.all.length} - - - - Active - - {groupedDebts.active.length} - - - - Settled - - {groupedDebts.settled.length} - - - - Failed/Opted Out - - {groupedDebts.failed.length} - - - + {/* Main Content */} + + + + All Debts + + {groupedDebts.all.length} + + + + Active + + {groupedDebts.active.length} + + + + Settled + + {groupedDebts.settled.length} + + + + Failed/Opted Out + + {groupedDebts.failed.length} + + + - {Object.entries(groupedDebts).map(([key, debtList]) => ( - - {debtList.length === 0 ? ( - - - -

No debts found

-

- {key === 'all' - ? 'Forward your first debt email to get started with automated negotiations.' - : `No debts with ${key} status found.` - } -

-
-
- ) : ( -
- {debtList.map((debt) => ( -
- - - - - - -
- ))} -
- )} -
- ))} -
+ {Object.entries(groupedDebts).map(([key, debtList]) => ( + + {debtList.length === 0 ? ( + + + +

+ No debts found +

+

+ {key === "all" + ? "Forward your first debt email to get started with automated negotiations." + : `No debts with ${key} status found.`} +

+
+
+ ) : ( +
+ {debtList.map((debt) => ( +
+ + + + + + +
+ ))} +
+ )} +
+ ))} +
- {/* Footer */} - -
-

InboxNegotiator - FDCPA-compliant debt resolution platform

-

Real-time updates powered by Supabase

-
-
-
- ); -} \ No newline at end of file + {/* Footer */} + +
+

InboxNegotiator - FDCPA-compliant debt resolution platform

+

Real-time updates powered by Supabase

+
+
+
+ ); +} diff --git a/src/components/DebtCard.tsx b/src/components/DebtCard.tsx index 98cb04f..7b03a8f 100644 --- a/src/components/DebtCard.tsx +++ b/src/components/DebtCard.tsx @@ -1,136 +1,154 @@ -import React from 'react'; -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; -import { Badge } from '@/components/ui/badge'; -import { Button } from '@/components/ui/button'; -import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; -import { Calendar, DollarSign, Mail, FileText, TrendingUp } from 'lucide-react'; -import type { Debt } from '../lib/supabase'; +import React from "react"; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { Calendar, DollarSign, Mail, FileText, TrendingUp } from "lucide-react"; +import type { Debt } from "../lib/supabase"; interface DebtCardProps { - debt: Debt; + debt: Debt; } const statusColors = { - received: 'bg-blue-100 text-blue-800 border-blue-200', - negotiating: 'bg-yellow-100 text-yellow-800 border-yellow-200', - settled: 'bg-green-100 text-green-800 border-green-200', - failed: 'bg-red-100 text-red-800 border-red-200', - opted_out: 'bg-gray-100 text-gray-800 border-gray-200' + received: + "bg-blue-100 text-blue-800 border-blue-200 dark:bg-blue-900/20 dark:text-blue-300 dark:border-blue-800", + negotiating: + "bg-yellow-100 text-yellow-800 border-yellow-200 dark:bg-yellow-900/20 dark:text-yellow-300 dark:border-yellow-800", + settled: + "bg-green-100 text-green-800 border-green-200 dark:bg-green-900/20 dark:text-green-300 dark:border-green-800", + failed: + "bg-red-100 text-red-800 border-red-200 dark:bg-red-900/20 dark:text-red-300 dark:border-red-800", + opted_out: + "bg-gray-100 text-gray-800 border-gray-200 dark:bg-gray-800/20 dark:text-gray-300 dark:border-gray-700", }; const statusLabels = { - received: 'Received', - negotiating: 'Negotiating', - settled: 'Settled', - failed: 'Failed', - opted_out: 'Opted Out' + received: "Received", + negotiating: "Negotiating", + settled: "Settled", + failed: "Failed", + opted_out: "Opted Out", }; export function DebtCard({ debt }: DebtCardProps) { - const formatCurrency = (amount: number) => { - return new Intl.NumberFormat('en-US', { - style: 'currency', - currency: 'USD' - }).format(amount); - }; + const formatCurrency = (amount: number) => { + return new Intl.NumberFormat("en-US", { + style: "currency", + currency: "USD", + }).format(amount); + }; - const formatDate = (dateString: string) => { - return new Date(dateString).toLocaleDateString('en-US', { - year: 'numeric', - month: 'short', - day: 'numeric', - hour: '2-digit', - minute: '2-digit' - }); - }; + const formatDate = (dateString: string) => { + return new Date(dateString).toLocaleDateString("en-US", { + year: "numeric", + month: "short", + day: "numeric", + hour: "2-digit", + minute: "2-digit", + }); + }; - return ( - - -
- - {debt.vendor} - - - {statusLabels[debt.status]} - -
- - - {formatDate(debt.created_at)} - -
- - -
-
- - - {formatCurrency(debt.amount)} - -
- - {debt.projected_savings > 0 && ( -
- - - Save {formatCurrency(debt.projected_savings)} - -
- )} -
+ return ( + + +
+ + {debt.vendor} + + + {statusLabels[debt.status]} + +
+ + + {formatDate(debt.created_at)} + +
-
- - - - - - - Original Email - - From: {debt.vendor} • {formatDate(debt.created_at)} - - -
-
-                  {debt.raw_email || 'No email content available'}
-                
-
-
-
+ +
+
+ + + {formatCurrency(debt.amount)} + +
- {debt.negotiated_plan && ( - - - - - - - AI-Generated Negotiation Response - - FDCPA-compliant response ready to send - - -
-
-                    {debt.negotiated_plan}
-                  
-
-
-
- )} -
-
- - ); -} \ No newline at end of file + {debt.projected_savings > 0 && ( +
+ + + Save {formatCurrency(debt.projected_savings)} + +
+ )} +
+ +
+ + + + + + + Original Email + + From: {debt.vendor} • {formatDate(debt.created_at)} + + +
+
+									{debt.raw_email || "No email content available"}
+								
+
+
+
+ + {debt.negotiated_plan && ( + + + + + + + AI-Generated Negotiation Response + + FDCPA-compliant response ready to send + + +
+
+										{debt.negotiated_plan}
+									
+
+
+
+ )} +
+
+
+ ); +} diff --git a/src/components/DebtTimeline.tsx b/src/components/DebtTimeline.tsx index b95d6ed..384398c 100644 --- a/src/components/DebtTimeline.tsx +++ b/src/components/DebtTimeline.tsx @@ -1,113 +1,139 @@ -import React from 'react'; -import { CheckCircle, Clock, AlertCircle, XCircle, StopCircle } from 'lucide-react'; -import type { Debt } from '../lib/supabase'; +import React from "react"; +import { + CheckCircle, + Clock, + AlertCircle, + XCircle, + StopCircle, +} from "lucide-react"; +import type { Debt } from "../lib/supabase"; interface DebtTimelineProps { - debt: Debt; + debt: Debt; } const timelineSteps = [ - { key: 'received', label: 'Email Received', icon: CheckCircle }, - { key: 'negotiating', label: 'Negotiating', icon: Clock }, - { key: 'settled', label: 'Settled', icon: CheckCircle }, + { key: "received", label: "Email Received", icon: CheckCircle }, + { key: "negotiating", label: "Negotiating", icon: Clock }, + { key: "settled", label: "Settled", icon: CheckCircle }, ]; const statusIcons = { - received: CheckCircle, - negotiating: Clock, - settled: CheckCircle, - failed: XCircle, - opted_out: StopCircle + received: CheckCircle, + negotiating: Clock, + settled: CheckCircle, + failed: XCircle, + opted_out: StopCircle, }; const statusColors = { - received: 'text-blue-600', - negotiating: 'text-yellow-600', - settled: 'text-green-600', - failed: 'text-red-600', - opted_out: 'text-gray-600' + received: "text-blue-600 dark:text-blue-400", + negotiating: "text-yellow-600 dark:text-yellow-400", + settled: "text-green-600 dark:text-green-400", + failed: "text-red-600 dark:text-red-400", + opted_out: "text-gray-600 dark:text-gray-400", }; export function DebtTimeline({ debt }: DebtTimelineProps) { - const currentStepIndex = timelineSteps.findIndex(step => step.key === debt.status); - - return ( -
-

Progress Timeline

- -
- {timelineSteps.map((step, index) => { - const isCompleted = index <= currentStepIndex; - const isActive = index === currentStepIndex; - const Icon = step.icon; - - return ( -
-
step.key === debt.status + ); + + return ( +
+

Progress Timeline

+ +
+ {timelineSteps.map((step, index) => { + const isCompleted = index <= currentStepIndex; + const isActive = index === currentStepIndex; + const Icon = step.icon; + + return ( +
+
- -
- -
-
+ +
+ +
+
- {step.label} -
- - {isActive && ( -
- {debt.status === 'received' && 'Processing email and generating response...'} - {debt.status === 'negotiating' && 'Response generated, waiting for creditor reply'} - {debt.status === 'settled' && 'Payment plan agreed upon'} -
- )} -
- - {isActive && ( -
- {new Date(debt.updated_at).toLocaleDateString()} -
- )} -
- ); - })} - - {/* Special cases for failed and opted_out */} - {(debt.status === 'failed' || debt.status === 'opted_out') && ( -
-
+ {step.label} +
+ + {isActive && ( +
+ {debt.status === "received" && + "Processing email and generating response..."} + {debt.status === "negotiating" && + "Response generated, waiting for creditor reply"} + {debt.status === "settled" && "Payment plan agreed upon"} +
+ )} +
+ + {isActive && ( +
+ {new Date(debt.updated_at).toLocaleDateString()} +
+ )} +
+ ); + })} + + {/* Special cases for failed and opted_out */} + {(debt.status === "failed" || debt.status === "opted_out") && ( +
+
- {React.createElement(statusIcons[debt.status], { className: 'h-4 w-4' })} -
- -
-
- {debt.status === 'failed' ? 'Negotiation Failed' : 'Opted Out'} -
-
- {debt.status === 'failed' - ? 'Creditor declined the negotiation proposal' - : 'User requested to stop communication' - } -
-
- -
- {new Date(debt.updated_at).toLocaleDateString()} -
-
- )} -
-
- ); -} \ No newline at end of file + ${ + debt.status === "failed" + ? "border-red-500 text-red-500 dark:border-red-400 dark:text-red-400" + : "border-gray-500 text-gray-500 dark:border-gray-400 dark:text-gray-400" + } + `} + > + {React.createElement(statusIcons[debt.status], { + className: "h-4 w-4", + })} +
+ +
+
+ {debt.status === "failed" ? "Negotiation Failed" : "Opted Out"} +
+
+ {debt.status === "failed" + ? "Creditor declined the negotiation proposal" + : "User requested to stop communication"} +
+
+ +
+ {new Date(debt.updated_at).toLocaleDateString()} +
+
+ )} +
+
+ ); +} diff --git a/src/pages/index.astro b/src/pages/index.astro index 911e415..3ea1af4 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,137 +1,274 @@ --- -import '@/styles/globals.css' -import Layout from '../layouts/Layout.astro'; -import { Navbar } from '../components/Navbar'; +import "@/styles/globals.css"; +import Layout from "../layouts/Layout.astro"; +import { Navbar } from "../components/Navbar"; --- - - -
- -
-
-
-

- AI-Powered - - Debt Resolution - -

-

- Forward your debt emails and let our AI negotiate FDCPA-compliant payment plans automatically. - Save time, reduce stress, and potentially save thousands on your debts. -

- -
-
-
+ - -
-
-
-

How It Works

-

Simple, automated, and compliant debt resolution

-
- -
-
-
- - - -
-

Forward Emails

-

Simply forward your debt collection emails to our secure processing address.

-
- -
-
- - - -
-

AI Analysis

-

Our AI analyzes the debt and generates FDCPA-compliant negotiation strategies.

-
- -
-
- - - -
-

Track Progress

-

Monitor negotiations in real-time and track your potential savings.

-
-
-
-
+
+ +
+
+
+

+ AI-Powered + + Debt Resolution + +

+

+ Forward your debt emails and let our AI negotiate FDCPA-compliant + payment plans automatically. Save time, reduce stress, and + potentially save thousands on your debts. +

+ +
+
+
- -
-
-
-

Why Choose InboxNegotiator?

-
- -
-
-

FDCPA Compliant

-

All responses follow Fair Debt Collection Practices Act guidelines.

-
- -
-

Save Money

-

Potentially reduce your debt by up to 40% through strategic negotiations.

-
- -
-

Real-time Updates

-

Track your negotiations with live dashboard updates.

-
- -
-

Secure & Private

-

Your financial information is encrypted and protected.

-
-
-
-
+ +
+
+
+

+ How It Works +

+

+ Simple, automated, and compliant debt resolution +

+
- -
-
-

Ready to Take Control of Your Debt?

-

Join thousands who have successfully negotiated their debts with AI assistance.

- - Start Your Free Account - -
-
-
+
+
+
+ + + +
+

+ Forward Emails +

+

+ Simply forward your debt collection emails to our secure + processing address. +

+
- -
-
-
-
- - - - InboxNegotiator -
-

AI-powered debt resolution platform

-

© 2025 InboxNegotiator. All rights reserved.

-
-
-
- \ No newline at end of file +
+
+ + + +
+

+ AI Analysis +

+

+ Our AI analyzes the debt and generates FDCPA-compliant negotiation + strategies. +

+
+ +
+
+ + + +
+

+ Track Progress +

+

+ Monitor negotiations in real-time and track your potential + savings. +

+
+
+ + + + +
+
+
+

+ Why Choose InboxNegotiator? +

+
+ +
+
+

+ FDCPA Compliant +

+

+ All responses follow Fair Debt Collection Practices Act + guidelines. +

+
+ +
+

+ Save Money +

+

+ Potentially reduce your debt by up to 40% through strategic + negotiations. +

+
+ +
+

+ Real-time Updates +

+

+ Track your negotiations with live dashboard updates. +

+
+ +
+

+ Secure & Private +

+

+ Your financial information is encrypted and protected. +

+
+
+
+
+ + +
+
+

+ Ready to Take Control of Your Debt? +

+

+ Join thousands who have successfully negotiated their debts with AI + assistance. +

+ + Start Your Free Account + +
+
+
+ + +
+
+
+
+ + + + InboxNegotiator +
+

+ AI-powered debt resolution platform +

+

+ © 2025 InboxNegotiator. All rights reserved. +

+
+
+
+
diff --git a/src/pages/login.astro b/src/pages/login.astro index 45fb735..6df33c3 100644 --- a/src/pages/login.astro +++ b/src/pages/login.astro @@ -1,24 +1,32 @@ --- -import '@/styles/globals.css' -import Layout from '../layouts/Layout.astro'; -import { AuthForm } from '../components/AuthForm'; -import { Navbar } from '../components/Navbar'; -import { AuthGuard } from '../components/AuthGuard'; +import "@/styles/globals.css"; +import Layout from "../layouts/Layout.astro"; +import { AuthForm } from "../components/AuthForm"; +import { Navbar } from "../components/Navbar"; +import { AuthGuard } from "../components/AuthGuard"; --- - - - -
-
-
-

Sign In

-

Access your debt resolution dashboard

-
- - -
-
-
-
\ No newline at end of file + + + +
+
+
+

+ Sign In +

+

+ Access your debt resolution dashboard +

+
+ + +
+
+
+ diff --git a/src/pages/signup.astro b/src/pages/signup.astro index b9b37b6..5e153ba 100644 --- a/src/pages/signup.astro +++ b/src/pages/signup.astro @@ -1,24 +1,32 @@ --- -import '@/styles/globals.css' -import Layout from '../layouts/Layout.astro'; -import { AuthForm } from '../components/AuthForm'; -import { Navbar } from '../components/Navbar'; -import { AuthGuard } from '../components/AuthGuard'; +import "@/styles/globals.css"; +import Layout from "../layouts/Layout.astro"; +import { AuthForm } from "../components/AuthForm"; +import { Navbar } from "../components/Navbar"; +import { AuthGuard } from "../components/AuthGuard"; --- - - - -
-
-
-

Create Account

-

Start resolving your debts with AI assistance

-
- - -
-
-
-
\ No newline at end of file + + + +
+
+
+

+ Create Account +

+

+ Start resolving your debts with AI assistance +

+
+ + +
+
+
+