Initial commit
This commit is contained in:
2
.env
Normal file
2
.env
Normal file
@@ -0,0 +1,2 @@
|
||||
NEXT_PUBLIC_API_URL=undefined
|
||||
NEXT_PUBLIC_PROJECT_ID=4e5262b9-2be0-4f8d-a0ac-6e7841961912
|
||||
57
.gitea/workflows/build.yml
Normal file
57
.gitea/workflows/build.yml
Normal file
@@ -0,0 +1,57 @@
|
||||
name: Code Check
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
branch:
|
||||
description: 'Branch to check'
|
||||
required: true
|
||||
default: 'main'
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
check:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
|
||||
steps:
|
||||
- name: Checkout branch
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ gitea.event.inputs.branch }}
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 24
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
set -euo pipefail
|
||||
npm ci --prefer-offline --no-audit 2>&1 | tee install.log
|
||||
env:
|
||||
NODE_OPTIONS: '--max-old-space-size=4096'
|
||||
|
||||
- name: TypeScript check
|
||||
run: |
|
||||
set -euo pipefail
|
||||
npm run typecheck 2>&1 | tee build.log
|
||||
|
||||
- name: ESLint check
|
||||
run: |
|
||||
set -euo pipefail
|
||||
npm run lint 2>&1 | tee build.log
|
||||
|
||||
- name: Upload build log on failure
|
||||
if: failure()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: build-log
|
||||
path: build.log
|
||||
if-no-files-found: ignore
|
||||
|
||||
- name: Check completed
|
||||
if: success()
|
||||
run: echo "Typecheck and lint passed successfully"
|
||||
95
src/app/blog/page.tsx
Normal file
95
src/app/blog/page.tsx
Normal file
@@ -0,0 +1,95 @@
|
||||
"use client";
|
||||
|
||||
import ReactLenis from "lenis/react";
|
||||
import BlogCardTwo from '@/components/sections/blog/BlogCardTwo';
|
||||
import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis';
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered';
|
||||
import { useBlogPosts } from "@/hooks/useBlogPosts";
|
||||
|
||||
export default function BlogPage() {
|
||||
const { posts, isLoading } = useBlogPosts();
|
||||
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="expand-hover"
|
||||
defaultTextAnimation="background-highlight"
|
||||
borderRadius="rounded"
|
||||
contentWidth="mediumLarge"
|
||||
sizing="largeSmallSizeLargeTitles"
|
||||
background="floatingGradient"
|
||||
cardStyle="inset"
|
||||
primaryButtonStyle="gradient"
|
||||
secondaryButtonStyle="glass"
|
||||
headingFontWeight="semibold"
|
||||
>
|
||||
<ReactLenis root>
|
||||
<div className="min-h-screen bg-background">
|
||||
<NavbarStyleCentered
|
||||
brandName="iPhone Store"
|
||||
navItems={[
|
||||
{ name: "Home", id: "/" },
|
||||
{ name: "Products", id: "products" },
|
||||
{ name: "Features", id: "features" },
|
||||
{ name: "Reviews", id: "reviews" },
|
||||
{ name: "About", id: "about" },
|
||||
{ name: "Contact", id: "contact" }
|
||||
]}
|
||||
button={{ text: "Shop Now", href: "products" }}
|
||||
/>
|
||||
|
||||
{isLoading ? (
|
||||
<div className="w-content-width mx-auto py-20 text-center">
|
||||
<p className="text-foreground">Loading posts...</p>
|
||||
</div>
|
||||
) : (
|
||||
<BlogCardTwo
|
||||
blogs={posts}
|
||||
title="Latest iPhone News & Reviews"
|
||||
description="Stay updated with the latest iPhone insights, reviews, and tech news from our experts"
|
||||
tag="Blog"
|
||||
textboxLayout="default"
|
||||
useInvertedBackground="noInvert"
|
||||
animationType="slide-up"
|
||||
carouselMode="buttons"
|
||||
/>
|
||||
)}
|
||||
|
||||
<FooterLogoEmphasis
|
||||
logoText="iPhone Store"
|
||||
columns={[
|
||||
{
|
||||
items: [
|
||||
{ label: "Products", href: "products" },
|
||||
{ label: "iPhone 15 Pro", href: "products" },
|
||||
{ label: "iPhone 15", href: "products" }
|
||||
]
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ label: "Support", href: "contact" },
|
||||
{ label: "Technical Help", href: "contact" },
|
||||
{ label: "Contact Us", href: "contact" }
|
||||
]
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ label: "Company", href: "about" },
|
||||
{ label: "About Us", href: "about" },
|
||||
{ label: "Career", href: "about" }
|
||||
]
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ label: "Legal", href: "#" },
|
||||
{ label: "Privacy Policy", href: "#" },
|
||||
{ label: "Terms", href: "#" }
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
</ReactLenis>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
5
src/app/globals.css
Normal file
5
src/app/globals.css
Normal file
@@ -0,0 +1,5 @@
|
||||
@import "tailwindcss";
|
||||
@import "./styles/variables.css";
|
||||
@import "./styles/theme.css";
|
||||
@import "./styles/utilities.css";
|
||||
@import "./styles/base.css";
|
||||
1267
src/app/layout.tsx
Normal file
1267
src/app/layout.tsx
Normal file
File diff suppressed because it is too large
Load Diff
199
src/app/page.tsx
Normal file
199
src/app/page.tsx
Normal file
@@ -0,0 +1,199 @@
|
||||
"use client"
|
||||
|
||||
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||
import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered';
|
||||
import HeroSplitKpi from '@/components/sections/hero/HeroSplitKpi';
|
||||
import ProductCardOne from '@/components/sections/product/ProductCardOne';
|
||||
import MetricCardTwo from '@/components/sections/metrics/MetricCardTwo';
|
||||
import TestimonialCardSixteen from '@/components/sections/testimonial/TestimonialCardSixteen';
|
||||
import ContactSplit from '@/components/sections/contact/ContactSplit';
|
||||
import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis';
|
||||
import { Bell, Sparkles } from "lucide-react";
|
||||
|
||||
export default function LandingPage() {
|
||||
return (
|
||||
<ThemeProvider
|
||||
defaultButtonVariant="expand-hover"
|
||||
defaultTextAnimation="background-highlight"
|
||||
borderRadius="rounded"
|
||||
contentWidth="mediumLarge"
|
||||
sizing="largeSmallSizeLargeTitles"
|
||||
background="floatingGradient"
|
||||
cardStyle="inset"
|
||||
primaryButtonStyle="gradient"
|
||||
secondaryButtonStyle="glass"
|
||||
headingFontWeight="semibold"
|
||||
>
|
||||
<div id="nav" data-section="nav">
|
||||
<NavbarStyleCentered
|
||||
brandName="iPhone Store"
|
||||
navItems={[
|
||||
{ name: "Products", id: "products" },
|
||||
{ name: "Features", id: "features" },
|
||||
{ name: "Reviews", id: "reviews" },
|
||||
{ name: "About", id: "about" },
|
||||
{ name: "Contact", id: "contact" }
|
||||
]}
|
||||
button={{
|
||||
text: "Shop Now", href: "products"
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="hero" data-section="hero">
|
||||
<HeroSplitKpi
|
||||
title="The Latest iPhone. Exceptional Design."
|
||||
description="Experience the cutting-edge technology and revolutionary design of the latest iPhone. Premium engineering meets elegant simplicity."
|
||||
background={{ variant: "plain" }}
|
||||
kpis={[
|
||||
{ value: "6.12\"", label: "Super Retina XDR Display" },
|
||||
{ value: "48MP", label: "Pro Camera System" },
|
||||
{ value: "All-Day", label: "Battery Life" }
|
||||
]}
|
||||
enableKpiAnimation={true}
|
||||
tag="Latest Release"
|
||||
tagIcon={Sparkles}
|
||||
buttons={[
|
||||
{ text: "Buy Now", href: "products" },
|
||||
{ text: "Learn More", href: "features" }
|
||||
]}
|
||||
imageSrc="https://img.b2bpic.net/free-psd/new-smartphone-a18-bionic-social-media-banner-design-template_47987-33085.jpg"
|
||||
imageAlt="Latest iPhone showcase"
|
||||
imagePosition="right"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="products" data-section="products">
|
||||
<ProductCardOne
|
||||
title="Latest iPhone Collection"
|
||||
description="Discover our complete lineup of premium iPhones. Each device engineered for perfection."
|
||||
products={[
|
||||
{
|
||||
id: "1", name: "iPhone 15 Pro Max", price: "$1,199", imageSrc: "https://img.b2bpic.net/free-psd/new-smartphone-17-pro-social-media-banner-design-template_47987-33087.jpg", imageAlt: "iPhone 15 Pro Max"
|
||||
},
|
||||
{
|
||||
id: "2", name: "iPhone 15 Pro", price: "$999", imageSrc: "https://img.b2bpic.net/free-psd/new-smartphone-17-pro-social-media-banner-design-template_47987-32600.jpg", imageAlt: "iPhone 15 Pro"
|
||||
},
|
||||
{
|
||||
id: "3", name: "iPhone 15", price: "$799", imageSrc: "https://img.b2bpic.net/free-psd/smartphone-16-pro-discount-sale-banner-social-media-design-template_47987-25305.jpg", imageAlt: "iPhone 15"
|
||||
},
|
||||
{
|
||||
id: "4", name: "iPhone 15 Plus", price: "$899", imageSrc: "https://img.b2bpic.net/free-photo/mockup-mobile-phone-screen_53876-63379.jpg", imageAlt: "iPhone 15 Plus"
|
||||
}
|
||||
]}
|
||||
gridVariant="three-columns-all-equal-width"
|
||||
animationType="slide-up"
|
||||
textboxLayout="default"
|
||||
useInvertedBackground="noInvert"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="metrics" data-section="metrics">
|
||||
<MetricCardTwo
|
||||
title="Why Choose iPhone"
|
||||
description="Industry-leading performance and innovation you can trust."
|
||||
metrics={[
|
||||
{
|
||||
id: "1", value: "98%", description: "Customer Satisfaction Rate"
|
||||
},
|
||||
{
|
||||
id: "2", value: "150M+", description: "Active Users Worldwide"
|
||||
},
|
||||
{
|
||||
id: "3", value: "15+", description: "Years of Excellence"
|
||||
},
|
||||
{
|
||||
id: "4", value: "#1", description: "Smartphone Brand Globally"
|
||||
}
|
||||
]}
|
||||
gridVariant="uniform-all-items-equal"
|
||||
animationType="slide-up"
|
||||
textboxLayout="default"
|
||||
useInvertedBackground="invertDefault"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="testimonials" data-section="testimonials">
|
||||
<TestimonialCardSixteen
|
||||
title="Loved by Millions"
|
||||
description="Hear from satisfied customers who've chosen iPhone as their trusted device."
|
||||
testimonials={[
|
||||
{
|
||||
id: "1", name: "Sarah Chen", role: "Designer", company: "Creative Studio", rating: 5,
|
||||
imageSrc: "https://img.b2bpic.net/free-photo/business-owner-working-their-strategy_23-2149241318.jpg"
|
||||
},
|
||||
{
|
||||
id: "2", name: "Michael Rodriguez", role: "Photographer", company: "Visual Media Co", rating: 5,
|
||||
imageSrc: "https://img.b2bpic.net/free-photo/portrait-young-pretty-woman-sitting-table-trench-coat-working-laptop-co-working-office-wearing-glasses-smiling-happy-positive-workplace_285396-65.jpg"
|
||||
},
|
||||
{
|
||||
id: "3", name: "Emma Thompson", role: "Business Owner", company: "Tech Ventures", rating: 5,
|
||||
imageSrc: "https://img.b2bpic.net/free-photo/side-view-woman-holding-tablet_23-2149927578.jpg"
|
||||
}
|
||||
]}
|
||||
kpiItems={[
|
||||
{ value: "10M+", label: "Happy Customers" },
|
||||
{ value: "4.8/5", label: "Average Rating" },
|
||||
{ value: "99%", label: "Would Recommend" }
|
||||
]}
|
||||
animationType="slide-up"
|
||||
textboxLayout="default"
|
||||
useInvertedBackground="noInvert"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="contact" data-section="contact">
|
||||
<ContactSplit
|
||||
tag="Newsletter"
|
||||
title="Stay Updated"
|
||||
description="Subscribe to our newsletter for the latest iPhone releases, exclusive offers, and innovative technology updates delivered to your inbox."
|
||||
tagIcon={Bell}
|
||||
background={{ variant: "plain" }}
|
||||
useInvertedBackground="invertDefault"
|
||||
imageSrc="https://img.b2bpic.net/free-vector/pack-blogger-email-template-with-photos_23-2148731996.jpg"
|
||||
imageAlt="Newsletter signup"
|
||||
mediaPosition="right"
|
||||
inputPlaceholder="Enter your email"
|
||||
buttonText="Subscribe"
|
||||
termsText="We respect your privacy. Unsubscribe anytime."
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div id="footer" data-section="footer">
|
||||
<FooterLogoEmphasis
|
||||
logoText="iPhone Store"
|
||||
columns={[
|
||||
{
|
||||
items: [
|
||||
{ label: "Products", href: "products" },
|
||||
{ label: "iPhone 15 Pro", href: "products" },
|
||||
{ label: "iPhone 15", href: "products" }
|
||||
]
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ label: "Support", href: "contact" },
|
||||
{ label: "Technical Help", href: "contact" },
|
||||
{ label: "Contact Us", href: "contact" }
|
||||
]
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ label: "Company", href: "about" },
|
||||
{ label: "About Us", href: "about" },
|
||||
{ label: "Career", href: "about" }
|
||||
]
|
||||
},
|
||||
{
|
||||
items: [
|
||||
{ label: "Legal", href: "#" },
|
||||
{ label: "Privacy Policy", href: "#" },
|
||||
{ label: "Terms", href: "#" }
|
||||
]
|
||||
}
|
||||
]}
|
||||
/>
|
||||
</div>
|
||||
</ThemeProvider>
|
||||
);
|
||||
}
|
||||
5
vercel.json
Normal file
5
vercel.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"installCommand": "npm ci",
|
||||
"buildCommand": "npm run build",
|
||||
"outputDirectory": ".next"
|
||||
}
|
||||
Reference in New Issue
Block a user