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=569680d2-4442-484c-b112-3a709c84e2a4
|
||||||
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"
|
||||||
97
src/app/blog/page.tsx
Normal file
97
src/app/blog/page.tsx
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import ReactLenis from "lenis/react";
|
||||||
|
import BlogCardOne from "@/components/sections/blog/BlogCardOne";
|
||||||
|
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="icon-arrow"
|
||||||
|
defaultTextAnimation="entrance-slide"
|
||||||
|
borderRadius="pill"
|
||||||
|
contentWidth="small"
|
||||||
|
sizing="largeSmallSizeLargeTitles"
|
||||||
|
background="aurora"
|
||||||
|
cardStyle="glass-depth"
|
||||||
|
primaryButtonStyle="flat"
|
||||||
|
secondaryButtonStyle="solid"
|
||||||
|
headingFontWeight="medium"
|
||||||
|
>
|
||||||
|
<ReactLenis root>
|
||||||
|
<div className="min-h-screen bg-background">
|
||||||
|
<NavbarStyleCentered
|
||||||
|
brandName="iPhone Store"
|
||||||
|
navItems={[
|
||||||
|
{ name: "Home", id: "/" },
|
||||||
|
{ name: "Shop", id: "products" },
|
||||||
|
{ name: "Features", id: "features" },
|
||||||
|
{ name: "Why Us", id: "metrics" },
|
||||||
|
{ name: "FAQ", id: "faq" },
|
||||||
|
{ name: "Contact", id: "contact" }
|
||||||
|
]}
|
||||||
|
button={{
|
||||||
|
text: "Buy Now", href: "products"
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{isLoading ? (
|
||||||
|
<div className="w-content-width mx-auto py-20 text-center">
|
||||||
|
<p className="text-foreground">Loading posts...</p>
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
<BlogCardOne
|
||||||
|
blogs={posts}
|
||||||
|
title="Latest iPhone News & Updates"
|
||||||
|
description="Stay updated with the latest iPhone features, reviews, and technology insights from our expert team"
|
||||||
|
tag="Blog"
|
||||||
|
textboxLayout="default"
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
carouselMode="buttons"
|
||||||
|
animationType="slide-up"
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
|
<FooterLogoEmphasis
|
||||||
|
logoText="iPhone Store"
|
||||||
|
columns={[
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{ label: "Shop", href: "products" },
|
||||||
|
{ label: "Features", href: "features" },
|
||||||
|
{ label: "Pricing", href: "products" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{ label: "About Us", href: "#about" },
|
||||||
|
{ label: "Support", href: "contact" },
|
||||||
|
{ label: "Contact", href: "contact" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{ label: "Privacy Policy", href: "#privacy" },
|
||||||
|
{ label: "Terms of Service", href: "#terms" },
|
||||||
|
{ label: "Warranty", href: "#warranty" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{ label: "Facebook", href: "https://facebook.com" },
|
||||||
|
{ label: "Twitter", href: "https://twitter.com" },
|
||||||
|
{ label: "Instagram", href: "https://instagram.com" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</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";
|
||||||
1269
src/app/layout.tsx
Normal file
1269
src/app/layout.tsx
Normal file
File diff suppressed because it is too large
Load Diff
282
src/app/page.tsx
Normal file
282
src/app/page.tsx
Normal file
@@ -0,0 +1,282 @@
|
|||||||
|
"use client"
|
||||||
|
|
||||||
|
import NavbarStyleCentered from '@/components/navbar/NavbarStyleCentered/NavbarStyleCentered';
|
||||||
|
import HeroBillboardGallery from '@/components/sections/hero/HeroBillboardGallery';
|
||||||
|
import ProductCardThree from '@/components/sections/product/ProductCardThree';
|
||||||
|
import FeatureCardSeven from '@/components/sections/feature/FeatureCardSeven';
|
||||||
|
import MetricCardOne from '@/components/sections/metrics/MetricCardOne';
|
||||||
|
import TestimonialCardFifteen from '@/components/sections/testimonial/TestimonialCardFifteen';
|
||||||
|
import FaqDouble from '@/components/sections/faq/FaqDouble';
|
||||||
|
import ContactSplitForm from '@/components/sections/contact/ContactSplitForm';
|
||||||
|
import FooterLogoEmphasis from '@/components/sections/footer/FooterLogoEmphasis';
|
||||||
|
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
|
||||||
|
import { Check, Package, Sparkles, Star, Trophy, Users } from "lucide-react";
|
||||||
|
|
||||||
|
export default function LandingPage() {
|
||||||
|
return (
|
||||||
|
<ThemeProvider
|
||||||
|
defaultButtonVariant="icon-arrow"
|
||||||
|
defaultTextAnimation="entrance-slide"
|
||||||
|
borderRadius="pill"
|
||||||
|
contentWidth="small"
|
||||||
|
sizing="largeSmallSizeLargeTitles"
|
||||||
|
background="aurora"
|
||||||
|
cardStyle="glass-depth"
|
||||||
|
primaryButtonStyle="flat"
|
||||||
|
secondaryButtonStyle="solid"
|
||||||
|
headingFontWeight="medium"
|
||||||
|
>
|
||||||
|
<div id="nav" data-section="nav">
|
||||||
|
<NavbarStyleCentered
|
||||||
|
brandName="iPhone Store"
|
||||||
|
navItems={[
|
||||||
|
{ name: "Shop", id: "products" },
|
||||||
|
{ name: "Features", id: "features" },
|
||||||
|
{ name: "Why Us", id: "metrics" },
|
||||||
|
{ name: "FAQ", id: "faq" },
|
||||||
|
{ name: "Contact", id: "contact" }
|
||||||
|
]}
|
||||||
|
button={{
|
||||||
|
text: "Buy Now", href: "products"
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="hero" data-section="hero">
|
||||||
|
<HeroBillboardGallery
|
||||||
|
title="The Future of iPhone"
|
||||||
|
description="Experience innovation in every detail. Discover the latest iPhone with cutting-edge technology, stunning design, and incredible performance."
|
||||||
|
background={{ variant: "plain" }}
|
||||||
|
tag="Latest Collection"
|
||||||
|
tagIcon={Sparkles}
|
||||||
|
buttons={[
|
||||||
|
{ text: "Shop Now", href: "products" },
|
||||||
|
{ text: "Learn More", href: "features" }
|
||||||
|
]}
|
||||||
|
mediaItems={[
|
||||||
|
{
|
||||||
|
imageSrc: "https://img.b2bpic.net/free-photo/smartphone-bokeh-background_23-2147983809.jpg", imageAlt: "iPhone latest model front view"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imageSrc: "https://img.b2bpic.net/free-photo/proud-joyful-charming-cheerful-blond-european-woman-stylish-silver-shiny-dress-hold-hand-waist-co_1258-134478.jpg", imageAlt: "iPhone premium design"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imageSrc: "https://img.b2bpic.net/free-photo/modern-workspace-featuring-cellphone-setup_58702-17222.jpg", imageAlt: "iPhone camera system"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imageSrc: "https://img.b2bpic.net/free-photo/female-with-phone-shopping-bags_23-2147932441.jpg", imageAlt: "iPhone display interface"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
imageSrc: "https://img.b2bpic.net/free-photo/modern-workspace-featuring-cellphone-setup_58702-17242.jpg", imageAlt: "iPhone luxury edition"
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="products" data-section="products">
|
||||||
|
<ProductCardThree
|
||||||
|
title="Shop iPhone Models"
|
||||||
|
description="Browse our complete selection of iPhone models. Choose the perfect device for your needs with flexible pricing and options."
|
||||||
|
tag="Available Now"
|
||||||
|
tagIcon={Check}
|
||||||
|
textboxLayout="default"
|
||||||
|
useInvertedBackground="invertDefault"
|
||||||
|
animationType="slide-up"
|
||||||
|
gridVariant="three-columns-all-equal-width"
|
||||||
|
products={[
|
||||||
|
{
|
||||||
|
id: "iphone-15-pro", name: "iPhone 15 Pro Max", price: "$1,199", imageSrc: "https://img.b2bpic.net/free-photo/smiling-young-woman-showing-blank-smartphone-screen_93675-132174.jpg", imageAlt: "iPhone 15 Pro Max premium smartphone", initialQuantity: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "iphone-15", name: "iPhone 15", price: "$799", imageSrc: "https://img.b2bpic.net/free-photo/arabic-phone-16_187299-46335.jpg", imageAlt: "iPhone 15 latest model", initialQuantity: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "iphone-14-plus", name: "iPhone 14 Plus", price: "$899", imageSrc: "https://img.b2bpic.net/free-vector/abstract-mobile-wallpapers_23-2147657831.jpg", imageAlt: "iPhone 14 Plus large display", initialQuantity: 1
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="features" data-section="features">
|
||||||
|
<FeatureCardSeven
|
||||||
|
title="Why Choose iPhone"
|
||||||
|
description="Experience the perfect blend of hardware and software, designed to work seamlessly together. Discover what makes iPhone the choice of millions worldwide."
|
||||||
|
tag="Innovation"
|
||||||
|
textboxLayout="default"
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
animationType="blur-reveal"
|
||||||
|
features={[
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
title: "Advanced Camera System", description: "Capture stunning photos and videos with our revolutionary camera system featuring advanced computational photography, night mode, and cinematic video recording.", imageSrc: "https://img.b2bpic.net/free-photo/dynamic-light-painting-background_23-2149679076.jpg", imageAlt: "Advanced camera technology"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
title: "All-Day Battery Life", description: "Power through your entire day with industry-leading battery technology. Fast charging gets you ready to go in minutes, not hours.", imageSrc: "https://img.b2bpic.net/free-photo/camera-lens_93675-130020.jpg", imageAlt: "Battery performance and charging"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
title: "Stunning Display", description: "Experience vibrant colors and incredible detail on our high-refresh-rate display. Every pixel is perfectly calibrated for an immersive viewing experience.", imageSrc: "https://img.b2bpic.net/free-photo/closeup-shot-black-camera-lens_181624-22497.jpg", imageAlt: "Retina display technology"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 4,
|
||||||
|
title: "Powerful Performance", description: "Blazing-fast processor handles everything you throw at it. From gaming to professional apps, experience unmatched performance and efficiency.", imageSrc: "https://img.b2bpic.net/free-photo/closeup-shot-black-camera-lens_181624-24059.jpg", imageAlt: "Chip performance technology"
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="metrics" data-section="metrics">
|
||||||
|
<MetricCardOne
|
||||||
|
title="By The Numbers"
|
||||||
|
description="Join millions of iPhone users worldwide and experience the ecosystem that just works."
|
||||||
|
tag="Global Impact"
|
||||||
|
textboxLayout="default"
|
||||||
|
useInvertedBackground="invertDefault"
|
||||||
|
animationType="scale-rotate"
|
||||||
|
gridVariant="uniform-all-items-equal"
|
||||||
|
metrics={[
|
||||||
|
{
|
||||||
|
id: "1", value: "2B+", title: "Users", description: "Active iPhone users worldwide", icon: Users
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "2", value: "99.8%", title: "Satisfaction", description: "Customer satisfaction rate", icon: Star
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "3", value: "150K+", title: "Apps", description: "Available on the App Store", icon: Package
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "4", value: "#1", title: "Brand", description: "Most valued tech brand globally", icon: Trophy
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="testimonials" data-section="testimonials">
|
||||||
|
<TestimonialCardFifteen
|
||||||
|
testimonial="iPhone has completely transformed how I work and create. The seamless integration between hardware and software makes everything feel intuitive and powerful. I can't imagine using anything else."
|
||||||
|
rating={5}
|
||||||
|
author="Alex Morgan, Creative Professional"
|
||||||
|
avatars={[
|
||||||
|
{
|
||||||
|
src: "https://img.b2bpic.net/free-photo/close-up-portrait-young-handsome-successful-man_1163-5475.jpg", alt: "User testimonial avatar 1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: "https://img.b2bpic.net/free-photo/happy-businessman-smiling-camera_1163-4660.jpg", alt: "User testimonial avatar 2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: "https://img.b2bpic.net/free-photo/portrait-smiley-business-man_23-2148514859.jpg", alt: "User testimonial avatar 3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: "https://img.b2bpic.net/free-photo/positive-confident-businesswoman-wearing-formal-suit-standing-with-arms-folded_74855-10328.jpg", alt: "User testimonial avatar 4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: "https://img.b2bpic.net/free-photo/happy-young-professional-posing-office_1262-21170.jpg", alt: "User testimonial avatar 5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
src: "https://img.b2bpic.net/free-photo/pensive-person-alone-corridor-serious_1262-1042.jpg", alt: "User testimonial avatar 6"
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="faq" data-section="faq">
|
||||||
|
<FaqDouble
|
||||||
|
title="Frequently Asked Questions"
|
||||||
|
description="Find answers to common questions about iPhone models, features, pricing, and support."
|
||||||
|
tag="Help & Support"
|
||||||
|
textboxLayout="default"
|
||||||
|
useInvertedBackground="invertDefault"
|
||||||
|
animationType="smooth"
|
||||||
|
faqs={[
|
||||||
|
{
|
||||||
|
id: "1", title: "What is the warranty on new iPhones?", content: "All new iPhones come with a one-year limited warranty that covers hardware defects. AppleCare+ extends coverage to up to two years for accidental damage, with affordable replacement options."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "2", title: "Can I trade in my old iPhone?", content: "Yes! We offer competitive trade-in values for your old iPhone. Visit our store or check online for your device's value. The credit can be applied directly to your new purchase."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "3", title: "What payment plans are available?", content: "We offer flexible financing options including monthly installments with zero interest over 24 months. Monthly payments start at just $29.99 depending on the model selected."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "4", title: "Is the display really that durable?", content: "iPhone features Ceramic Shield, tougher than any smartphone glass. It provides superior protection against drops and scratches while maintaining crystal-clear display quality."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "5", title: "How long do iPhones last?", content: "iPhones typically last 5-7 years with proper care. We provide regular software updates for several years, ensuring your device stays secure and performs optimally."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "6", title: "Can I customize my iPhone?", content: "Yes! Choose from multiple color options and storage capacities. We also offer protective cases, screen protectors, and accessories to personalize your device."
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="contact" data-section="contact">
|
||||||
|
<ContactSplitForm
|
||||||
|
title="Get in Touch"
|
||||||
|
description="Have questions about iPhone? Our expert team is here to help. Contact us for product recommendations, technical support, or to place an order."
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
imageSrc="https://img.b2bpic.net/free-photo/confident-call-center-operator-talking-with-client_74855-4059.jpg"
|
||||||
|
imageAlt="Customer service support team"
|
||||||
|
mediaPosition="right"
|
||||||
|
buttonText="Send Message"
|
||||||
|
inputs={[
|
||||||
|
{
|
||||||
|
name: "name", type: "text", placeholder: "Your Name", required: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "email", type: "email", placeholder: "Your Email", required: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "phone", type: "tel", placeholder: "Phone Number", required: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "product", type: "text", placeholder: "Product Interest", required: false
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
textarea={{
|
||||||
|
name: "message", placeholder: "How can we help you?", rows: 5,
|
||||||
|
required: true
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="footer" data-section="footer">
|
||||||
|
<FooterLogoEmphasis
|
||||||
|
logoText="iPhone Store"
|
||||||
|
columns={[
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{ label: "Shop", href: "products" },
|
||||||
|
{ label: "Features", href: "features" },
|
||||||
|
{ label: "Pricing", href: "products" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{ label: "About Us", href: "#about" },
|
||||||
|
{ label: "Support", href: "contact" },
|
||||||
|
{ label: "Contact", href: "contact" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{ label: "Privacy Policy", href: "#privacy" },
|
||||||
|
{ label: "Terms of Service", href: "#terms" },
|
||||||
|
{ label: "Warranty", href: "#warranty" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
items: [
|
||||||
|
{ label: "Facebook", href: "https://facebook.com" },
|
||||||
|
{ label: "Twitter", href: "https://twitter.com" },
|
||||||
|
{ label: "Instagram", href: "https://instagram.com" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</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