Initial commit
This commit is contained in:
59
.gitea/workflows/build.yml
Normal file
59
.gitea/workflows/build.yml
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
name: Build
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
branch:
|
||||||
|
description: 'Branch to build'
|
||||||
|
required: true
|
||||||
|
default: 'main'
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
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 --silent 2>&1 | tee install.log
|
||||||
|
env:
|
||||||
|
NODE_OPTIONS: '--max-old-space-size=4096'
|
||||||
|
|
||||||
|
- name: Build (next build)
|
||||||
|
run: |
|
||||||
|
set -euo pipefail
|
||||||
|
npm run build 2>&1 | tee build.log
|
||||||
|
env:
|
||||||
|
NODE_ENV: production
|
||||||
|
NEXT_TELEMETRY_DISABLED: 1
|
||||||
|
NODE_OPTIONS: '--max-old-space-size=4096'
|
||||||
|
timeout-minutes: 5
|
||||||
|
|
||||||
|
- name: Upload logs on failure
|
||||||
|
if: failure()
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: build-logs
|
||||||
|
path: |
|
||||||
|
install.log
|
||||||
|
build.log
|
||||||
|
if-no-files-found: ignore
|
||||||
|
|
||||||
|
- name: Build completed
|
||||||
|
if: success()
|
||||||
|
run: echo "Build completed successfully"
|
||||||
1237
src/app/layout.tsx
Normal file
1237
src/app/layout.tsx
Normal file
File diff suppressed because it is too large
Load Diff
314
src/app/page.tsx
Normal file
314
src/app/page.tsx
Normal file
@@ -0,0 +1,314 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { ThemeProvider } from '@/components/theme/ThemeProvider';
|
||||||
|
import NavbarStyleApple from '@/components/navbar/NavbarStyleApple/NavbarStyleApple';
|
||||||
|
import HeroOverlay from '@/components/sections/hero/HeroOverlay';
|
||||||
|
import SplitAbout from '@/components/sections/about/SplitAbout';
|
||||||
|
import PricingCardThree from '@/components/sections/pricing/PricingCardThree';
|
||||||
|
import MetricCardEleven from '@/components/sections/metrics/MetricCardEleven';
|
||||||
|
import ContactCenter from '@/components/sections/contact/ContactCenter';
|
||||||
|
import MediaAbout from '@/components/sections/about/MediaAbout';
|
||||||
|
import FeatureCardOne from '@/components/sections/feature/FeatureCardOne';
|
||||||
|
import ContactText from '@/components/sections/contact/ContactText';
|
||||||
|
import FaqBase from '@/components/sections/faq/FaqBase';
|
||||||
|
import FooterBase from '@/components/sections/footer/FooterBase';
|
||||||
|
import { Star, Play, Users, BookOpen, Award, Shield, Zap, Code, Database, TestTube } from 'lucide-react';
|
||||||
|
|
||||||
|
export default function Home() {
|
||||||
|
return (
|
||||||
|
<ThemeProvider
|
||||||
|
defaultButtonVariant="text-stagger"
|
||||||
|
defaultTextAnimation="entrance-slide"
|
||||||
|
borderRadius="rounded"
|
||||||
|
contentWidth="medium"
|
||||||
|
sizing="medium"
|
||||||
|
background="aurora"
|
||||||
|
cardStyle="glass-elevated"
|
||||||
|
primaryButtonStyle="gradient"
|
||||||
|
secondaryButtonStyle="glass"
|
||||||
|
theme={{
|
||||||
|
"--background": "#0a0a0a",
|
||||||
|
"--card": "#1a1a1a",
|
||||||
|
"--foreground": "#f0f8ffe6",
|
||||||
|
"--primary-cta": "#cee7ff",
|
||||||
|
"--secondary-cta": "#1a1a1a",
|
||||||
|
"--accent": "#737373",
|
||||||
|
"--background-accent": "#737373"
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<NavbarStyleApple
|
||||||
|
navItems={[
|
||||||
|
{ name: 'Our Website', id: 'https://nestjs.com' },
|
||||||
|
{ name: 'Enterprise', id: 'enterprise' },
|
||||||
|
{ name: 'Resources', id: 'resources' }
|
||||||
|
]}
|
||||||
|
brandName="NestJS"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<HeroOverlay
|
||||||
|
title="Official NestJS Courses"
|
||||||
|
description="Learn everything you need to master NestJS and tackle modern backend applications at any scale."
|
||||||
|
imageSrc="https://courses.nestjs.com/header-1.45e257d5.jpg"
|
||||||
|
imageAlt="NestJS Course Hero"
|
||||||
|
textPosition="center"
|
||||||
|
showBlur={true}
|
||||||
|
showDimOverlay={true}
|
||||||
|
buttons={[
|
||||||
|
{ text: 'See courses', href: '#courses' }
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<SplitAbout
|
||||||
|
title="NestJS Fundamentals Course"
|
||||||
|
description="Get up to speed with NestJS fast. Master the building blocks and essential concepts behind creating your own enterprise-grade applications. Prepare for an in-depth guided course & walk-through of all the fundamentals of a NestJS application from the Creator Kamil Mysliwiec himself, and Mark Pieszak (Core Team Member)."
|
||||||
|
textboxLayout="default"
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
bulletPoints={[
|
||||||
|
{ title: 'Step-by-step lesson progression', description: 'Code everything alongside us!', icon: Play },
|
||||||
|
{ title: '80 videos with subtitles', description: 'Over 5 hours of content', icon: BookOpen },
|
||||||
|
{ title: 'Real-world REST API', description: 'Build a complete application with NestJS', icon: Code },
|
||||||
|
{ title: 'SQL & NoSQL databases', description: 'Learn to interact with both database types', icon: Database },
|
||||||
|
{ title: 'Official Certificate', description: 'NestJS Certificate of Completion', icon: Award }
|
||||||
|
]}
|
||||||
|
imageSrc="https://courses.nestjs.com/photo-kamil.606d0144.png"
|
||||||
|
imageAlt="Kamil Mysliwiec - Creator of NestJS"
|
||||||
|
imagePosition="right"
|
||||||
|
buttons={[
|
||||||
|
{ text: 'Purchase Now', href: '#pricing' },
|
||||||
|
{ text: 'Learn More', href: '#details' }
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<PricingCardThree
|
||||||
|
plans={[
|
||||||
|
{
|
||||||
|
id: 'fundamentals',
|
||||||
|
badge: 'Save 25% - Only 11 days left!',
|
||||||
|
price: '$129.99',
|
||||||
|
name: 'NestJS Fundamentals Course',
|
||||||
|
buttons: [
|
||||||
|
{ text: 'Purchase Now', href: '#purchase' },
|
||||||
|
{ text: 'Contact for Team Discount', href: '#contact' }
|
||||||
|
],
|
||||||
|
features: [
|
||||||
|
'Step-by-step lesson progression',
|
||||||
|
'80 videos with subtitles and over 5 hours of content',
|
||||||
|
'Build a real-world REST API application',
|
||||||
|
'Learn all the most important NestJS building blocks',
|
||||||
|
'Interact with both SQL & NoSQL databases',
|
||||||
|
'Official NestJS Certificate of Completion'
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
title="Get Started with NestJS"
|
||||||
|
description="Master the fundamentals with our comprehensive course"
|
||||||
|
textboxLayout="default"
|
||||||
|
animationType="slide-up"
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<MetricCardEleven
|
||||||
|
metrics={[
|
||||||
|
{
|
||||||
|
id: '1',
|
||||||
|
value: '80+',
|
||||||
|
title: 'Video Lessons',
|
||||||
|
description: 'Step-by-step guided tutorials',
|
||||||
|
imageSrc: 'https://courses.nestjs.com/books.08f0b6d9.svg',
|
||||||
|
imageAlt: 'Course content'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '2',
|
||||||
|
value: '5+',
|
||||||
|
title: 'Hours of Content',
|
||||||
|
description: 'Comprehensive learning experience',
|
||||||
|
imageSrc: 'https://courses.nestjs.com/corp.3d82653b.svg',
|
||||||
|
imageAlt: 'Learning time'
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
title="Course Highlights"
|
||||||
|
description="Everything you need to master NestJS development"
|
||||||
|
textboxLayout="default"
|
||||||
|
animationType="slide-up"
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<FeatureCardOne
|
||||||
|
features={[
|
||||||
|
{
|
||||||
|
title: 'Getting Started',
|
||||||
|
description: '4 lessons covering NestJS introduction, CLI installation, and application structure',
|
||||||
|
imageSrc: 'https://courses.nestjs.com/logo-small-gradient.76616405.svg',
|
||||||
|
imageAlt: 'Getting Started'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'REST API Development',
|
||||||
|
description: '15 lessons on creating a complete REST API application',
|
||||||
|
imageSrc: 'https://courses.nestjs.com/network.87de5857.svg',
|
||||||
|
imageAlt: 'REST API'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Database Integration',
|
||||||
|
description: '13 lessons on PostgreSQL with TypeORM and MongoDB with Mongoose',
|
||||||
|
imageSrc: 'https://courses.nestjs.com/diamond.ecfa463f.svg',
|
||||||
|
imageAlt: 'Database'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Dependency Injection',
|
||||||
|
description: '11 lessons covering the core concepts of dependency injection',
|
||||||
|
imageSrc: 'https://courses.nestjs.com/padlock.00488851.svg',
|
||||||
|
imageAlt: 'Dependency Injection'
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
title="What's inside the course..."
|
||||||
|
description="Comprehensive modules covering all aspects of NestJS development"
|
||||||
|
textboxLayout="default"
|
||||||
|
gridVariant="uniform-all-items-equal"
|
||||||
|
animationType="slide-up"
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<MediaAbout
|
||||||
|
title="Who is using Nest?"
|
||||||
|
description="Nest is proudly powering a large ecosystem of enterprises and products out there. Wanna see your logo here? Find out more."
|
||||||
|
imageSrc="https://courses.nestjs.com/sanofi.b18c1526.png"
|
||||||
|
imageAlt="Companies using NestJS"
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<MediaAbout
|
||||||
|
title="Preview a featured lesson"
|
||||||
|
description="Add Pointcuts with Interceptors • NestJS Fundamentals"
|
||||||
|
imageSrc="https://courses.nestjs.com/no-preview-video.876718d4.jpeg"
|
||||||
|
imageAlt="Featured lesson preview"
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<FeatureCardOne
|
||||||
|
features={[
|
||||||
|
{
|
||||||
|
title: 'All-in-One bundle',
|
||||||
|
description: 'All courses - 202 lessons, +17 hours - $349',
|
||||||
|
imageSrc: 'https://courses.nestjs.com/books.08f0b6d9.svg',
|
||||||
|
imageAlt: 'All courses bundle'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Authentication and Authorization',
|
||||||
|
description: '19 lessons, 2 hours - $79',
|
||||||
|
imageSrc: 'https://courses.nestjs.com/padlock.00488851.svg',
|
||||||
|
imageAlt: 'Authentication course'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Architecture and Advanced patterns',
|
||||||
|
description: '21 lessons, 2.5 hours - $95',
|
||||||
|
imageSrc: 'https://courses.nestjs.com/architecture.dcd277be.svg',
|
||||||
|
imageAlt: 'Architecture course'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'GraphQL - Code first',
|
||||||
|
description: '23 lessons, 2 hours - $39',
|
||||||
|
imageSrc: 'https://courses.nestjs.com/graphql.44860e93.svg',
|
||||||
|
imageAlt: 'GraphQL course'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Microservices',
|
||||||
|
description: '20 lessons, 2 hours - $59',
|
||||||
|
imageSrc: 'https://courses.nestjs.com/network.87de5857.svg',
|
||||||
|
imageAlt: 'Microservices course'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Advanced concepts',
|
||||||
|
description: '18 lessons, 2 hours - $69',
|
||||||
|
imageSrc: 'https://courses.nestjs.com/diamond.ecfa463f.svg',
|
||||||
|
imageAlt: 'Advanced concepts course'
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
title="Course Extensions"
|
||||||
|
description="Official NestJS Course Extensions will help you take your applications to the next level, while learning much more about the Node.js ecosystem, and other vastly important technologies."
|
||||||
|
textboxLayout="default"
|
||||||
|
gridVariant="uniform-all-items-equal"
|
||||||
|
animationType="slide-up"
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
buttons={[
|
||||||
|
{ text: 'Explore course extensions', href: '#extensions' }
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<ContactText
|
||||||
|
text="Does your team need additional support? Nest core team members can work directly with your team on a daily basis to help take your project to the next-level. Let us partner with you and your team to develop the most ambitious projects."
|
||||||
|
animationType="entrance-slide"
|
||||||
|
buttons={[
|
||||||
|
{ text: 'Read more', href: '#support' }
|
||||||
|
]}
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<FaqBase
|
||||||
|
faqs={[
|
||||||
|
{
|
||||||
|
id: '1',
|
||||||
|
title: 'Do courses have subtitles (Closed Captions)?',
|
||||||
|
content: 'Yes! All courses have subtitles (Closed Captions) and full written transcripts for each lesson in English.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '2',
|
||||||
|
title: 'How long do I have access to the course?',
|
||||||
|
content: 'All course purchases have unlimited lifetime access & free updates. No subscriptions needed, you can access the course anytime, forever.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '3',
|
||||||
|
title: 'What are my payment options?',
|
||||||
|
content: 'Our online checkout accepts all major Credit Cards and Google Pay. Checkout is a fully secure 128-bit SSL encrypted payment system through Stripe.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '4',
|
||||||
|
title: 'Do you offer large team discounts?',
|
||||||
|
content: 'Yes of course! Please contact us at support@nestjs.com about the size of your team, and we can help you purchase all course licenses with discount codes.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '5',
|
||||||
|
title: 'Can I share my course with someone else?',
|
||||||
|
content: 'Each purchase is limited to ONE license & user viewing the course. Our licensing agreement prohibits any form of sharing. Account activity is tracked and abuse of copyright taken very seriously. If you are purchasing for larger teams (10+) shoot us an email at support@nestjs.com to retrieve a large-team discount code.'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: '6',
|
||||||
|
title: 'Do I receive a certificate of completion?',
|
||||||
|
content: 'Yes. When completing each course you will receive an official Certificate indicating that you have completed each Nest certified course. You can download an official certificate of completion that can be used to be reimbursed by your employer or land that dream job you are applying for.'
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
title="Frequently Asked Questions"
|
||||||
|
description="Got a question? Find answers to the most common questions below."
|
||||||
|
textboxLayout="default"
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
animationType="smooth"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<ContactCenter
|
||||||
|
tag="Newsletter"
|
||||||
|
title="Join our Newsletter"
|
||||||
|
description="Subscribe to stay up to date with the latest Nest updates, features, and upcoming course updates!"
|
||||||
|
useInvertedBackground="noInvert"
|
||||||
|
inputPlaceholder="Enter your email"
|
||||||
|
buttonText="Subscribe"
|
||||||
|
termsText="By subscribing you agree to receive updates from NestJS."
|
||||||
|
onSubmit={(email) => console.log('Newsletter signup:', email)}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<FooterBase
|
||||||
|
columns={[
|
||||||
|
{
|
||||||
|
title: 'Official',
|
||||||
|
items: [
|
||||||
|
{ label: 'NestJS Consulting', href: 'https://trilon.io' },
|
||||||
|
{ label: 'Kamil Mysliwiec', href: '#' },
|
||||||
|
{ label: 'Jakub Staron', href: '#' }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]}
|
||||||
|
logoText="NestJS"
|
||||||
|
copyrightText="Copyright © 2017-2026 Kamil Mysliwiec"
|
||||||
|
onPrivacyClick={() => console.log('Privacy clicked')}
|
||||||
|
/>
|
||||||
|
</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