Merge branch 'main' of https://gits.techvanguard.vn/UKSOURCE/hailearning.edu.vn into fix/thanh-23032026-style-scss

This commit is contained in:
Wini_Fy
2026-03-23 13:24:52 +07:00
8 changed files with 170 additions and 6593 deletions

3
.gitignore vendored
View File

@@ -42,4 +42,5 @@ next-env.d.ts
#vs code
/.vscode
package-lock.json
package-lock.json
standalone-deploy.tar.gz

View File

@@ -3,47 +3,72 @@
import { useEffect, useState } from "react";
export default function Loader() {
const [show, setShow] = useState(true);
const [show, setShow] = useState(true);
useEffect(() => {
const timer = setTimeout(() => setShow(false), 700);
return () => clearTimeout(timer);
}, []);
useEffect(() => {
const timer = setTimeout(() => setShow(false), 1100);
return () => clearTimeout(timer);
}, []);
if (!show) return null;
if (!show) return null;
return (
<div id="preloader" className="preloader">
<div className="animation-preloader">
<div className="spinner"></div>
<div className="txt-loading">
<span data-text-preloader="V" className="letters-loading">V</span>
<span data-text-preloader="I" className="letters-loading">I</span>
<span data-text-preloader="S" className="letters-loading">S</span>
<span data-text-preloader="A" className="letters-loading">A</span>
<span data-text-preloader="W" className="letters-loading">W</span>
<span data-text-preloader="A" className="letters-loading">A</span>
<span data-text-preloader="Y" className="letters-loading">Y</span>
</div>
<p className="text-center">Loading</p>
</div>
<div className="loader">
<div className="row">
<div className="col-3 loader-section section-left">
<div className="bg"></div>
</div>
<div className="col-3 loader-section section-left">
<div className="bg"></div>
</div>
<div className="col-3 loader-section section-right">
<div className="bg"></div>
</div>
<div className="col-3 loader-section section-right">
<div className="bg"></div>
</div>
</div>
</div>
return (
<div id="preloader" className="preloader">
<div className="animation-preloader">
<div className="spinner"></div>
<div className="txt-loading">
<span data-text-preloader="H" className="letters-loading">
H
</span>
<span data-text-preloader="A" className="letters-loading">
A
</span>
<span data-text-preloader="I" className="letters-loading">
I
</span>
<span data-text-preloader="L" className="letters-loading">
L
</span>
<span data-text-preloader="E" className="letters-loading">
E
</span>
<span data-text-preloader="A" className="letters-loading">
A
</span>
<span data-text-preloader="R" className="letters-loading">
R
</span>
<span data-text-preloader="N" className="letters-loading">
N
</span>
<span data-text-preloader="I" className="letters-loading">
I
</span>
<span data-text-preloader="N" className="letters-loading">
N
</span>
<span data-text-preloader="G" className="letters-loading">
G
</span>
</div>
);
<p className="text-center">Loading</p>
</div>
<div className="loader">
<div className="row">
<div className="col-3 loader-section section-left">
<div className="bg"></div>
</div>
<div className="col-3 loader-section section-left">
<div className="bg"></div>
</div>
<div className="col-3 loader-section section-right">
<div className="bg"></div>
</div>
<div className="col-3 loader-section section-right">
<div className="bg"></div>
</div>
</div>
</div>
</div>
);
}

View File

@@ -9,8 +9,8 @@ import MouseCursor from "./components/MouseCursor";
import Script from "next/script";
export const metadata: Metadata = {
title: "Visaway Immigration & Visa Consulting HTML Template",
description: "Visaway Immigration & Visa Consulting HTML Template",
title: "H.A.I Learning",
description: "H.A.I Learning",
};
export default function RootLayout({

View File

@@ -2,6 +2,7 @@ import type { NextConfig } from "next";
const nextConfig: NextConfig = {
/* config options here */
output: "standalone",
};
export default nextConfig;

6538
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -45,9 +45,9 @@ Version: 1.0.0
--body: #fff;
--black: #000;
--white: #fff;
--theme: #E13833;
--theme-2: #0048B4;
--header: #151A26;
--theme: #BA312E;
--theme-2: #071830;
--header: #151a26;
--text: #535761;
--text-2: #0B4E3D;
--border: #C9C9C9;
@@ -6525,26 +6525,71 @@ html.lenis, html.lenis body {
color: var(--theme);
position: relative;
}
.preloader .animation-preloader .txt-loading .letters-loading:nth-child(2):before {
.preloader
.animation-preloader
.txt-loading
.letters-loading:nth-child(2):before {
animation-delay: 0.1s;
}
.preloader
.animation-preloader
.txt-loading
.letters-loading:nth-child(3):before {
animation-delay: 0.2s;
}
.preloader .animation-preloader .txt-loading .letters-loading:nth-child(3):before {
.preloader
.animation-preloader
.txt-loading
.letters-loading:nth-child(4):before {
animation-delay: 0.3s;
}
.preloader
.animation-preloader
.txt-loading
.letters-loading:nth-child(5):before {
animation-delay: 0.4s;
}
.preloader .animation-preloader .txt-loading .letters-loading:nth-child(4):before {
.preloader
.animation-preloader
.txt-loading
.letters-loading:nth-child(6):before {
animation-delay: 0.5s;
}
.preloader
.animation-preloader
.txt-loading
.letters-loading:nth-child(7):before {
animation-delay: 0.6s;
}
.preloader .animation-preloader .txt-loading .letters-loading:nth-child(5):before {
.preloader
.animation-preloader
.txt-loading
.letters-loading:nth-child(8):before {
animation-delay: 0.7s;
}
.preloader
.animation-preloader
.txt-loading
.letters-loading:nth-child(8):before {
animation-delay: 0.8s;
}
.preloader .animation-preloader .txt-loading .letters-loading:nth-child(6):before {
.preloader
.animation-preloader
.txt-loading
.letters-loading:nth-child(9):before {
animation-delay: 0.9s;
}
.preloader
.animation-preloader
.txt-loading
.letters-loading:nth-child(10):before {
animation-delay: 1s;
}
.preloader .animation-preloader .txt-loading .letters-loading:nth-child(7):before {
animation-delay: 1.2s;
}
.preloader .animation-preloader .txt-loading .letters-loading:nth-child(8):before {
animation-delay: 1.4s;
.preloader
.animation-preloader
.txt-loading
.letters-loading:nth-child(11):before {
animation-delay: 1.1s;
}
.preloader .animation-preloader .txt-loading .letters-loading::before {
animation: letters-loading 4s infinite;

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

43
standalone-build.sh Executable file
View File

@@ -0,0 +1,43 @@
#!/bin/bash
set -e
echo "=== Next.js Standalone Build ==="
APP_DIR=$(pwd)
BUILD_DIR=".next"
STANDALONE_DIR=".next/standalone"
echo "1. Installing dependencies..."
npm install
echo "2. Building Next.js..."
npm run build
echo "3. Preparing standalone structure..."
# ensure directories exist
mkdir -p $STANDALONE_DIR/.next
# copy static assets
echo "Copying static assets..."
cp -r $BUILD_DIR/static $STANDALONE_DIR/.next/ 2>/dev/null || true
# copy public folder
if [ -d "public" ]; then
echo "Copying public folder..."
cp -r public $STANDALONE_DIR/
fi
echo "4. Creating deploy package..."
tar -czf standalone-deploy.tar.gz \
-C $STANDALONE_DIR . \
-C $APP_DIR public 2>/dev/null || true
echo ""
echo "Build completed."
echo "Deploy file: standalone-deploy.tar.gz"
echo ""
echo "Run on server:"
echo "PORT=3005 node server.js"