From 18fef870f445f2aabf0353de5bca8f5e22291640 Mon Sep 17 00:00:00 2001 From: hieuddo Date: Wed, 24 Dec 2025 14:39:07 +0800 Subject: [PATCH 1/2] feat: images lazy loading --- src/app/layout.tsx | 7 +++++-- src/assets/Brand.png | Bin 0 -> 18864 bytes src/components/TeamPhotos.tsx | 7 ++++++- src/lib/rehype-figure.ts | 1 + 4 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 src/assets/Brand.png diff --git a/src/app/layout.tsx b/src/app/layout.tsx index c10f90f..493ba9d 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,9 +1,11 @@ import type { Metadata } from "next"; import "./globals.css"; import Link from "next/link"; +import Image from "next/image"; import Navigation from "@/components/Navigation"; import TeamPhotos from "@/components/TeamPhotos"; import { getAllCategories } from "@/lib/markdown-posts"; +import BrandLogo from "@/assets/Brand.png"; export const metadata: Metadata = { title: "Preferred.AI", @@ -30,10 +32,11 @@ export default function RootLayout({
- Preferred.AI

Preferences and Recommendations from Data & AI diff --git a/src/assets/Brand.png b/src/assets/Brand.png new file mode 100644 index 0000000000000000000000000000000000000000..fbdfd69a38d1181776df3b4191d091ed3fe86cf2 GIT binary patch literal 18864 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 literal 0 HcmV?d00001 diff --git a/src/components/TeamPhotos.tsx b/src/components/TeamPhotos.tsx index c7e6411..e03fb60 100644 --- a/src/components/TeamPhotos.tsx +++ b/src/components/TeamPhotos.tsx @@ -1,5 +1,7 @@ "use client"; +import Image from "next/image"; + import { useState, useEffect } from "react"; import { TEAM_PHOTOS } from "@/data/teamPhotos"; @@ -40,9 +42,12 @@ export default function TeamPhotos() { isVisible ? "opacity-100" : "opacity-0" }`} > - {`${TEAM_PHOTOS[currentIndex].date}

diff --git a/src/lib/rehype-figure.ts b/src/lib/rehype-figure.ts index 50bb7ce..cbaa519 100644 --- a/src/lib/rehype-figure.ts +++ b/src/lib/rehype-figure.ts @@ -36,6 +36,7 @@ export default function rehypeFigure() { ...node, properties: { ...node.properties, + loading: 'lazy', }, }, ], From dda5a2d4dc1d28d8c7c8ce2a79ba2989c3c94156 Mon Sep 17 00:00:00 2001 From: hieuddo Date: Wed, 24 Dec 2025 14:42:33 +0800 Subject: [PATCH 2/2] ci: add test build on pull requests --- .github/workflows/test-build.yml | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/test-build.yml diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml new file mode 100644 index 0000000..98a85d8 --- /dev/null +++ b/.github/workflows/test-build.yml @@ -0,0 +1,34 @@ +name: Test Build + +on: + pull_request: + branches: ["main"] + +# Cancel in-progress runs for the same PR +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + version: 9 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "pnpm" + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Build with Next.js + run: pnpm build