diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index b8237aa..588df82 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -23,10 +23,11 @@ List any issues that are linked to this pull request (e.g., `Closes #123`).
## Checklist
- [ ] I've tested this change locally and it works as expected
-- [ ] `bun run build` or `npm run build` completes without errors
-- [ ] My commit messages follow [Conventional Commits](https://www.conventionalcommits.org/) (e.g. `fix: ...`, `feat: ...`, `chore: ...`)
-- [ ] I've updated relevant docs (README, comments, etc.) if this change needs it
-- [ ] No leftover `console.log` or debug code
+- [ ] `bun run lint` or `npm run lint` completes without warnings or errors
+- [ ] `bun run build` or `npm run build` completes successfully
+- [ ] My commit messages follow [Conventional Commits](https://www.conventionalcommits.org/) (e.g. `feat: ...`, `fix: ...`, `chore: ...`)
+- [ ] I've updated relevant documentation (README, comments, etc.) if needed
+- [ ] I've removed any temporary debugging code (e.g. `console.log`)
## Screenshots / recordings (if applicable)
diff --git a/app/articles/[slug]/ArticleClient.tsx b/app/articles/[slug]/ArticleClient.tsx
index 47967a2..b7147d3 100644
--- a/app/articles/[slug]/ArticleClient.tsx
+++ b/app/articles/[slug]/ArticleClient.tsx
@@ -397,12 +397,14 @@ export default function ArticleClient({ article, previews }: Props) {
className="relative w-full overflow-hidden rounded-lg"
style={{ maxHeight: "260px" }}
>
-
+
- This page doesn't exist, or it wandered off somewhere into the void.
- Let's get you back on track.
+ {
+ "This page doesn't exist, or it wandered off somewhere into the void. Let's get you back on track."
+ }
{/* CTA buttons */}
diff --git a/app/partners/page.tsx b/app/partners/page.tsx
index 34ad503..78684b1 100644
--- a/app/partners/page.tsx
+++ b/app/partners/page.tsx
@@ -23,6 +23,7 @@ import {
ShieldCheck,
Users,
} from "lucide-react";
+import Image from "next/image";
import { useEffect, useState } from "react";
type DiscordData = {
@@ -236,10 +237,11 @@ function PartnerCard({
style={{ aspectRatio: "4 / 1", minHeight: 150, maxHeight: 200 }}
>
{showImageBanner ? (
-

) : showColourBanner ? (
{logoSrc ? (
-

) : (
logoInitials
diff --git a/bun.lock b/bun.lock
index 970d6fb..85fac54 100644
--- a/bun.lock
+++ b/bun.lock
@@ -41,7 +41,7 @@
"date-fns": "^3.6.0",
"embla-carousel-react": "^8.3.0",
"framer-motion": "^12.38.0",
- "gsap": "^3.15.0",
+ "gsap": "^3.13.0",
"input-otp": "^1.2.4",
"lucide-react": "^0.446.0",
"motion": "^12.40.0",
diff --git a/components.json b/components.json
index 497558a..be66943 100644
--- a/components.json
+++ b/components.json
@@ -12,7 +12,7 @@
},
"iconLibrary": "lucide",
"aliases": {
- "components": "@/components",
+ "components": "@/components/bits",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
diff --git a/components/LinkPreviewCard.tsx b/components/LinkPreviewCard.tsx
index dcc8f49..a84d1e7 100644
--- a/components/LinkPreviewCard.tsx
+++ b/components/LinkPreviewCard.tsx
@@ -1,5 +1,6 @@
import { accent, indigo, text } from "@/lib/colors";
import { AnimatePresence, motion } from "framer-motion";
+import Image from "next/image";
import { useEffect, useRef, useState } from "react";
import { createPortal } from "react-dom";
@@ -240,15 +241,17 @@ export function LinkPreviewCard({
{showImage && (
-
-

+
setImgError(true)}
- className="w-[6rem] h-[6rem] object-cover aspect-square transition-all duration-300 hover:scale-105"
- style={{ border: `1px solid ${indigo(0.18)}` }}
+ className="object-cover aspect-square transition-all duration-300 hover:scale-105"
/>
)}
diff --git a/components/bits/TargetCursor.tsx b/components/bits/TargetCursor.tsx
index ec526e1..6aa561c 100644
--- a/components/bits/TargetCursor.tsx
+++ b/components/bits/TargetCursor.tsx
@@ -1,5 +1,6 @@
"use client";
+import { text } from "@/lib/colors";
import { gsap } from "gsap";
import React, {
useCallback,
@@ -8,7 +9,6 @@ import React, {
useRef,
useState,
} from "react";
-import { text } from "@/lib/colors";
// A position: fixed element is positioned relative to the viewport UNLESS an
// ancestor establishes a containing block (transform, perspective, filter,
@@ -114,6 +114,8 @@ const TargetCursor: React.FC
= ({
useEffect(() => {
if (!mounted || isMobile || !cursorRef.current) return;
+ const activeStrength = activeStrengthRef.current;
+
const originalCursor = document.body.style.cursor;
if (hideDefaultCursor) {
document.body.style.cursor = "none";
@@ -168,7 +170,7 @@ const TargetCursor: React.FC = ({
) {
return;
}
- const strength = activeStrengthRef.current.current;
+ const strength = activeStrength.current;
if (strength === 0) return;
const cursorX = gsap.getProperty(cursorRef.current, "x") as number;
const cursorY = gsap.getProperty(cursorRef.current, "y") as number;
@@ -301,7 +303,7 @@ const TargetCursor: React.FC = ({
isActiveRef.current = true;
gsap.ticker.add(tickerFnRef.current!);
- gsap.to(activeStrengthRef.current, {
+ gsap.to(activeStrength, {
current: 1,
duration: hoverDuration,
ease: "power2.out",
@@ -320,7 +322,10 @@ const TargetCursor: React.FC = ({
gsap.ticker.remove(tickerFnRef.current!);
isActiveRef.current = false;
targetCornerPositionsRef.current = null;
- gsap.set(activeStrengthRef.current, { current: 0, overwrite: true });
+ gsap.set(activeStrength, {
+ current: 0,
+ overwrite: true,
+ });
activeTarget = null;
if (cursorColorOnTarget && cornersRef.current) {
@@ -418,7 +423,7 @@ const TargetCursor: React.FC = ({
document.body.style.cursor = originalCursor;
isActiveRef.current = false;
targetCornerPositionsRef.current = null;
- activeStrengthRef.current.current = 0;
+ activeStrength.current = 0;
};
}, [
mounted,
diff --git a/components/home/BelongSection.tsx b/components/home/BelongSection.tsx
index 0ea1839..d1b66aa 100644
--- a/components/home/BelongSection.tsx
+++ b/components/home/BelongSection.tsx
@@ -126,9 +126,9 @@ export default function BelongSection() {
className="mt-4 text-sm max-w-xl mx-auto leading-relaxed"
style={{ fontFamily: "var(--font-geist-mono)", color: text.dim }}
>
- Whether you're making your first commit or building your next big
- project, DevHub is a community where you can learn, contribute, and
- learn together.
+ {
+ "Whether you're making your first commit or building your next big project, DevHub is a community where you can learn, contribute, and learn together."
+ }
diff --git a/components/site/Footer.tsx b/components/site/Footer.tsx
index fea6aa0..47252e3 100644
--- a/components/site/Footer.tsx
+++ b/components/site/Footer.tsx
@@ -1,5 +1,6 @@
import { accent, background, indigo, text } from "@/lib/colors";
import data from "@/lib/staticdata.config";
+import Image from "next/image";
import Link from "next/link";
const { email } = data;
@@ -39,9 +40,11 @@ export default function Footer() {
className="font-bold text-[#6366f1] text-lg"
style={{ fontFamily: "var(--font-geist-mono)" }}
>
-
-