From e5e6fadc0bf65d29d6ec350dc7ce8795c851d35d Mon Sep 17 00:00:00 2001 From: JOY <5027251+JOY@users.noreply.github.com> Date: Wed, 28 Oct 2026 19:44:48 +0700 Subject: [PATCH] fix(ci): make Lint pass and unblock sharp on Linux build - Format the four files flagged by format:check. - Force a single sharp version (0.34.2) via resolutions. With 0.33.5 (@strapi/upload) and 0.34.x (next) both installed, yarn 1 hoisted mismatched @img/sharp-* and @img/sharp-libvips-* packages, so sharp could not load libvips-cpp.so.8.16.1 when next.config.mjs loaded @plaiceholder/next on CI. - Resolve eslint-plugin-react-hooks to ^5.2.0: 4.6.x (pinned by @vercel/style-guide 6) calls context.getSource(), removed in ESLint 9, and crashed next lint. - Fix the 23 ESLint errors that surfaced once lint ran: unescaped entities, redundant list roles, missing video caption tracks, keyboard access for the YouTube thumbnail, a recharts Area falsely matched as an image-map area, and a redeclared ProjectStatistics name. - Add lib/email/send-email.ts (imported but never committed) and point category.ts at the existing @/lib/strapi-api client instead of the missing ../strapi-client. Also fixes nodemailer.createTransporter, which does not exist, to createTransport. Build still fails on pre-existing TypeScript errors in apps/web. Co-Authored-By: Claude Opus 5.5 --- .../app/[locale]/admin/categories/page.tsx | 2 +- .../app/[locale]/campaigns/create/page.tsx | 3 +- .../[id]/components/ProjectDetailContent.tsx | 7 +- .../[id]/components/ProjectDetailHero.tsx | 1 + .../[slug]/components/ProjectDetailHero.tsx | 1 + .../projects/create/CreateProjectForm.tsx | 3 +- apps/web/src/app/[locale]/projects/page.tsx | 2 +- apps/web/src/app/api/comments/route.ts | 1 - apps/web/src/app/api/project-updates/route.ts | 1 - apps/web/src/components/catalyst/footer.tsx | 8 +- .../crowdfunding/AnalyticsDashboard.tsx | 4 +- .../crowdfunding/DonationHistory.tsx | 2 +- .../components/crowdfunding/DonationsList.tsx | 2 +- .../crowdfunding/ProjectFilters.tsx | 2 +- .../crowdfunding/ProjectStatistics.tsx | 6 +- .../crowdfunding/ProjectUpdates.tsx | 3 +- .../components/elementary/YouTubePlayer.tsx | 9 + .../sections/FeaturedProjects.tsx | 4 +- apps/web/src/lib/email/donation-receipt.ts | 27 +-- apps/web/src/lib/email/send-email.ts | 37 +++++ .../src/lib/strapi-api/content/category.ts | 3 +- .../web/src/lib/strapi-api/content/project.ts | 9 +- package.json | 8 +- yarn.lock | 156 +----------------- 24 files changed, 99 insertions(+), 202 deletions(-) create mode 100644 apps/web/src/lib/email/send-email.ts diff --git a/apps/web/src/app/[locale]/admin/categories/page.tsx b/apps/web/src/app/[locale]/admin/categories/page.tsx index 8665c6d..cb26e6a 100644 --- a/apps/web/src/app/[locale]/admin/categories/page.tsx +++ b/apps/web/src/app/[locale]/admin/categories/page.tsx @@ -125,7 +125,7 @@ export default async function CategoriesPage() {
  • Set environment variable:{" "} - $env:STRAPI_API_TOKEN="your-token" + $env:STRAPI_API_TOKEN="your-token"
  • diff --git a/apps/web/src/app/[locale]/campaigns/create/page.tsx b/apps/web/src/app/[locale]/campaigns/create/page.tsx index 17c1bec..99f320c 100644 --- a/apps/web/src/app/[locale]/campaigns/create/page.tsx +++ b/apps/web/src/app/[locale]/campaigns/create/page.tsx @@ -145,7 +145,8 @@ export default function CreateCampaignPage() { Campaign Details - Tell us about your project and what you're trying to achieve + Tell us about your project and what you're trying to + achieve diff --git a/apps/web/src/app/[locale]/projects/[id]/components/ProjectDetailContent.tsx b/apps/web/src/app/[locale]/projects/[id]/components/ProjectDetailContent.tsx index 217f8eb..0307e0e 100644 --- a/apps/web/src/app/[locale]/projects/[id]/components/ProjectDetailContent.tsx +++ b/apps/web/src/app/[locale]/projects/[id]/components/ProjectDetailContent.tsx @@ -252,9 +252,10 @@ export function ProjectDetailContent({ project }: ProjectDetailContentProps) {

    As with any innovative project, we face certain challenges. - We've identified potential risks and have contingency plans in - place. Our experienced team and thorough planning help mitigate - these risks, but we believe in transparency with our backers. + We've identified potential risks and have contingency plans + in place. Our experienced team and thorough planning help + mitigate these risks, but we believe in transparency with our + backers.

    diff --git a/apps/web/src/app/[locale]/projects/[id]/components/ProjectDetailHero.tsx b/apps/web/src/app/[locale]/projects/[id]/components/ProjectDetailHero.tsx index 5e6a9f7..a98a78a 100644 --- a/apps/web/src/app/[locale]/projects/[id]/components/ProjectDetailHero.tsx +++ b/apps/web/src/app/[locale]/projects/[id]/components/ProjectDetailHero.tsx @@ -131,6 +131,7 @@ export function ProjectDetailHero({ project }: ProjectDetailHeroProps) { className="h-full w-full object-cover" poster={currentMedia.alternativeText} > + Your browser does not support the video tag. ) diff --git a/apps/web/src/app/[locale]/projects/[slug]/components/ProjectDetailHero.tsx b/apps/web/src/app/[locale]/projects/[slug]/components/ProjectDetailHero.tsx index 4a9779a..67365d3 100644 --- a/apps/web/src/app/[locale]/projects/[slug]/components/ProjectDetailHero.tsx +++ b/apps/web/src/app/[locale]/projects/[slug]/components/ProjectDetailHero.tsx @@ -136,6 +136,7 @@ export function ProjectDetailHero({ project }: ProjectDetailHeroProps) { className="h-full w-full object-cover" poster={currentMedia.alternativeText} > + Your browser does not support the video tag. ) diff --git a/apps/web/src/app/[locale]/projects/create/CreateProjectForm.tsx b/apps/web/src/app/[locale]/projects/create/CreateProjectForm.tsx index e2341f7..77c9823 100644 --- a/apps/web/src/app/[locale]/projects/create/CreateProjectForm.tsx +++ b/apps/web/src/app/[locale]/projects/create/CreateProjectForm.tsx @@ -211,7 +211,8 @@ export default function CreateProjectForm() { Project Details - Tell us about your project and what you're trying to achieve + Tell us about your project and what you're trying to + achieve diff --git a/apps/web/src/app/[locale]/projects/page.tsx b/apps/web/src/app/[locale]/projects/page.tsx index 7e31eed..a4ec889 100644 --- a/apps/web/src/app/[locale]/projects/page.tsx +++ b/apps/web/src/app/[locale]/projects/page.tsx @@ -1,11 +1,11 @@ import { AppLocale } from "@/types/general" +import { fetchProjects as strapiApiFetchProjects } from "@/lib/strapi-api/content/project" import { Container } from "@/components/catalyst/container" import FiltersSheet from "@/components/crowdfunding/FiltersSheet" import FiltersSidebar from "@/components/crowdfunding/FiltersSidebar" import ProjectCard from "@/components/crowdfunding/ProjectCard" import ProjectsTopControls from "@/components/crowdfunding/ProjectsTopControls" -import { fetchProjects as strapiApiFetchProjects } from "@/lib/strapi-api/content/project" interface ProjectsPageProps { params: Promise<{ locale: AppLocale }> diff --git a/apps/web/src/app/api/comments/route.ts b/apps/web/src/app/api/comments/route.ts index c5d8417..093c6a1 100644 --- a/apps/web/src/app/api/comments/route.ts +++ b/apps/web/src/app/api/comments/route.ts @@ -1,5 +1,4 @@ import { NextRequest, NextResponse } from "next/server" - import { env } from "@/env.mjs" const STRAPI_URL = process.env.STRAPI_URL || "http://localhost:1338" diff --git a/apps/web/src/app/api/project-updates/route.ts b/apps/web/src/app/api/project-updates/route.ts index cbd6b33..c314d81 100644 --- a/apps/web/src/app/api/project-updates/route.ts +++ b/apps/web/src/app/api/project-updates/route.ts @@ -1,5 +1,4 @@ import { NextRequest, NextResponse } from "next/server" - import { env } from "@/env.mjs" const STRAPI_URL = process.env.STRAPI_URL || "http://localhost:1338" diff --git a/apps/web/src/components/catalyst/footer.tsx b/apps/web/src/components/catalyst/footer.tsx index 98b373a..fbf7dab 100644 --- a/apps/web/src/components/catalyst/footer.tsx +++ b/apps/web/src/components/catalyst/footer.tsx @@ -124,7 +124,7 @@ export default function Footer() {

    Solutions

    -