From 563aa2efabad0f330a8678545754460a13129b5a Mon Sep 17 00:00:00 2001
From: Derek Slenk
Date: Mon, 30 Jun 2025 09:52:03 -0400
Subject: [PATCH 1/6] Fix angrymichigander.com link styling in footer
- Add proper CSS classes for link visibility (text-primary hover:underline)
- Add target='_blank' to open in new tab
- Add security attributes for external link
- Fix spacing around the link text
---
src/app/page.tsx | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 76680f0..7a79611 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -192,9 +192,16 @@ export default function Home() {
- Disclaimer: This website is independently operated by a snarky
- Michigander and is not affiliated with or endorsed by Kristen
- Jacobs.
+ Disclaimer: This website is independently operated by a{' '}
+
+ snarky Michigander
+ {' '}
+ and is not affiliated with or endorsed by Kristen Jacobs.
© 2025 Cheating Chelsea Exposed. All Rights Reserved.
From b7bcc6e69bd2417255c7233c754fdce1730fe522 Mon Sep 17 00:00:00 2001
From: Derek Slenk
Date: Mon, 30 Jun 2025 09:59:59 -0400
Subject: [PATCH 2/6] Refactor footer into reusable component
- Create Footer component with consistent styling and angrymichigander.com link
- Replace inline footers in all pages (home, long-story, gallery) with Footer component
- Ensure consistent footer content across the entire site
- Add proper link styling with hover effects and security attributes
---
src/app/gallery/page.tsx | 25 ++-----------------------
src/app/long-story/page.tsx | 29 ++++-------------------------
src/app/page.tsx | 32 ++------------------------------
src/components/Footer.tsx | 34 ++++++++++++++++++++++++++++++++++
4 files changed, 42 insertions(+), 78 deletions(-)
create mode 100644 src/components/Footer.tsx
diff --git a/src/app/gallery/page.tsx b/src/app/gallery/page.tsx
index a8172d6..6858799 100644
--- a/src/app/gallery/page.tsx
+++ b/src/app/gallery/page.tsx
@@ -3,6 +3,7 @@ import type { Metadata } from 'next';
import { Button } from '@/components/ui/button';
import Link from 'next/link';
import { ExternalLink } from 'lucide-react';
+import { Footer } from '@/components/Footer';
export const metadata: Metadata = {
title: "Video Gallery - Community Coverage of Chelsea Smallwood",
@@ -130,29 +131,7 @@ export default async function GalleryPage() {
-
-
-
- This website, cheatingchelsea.com, is dedicated to raising
- awareness and supporting the victims.
-
-
- For questions, comments, or concerns, please email:{' '}
-
- notacheater@cheatingchelsea.com
-
-
-
- Disclaimer: This website is independently operated by a snarky
- Michigander and is not affiliated with or endorsed by Kristen
- Jacobs.
-
-
© 2025 Cheating Chelsea Exposed. All Rights Reserved.
-
-
+
);
}
diff --git a/src/app/long-story/page.tsx b/src/app/long-story/page.tsx
index 4ddc904..e3195cd 100644
--- a/src/app/long-story/page.tsx
+++ b/src/app/long-story/page.tsx
@@ -4,10 +4,11 @@ import { Button } from '@/components/ui/button';
import {
Card,
CardContent,
- CardHeader
+ CardDescription,
+ CardHeader,
} from '@/components/ui/card';
import Link from 'next/link';
-
+import { Footer } from '@/components/Footer';
export const metadata: Metadata = {
title: "The Full Story: Chelsea Smallwood's Controversial Empire",
description: "A deep dive into how Chelsea Smallwood built a business on monetizing infidelity, the controversy surrounding 'The Other Woman and the Wife,' and the serious allegations of cyberbullying and harassment in the Kristen Jacobs lawsuit.",
@@ -202,29 +203,7 @@ export default function LongStoryPage() {
-
-
-
- This website, cheatingchelsea.com, is dedicated to raising
- awareness and supporting the victims.
-
-
- For questions, comments, or concerns, please email:{' '}
-
- notacheater@cheatingchelsea.com
-
-
-
- Disclaimer: This website is independently operated by a snarky
- Michigander and is not affiliated with or endorsed by Kristen
- Jacobs.
-
-
© 2025 Cheating Chelsea Exposed. All Rights Reserved.
-
-
+
);
}
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 7a79611..5bbe6eb 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -8,6 +8,7 @@ import {
CardHeader,
} from '@/components/ui/card';
import Link from 'next/link';
+import { Footer } from '@/components/Footer';
export default function Home() {
return (
@@ -176,36 +177,7 @@ export default function Home() {
-
-
-
- This website, cheatingchelsea.com, is dedicated to raising
- awareness and supporting the victims.
-
-
- For questions, comments, or concerns, please email:{' '}
-
- notacheater@cheatingchelsea.com
-
-
-
- Disclaimer: This website is independently operated by a{' '}
-
- snarky Michigander
- {' '}
- and is not affiliated with or endorsed by Kristen Jacobs.
-
-
© 2025 Cheating Chelsea Exposed. All Rights Reserved.
-
-
+
);
}
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
new file mode 100644
index 0000000..6e42a93
--- /dev/null
+++ b/src/components/Footer.tsx
@@ -0,0 +1,34 @@
+export function Footer() {
+ return (
+
+
+
+ This website, cheatingchelsea.com, is dedicated to raising
+ awareness and supporting the victims.
+
+
+ For questions, comments, or concerns, please email:{' '}
+
+ notacheater@cheatingchelsea.com
+
+
+
+ Disclaimer: This website is independently operated by a{' '}
+
+ snarky Michigander
+ {' '}
+ and is not affiliated with or endorsed by Kristen Jacobs.
+
+
© 2025 Cheating Chelsea Exposed. All Rights Reserved.
+
+
+ );
+}
From 09f78df1daa02e4172a9319adfc3cd6ee4e294f7 Mon Sep 17 00:00:00 2001
From: Derek Slenk
Date: Mon, 30 Jun 2025 10:29:25 -0400
Subject: [PATCH 3/6] Fix ESLint error: remove unused CardDescription import
- Remove CardDescription from imports in long-story page
- Component was imported but never used, causing linting error
- All ESLint warnings now resolved
---
src/app/long-story/page.tsx | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/app/long-story/page.tsx b/src/app/long-story/page.tsx
index e3195cd..ae87d10 100644
--- a/src/app/long-story/page.tsx
+++ b/src/app/long-story/page.tsx
@@ -4,7 +4,6 @@ import { Button } from '@/components/ui/button';
import {
Card,
CardContent,
- CardDescription,
CardHeader,
} from '@/components/ui/card';
import Link from 'next/link';
From b2475a845cc9850a87be14aa7d2ac493bb1154f9 Mon Sep 17 00:00:00 2001
From: Derek Slenk
Date: Mon, 30 Jun 2025 11:17:35 -0400
Subject: [PATCH 4/6] feat: add pre-commit hook to enforce linting
- Install husky for git hook management
- Add pre-commit hook that runs 'npm run lint'
- Ensures all commits pass linting before being allowed
---
.husky/pre-commit | 1 +
package-lock.json | 21 ++++++-
package.json | 156 +++++++++++++++++++++++-----------------------
3 files changed, 100 insertions(+), 78 deletions(-)
create mode 100644 .husky/pre-commit
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100644
index 0000000..3867a0f
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1 @@
+npm run lint
diff --git a/package-lock.json b/package-lock.json
index 9dcbf23..2313aca 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -59,9 +59,10 @@
"aws-cdk-lib": "^2.189.1",
"constructs": "^10.4.2",
"esbuild": "^0.25.5",
- "eslint": "9.30.0",
+ "eslint": "^9.30.0",
"eslint-config-next": "15.3.4",
"genkit-cli": "^1.13.0",
+ "husky": "^9.1.7",
"postcss": "^8",
"tailwindcss": "^3.4.1",
"tsx": "^4.20.3",
@@ -6355,6 +6356,8 @@
},
"node_modules/eslint": {
"version": "9.30.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.0.tgz",
+ "integrity": "sha512-iN/SiPxmQu6EVkf+m1qpBxzUhE12YqFLOSySuOyVLJLEF9nzTf+h/1AJYc1JWzCnktggeNrjvQGLngDzXirU6g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8044,6 +8047,22 @@
"node": ">= 14"
}
},
+ "node_modules/husky": {
+ "version": "9.1.7",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz",
+ "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "husky": "bin.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/typicode"
+ }
+ },
"node_modules/iconv-lite": {
"version": "0.4.24",
"license": "MIT",
diff --git a/package.json b/package.json
index 9926325..7b72e0b 100644
--- a/package.json
+++ b/package.json
@@ -1,77 +1,79 @@
-{
- "name": "nextn",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "dev": "next dev --turbopack -p 9002",
- "genkit:dev": "genkit start -- tsx src/ai/dev.ts",
- "genkit:watch": "genkit start -- tsx --watch src/ai/dev.ts",
- "build": "next build",
- "build:static": "next build",
- "start": "next start",
- "lint": "next lint",
- "typecheck": "tsc --noEmit",
- "deploy:s3": "npm run build:static && aws s3 sync out/ s3://$S3_BUCKET_NAME --delete --no-cli-pager",
- "create-s3-bucket": "node scripts/create-s3-bucket.js"
- },
- "dependencies": {
- "@genkit-ai/googleai": "^1.13.0",
- "@genkit-ai/next": "^1.13.0",
- "@hookform/resolvers": "^4.1.3",
- "@radix-ui/react-accordion": "^1.2.3",
- "@radix-ui/react-alert-dialog": "^1.1.6",
- "@radix-ui/react-avatar": "^1.1.3",
- "@radix-ui/react-checkbox": "^1.1.4",
- "@radix-ui/react-collapsible": "^1.1.11",
- "@radix-ui/react-dialog": "^1.1.6",
- "@radix-ui/react-dropdown-menu": "^2.1.6",
- "@radix-ui/react-label": "^2.1.2",
- "@radix-ui/react-menubar": "^1.1.6",
- "@radix-ui/react-popover": "^1.1.6",
- "@radix-ui/react-progress": "^1.1.2",
- "@radix-ui/react-radio-group": "^1.2.3",
- "@radix-ui/react-scroll-area": "^1.2.3",
- "@radix-ui/react-select": "^2.1.6",
- "@radix-ui/react-separator": "^1.1.2",
- "@radix-ui/react-slider": "^1.2.3",
- "@radix-ui/react-slot": "^1.2.3",
- "@radix-ui/react-switch": "^1.1.3",
- "@radix-ui/react-tabs": "^1.1.3",
- "@radix-ui/react-toast": "^1.2.6",
- "@radix-ui/react-tooltip": "^1.1.8",
- "class-variance-authority": "^0.7.1",
- "clsx": "^2.1.1",
- "date-fns": "^3.6.0",
- "dotenv": "^16.5.0",
- "embla-carousel-react": "^8.6.0",
- "firebase": "^11.9.1",
- "genkit": "^1.13.0",
- "lucide-react": "^0.475.0",
- "next": "15.3.3",
- "next-themes": "^0.3.0",
- "patch-package": "^8.0.0",
- "react": "^18.3.1",
- "react-day-picker": "^8.10.1",
- "react-dom": "^18.3.1",
- "react-hook-form": "^7.54.2",
- "recharts": "^2.15.1",
- "tailwind-merge": "^3.0.1",
- "tailwindcss-animate": "^1.0.7",
- "zod": "^3.24.2"
- },
- "devDependencies": {
- "@types/node": "^20",
- "@types/react": "^18",
- "@types/react-dom": "^18",
- "aws-cdk-lib": "^2.189.1",
- "constructs": "^10.4.2",
- "esbuild": "^0.25.5",
- "eslint": "9.30.0",
- "eslint-config-next": "15.3.4",
- "genkit-cli": "^1.13.0",
- "postcss": "^8",
- "tailwindcss": "^3.4.1",
- "tsx": "^4.20.3",
- "typescript": "^5.8.3"
- }
-}
+{
+ "name": "nextn",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "dev": "next dev --turbopack -p 9002",
+ "genkit:dev": "genkit start -- tsx src/ai/dev.ts",
+ "genkit:watch": "genkit start -- tsx --watch src/ai/dev.ts",
+ "build": "next build",
+ "build:static": "next build",
+ "start": "next start",
+ "lint": "next lint",
+ "typecheck": "tsc --noEmit",
+ "deploy:s3": "npm run build:static && aws s3 sync out/ s3://$S3_BUCKET_NAME --delete --no-cli-pager",
+ "create-s3-bucket": "node scripts/create-s3-bucket.js",
+ "prepare": "husky"
+ },
+ "dependencies": {
+ "@genkit-ai/googleai": "^1.13.0",
+ "@genkit-ai/next": "^1.13.0",
+ "@hookform/resolvers": "^4.1.3",
+ "@radix-ui/react-accordion": "^1.2.3",
+ "@radix-ui/react-alert-dialog": "^1.1.6",
+ "@radix-ui/react-avatar": "^1.1.3",
+ "@radix-ui/react-checkbox": "^1.1.4",
+ "@radix-ui/react-collapsible": "^1.1.11",
+ "@radix-ui/react-dialog": "^1.1.6",
+ "@radix-ui/react-dropdown-menu": "^2.1.6",
+ "@radix-ui/react-label": "^2.1.2",
+ "@radix-ui/react-menubar": "^1.1.6",
+ "@radix-ui/react-popover": "^1.1.6",
+ "@radix-ui/react-progress": "^1.1.2",
+ "@radix-ui/react-radio-group": "^1.2.3",
+ "@radix-ui/react-scroll-area": "^1.2.3",
+ "@radix-ui/react-select": "^2.1.6",
+ "@radix-ui/react-separator": "^1.1.2",
+ "@radix-ui/react-slider": "^1.2.3",
+ "@radix-ui/react-slot": "^1.2.3",
+ "@radix-ui/react-switch": "^1.1.3",
+ "@radix-ui/react-tabs": "^1.1.3",
+ "@radix-ui/react-toast": "^1.2.6",
+ "@radix-ui/react-tooltip": "^1.1.8",
+ "class-variance-authority": "^0.7.1",
+ "clsx": "^2.1.1",
+ "date-fns": "^3.6.0",
+ "dotenv": "^16.5.0",
+ "embla-carousel-react": "^8.6.0",
+ "firebase": "^11.9.1",
+ "genkit": "^1.13.0",
+ "lucide-react": "^0.475.0",
+ "next": "15.3.3",
+ "next-themes": "^0.3.0",
+ "patch-package": "^8.0.0",
+ "react": "^18.3.1",
+ "react-day-picker": "^8.10.1",
+ "react-dom": "^18.3.1",
+ "react-hook-form": "^7.54.2",
+ "recharts": "^2.15.1",
+ "tailwind-merge": "^3.0.1",
+ "tailwindcss-animate": "^1.0.7",
+ "zod": "^3.24.2"
+ },
+ "devDependencies": {
+ "@types/node": "^20",
+ "@types/react": "^18",
+ "@types/react-dom": "^18",
+ "aws-cdk-lib": "^2.189.1",
+ "constructs": "^10.4.2",
+ "esbuild": "^0.25.5",
+ "eslint": "^9.30.0",
+ "eslint-config-next": "15.3.4",
+ "genkit-cli": "^1.13.0",
+ "husky": "^9.1.7",
+ "postcss": "^8",
+ "tailwindcss": "^3.4.1",
+ "tsx": "^4.20.3",
+ "typescript": "^5.8.3"
+ }
+}
From 4a0b9e95e48f4bc00e1be44a268e9cd069a63281 Mon Sep 17 00:00:00 2001
From: Derek Slenk
Date: Mon, 30 Jun 2025 11:18:59 -0400
Subject: [PATCH 5/6] Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---
src/components/Footer.tsx | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
index 6e42a93..ba59303 100644
--- a/src/components/Footer.tsx
+++ b/src/components/Footer.tsx
@@ -22,12 +22,13 @@ export function Footer() {
className="text-primary hover:underline"
target="_blank"
rel="noopener noreferrer"
+ aria-label="snarky Michigander (opens in a new tab)"
>
snarky Michigander
{' '}
and is not affiliated with or endorsed by Kristen Jacobs.
- © 2025 Cheating Chelsea Exposed. All Rights Reserved.
+ © {new Date().getFullYear()} Cheating Chelsea Exposed. All Rights Reserved.
);
From dba7d7a1a780fe03d0d5aa8fbac12937bc787f7f Mon Sep 17 00:00:00 2001
From: Derek Slenk
Date: Mon, 30 Jun 2025 11:21:50 -0400
Subject: [PATCH 6/6] Update package.json
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 7b72e0b..ba9698a 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,7 @@
"typecheck": "tsc --noEmit",
"deploy:s3": "npm run build:static && aws s3 sync out/ s3://$S3_BUCKET_NAME --delete --no-cli-pager",
"create-s3-bucket": "node scripts/create-s3-bucket.js",
- "prepare": "husky"
+ "prepare": "husky install"
},
"dependencies": {
"@genkit-ai/googleai": "^1.13.0",