Initial commit

This commit is contained in:
2026-02-05 15:35:49 +02:00
commit 19353e8b1f
7 changed files with 1630 additions and 0 deletions

2
.env Normal file
View File

@@ -0,0 +1,2 @@
NEXT_PUBLIC_API_URL=undefined
NEXT_PUBLIC_PROJECT_ID=4e5262b9-2be0-4f8d-a0ac-6e7841961912

View 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
View 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
View 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

File diff suppressed because it is too large Load Diff

199
src/app/page.tsx Normal file
View 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
View File

@@ -0,0 +1,5 @@
{
"installCommand": "npm ci",
"buildCommand": "npm run build",
"outputDirectory": ".next"
}