Skip to content

Commit 64576c8

Browse files
Major package updates (#52)
* ⬆️ Upgrade dependency remark-gfm to v4 * ⬆️ Upgrade dependency mdx-bundler to v10 * ⬆️ Upgrade nextjs monorepo to v14 * ⬆️ Upgrade dependency husky to v9 * ⬆️ Upgrade dependency shiki to v1 * ⬆️ Upgrade typescript-eslint monorepo to v7 * ⬆️ Upgrade dependency rehype-pretty-code to ^0.13.0 * chore: package lock * fix: contentlayer nextjs 14 * fix: next-themes provider * fix: contentlayer mdx fix * fix: use metadata base * fix: metadata type * fix: contentlayer temp * fix: small fixes * fix: layout changes * :doc: update projects * chore: run prettier * chore: tailwind linter * fix: youtube accessibility --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1 parent fb7576d commit 64576c8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+7501
-4107
lines changed

.eslintrc.js

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ module.exports = {
1313
"plugin:@typescript-eslint/eslint-recommended",
1414
"plugin:@typescript-eslint/recommended",
1515
"plugin:jsx-a11y/recommended",
16+
"plugin:tailwindcss/recommended",
1617
"next",
1718
"next/core-web-vitals",
1819
"prettier",
@@ -33,5 +34,7 @@ module.exports = {
3334
"@typescript-eslint/explicit-module-boundary-types": "off",
3435
"@typescript-eslint/no-var-requires": "off",
3536
"@typescript-eslint/ban-ts-comment": "off",
37+
"tailwindcss/no-custom-classname": "off",
38+
"tailwindcss/classnames-order": "error",
3639
},
3740
}

app/[...slug]/page.tsx

-5
This file was deleted.

app/about/page.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export default function About() {
2929
twitter,
3030
linkedin,
3131
github,
32-
youtube
32+
youtube,
3333
} = author
3434

3535
return (

app/blog/[...slug]/page.tsx

+9-11
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import Tag from "@/components/tag"
2121
import { coreContent, sortedBlogPost } from "../../../lib/contentlayer"
2222

2323
const editUrl = (path: string) =>
24-
`${siteMetadata.siteRepo}/blob/master/data/${path}`
24+
`${siteMetadata.siteRepo}/blob/main/data/${path}`
2525
const discussUrl = (path: string) =>
2626
`https://twitter.com/intent/tweet?text=${encodeURIComponent(
2727
`${siteMetadata.siteUrl}/${path}`
@@ -83,12 +83,10 @@ export async function generateMetadata({
8383

8484
const post = details.post
8585

86-
const url = siteMetadata.siteUrl
87-
88-
const ogUrl = new URL(`${url}/api/og`)
89-
ogUrl.searchParams.set("heading", post.title)
90-
ogUrl.searchParams.set("type", "Blog Post")
91-
ogUrl.searchParams.set("mode", "dark")
86+
const ogParams = new URLSearchParams()
87+
ogParams.set("heading", post.title)
88+
ogParams.set("type", "Blog Post")
89+
ogParams.set("mode", "dark")
9290

9391
return {
9492
title: post.title,
@@ -97,16 +95,16 @@ export async function generateMetadata({
9795
name: author,
9896
})),
9997
alternates: {
100-
canonical: `${siteMetadata.siteUrl}/blog/${post.slug}`,
98+
canonical: `/blog/${post.slug}`,
10199
},
102100
openGraph: {
103101
title: post.title,
104102
description: post.summary,
105103
type: "article",
106-
url: `${siteMetadata.siteUrl}/blog/${post.slug}`,
104+
url: `/blog/${post.slug}`,
107105
images: [
108106
{
109-
url: ogUrl.toString(),
107+
url: `/api/og?${ogParams.toString()}`,
110108
width: 1200,
111109
height: 630,
112110
alt: post.title,
@@ -117,7 +115,7 @@ export async function generateMetadata({
117115
card: "summary_large_image",
118116
title: post.title,
119117
description: post.summary,
120-
images: [ogUrl.toString()],
118+
images: [`/api/og?${ogParams.toString()}`],
121119
},
122120
}
123121
}

app/layout.tsx

+21-17
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import "@/styles/tailwind.css"
22

3+
import { Metadata, Viewport } from "next"
34
import { Inter } from "next/font/google"
45
import localFont from "next/font/local"
56

6-
import { ServerThemeProvider } from "next-themes"
7-
87
import siteMetadata from "@/config/site-metadata"
98

109
import Analytics from "@/components/analytics"
1110
import Footer from "@/components/footer"
1211
import Nav from "@/components/nav"
12+
import { Providers } from "@/components/providers"
1313

1414
const inter = Inter({
1515
subsets: ["latin"],
@@ -23,11 +23,14 @@ const jetbrains = localFont({
2323
display: "swap",
2424
})
2525

26-
export const metadata = {
26+
export const metadata: Metadata = {
2727
title: {
2828
default: siteMetadata.title,
2929
template: `%s | ${siteMetadata.title}`,
3030
},
31+
metadataBase: new URL(
32+
process.env.NEXT_PUBLIC_APP_URL ?? siteMetadata.siteUrl
33+
),
3134
description: siteMetadata.description,
3235
keywords: [
3336
"Next.js",
@@ -44,10 +47,6 @@ export const metadata = {
4447
},
4548
],
4649
creator: "James Shopland",
47-
themeColor: [
48-
{ media: "(prefers-color-scheme: light)", color: "white" },
49-
{ media: "(prefers-color-scheme: dark)", color: "black" },
50-
],
5150
openGraph: {
5251
type: "website",
5352
locale: "en_GB",
@@ -57,7 +56,7 @@ export const metadata = {
5756
siteName: siteMetadata.title,
5857
images: [
5958
{
60-
url: `${siteMetadata.siteUrl}/og.jpg`,
59+
url: `/og.jpg`,
6160
width: 1200,
6261
height: 630,
6362
alt: siteMetadata.title,
@@ -68,35 +67,40 @@ export const metadata = {
6867
card: "summary_large_image",
6968
title: siteMetadata.title,
7069
description: siteMetadata.description,
71-
images: [`${siteMetadata.siteUrl}/og.png`],
70+
images: [`/og.png`],
7271
creator: "@jollyshopland",
7372
},
7473
icons: {
7574
icon: "/favicon.ico",
7675
shortcut: "/favicon-16x16.png",
7776
apple: "/apple-touch-icon.png",
7877
},
79-
manifest: `${siteMetadata.siteUrl}/site.webmanifest`,
78+
manifest: `/site.webmanifest`,
8079
}
8180

81+
export const viewport: Viewport = {
82+
themeColor: [
83+
{ media: "(prefers-color-scheme: light)", color: "white" },
84+
{ media: "(prefers-color-scheme: dark)", color: "black" },
85+
],
86+
}
8287
interface RootLayoutProps {
8388
children: React.ReactNode
8489
}
8590

8691
export default function RootLayout({ children }: RootLayoutProps) {
8792
return (
88-
<ServerThemeProvider attribute="class" defaultTheme={siteMetadata.theme}>
89-
<html lang="en" className={`${inter.variable} ${jetbrains.variable} `}>
90-
<head />
91-
<body className="min-h-screen bg-white px-[5vw] dark:bg-black">
93+
<html lang="en" className={`${inter.variable} ${jetbrains.variable} `}>
94+
<body className="min-h-screen bg-white px-[5vw] dark:bg-black">
95+
<Providers>
9296
<div className="flex min-h-screen flex-col">
9397
<Nav />
9498
<main className="flex-1">{children}</main>
9599
<Footer />
96100
<Analytics />
97101
</div>
98-
</body>
99-
</html>
100-
</ServerThemeProvider>
102+
</Providers>
103+
</body>
104+
</html>
101105
)
102106
}

components/coding-timeline.tsx

+19-19
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ export function CodingTimeline() {
22
return (
33
<ol className="relative ml-3 !list-none border-l border-gray-200 dark:border-gray-700">
44
<li className="mb-10 ml-8">
5-
<span className="absolute -left-3 flex h-6 w-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 dark:bg-blue-600 dark:ring-gray-900">
5+
<span className="absolute -left-3 flex size-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 dark:bg-blue-600 dark:ring-gray-900">
66
<svg
77
aria-hidden="true"
8-
className="h-4 w-4 text-blue-300 dark:text-blue-300"
8+
className="size-4 text-blue-300 dark:text-blue-300"
99
fill="currentColor"
1010
viewBox="0 0 16 16"
1111
xmlns="http://www.w3.org/2000/svg"
@@ -17,9 +17,9 @@ export function CodingTimeline() {
1717
<h3 className="mb-1 flex flex-col items-start text-lg font-semibold text-gray-900 dark:text-white sm:flex-row sm:items-center">
1818
Software Engineer - Frontend Focused
1919
<span className="relative my-2 mr-2 flex min-w-[105px] items-center rounded bg-blue-600 px-2.5 py-0.5 text-sm font-medium text-white dark:bg-blue-600 dark:text-white sm:my-0 sm:ml-3">
20-
<span className="relative mr-2 flex h-3 w-3">
21-
<span className="absolute inline-flex h-full w-full animate-ping rounded-full bg-lime-400 opacity-75"></span>
22-
<span className="relative inline-flex h-3 w-3 rounded-full bg-lime-500"></span>
20+
<span className="relative mr-2 flex size-3">
21+
<span className="absolute inline-flex size-full animate-ping rounded-full bg-lime-400 opacity-75"></span>
22+
<span className="relative inline-flex size-3 rounded-full bg-lime-500"></span>
2323
</span>
2424
Current Role
2525
</span>
@@ -35,10 +35,10 @@ export function CodingTimeline() {
3535
</p>
3636
</li>
3737
<li className="mb-10 ml-8">
38-
<span className="absolute -left-3 flex h-6 w-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 dark:bg-blue-600 dark:ring-gray-900">
38+
<span className="absolute -left-3 flex size-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 dark:bg-blue-600 dark:ring-gray-900">
3939
<svg
4040
aria-hidden="true"
41-
className="h-4 w-4 text-blue-300 dark:text-blue-300"
41+
className="size-4 text-blue-300 dark:text-blue-300"
4242
fill="currentColor"
4343
viewBox="0 0 16 16"
4444
xmlns="http://www.w3.org/2000/svg"
@@ -61,10 +61,10 @@ export function CodingTimeline() {
6161
</p>
6262
</li>
6363
<li className="mb-10 ml-8">
64-
<span className="absolute -left-3 flex h-6 w-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 ring-white dark:bg-blue-600 dark:ring-gray-900">
64+
<span className="absolute -left-3 flex size-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 dark:bg-blue-600 dark:ring-gray-900">
6565
<svg
6666
aria-hidden="true"
67-
className="h-4 w-4 text-blue-300 dark:text-blue-300"
67+
className="size-4 text-blue-300 dark:text-blue-300"
6868
fill="currentColor"
6969
viewBox="0 0 16 16"
7070
xmlns="http://www.w3.org/2000/svg"
@@ -86,10 +86,10 @@ export function CodingTimeline() {
8686
</p>
8787
</li>
8888
<li className="mb-10 ml-8">
89-
<span className="absolute -left-3 flex h-6 w-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 ring-white dark:bg-blue-600 dark:ring-gray-900">
89+
<span className="absolute -left-3 flex size-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 dark:bg-blue-600 dark:ring-gray-900">
9090
<svg
9191
aria-hidden="true"
92-
className="h-4 w-4 text-blue-300 dark:text-blue-300"
92+
className="size-4 text-blue-300 dark:text-blue-300"
9393
fill="currentColor"
9494
viewBox="0 0 16 16"
9595
xmlns="http://www.w3.org/2000/svg"
@@ -112,10 +112,10 @@ export function CodingTimeline() {
112112
</p>
113113
</li>
114114
<li className="mb-10 ml-8">
115-
<span className="absolute -left-3 flex h-6 w-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 ring-white dark:bg-blue-600 dark:ring-gray-900">
115+
<span className="absolute -left-3 flex size-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 dark:bg-blue-600 dark:ring-gray-900">
116116
<svg
117117
aria-hidden="true"
118-
className="h-4 w-4 text-blue-300 dark:text-blue-300"
118+
className="size-4 text-blue-300 dark:text-blue-300"
119119
fill="currentColor"
120120
viewBox="0 0 16 16"
121121
xmlns="http://www.w3.org/2000/svg"
@@ -138,10 +138,10 @@ export function CodingTimeline() {
138138
</p>
139139
</li>
140140
<li className="mb-10 ml-8">
141-
<span className="absolute -left-3 flex h-6 w-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 ring-white dark:bg-blue-600 dark:ring-gray-900">
141+
<span className="absolute -left-3 flex size-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 dark:bg-blue-600 dark:ring-gray-900">
142142
<svg
143143
aria-hidden="true"
144-
className="h-4 w-4 text-blue-300 dark:text-blue-300"
144+
className="size-4 text-blue-300 dark:text-blue-300"
145145
fill="currentColor"
146146
viewBox="0 0 16 16"
147147
xmlns="http://www.w3.org/2000/svg"
@@ -164,10 +164,10 @@ export function CodingTimeline() {
164164
</p>
165165
</li>
166166
<li className="mb-10 ml-8">
167-
<span className="absolute -left-3 flex h-6 w-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 ring-white dark:bg-blue-600 dark:ring-gray-900">
167+
<span className="absolute -left-3 flex size-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 dark:bg-blue-600 dark:ring-gray-900">
168168
<svg
169169
aria-hidden="true"
170-
className="h-4 w-4 text-blue-300 dark:text-blue-300"
170+
className="size-4 text-blue-300 dark:text-blue-300"
171171
fill="currentColor"
172172
viewBox="0 0 16 16"
173173
xmlns="http://www.w3.org/2000/svg"
@@ -191,10 +191,10 @@ export function CodingTimeline() {
191191
</p>
192192
</li>
193193
<li className="ml-8">
194-
<span className="absolute -left-3 flex h-6 w-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 ring-white dark:bg-blue-600 dark:ring-gray-900">
194+
<span className="absolute -left-3 flex size-6 items-center justify-center rounded-full bg-blue-600 ring-8 ring-gray-100 dark:bg-blue-600 dark:ring-gray-900">
195195
<svg
196196
aria-hidden="true"
197-
className="h-4 w-4 text-blue-300 dark:text-blue-300"
197+
className="size-4 text-blue-300 dark:text-blue-300"
198198
fill="currentColor"
199199
viewBox="0 0 16 16"
200200
xmlns="http://www.w3.org/2000/svg"

components/comments/index.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const Comments = () => {
3535

3636
return (
3737
<div
38-
className="pb-6 pt-6 text-center text-gray-700 dark:text-gray-300"
38+
className="py-6 text-center text-gray-700 dark:text-gray-300"
3939
id="comment"
4040
ref={ref}
4141
>

components/dark-mode-button.tsx

+6-6
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { GlowDiv } from "./glow-div"
99

1010
const LightIcon = () => (
1111
<span
12-
className="absolute inset-0 top-1 rotate-90 transform transition duration-1000 motion-reduce:duration-[0s] dark:rotate-0 "
12+
className="absolute inset-0 top-1 rotate-90 transition duration-1000 motion-reduce:duration-0 dark:rotate-0"
1313
style={{ transformOrigin: "50% 100px" }}
1414
>
1515
<svg
@@ -18,7 +18,7 @@ const LightIcon = () => (
1818
viewBox="0 0 24 24"
1919
strokeWidth={1.5}
2020
stroke="currentColor"
21-
className="mx-auto h-6 w-6"
21+
className="mx-auto size-6"
2222
>
2323
<path
2424
strokeLinecap="round"
@@ -31,7 +31,7 @@ const LightIcon = () => (
3131

3232
const DarkIcon = () => (
3333
<span
34-
className="absolute inset-0 top-1 rotate-0 transform transition duration-1000 motion-reduce:duration-[0s] dark:-rotate-90 "
34+
className="absolute inset-0 top-1 rotate-0 transition duration-1000 motion-reduce:duration-0 dark:-rotate-90"
3535
style={{ transformOrigin: "50% 100px" }}
3636
>
3737
<svg
@@ -40,7 +40,7 @@ const DarkIcon = () => (
4040
viewBox="0 0 24 24"
4141
strokeWidth={1.5}
4242
stroke="currentColor"
43-
className="mx-auto h-6 w-6"
43+
className="mx-auto size-6"
4444
>
4545
<path
4646
strokeLinecap="round"
@@ -63,7 +63,7 @@ const DarkModeSwitch = ({ variant = "icon" }: DarkModeSwitchProps) => {
6363

6464
return (
6565
<GlowDiv>
66-
<div className="rounded bg-gray-800 p-[1px] leading-[0] hover:bg-gradient-to-r hover:from-blue-600 hover:to-cyan-600 dark:bg-gray-200">
66+
<div className="rounded bg-gray-800 p-px leading-[0] hover:bg-gradient-to-r hover:from-blue-600 hover:to-cyan-600 dark:bg-gray-200">
6767
<button
6868
onClick={() =>
6969
setTheme(
@@ -76,7 +76,7 @@ const DarkModeSwitch = ({ variant = "icon" }: DarkModeSwitchProps) => {
7676
)}
7777
>
7878
{clientLoaded && (
79-
<div className="relative h-8 w-8">
79+
<div className="relative size-8">
8080
<LightIcon />
8181
<DarkIcon />
8282
</div>

components/floating-buttons.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const ScrollTopAndComment = () => {
3535
onClick={handleScrollToComment}
3636
className="rounded-full bg-gray-200 p-2 text-gray-500 transition-all hover:bg-gray-300 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"
3737
>
38-
<svg className="h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
38+
<svg className="size-5" viewBox="0 0 20 20" fill="currentColor">
3939
<path
4040
fillRule="evenodd"
4141
d="M18 10c0 3.866-3.582 7-8 7a8.841 8.841 0 01-4.083-.98L2 17l1.338-3.123C2.493 12.767 2 11.434 2 10c0-3.866 3.582-7 8-7s8 3.134 8 7zM7 9H5v2h2V9zm8 0h-2v2h2V9zM9 9h2v2H9V9z"
@@ -49,7 +49,7 @@ const ScrollTopAndComment = () => {
4949
onClick={handleScrollTop}
5050
className="rounded-full bg-gray-200 p-2 text-gray-500 transition-all hover:bg-gray-300 dark:bg-gray-700 dark:text-gray-400 dark:hover:bg-gray-600"
5151
>
52-
<svg className="h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
52+
<svg className="size-5" viewBox="0 0 20 20" fill="currentColor">
5353
<path
5454
fillRule="evenodd"
5555
d="M3.293 9.707a1 1 0 010-1.414l6-6a1 1 0 011.414 0l6 6a1 1 0 01-1.414 1.414L11 5.414V17a1 1 0 11-2 0V5.414L4.707 9.707a1 1 0 01-1.414 0z"

0 commit comments

Comments
 (0)