9 Commits

Author SHA1 Message Date
4f18ab6c18 Update src/app/signup/page.tsx 2026-03-25 18:00:15 +00:00
16f0362226 Add src/app/dashboard/page.tsx 2026-03-25 18:00:14 +00:00
da725a1726 Merge version_2 into main
Merge version_2 into main
2026-03-25 17:57:46 +00:00
ba0b9ab5d1 Switch to version 1: remove src/middleware.ts 2026-03-25 17:55:45 +00:00
46b15f2d11 Switch to version 1: remove src/app/subscriptions/page.tsx 2026-03-25 17:55:45 +00:00
e2ca08dfe2 Switch to version 1: remove src/app/dashboard/page.tsx 2026-03-25 17:55:44 +00:00
ee3f64264c Switch to version 1: remove src/app/credits/page.tsx 2026-03-25 17:55:44 +00:00
8d7ca5c179 Switch to version 1: modified src/app/page.tsx 2026-03-25 17:55:43 +00:00
14cf8a5844 Merge version_2 into main
Merge version_2 into main
2026-03-25 17:55:03 +00:00
6 changed files with 76 additions and 410 deletions

View File

@@ -1,131 +0,0 @@
"use client";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import ReactLenis from "lenis/react";
import NavbarStyleFullscreen from '@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen';
import FooterBaseCard from '@/components/sections/footer/FooterBaseCard';
import ContactText from '@/components/sections/contact/ContactText';
import PricingCardNine from '@/components/sections/pricing/PricingCardNine';
export const metadata = {
title: 'VortexAI | Purchase Credits',
description: 'Top up your VortexAI account with credit packs for on-demand AI video generation.',
};
export default function CreditsPage() {
return (
<ThemeProvider
defaultButtonVariant="expand-hover"
defaultTextAnimation="entrance-slide"
borderRadius="rounded"
contentWidth="smallMedium"
sizing="large"
background="noiseDiagonalGradient"
cardStyle="glass-depth"
primaryButtonStyle="gradient"
secondaryButtonStyle="glass"
headingFontWeight="medium"
>
<ReactLenis root>
<div id="nav" data-section="nav">
<NavbarStyleFullscreen
navItems={[
{ name: "Home", id: "/" },
{ name: "Features", id: "/#features" },
{ name: "Subscriptions", id: "/subscriptions" },
{ name: "Credits", id: "/credits" },
{ name: "Testimonials", id: "/#testimonials" },
{ name: "FAQ", id: "/#faq" },
{ name: "Contact", id: "/#contact" }
]}
brandName="VortexAI"
bottomLeftText="Global AI Community"
bottomRightText="support@vortexai.com"
/>
</div>
<div id="credits" data-section="credits">
<PricingCardNine
animationType="slide-up"
textboxLayout="default"
useInvertedBackground={false}
title="Flexible Credit Packs"
description="Top up your account with credits for on-demand video generation. The more you buy, the more you save!"
plans={[
{
id: "credit-pack-100", title: "100 Credits", price: "$10", period: "one-time", features: [
"Perfect for small projects", "No expiration date", "Standard video generation"
],
button: { text: "Buy Now", href: "/signup" }
},
{
id: "credit-pack-500", title: "500 Credits", price: "$40", period: "one-time", features: [
"Save 20%", "Ideal for regular use", "Access to HD generation"
],
button: { text: "Buy Now", href: "/signup" }
},
{
id: "credit-pack-1000", title: "1000 Credits", price: "$70", period: "one-time", features: [
"Save 30%", "Best value for power users", "Access to 4K Ultra HD generation"
],
button: { text: "Buy Now", href: "/signup" }
}
]}
/>
</div>
<div id="contact" data-section="contact">
<ContactText
useInvertedBackground={false}
background={{ variant: "sparkles-gradient" }}
text="Have questions about credits or subscriptions?"
buttons={[
{ text: "Contact Support", href: "/#contact" }
]}
/>
</div>
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="VortexAI"
columns={[
{
title: "Product", items: [
{ label: "Features", href: "/#features" },
{ label: "Subscriptions", href: "/subscriptions" },
{ label: "Credits", href: "/credits" },
{ label: "Dashboard", href: "/dashboard" },
{ label: "Login", href: "/login" }
]
},
{
title: "Company", items: [
{ label: "About Us", href: "/#about" },
{ label: "Careers", href: "#" },
{ label: "Blog", href: "#" },
{ label: "Contact", href: "/#contact" }
]
},
{
title: "Resources", items: [
{ label: "Help Center", href: "#" },
{ label: "API Docs", href: "#" },
{ label: "Community", href: "#" },
{ label: "Support", href: "#" }
]
},
{
title: "Legal", items: [
{ label: "Privacy Policy", href: "#" },
{ label: "Terms of Service", href: "#" },
{ label: "Cookie Policy", href: "#" }
]
}
]}
copyrightText="© 2024 VortexAI. All rights reserved."
/>
</div>
</ReactLenis>
</ThemeProvider>
);
}

View File

@@ -4,62 +4,88 @@ import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import ReactLenis from "lenis/react";
import NavbarStyleFullscreen from '@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen';
import FooterBaseCard from '@/components/sections/footer/FooterBaseCard';
import MetricCardFourteen from '@/components/sections/metrics/MetricCardFourteen';
import MetricCardFourteen from '@/components/sections/metrics/MetricCardFourteen';
const commonNavItems = [
{ name: "Home", id: "/" },
{ name: "Features", id: "#features" },
{ name: "Pricing", id: "#pricing" },
{ name: "Testimonials", id: "#testimonials" },
{ name: "FAQ", id: "#faq" },
{ name: "Contact", id: "#contact" },
{ name: "Login", id: "/login" },
{ name: "Signup", id: "/signup" },
{ name: "Dashboard", id: "/dashboard" }
];
const commonFooterColumns = [
{
title: "Product", items: [
{ label: "Features", href: "#features" },
{ label: "Pricing", href: "#pricing" },
{ label: "Dashboard", href: "/dashboard" },
{ label: "Login", href: "/login" }
]
},
{
title: "Company", items: [
{ label: "About Us", href: "#about" },
{ label: "Careers", href: "#" },
{ label: "Blog", href: "#" },
{ label: "Contact", href: "#contact" }
]
},
{
title: "Resources", items: [
{ label: "Help Center", href: "#" },
{ label: "API Docs", href: "#" },
{ label: "Community", href: "#" },
{ label: "Support", href: "#" }
]
},
{
title: "Legal", items: [
{ label: "Privacy Policy", href: "#" },
{ label: "Terms of Service", href: "#" },
{ label: "Cookie Policy", href: "#" }
]
}
];
export default function DashboardPage() {
return (
<ThemeProvider
defaultButtonVariant="expand-hover"
defaultTextAnimation="entrance-slide"
borderRadius="rounded"
contentWidth="smallMedium"
sizing="large"
background="noiseDiagonalGradient"
cardStyle="glass-depth"
primaryButtonStyle="gradient"
secondaryButtonStyle="glass"
headingFontWeight="medium"
defaultButtonVariant="expand-hover"
defaultTextAnimation="entrance-slide"
borderRadius="rounded"
contentWidth="smallMedium"
sizing="large"
background="noiseDiagonalGradient"
cardStyle="glass-depth"
primaryButtonStyle="gradient"
secondaryButtonStyle="glass"
headingFontWeight="medium"
>
<ReactLenis root>
<div id="nav" data-section="nav">
<NavbarStyleFullscreen
navItems={[
{
name: "Home", id: "home"
},
{
name: "Features", id: "features"
},
{
name: "Pricing", id: "pricing"
},
{
name: "Testimonials", id: "testimonials"
},
{
name: "FAQ", id: "faq"
},
{
name: "Contact", id: "contact"
}
]}
navItems={commonNavItems}
brandName="VortexAI"
bottomLeftText="Global AI Community"
bottomRightText="support@vortexai.com"
/>
</div>
<div id="analytics-dashboard" data-section="analytics-dashboard">
<div id="dashboard-content" data-section="dashboard-content" className="min-h-[60vh] flex flex-col items-center justify-center py-16">
<MetricCardFourteen
useInvertedBackground={false}
animationType="slide-up"
title="Platform Usage & Storage Analytics"
tag="Dashboard"
title="Revenue Overview"
tag="Key Metrics"
metrics={[
{ id: "1", value: "1,234", description: "Videos Generated" },
{ id: "2", value: "567", description: "Active Users" },
{ id: "3", value: "2.5 TB", description: "Storage Used" },
{ id: "4", value: "89", description: "Old Free Videos Deleted" }
{ id: "1", value: "$2.5M", description: "Total Revenue" },
{ id: "2", value: "30%", description: "Growth Rate" },
{ id: "3", value: "1.2M", description: "Active Users" },
{ id: "4", value: "85%", description: "Customer Satisfaction" }
]}
/>
</div>
@@ -67,73 +93,11 @@ export default function DashboardPage() {
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="VortexAI"
columns={[
{
title: "Product", items: [
{
label: "Features", href: "#features"
},
{
label: "Pricing", href: "#pricing"
},
{
label: "Dashboard", href: "/dashboard"
},
{
label: "Login", href: "/login"
}
]
},
{
title: "Company", items: [
{
label: "About Us", href: "#about"
},
{
label: "Careers", href: "#"
},
{
label: "Blog", href: "#"
},
{
label: "Contact", href: "#contact"
}
]
},
{
title: "Resources", items: [
{
label: "Help Center", href: "#"
},
{
label: "API Docs", href: "#"
},
{
label: "Community", href: "#"
},
{
label: "Support", href: "#"
}
]
},
{
title: "Legal", items: [
{
label: "Privacy Policy", href: "#"
},
{
label: "Terms of Service", href: "#"
},
{
label: "Cookie Policy", href: "#"
}
]
}
]}
columns={commonFooterColumns}
copyrightText="© 2024 VortexAI. All rights reserved."
/>
</div>
</ReactLenis>
</ThemeProvider>
);
}
}

View File

@@ -308,4 +308,4 @@ export default function LandingPage() {
</ReactLenis>
</ThemeProvider>
);
}
}

View File

@@ -7,14 +7,14 @@ import FooterBaseCard from '@/components/sections/footer/FooterBaseCard';
import TextAbout from '@/components/sections/about/TextAbout';
const commonNavItems = [
{ name: "Home", href: "/" },
{ name: "Features", href: "#features" },
{ name: "Pricing", href: "#pricing" },
{ name: "Testimonials", href: "#testimonials" },
{ name: "FAQ", href: "#faq" },
{ name: "Contact", href: "#contact" },
{ name: "Login", href: "/login" },
{ name: "Signup", href: "/signup" }
{ name: "Home", id: "/" },
{ name: "Features", id: "#features" },
{ name: "Pricing", id: "#pricing" },
{ name: "Testimonials", id: "#testimonials" },
{ name: "FAQ", id: "#faq" },
{ name: "Contact", id: "#contact" },
{ name: "Login", id: "/login" },
{ name: "Signup", id: "/signup" }
];
const commonFooterColumns = [
@@ -79,7 +79,6 @@ export default function SignupPage() {
<TextAbout
useInvertedBackground={false}
title="Create Your VortexAI Account"
description="Sign up to start transforming your stories into stunning AI videos."
buttons={[
{ text: "Already have an account? Login", href: "/login" }
]}

View File

@@ -1,131 +0,0 @@
"use client";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import ReactLenis from "lenis/react";
import NavbarStyleFullscreen from '@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen';
import FooterBaseCard from '@/components/sections/footer/FooterBaseCard';
import ContactText from '@/components/sections/contact/ContactText';
import PricingCardTwo from '@/components/sections/pricing/PricingCardTwo';
export const metadata = {
title: 'VortexAI | Subscription Plans',
description: 'Explore VortexAI\'s monthly subscription plans with different credit limits and premium features.',
};
export default function SubscriptionsPage() {
return (
<ThemeProvider
defaultButtonVariant="expand-hover"
defaultTextAnimation="entrance-slide"
borderRadius="rounded"
contentWidth="smallMedium"
sizing="large"
background="noiseDiagonalGradient"
cardStyle="glass-depth"
primaryButtonStyle="gradient"
secondaryButtonStyle="glass"
headingFontWeight="medium"
>
<ReactLenis root>
<div id="nav" data-section="nav">
<NavbarStyleFullscreen
navItems={[
{ name: "Home", id: "/" },
{ name: "Features", id: "/#features" },
{ name: "Subscriptions", id: "/subscriptions" },
{ name: "Credits", id: "/credits" },
{ name: "Testimonials", id: "/#testimonials" },
{ name: "FAQ", id: "/#faq" },
{ name: "Contact", id: "/#contact" }
]}
brandName="VortexAI"
bottomLeftText="Global AI Community"
bottomRightText="support@vortexai.com"
/>
</div>
<div id="subscriptions" data-section="subscriptions">
<PricingCardTwo
animationType="slide-up"
textboxLayout="default"
useInvertedBackground={false}
title="Choose Your Subscription Plan"
description="Unlock continuous creativity with our monthly subscription plans, offering generous credit allowances and exclusive features."
plans={[
{
id: "starter", badge: "Free Trial", price: "$0", subtitle: "Perfect for trying out the platform", buttons: [{ text: "Start Free", href: "/signup" }],
features: [
"5 Credits/month", "Basic video generation", "Standard definition", "Community support"
]
},
{
id: "pro", badge: "Most Popular", price: "$29/month", subtitle: "For serious creators and professionals", buttons: [{ text: "Get Pro", href: "/signup" }],
features: [
"500 Credits/month", "All advanced features", "High definition", "Priority support", "Community Prompt Library access"
]
},
{
id: "unlimited", badge: "Ultimate Value", price: "$99/month", subtitle: "Unleash limitless creativity", buttons: [{ text: "Go Unlimited", href: "/signup" }],
features: [
"Unlimited Credits", "All advanced features", "4K Ultra HD", "24/7 Premium support", "Exclusive Style Library"
]
}
]}
/>
</div>
<div id="contact" data-section="contact">
<ContactText
useInvertedBackground={false}
background={{ variant: "sparkles-gradient" }}
text="Have questions about our subscription plans?"
buttons={[
{ text: "Contact Sales", href: "/#contact" }
]}
/>
</div>
<div id="footer" data-section="footer">
<FooterBaseCard
logoText="VortexAI"
columns={[
{
title: "Product", items: [
{ label: "Features", href: "/#features" },
{ label: "Subscriptions", href: "/subscriptions" },
{ label: "Credits", href: "/credits" },
{ label: "Dashboard", href: "/dashboard" },
{ label: "Login", href: "/login" }
]
},
{
title: "Company", items: [
{ label: "About Us", href: "/#about" },
{ label: "Careers", href: "#" },
{ label: "Blog", href: "#" },
{ label: "Contact", href: "/#contact" }
]
},
{
title: "Resources", items: [
{ label: "Help Center", href: "#" },
{ label: "API Docs", href: "#" },
{ label: "Community", href: "#" },
{ label: "Support", href: "#" }
]
},
{
title: "Legal", items: [
{ label: "Privacy Policy", href: "#" },
{ label: "Terms of Service", href: "#" },
{ label: "Cookie Policy", href: "#" }
]
}
]}
copyrightText="© 2024 VortexAI. All rights reserved."
/>
</div>
</ReactLenis>
</ThemeProvider>
);
}

View File

@@ -1,35 +0,0 @@
import { NextResponse } from 'next/server';
import type { NextRequest } from 'next/server';
// This is a placeholder for actual authentication logic.
// In a real app, you'd check for a session token, JWT, etc.
const isAuthenticatedAdmin = (req: NextRequest) => {
// For demonstration: Assume an admin is authenticated if a specific cookie exists.
// In a real application, this would involve checking a secure session or token.
const adminCookie = req.cookies.get('adminAuthToken');
return adminCookie && adminCookie.value === 'true'; // Placeholder logic
};
export function middleware(req: NextRequest) {
const { pathname } = req.nextUrl;
// Protect all /admin routes except /admin/login
if (pathname.startsWith('/admin') && pathname !== '/admin/login') {
if (!isAuthenticatedAdmin(req)) {
const loginUrl = new URL('/admin/login', req.url);
return NextResponse.redirect(loginUrl);
}
}
// If trying to access /admin/login but already authenticated, redirect to /admin
if (pathname === '/admin/login' && isAuthenticatedAdmin(req)) {
const adminDashboardUrl = new URL('/admin', req.url);
return NextResponse.redirect(adminDashboardUrl);
}
return NextResponse.next();
}
export const config = {
matcher: ['/admin/:path*'], // Apply middleware to all paths under /admin
};