From 2a4f78a762c97be591b18db5f96e62ea9319776d Mon Sep 17 00:00:00 2001 From: Sean O'Connor Date: Thu, 31 Jul 2025 18:37:45 -0400 Subject: [PATCH] Theme overhaul - missing files --- .../mono/GeistMono-VariableFont_wght.ttf | Bin 0 -> 137804 bytes .../geist/sans/Geist-VariableFont_wght.ttf | Bin 0 -> 148832 bytes src/app/(legal)/privacy/page.tsx | 390 +++++++++++++++ src/app/(legal)/terms/page.tsx | 306 ++++++++++++ src/app/api/auth/forgot-password/route.ts | 101 ++++ src/app/api/auth/reset-password/route.ts | 74 +++ .../api/auth/validate-reset-token/route.ts | 37 ++ src/app/auth/forgot-password/page.tsx | 385 +++++++++++++++ src/app/auth/reset-password/page.tsx | 462 ++++++++++++++++++ .../_components/invoice-status-chart.tsx | 152 ++++++ .../_components/monthly-metrics-chart.tsx | 206 ++++++++ .../dashboard/_components/revenue-chart.tsx | 159 ++++++ src/app/dashboard/invoices/[id]/edit/page.tsx | 12 + src/components/ui/legal-modal.tsx | 346 +++++++++++++ src/components/ui/scroll-area.tsx | 26 + src/components/ui/sonner.tsx | 65 +++ .../email-templates/password-reset-email.ts | 232 +++++++++ 17 files changed, 2953 insertions(+) create mode 100644 public/fonts/geist/mono/GeistMono-VariableFont_wght.ttf create mode 100644 public/fonts/geist/sans/Geist-VariableFont_wght.ttf create mode 100644 src/app/(legal)/privacy/page.tsx create mode 100644 src/app/(legal)/terms/page.tsx create mode 100644 src/app/api/auth/forgot-password/route.ts create mode 100644 src/app/api/auth/reset-password/route.ts create mode 100644 src/app/api/auth/validate-reset-token/route.ts create mode 100644 src/app/auth/forgot-password/page.tsx create mode 100644 src/app/auth/reset-password/page.tsx create mode 100644 src/app/dashboard/_components/invoice-status-chart.tsx create mode 100644 src/app/dashboard/_components/monthly-metrics-chart.tsx create mode 100644 src/app/dashboard/_components/revenue-chart.tsx create mode 100644 src/app/dashboard/invoices/[id]/edit/page.tsx create mode 100644 src/components/ui/legal-modal.tsx create mode 100644 src/components/ui/scroll-area.tsx create mode 100644 src/components/ui/sonner.tsx create mode 100644 src/lib/email-templates/password-reset-email.ts diff --git a/public/fonts/geist/mono/GeistMono-VariableFont_wght.ttf b/public/fonts/geist/mono/GeistMono-VariableFont_wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f86f195187890961e3e45bc1100b2b4246f2404b GIT binary patch literal 137804 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 literal 0 HcmV?d00001 diff --git a/public/fonts/geist/sans/Geist-VariableFont_wght.ttf b/public/fonts/geist/sans/Geist-VariableFont_wght.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ad6f2c5ac5e8f57598bbc35e02c00f80961d6b7d GIT binary patch literal 148832 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

rj%R3M7{mBa35p_qzLfDAKi|*z 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

+ + {/* Content */} +
+
+ + + Introduction + + +

+ beenvoice ("we", "our", or "us") + is committed to protecting your privacy. This Privacy Policy + explains how we collect, use, disclose, and safeguard your + information when you use our invoicing platform and services. +

+

+ Please read this Privacy Policy carefully. If you do not agree + with the terms of this Privacy Policy, please do not access or + use our Service. +

+
+
+ + + + Information We Collect + + +

Personal Information

+

+ We may collect personal information that you voluntarily provide + to us when you: +

+
    +
  • Register for an account
  • +
  • Create invoices or manage client information
  • +
  • Contact us for support
  • +
  • Subscribe to our newsletters or communications
  • +
+ +

This personal information may include:

+
    +
  • Name and contact information (email, phone, address)
  • +
  • Business information and tax details
  • +
  • Client information you input into the system
  • +
  • Financial information related to your invoices
  • +
  • + Payment information (processed securely by third-party + providers) +
  • +
+ +

Automatically Collected Information

+

+ We may automatically collect certain information when you visit + our Service: +

+
    +
  • + Device information (IP address, browser type, operating + system) +
  • +
  • Usage data (pages visited, time spent, features used)
  • +
  • Log files and analytics data
  • +
  • Cookies and similar tracking technologies
  • +
+
+
+ + + + How We Use Your Information + + +

We use the information we collect to:

+
    +
  • Provide, operate, and maintain our Service
  • +
  • Process your transactions and manage your account
  • +
  • Improve and personalize your experience
  • +
  • + Communicate with you about your account and our services +
  • +
  • Send you technical notices and support messages
  • +
  • Respond to your comments, questions, and requests
  • +
  • Monitor usage and analyze trends
  • +
  • + Detect, prevent, and address technical issues and security + breaches +
  • +
  • Comply with legal obligations
  • +
+
+
+ + + + How We Share Your Information + + +

+ We do not sell, trade, or rent your personal information to + third parties. We may share your information in the following + circumstances: +

+ +

Service Providers

+

+ We may share your information with trusted third-party service + providers who assist us in operating our Service, such as: +

+
    +
  • Cloud hosting and storage providers
  • +
  • Payment processors
  • +
  • Email service providers
  • +
  • Analytics and monitoring services
  • +
+ +

Legal Requirements

+

+ We may disclose your information if required to do so by law or + in response to: +

+
    +
  • Legal processes (subpoenas, court orders)
  • +
  • Government requests
  • +
  • Law enforcement investigations
  • +
  • Protection of our rights, property, or safety
  • +
+ +

Business Transfers

+

+ In the event of a merger, acquisition, or sale of assets, your + information may be transferred as part of that transaction. +

+
+
+ + + + Data Security + + +

+ We implement appropriate technical and organizational security + measures to protect your information: +

+
    +
  • Encryption of data in transit and at rest
  • +
  • Secure access controls and authentication
  • +
  • Regular security assessments and updates
  • +
  • Employee training on data protection
  • +
  • Incident response procedures
  • +
+

+ However, no method of transmission over the internet or + electronic storage is 100% secure. While we strive to protect + your information, we cannot guarantee absolute security. +

+
+
+ + + + Data Retention + + +

+ We retain your personal information only for as long as + necessary to fulfill the purposes outlined in this Privacy + Policy, unless a longer retention period is required by law. +

+

+ Factors we consider when determining retention periods include: +

+
    +
  • The nature and sensitivity of the information
  • +
  • Legal and regulatory requirements
  • +
  • Business and operational needs
  • +
  • Your account status and activity
  • +
+
+
+ + + + Your Rights and Choices + + +

+ Depending on your location, you may have the following rights + regarding your personal information: +

+ +

Access and Portability

+
    +
  • Request access to your personal information
  • +
  • Receive a copy of your data in a portable format
  • +
+ +

Correction and Updates

+
    +
  • Correct inaccurate or incomplete information
  • +
  • Update your account information at any time
  • +
+ +

Deletion

+
    +
  • Request deletion of your personal information
  • +
  • Close your account and remove your data
  • +
+ +

Restriction and Objection

+
    +
  • Restrict the processing of your information
  • +
  • Object to certain uses of your data
  • +
+ +

+ To exercise these rights, please contact us using the + information provided in the "Contact Us" section + below. +

+
+
+ + + + Cookies and Tracking Technologies + + +

We use cookies and similar technologies to:

+
    +
  • Remember your preferences and settings
  • +
  • Authenticate your account
  • +
  • Analyze usage patterns and improve our Service
  • +
  • Provide personalized content and features
  • +
+ +

+ You can control cookies through your browser settings. However, + disabling cookies may affect the functionality of our Service. +

+ +

Types of Cookies We Use

+
    +
  • + Essential Cookies: Required for the Service + to function properly +
  • +
  • + Analytics Cookies: Help us understand how you + use our Service +
  • +
  • + Preference Cookies: Remember your settings + and preferences +
  • +
+
+
+ + + + Third-Party Links and Services + + +

+ Our Service may contain links to third-party websites or + integrate with third-party services. We are not responsible for + the privacy practices of these third parties. +

+

+ We encourage you to read the privacy policies of any third-party + services you use in connection with our Service. +

+
+
+ + + + Children's Privacy + + +

+ Our Service is not intended for children under the age of 13. We + do not knowingly collect personal information from children + under 13. +

+

+ If you are a parent or guardian and believe your child has + provided us with personal information, please contact us + immediately so we can remove such information. +

+
+
+ + + + International Data Transfers + + +

+ Your information may be transferred to and processed in + countries other than your own. We ensure that such transfers + comply with applicable data protection laws. +

+

+ When we transfer your information internationally, we implement + appropriate safeguards to protect your data, including: +

+
    +
  • Standard contractual clauses
  • +
  • Adequacy decisions by relevant authorities
  • +
  • Certified privacy frameworks
  • +
+
+
+ + + + Changes to This Privacy Policy + + +

+ We may update this Privacy Policy from time to time. We will + notify you of any material changes by: +

+
    +
  • Posting the updated policy on our Service
  • +
  • Sending you an email notification
  • +
  • Displaying a prominent notice on our Service
  • +
+

+ Your continued use of our Service after any changes indicates + your acceptance of the updated Privacy Policy. +

+
+
+ + + + Contact Us + + +

+ If you have questions about this Privacy Policy or our privacy + practices, please contact us at: +

+
    +
  • Email: privacy@beenvoice.com
  • +
  • Address: [Your Business Address]
  • +
+

+ We will respond to your inquiries within a reasonable timeframe + and in accordance with applicable law. +

+
+
+
+
+ + ); +} diff --git a/src/app/(legal)/terms/page.tsx b/src/app/(legal)/terms/page.tsx new file mode 100644 index 0000000..e1786e7 --- /dev/null +++ b/src/app/(legal)/terms/page.tsx @@ -0,0 +1,306 @@ +import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card"; +import { Button } from "~/components/ui/button"; +import Link from "next/link"; +import { ArrowLeft } from "lucide-react"; + +export default function TermsOfServicePage() { + return ( +
+ {/* Header */} +
+
+
+ + + +
+

Terms of Service

+

+ Last updated: {new Date().toLocaleDateString()} +

+
+
+
+
+ + {/* Content */} +
+
+ + + Agreement to Terms + + +

+ These Terms of Service ("Terms") govern your use of the + beenvoice platform and services (the "Service") operated by + beenvoice ("us", "we", or "our"). +

+

+ By accessing or using our Service, you agree to be bound by + these Terms. If you disagree with any part of these terms, then + you may not access the Service. +

+
+
+ + + + Description of Service + + +

+ beenvoice is a web-based invoicing platform that allows users + to: +

+
    +
  • Create and manage professional invoices
  • +
  • Track client information and billing details
  • +
  • Monitor payment status and financial metrics
  • +
  • Generate reports and analytics
  • +
  • Manage business profiles and settings
  • +
+
+
+ + + + User Accounts + + +

+ When you create an account with us, you must provide information + that is accurate, complete, and current at all times. You are + responsible for safeguarding the password and for all activities + that occur under your account. +

+

+ You agree not to disclose your password to any third party. You + must notify us immediately upon becoming aware of any breach of + security or unauthorized use of your account. +

+
+
+ + + + Acceptable Use + + +

You agree not to use the Service:

+
    +
  • + For any unlawful purpose or to solicit others to perform + unlawful acts +
  • +
  • + To violate any international, federal, provincial, or state + regulations, rules, laws, or local ordinances +
  • +
  • + To infringe upon or violate our intellectual property rights + or the intellectual property rights of others +
  • +
  • + To harass, abuse, insult, harm, defame, slander, disparage, + intimidate, or discriminate +
  • +
  • To submit false or misleading information
  • +
  • + To upload or transmit viruses or any other type of malicious + code +
  • +
  • + To spam, phish, pharm, pretext, spider, crawl, or scrape +
  • +
  • For any obscene or immoral purpose
  • +
  • + To interfere with or circumvent the security features of the + Service +
  • +
+
+
+ + + + Data and Privacy + + +

+ Your privacy is important to us. Please review our Privacy + Policy, which also governs your use of the Service, to + understand our practices. +

+

+ You retain ownership of your data. We will not sell, rent, or + share your personal information with third parties without your + explicit consent, except as described in our Privacy Policy. +

+

+ You are responsible for backing up your data. While we implement + regular backups, we recommend you maintain your own copies of + important information. +

+
+
+ + + + Payment Terms + + +

+ Some aspects of the Service may require payment. You will be + charged according to your subscription plan. All fees are + non-refundable unless otherwise stated. +

+

+ We may change our fees at any time. We will provide you with + reasonable notice of any fee changes by posting the new fees on + the Service or sending you email notification. +

+

+ If you fail to pay any fees when due, we may suspend or + terminate your access to the Service until payment is made. +

+
+
+ + + + Intellectual Property Rights + + +

+ The Service and its original content, features, and + functionality are and will remain the exclusive property of + beenvoice and its licensors. The Service is protected by + copyright, trademark, and other laws. +

+

+ Our trademarks and trade dress may not be used in connection + with any product or service without our prior written consent. +

+
+
+ + + + Termination + + +

+ We may terminate or suspend your account and bar access to the + Service immediately, without prior notice or liability, under + our sole discretion, for any reason whatsoever and without + limitation, including but not limited to a breach of the Terms. +

+

+ If you wish to terminate your account, you may simply + discontinue using the Service and contact us to request account + deletion. +

+

+ Upon termination, your right to use the Service will cease + immediately. If you wish to terminate your account, you may + simply discontinue using the Service. +

+
+
+ + + + Disclaimer of Warranties + + +

+ The information on this Service is provided on an "as + is" basis. To the fullest extent permitted by law, we + exclude all representations, warranties, and conditions relating + to our Service and the use of this Service. +

+

+ Nothing in this disclaimer will limit or exclude our or your + liability for death or personal injury resulting from + negligence, fraud, or fraudulent misrepresentation. +

+
+
+ + + + Limitation of Liability + + +

+ In no event shall beenvoice, nor its directors, employees, + partners, agents, suppliers, or affiliates, be liable for any + indirect, incidental, special, consequential, or punitive + damages, including without limitation, loss of profits, data, + use, goodwill, or other intangible losses, resulting from your + use of the Service. +

+
+
+ + + + Governing Law + + +

+ These Terms shall be interpreted and governed by the laws of the + jurisdiction in which beenvoice operates, without regard to its + conflict of law provisions. +

+

+ Our failure to enforce any right or provision of these Terms + will not be considered a waiver of those rights. +

+
+
+ + + + Changes to Terms + + +

+ We reserve the right, at our sole discretion, to modify or + replace these Terms at any time. If a revision is material, we + will provide at least 30 days notice prior to any new terms + taking effect. +

+

+ What constitutes a material change will be determined at our + sole discretion. By continuing to access or use our Service + after any revisions become effective, you agree to be bound by + the revised terms. +

+
+
+ + + + Contact Information + + +

+ If you have any questions about these Terms of Service, please + contact us at: +

+
    +
  • Email: legal@beenvoice.com
  • +
  • Address: [Your Business Address]
  • +
+
+
+
+
+
+ ); +} diff --git a/src/app/api/auth/forgot-password/route.ts b/src/app/api/auth/forgot-password/route.ts new file mode 100644 index 0000000..7109247 --- /dev/null +++ b/src/app/api/auth/forgot-password/route.ts @@ -0,0 +1,101 @@ +import { type NextRequest, NextResponse } from "next/server"; +import { eq } from "drizzle-orm"; +import { db } from "~/server/db"; +import { users } from "~/server/db/schema"; +import { Resend } from "resend"; +import { env } from "~/env"; +import { generatePasswordResetEmailTemplate } from "~/lib/email-templates"; +import crypto from "crypto"; + +export async function POST(request: NextRequest) { + try { + const { email } = (await request.json()) as { email: string }; + + if (!email || typeof email !== "string") { + return NextResponse.json({ error: "Email is required" }, { status: 400 }); + } + + // Validate email format + const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; + if (!emailRegex.test(email)) { + return NextResponse.json( + { error: "Invalid email format" }, + { status: 400 }, + ); + } + + // Check if user exists + const user = await db.query.users.findFirst({ + where: eq(users.email, email.toLowerCase()), + }); + + // Always return success to prevent email enumeration attacks + // Don't reveal whether the user exists or not + if (!user) { + return NextResponse.json( + { + success: true, + message: + "If an account with that email exists, password reset instructions have been sent.", + }, + { status: 200 }, + ); + } + + // Generate reset token + const resetToken = crypto.randomBytes(32).toString("hex"); + const resetTokenExpiry = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24 hours + + // Update user with reset token + await db + .update(users) + .set({ + resetToken, + resetTokenExpiry, + }) + .where(eq(users.id, user.id)); + + // Send password reset email using Resend + try { + const resend = new Resend(env.RESEND_API_KEY); + const resetUrl = `${process.env.NEXTAUTH_URL ?? "http://localhost:3000"}/auth/reset-password?token=${resetToken}`; + + const emailTemplate = generatePasswordResetEmailTemplate({ + userEmail: email, + userName: user.name ?? undefined, + resetToken, + resetUrl, + expiryHours: 24, + }); + + await resend.emails.send({ + from: "beenvoice ", + to: email, + subject: emailTemplate.subject, + html: emailTemplate.html, + text: emailTemplate.text, + }); + + console.log(`Password reset email sent to: ${email}`); + } catch (emailError) { + console.error("Failed to send password reset email:", emailError); + // Continue execution - don't fail the request if email fails + // This prevents revealing whether an account exists based on email delivery + } + + return NextResponse.json( + { + success: true, + message: + "If an account with that email exists, password reset instructions have been sent.", + }, + { status: 200 }, + ); + } catch (error) { + console.error("Password reset error:", error); + return NextResponse.json( + { error: "An error occurred while processing your request" }, + { status: 500 }, + ); + } +} diff --git a/src/app/api/auth/reset-password/route.ts b/src/app/api/auth/reset-password/route.ts new file mode 100644 index 0000000..a966cc1 --- /dev/null +++ b/src/app/api/auth/reset-password/route.ts @@ -0,0 +1,74 @@ +import { type NextRequest, NextResponse } from "next/server"; +import { eq, and, gt } from "drizzle-orm"; +import bcrypt from "bcryptjs"; +import { db } from "~/server/db"; +import { users } from "~/server/db/schema"; + +export async function POST(request: NextRequest) { + try { + const { token, password } = (await request.json()) as { + token: string; + password: string; + }; + + if (!token || typeof token !== "string") { + return NextResponse.json({ error: "Token is required" }, { status: 400 }); + } + + if (!password || typeof password !== "string") { + return NextResponse.json( + { error: "Password is required" }, + { status: 400 }, + ); + } + + if (password.length < 8) { + return NextResponse.json( + { error: "Password must be at least 8 characters long" }, + { status: 400 }, + ); + } + + // Find user with valid reset token that hasn't expired + const user = await db.query.users.findFirst({ + where: and( + eq(users.resetToken, token), + gt(users.resetTokenExpiry, new Date()), + ), + }); + + if (!user) { + return NextResponse.json( + { error: "Invalid or expired token" }, + { status: 400 }, + ); + } + + // Hash the new password + const hashedPassword = await bcrypt.hash(password, 12); + + // Update user with new password and clear reset token + await db + .update(users) + .set({ + password: hashedPassword, + resetToken: null, + resetTokenExpiry: null, + }) + .where(eq(users.id, user.id)); + + return NextResponse.json( + { + success: true, + message: "Password has been reset successfully", + }, + { status: 200 }, + ); + } catch (error) { + console.error("Password reset error:", error); + return NextResponse.json( + { error: "An error occurred while resetting your password" }, + { status: 500 }, + ); + } +} diff --git a/src/app/api/auth/validate-reset-token/route.ts b/src/app/api/auth/validate-reset-token/route.ts new file mode 100644 index 0000000..4609646 --- /dev/null +++ b/src/app/api/auth/validate-reset-token/route.ts @@ -0,0 +1,37 @@ +import { type NextRequest, NextResponse } from "next/server"; +import { eq, and, gt } from "drizzle-orm"; +import { db } from "~/server/db"; +import { users } from "~/server/db/schema"; + +export async function POST(request: NextRequest) { + try { + const { token } = (await request.json()) as { token: string }; + + if (!token || typeof token !== "string") { + return NextResponse.json({ error: "Token is required" }, { status: 400 }); + } + + // Find user with valid reset token that hasn't expired + const user = await db.query.users.findFirst({ + where: and( + eq(users.resetToken, token), + gt(users.resetTokenExpiry, new Date()), + ), + }); + + if (!user) { + return NextResponse.json( + { error: "Invalid or expired token" }, + { status: 400 }, + ); + } + + return NextResponse.json({ valid: true }, { status: 200 }); + } catch (error) { + console.error("Token validation error:", error); + return NextResponse.json( + { error: "An error occurred while validating the token" }, + { status: 500 }, + ); + } +} diff --git a/src/app/auth/forgot-password/page.tsx b/src/app/auth/forgot-password/page.tsx new file mode 100644 index 0000000..8c9c290 --- /dev/null +++ b/src/app/auth/forgot-password/page.tsx @@ -0,0 +1,385 @@ +"use client"; + +import { useState, Suspense } from "react"; +import { Card, CardContent } from "~/components/ui/card"; +import { Input } from "~/components/ui/input"; +import { Button } from "~/components/ui/button"; +import { Label } from "~/components/ui/label"; +import { toast } from "sonner"; +import { Logo } from "~/components/branding/logo"; +import { LegalModal } from "~/components/ui/legal-modal"; +import { + Mail, + ArrowRight, + ArrowLeft, + Shield, + Clock, + CheckCircle, +} from "lucide-react"; + +function ForgotPasswordForm() { + const [email, setEmail] = useState(""); + const [loading, setLoading] = useState(false); + const [sent, setSent] = useState(false); + + async function handleSubmit(e: React.FormEvent) { + e.preventDefault(); + setLoading(true); + + try { + const response = await fetch("/api/auth/forgot-password", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ email }), + }); + + const data = (await response.json()) as { error?: string }; + + if (response.ok) { + setSent(true); + toast.success("Password reset instructions sent to your email"); + } else { + toast.error(data.error ?? "Failed to send reset email"); + } + } catch { + toast.error("An error occurred. Please try again."); + } finally { + setLoading(false); + } + } + + if (sent) { + return ( +
+ + + {/* Hero Section - Hidden on mobile */} +
+
+
+ +
+

+ Check your + email inbox +

+

+ We've sent password reset instructions to your email + address. Follow the link to create a new password. +

+
+
+ +
+
+
+ +
+
+

Check your inbox

+

+ Look for an email from beenvoice with reset instructions +

+
+
+ +
+
+ +
+
+

Link expires soon

+

+ The reset link is valid for 24 hours only +

+
+
+ +
+
+ +
+
+

Secure Process

+

+ Your account security is our top priority +

+
+
+
+ +
+ +
+

Email sent successfully

+

+ Follow the instructions in your email to reset your + password +

+
+
+
+
+ + {/* Success Message */} +
+ + +
+ ); + } + + return ( +
+ + + {/* Hero Section - Hidden on mobile */} +
+
+
+ +
+

+ Forgot your + password? +

+

+ No worries! Enter your email address and we'll send you + instructions to reset your password. +

+
+
+ +
+
+
+ +
+
+

Email Instructions

+

+ We'll send a secure link to your email address +

+
+
+ +
+
+ +
+
+

Quick Process

+

+ Reset your password in just a few clicks +

+
+
+ +
+
+ +
+
+

Secure & Safe

+

+ Your account security is our top priority +

+
+
+
+
+
+ + {/* Forgot Password Form */} +
+
+ {/* Mobile Logo */} +
+ +
+ +
+

Forgot Password

+

+ Enter your email and we'll send you reset instructions +

+
+ +
+
+ +
+ + setEmail(e.target.value)} + required + autoFocus + className="h-11 pl-10" + placeholder="Enter your email address" + /> +
+
+ + +
+ +
+
+ +
+

Check your spam folder

+

+ Sometimes our emails end up in spam or promotions folders +

+
+
+
+ + + +
+ Remember your password?{" "} + + Sign in instead + +
+ +
+ By using our service, you agree to our{" "} + + Terms of Service + + } + />{" "} + and{" "} + + Privacy Policy + + } + /> + . +
+
+
+
+
+
+ ); +} + +export default function ForgotPasswordPage() { + return ( + Loading...}> + + + ); +} diff --git a/src/app/auth/reset-password/page.tsx b/src/app/auth/reset-password/page.tsx new file mode 100644 index 0000000..74614c8 --- /dev/null +++ b/src/app/auth/reset-password/page.tsx @@ -0,0 +1,462 @@ +"use client"; + +import { useState, Suspense, useEffect } from "react"; +import { useSearchParams } from "next/navigation"; +import { Card, CardContent } from "~/components/ui/card"; +import { Input } from "~/components/ui/input"; +import { Button } from "~/components/ui/button"; +import { Label } from "~/components/ui/label"; +import { toast } from "sonner"; +import { Logo } from "~/components/branding/logo"; +import { LegalModal } from "~/components/ui/legal-modal"; +import { + Lock, + ArrowRight, + ArrowLeft, + CheckCircle, + Shield, + Eye, + EyeOff, +} from "lucide-react"; + +function ResetPasswordForm() { + const searchParams = useSearchParams(); + const token = searchParams.get("token"); + + const [password, setPassword] = useState(""); + const [confirmPassword, setConfirmPassword] = useState(""); + const [loading, setLoading] = useState(false); + const [success, setSuccess] = useState(false); + const [showPassword, setShowPassword] = useState(false); + const [showConfirmPassword, setShowConfirmPassword] = useState(false); + const [tokenValid, setTokenValid] = useState(null); + + useEffect(() => { + if (!token) { + setTokenValid(false); + return; + } + + // Validate token on page load + const validateToken = async () => { + try { + const response = await fetch("/api/auth/validate-reset-token", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ token }), + }); + + if (response.ok) { + setTokenValid(true); + } else { + setTokenValid(false); + } + } catch { + setTokenValid(false); + } + }; + + void validateToken(); + }, [token]); + + async function handleSubmit(e: React.FormEvent) { + e.preventDefault(); + + if (!token) { + toast.error("Invalid reset token"); + return; + } + + if (password.length < 8) { + toast.error("Password must be at least 8 characters long"); + return; + } + + if (password !== confirmPassword) { + toast.error("Passwords do not match"); + return; + } + + setLoading(true); + + try { + const response = await fetch("/api/auth/reset-password", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ token, password }), + }); + + const data = (await response.json()) as { error?: string }; + + if (response.ok) { + setSuccess(true); + toast.success("Password reset successfully!"); + } else { + toast.error(data.error ?? "Failed to reset password"); + } + } catch { + toast.error("An error occurred. Please try again."); + } finally { + setLoading(false); + } + } + + if (tokenValid === null) { + return ( +
+
+
+

+ Validating reset token... +

+
+
+ ); + } + + if (tokenValid === false) { + return ( +
+ + + {/* Hero Section - Hidden on mobile */} +
+
+
+ +
+

+ Invalid or + expired link +

+

+ This password reset link is either invalid or has expired. + Please request a new password reset. +

+
+
+ +
+
+
+ +
+
+

Security First

+

+ Reset links expire after 24 hours for your security +

+
+
+
+
+
+ + {/* Error Form */} +
+
+ {/* Mobile Logo */} +
+ +
+ +
+
+ +
+

Link Expired

+

+ This password reset link is no longer valid +

+
+ + +
+
+
+
+
+ ); + } + + if (success) { + return ( +
+ + + {/* Hero Section - Hidden on mobile */} +
+
+
+ +
+

+ Password + reset complete +

+

+ Your password has been successfully reset. You can now + sign in with your new password. +

+
+
+ +
+
+ +
+

Security Updated

+

+ Your account is now secured with your new password +

+
+
+
+
+
+ + {/* Success Form */} +
+
+ {/* Mobile Logo */} +
+ +
+ +
+
+ +
+

+ Password Reset Complete +

+

+ Your password has been successfully updated +

+
+ + +
+
+
+
+
+ ); + } + + return ( +
+ + + {/* Hero Section - Hidden on mobile */} +
+
+
+ +
+

+ Create your + new password +

+

+ Choose a strong password to secure your beenvoice account. + Make sure it's something you'll remember. +

+
+
+ +
+
+
+ +
+
+

Secure Password

+

+ Use at least 8 characters with a mix of letters and + numbers +

+
+
+ +
+
+ +
+
+

Account Safety

+

+ Your new password will immediately secure your account +

+
+
+
+
+
+ + {/* Reset Password Form */} +
+
+ {/* Mobile Logo */} +
+ +
+ +
+

Reset Password

+

+ Enter your new password below +

+
+ +
+
+ +
+ + setPassword(e.target.value)} + required + autoFocus + className="h-11 pr-10 pl-10" + placeholder="Enter new password" + minLength={8} + /> + +
+

+ Must be at least 8 characters long +

+
+ +
+ +
+ + setConfirmPassword(e.target.value)} + required + className="h-11 pr-10 pl-10" + placeholder="Confirm new password" + /> + +
+
+ + +
+ + + +
+ By resetting your password, you agree to our{" "} + + Terms of Service + + } + />{" "} + and{" "} + + Privacy Policy + + } + /> + . +
+
+
+
+
+
+ ); +} + +export default function ResetPasswordPage() { + return ( + Loading...}> + + + ); +} diff --git a/src/app/dashboard/_components/invoice-status-chart.tsx b/src/app/dashboard/_components/invoice-status-chart.tsx new file mode 100644 index 0000000..57ba83c --- /dev/null +++ b/src/app/dashboard/_components/invoice-status-chart.tsx @@ -0,0 +1,152 @@ +"use client"; + +import { Cell, Pie, PieChart, ResponsiveContainer, Tooltip } from "recharts"; +import { getEffectiveInvoiceStatus } from "~/lib/invoice-status"; +import type { StoredInvoiceStatus } from "~/types/invoice"; + +interface Invoice { + id: string; + totalAmount: number; + status: string; + dueDate: Date | string; +} + +interface InvoiceStatusChartProps { + invoices: Invoice[]; +} + +export function InvoiceStatusChart({ invoices }: InvoiceStatusChartProps) { + // Process invoice data to create status breakdown + const statusData = invoices.reduce( + (acc, invoice) => { + const effectiveStatus = getEffectiveInvoiceStatus( + invoice.status as StoredInvoiceStatus, + invoice.dueDate, + ); + + acc[effectiveStatus] ??= { + status: effectiveStatus, + count: 0, + value: 0, + }; + + acc[effectiveStatus].count += 1; + acc[effectiveStatus].value += invoice.totalAmount; + + return acc; + }, + {} as Record, + ); + + const chartData = Object.values(statusData).map((item) => ({ + ...item, + name: item.status.charAt(0).toUpperCase() + item.status.slice(1), + })); + + // Light pastel colors for different statuses + const COLORS = { + draft: "hsl(220 9% 46%)", // muted gray + sent: "hsl(210 40% 70%)", // light blue + paid: "hsl(142 76% 85%)", // light green + overdue: "hsl(0 84% 85%)", // light red + }; + + const formatCurrency = (value: number) => { + return new Intl.NumberFormat("en-US", { + style: "currency", + currency: "USD", + minimumFractionDigits: 0, + maximumFractionDigits: 0, + }).format(value); + }; + + const CustomTooltip = ({ + active, + payload, + }: { + active?: boolean; + payload?: Array<{ + payload: { name: string; count: number; value: number }; + }>; + }) => { + if (active && payload?.length) { + const data = payload[0]!.payload; + return ( +
+

{data.name}

+

+ {data.count} invoice{data.count !== 1 ? "s" : ""} +

+

{formatCurrency(data.value)}

+
+ ); + } + return null; + }; + + if (chartData.length === 0) { + return ( +
+
+

+ No invoice data available +

+

+ Status breakdown will appear here once you create invoices +

+
+
+ ); + } + + return ( +
+
+ + + + {chartData.map((entry, index) => ( + + ))} + + } /> + + +
+ + {/* Legend */} +
+ {chartData.map((item) => ( +
+
+
+ {item.name} +
+
+

{item.count}

+

+ {formatCurrency(item.value)} +

+
+
+ ))} +
+
+ ); +} diff --git a/src/app/dashboard/_components/monthly-metrics-chart.tsx b/src/app/dashboard/_components/monthly-metrics-chart.tsx new file mode 100644 index 0000000..63ff6be --- /dev/null +++ b/src/app/dashboard/_components/monthly-metrics-chart.tsx @@ -0,0 +1,206 @@ +"use client"; + +import { + Bar, + BarChart, + ResponsiveContainer, + Tooltip, + XAxis, + YAxis, +} from "recharts"; +import { getEffectiveInvoiceStatus } from "~/lib/invoice-status"; +import type { StoredInvoiceStatus } from "~/types/invoice"; + +interface Invoice { + id: string; + totalAmount: number; + issueDate: Date | string; + status: string; + dueDate: Date | string; +} + +interface MonthlyMetricsChartProps { + invoices: Invoice[]; +} + +export function MonthlyMetricsChart({ invoices }: MonthlyMetricsChartProps) { + // Process invoice data to create monthly metrics + const monthlyData = invoices.reduce( + (acc, invoice) => { + const date = new Date(invoice.issueDate); + const monthKey = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}`; + const effectiveStatus = getEffectiveInvoiceStatus( + invoice.status as StoredInvoiceStatus, + invoice.dueDate, + ); + + acc[monthKey] ??= { + month: monthKey, + totalInvoices: 0, + paidInvoices: 0, + pendingInvoices: 0, + overdueInvoices: 0, + }; + + acc[monthKey].totalInvoices += 1; + + switch (effectiveStatus) { + case "paid": + acc[monthKey].paidInvoices += 1; + break; + case "sent": + acc[monthKey].pendingInvoices += 1; + break; + case "overdue": + acc[monthKey].overdueInvoices += 1; + break; + } + + return acc; + }, + {} as Record< + string, + { + month: string; + totalInvoices: number; + paidInvoices: number; + pendingInvoices: number; + overdueInvoices: number; + } + >, + ); + + // Convert to array and sort by month + const chartData = Object.values(monthlyData) + .sort((a, b) => a.month.localeCompare(b.month)) + .slice(-6) // Show last 6 months + .map((item) => ({ + ...item, + monthLabel: new Date(item.month + "-01").toLocaleDateString("en-US", { + month: "short", + year: "2-digit", + }), + })); + + const CustomTooltip = ({ + active, + payload, + label, + }: { + active?: boolean; + payload?: Array<{ + payload: { + paidInvoices: number; + pendingInvoices: number; + overdueInvoices: number; + totalInvoices: number; + }; + }>; + label?: string; + }) => { + if (active && payload?.length) { + const data = payload[0]!.payload; + return ( +
+

{label}

+
+

+ Paid: {data.paidInvoices} +

+

+ Pending: {data.pendingInvoices} +

+

+ Overdue: {data.overdueInvoices} +

+

+ Total: {data.totalInvoices} +

+
+
+ ); + } + return null; + }; + + if (chartData.length === 0) { + return ( +
+
+

+ No metrics data available +

+

+ Monthly metrics will appear here once you create invoices +

+
+
+ ); + } + + return ( +
+
+ + + + + } /> + + + + + +
+ + {/* Legend */} +
+
+
+ Paid +
+
+
+ Pending +
+
+
+ Overdue +
+
+
+ ); +} diff --git a/src/app/dashboard/_components/revenue-chart.tsx b/src/app/dashboard/_components/revenue-chart.tsx new file mode 100644 index 0000000..c576fb4 --- /dev/null +++ b/src/app/dashboard/_components/revenue-chart.tsx @@ -0,0 +1,159 @@ +"use client"; + +import { + Area, + AreaChart, + ResponsiveContainer, + Tooltip, + XAxis, + YAxis, +} from "recharts"; +import { getEffectiveInvoiceStatus } from "~/lib/invoice-status"; +import type { StoredInvoiceStatus } from "~/types/invoice"; + +interface Invoice { + id: string; + totalAmount: number; + issueDate: Date | string; + status: string; + dueDate: Date | string; +} + +interface RevenueChartProps { + invoices: Invoice[]; +} + +export function RevenueChart({ invoices }: RevenueChartProps) { + // Process invoice data to create monthly revenue data + const monthlyData = invoices + .filter( + (invoice) => + getEffectiveInvoiceStatus( + invoice.status as StoredInvoiceStatus, + invoice.dueDate, + ) === "paid", + ) + .reduce( + (acc, invoice) => { + const date = new Date(invoice.issueDate); + const monthKey = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}`; + + acc[monthKey] ??= { + month: monthKey, + revenue: 0, + count: 0, + }; + + acc[monthKey].revenue += invoice.totalAmount; + acc[monthKey].count += 1; + + return acc; + }, + {} as Record, + ); + + // Convert to array and sort by month + const chartData = Object.values(monthlyData) + .sort((a, b) => a.month.localeCompare(b.month)) + .slice(-6) // Show last 6 months + .map((item) => ({ + ...item, + monthLabel: new Date(item.month + "-01").toLocaleDateString("en-US", { + month: "short", + year: "2-digit", + }), + })); + + const formatCurrency = (value: number) => { + return new Intl.NumberFormat("en-US", { + style: "currency", + currency: "USD", + minimumFractionDigits: 0, + maximumFractionDigits: 0, + }).format(value); + }; + + const CustomTooltip = ({ + active, + payload, + label, + }: { + active?: boolean; + payload?: Array<{ payload: { revenue: number; count: number } }>; + label?: string; + }) => { + if (active && payload?.length) { + const data = payload[0]!.payload; + return ( +
+

{label}

+

+ Revenue: {formatCurrency(data.revenue)} +

+

+ {data.count} invoice{data.count !== 1 ? "s" : ""} +

+
+ ); + } + return null; + }; + + if (chartData.length === 0) { + return ( +
+
+

+ No revenue data available +

+

+ Revenue will appear here once you have paid invoices +

+
+
+ ); + } + + return ( +
+ + + + + + + + + + + } /> + + + +
+ ); +} diff --git a/src/app/dashboard/invoices/[id]/edit/page.tsx b/src/app/dashboard/invoices/[id]/edit/page.tsx new file mode 100644 index 0000000..ecb84a3 --- /dev/null +++ b/src/app/dashboard/invoices/[id]/edit/page.tsx @@ -0,0 +1,12 @@ +"use client"; + +import { useParams } from "next/navigation"; +import InvoiceForm from "~/components/forms/invoice-form"; + +export default function InvoiceFormPage() { + const params = useParams(); + const id = params.id as string; + + // Pass the actual id, let the form component handle the logic + return ; +} diff --git a/src/components/ui/legal-modal.tsx b/src/components/ui/legal-modal.tsx new file mode 100644 index 0000000..ef10519 --- /dev/null +++ b/src/components/ui/legal-modal.tsx @@ -0,0 +1,346 @@ +"use client"; + +import { useState } from "react"; +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, +} from "~/components/ui/dialog"; +import { Button } from "~/components/ui/button"; +import { ScrollArea } from "~/components/ui/scroll-area"; +import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card"; +import { X } from "lucide-react"; + +interface LegalModalProps { + type: "terms" | "privacy"; + trigger: React.ReactNode; +} + +export function LegalModal({ type, trigger }: LegalModalProps) { + const [open, setOpen] = useState(false); + + const isTerms = type === "terms"; + const title = isTerms ? "Terms of Service" : "Privacy Policy"; + + const TermsContent = () => ( +
+ + + Agreement to Terms + + +

+ These Terms of Service ("Terms") govern your use of the + beenvoice platform and services (the "Service") operated + by beenvoice ("us", "we", or "our"). +

+

+ By accessing or using our Service, you agree to be bound by these + Terms. If you disagree with any part of these terms, then you may + not access the Service. +

+
+
+ + + + Description of Service + + +

+ beenvoice is a web-based invoicing platform that allows users to: +

+
    +
  • Create and manage professional invoices
  • +
  • Track client information and billing details
  • +
  • Monitor payment status and financial metrics
  • +
  • Generate reports and analytics
  • +
  • Manage business profiles and settings
  • +
+
+
+ + + + User Accounts + + +

+ When you create an account with us, you must provide information + that is accurate, complete, and current at all times. You are + responsible for safeguarding the password and for all activities + that occur under your account. +

+

+ You agree not to disclose your password to any third party. You must + notify us immediately upon becoming aware of any breach of security + or unauthorized use of your account. +

+
+
+ + + + Acceptable Use + + +

You agree not to use the Service:

+
    +
  • + For any unlawful purpose or to solicit others to perform unlawful + acts +
  • +
  • + To violate any international, federal, provincial, or state + regulations, rules, laws, or local ordinances +
  • +
  • + To infringe upon or violate our intellectual property rights or + the intellectual property rights of others +
  • +
  • + To harass, abuse, insult, harm, defame, slander, disparage, + intimidate, or discriminate +
  • +
  • To submit false or misleading information
  • +
  • + To upload or transmit viruses or any other type of malicious code +
  • +
  • To spam, phish, pharm, pretext, spider, crawl, or scrape
  • +
  • For any obscene or immoral purpose
  • +
  • + To interfere with or circumvent the security features of the + Service +
  • +
+
+
+ + + + Payment Terms + + +

+ Some aspects of the Service may require payment. You will be charged + according to your subscription plan. All fees are non-refundable + unless otherwise stated. +

+

+ We may change our fees at any time. We will provide you with + reasonable notice of any fee changes by posting the new fees on the + Service or sending you email notification. +

+
+
+ + + + Termination + + +

+ We may terminate or suspend your account and bar access to the + Service immediately, without prior notice or liability, under our + sole discretion, for any reason whatsoever and without limitation, + including but not limited to a breach of the Terms. +

+

+ If you wish to terminate your account, you may simply discontinue + using the Service and contact us to request account deletion. +

+
+
+ + + + Contact Information + + +

+ If you have any questions about these Terms of Service, please + contact us at: +

+
    +
  • Email: legal@beenvoice.com
  • +
+
+
+
+ ); + + const PrivacyContent = () => ( +
+ + + Information We Collect + + +

Personal Information

+

+ We may collect personal information that you voluntarily provide to + us when you: +

+
    +
  • Register for an account
  • +
  • Create invoices or manage client information
  • +
  • Contact us for support
  • +
+

This personal information may include:

+
    +
  • Name and contact information (email, phone, address)
  • +
  • Business information and tax details
  • +
  • Client information you input into the system
  • +
  • Financial information related to your invoices
  • +
+
+
+ + + + How We Use Your Information + + +

We use the information we collect to:

+
    +
  • Provide, operate, and maintain our Service
  • +
  • Process your transactions and manage your account
  • +
  • Improve and personalize your experience
  • +
  • Communicate with you about your account and our services
  • +
  • Send you technical notices and support messages
  • +
  • Respond to your comments, questions, and requests
  • +
  • Monitor usage and analyze trends
  • +
  • + Detect, prevent, and address technical issues and security + breaches +
  • +
+
+
+ + + + How We Share Your Information + + +

+ We do not sell, trade, or rent your personal information to third + parties. We may share your information in the following + circumstances: +

+ +

Service Providers

+

+ We may share your information with trusted third-party service + providers who assist us in operating our Service, such as: +

+
    +
  • Cloud hosting and storage providers
  • +
  • Payment processors
  • +
  • Email service providers
  • +
  • Analytics and monitoring services
  • +
+ +

Legal Requirements

+

+ We may disclose your information if required to do so by law or in + response to: +

+
    +
  • Legal processes (subpoenas, court orders)
  • +
  • Government requests
  • +
  • Law enforcement investigations
  • +
  • Protection of our rights, property, or safety
  • +
+
+
+ + + + Data Security + + +

+ We implement appropriate technical and organizational security + measures to protect your information: +

+
    +
  • Encryption of data in transit and at rest
  • +
  • Secure access controls and authentication
  • +
  • Regular security assessments and updates
  • +
  • Employee training on data protection
  • +
  • Incident response procedures
  • +
+
+
+ + + + Your Rights and Choices + + +

+ Depending on your location, you may have the following rights + regarding your personal information: +

+
    +
  • Request access to your personal information
  • +
  • Correct inaccurate or incomplete information
  • +
  • Request deletion of your personal information
  • +
  • Restrict the processing of your information
  • +
  • Object to certain uses of your data
  • +
+

+ To exercise these rights, please contact us at + privacy@beenvoice.com. +

+
+
+ + + + Contact Us + + +

+ If you have questions about this Privacy Policy or our privacy + practices, please contact us at: +

+
    +
  • Email: privacy@beenvoice.com
  • +
+
+
+
+ ); + + return ( + + setOpen(true)}> + {trigger} + + + + + {title} + + + + + {isTerms ? : } + +
+ +
+
+
+ ); +} diff --git a/src/components/ui/scroll-area.tsx b/src/components/ui/scroll-area.tsx new file mode 100644 index 0000000..f7b6d65 --- /dev/null +++ b/src/components/ui/scroll-area.tsx @@ -0,0 +1,26 @@ +"use client"; + +import * as React from "react"; +import { cn } from "~/lib/utils"; + +interface ScrollAreaProps extends React.HTMLAttributes { + children: React.ReactNode; +} + +const ScrollArea = React.forwardRef( + ({ className, children, ...props }, ref) => ( +
+ {children} +
+ ), +); +ScrollArea.displayName = "ScrollArea"; + +export { ScrollArea }; diff --git a/src/components/ui/sonner.tsx b/src/components/ui/sonner.tsx new file mode 100644 index 0000000..2b0849a --- /dev/null +++ b/src/components/ui/sonner.tsx @@ -0,0 +1,65 @@ +"use client"; + +import { Toaster as Sonner, type ToasterProps } from "sonner"; + +const Toaster = ({ ...props }: ToasterProps) => { + return ( + + ); +}; + +export { Toaster }; diff --git a/src/lib/email-templates/password-reset-email.ts b/src/lib/email-templates/password-reset-email.ts new file mode 100644 index 0000000..d9b25d9 --- /dev/null +++ b/src/lib/email-templates/password-reset-email.ts @@ -0,0 +1,232 @@ +import { formatEmailDate } from "src/lib/email-utils"; + +interface PasswordResetEmailProps { + userEmail: string; + userName?: string; + resetToken: string; + resetUrl: string; + expiryHours?: number; +} + +export function generatePasswordResetEmailTemplate({ + userEmail, + userName, + resetUrl, + expiryHours = 24, +}: PasswordResetEmailProps) { + const displayName = userName ?? userEmail.split("@")[0]; + const currentDate = formatEmailDate(new Date()); + + // HTML version + const html = ` + + + + + + Password Reset - beenvoice + + + +
+
+

+ $ beenvoice +

+
+ +
+

Reset Your Password

+ +

Hello ${displayName},

+ +

+ We received a request to reset the password for your beenvoice account. + If you made this request, click the button below to set a new password. +

+ + + +

+ If the button doesn't work, copy and paste this link into your browser: +
+ ${resetUrl} +

+ +
+

Security Information

+

This password reset link will expire in ${expiryHours} hours for your security.

+

If you didn't request this password reset, you can safely ignore this email.

+
+ +
+ +

+ If you're having trouble accessing your account or have questions, + please contact our support team. +

+ +

+ Best regards,
+ The beenvoice Team +

+
+ + +
+ +`; + + // Plain text version + const text = ` +beenvoice - Password Reset + +Hello ${displayName}, + +We received a request to reset the password for your beenvoice account. + +To reset your password, please visit this link: +${resetUrl} + +SECURITY INFORMATION: +- This link will expire in ${expiryHours} hours +- If you didn't request this reset, you can safely ignore this email +- Never share this link with anyone + +If you're having trouble with the link, copy and paste the entire URL into your browser's address bar. + +If you have any questions or need assistance, please contact our support team at support@beenvoice.com. + +Best regards, +The beenvoice Team + +--- +This email was sent to ${userEmail} on ${currentDate}. +beenvoice - Professional invoicing made simple +`; + + return { + html: html.trim(), + text: text.trim(), + subject: "Reset Your beenvoice Password", + }; +}

NsIMl5YXN4#T)YYb20 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 + {/* Header */} +