diff --git a/.gitignore b/.gitignore
index 7104833..eb257d9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -49,4 +49,8 @@ node_modules
# Postgres
postgres-data
+website-next-postgres-data
data/GeoLite2-Country.mmdb
+
+# Website OG images (stored in DB)
+public/website-og-images/
diff --git a/app/about/page.mdx b/app/about/page.mdx
index 8a5ba3e..b70a06d 100644
--- a/app/about/page.mdx
+++ b/app/about/page.mdx
@@ -1,4 +1,5 @@
import { formatDistanceToNowStrict } from 'date-fns'
+import Link from 'next/link'
export const birthDay = new Date('22 Jul 1991')
export const yearsOld = formatDistanceToNowStrict(birthDay, {
@@ -36,6 +37,8 @@ I've been writing on this website since 2017 (which is 7 years at the time of wr
although I have changed the domain name once in 2022 when I got married and took on my
wife's last name.
+I also enjoy discovering other people's websites and exploring them. I maintain a list of Websites I like.
+
## Colophon
This site is built with Next.js and hosted on Vercel. Content is just
diff --git a/app/websites-i-like/page.tsx b/app/websites-i-like/page.tsx
new file mode 100644
index 0000000..0c63355
--- /dev/null
+++ b/app/websites-i-like/page.tsx
@@ -0,0 +1,98 @@
+import { getAllWebsites, getWebsiteImageMap } from 'data/websites.dto'
+import { getLogger } from 'lib/logger'
+import { ExternalLink } from 'lucide-react'
+import { Metadata } from 'next'
+
+export const metadata: Metadata = {
+ title: 'Websites I Like - Chris Jarling',
+ description: 'A curated collection of websites I enjoy.',
+}
+
+export default async function WebsitesILikePage() {
+ const websites = await getAllWebsites()
+
+ let imageMap: Record = {}
+ try {
+ imageMap = await getWebsiteImageMap()
+ } catch (error) {
+ getLogger()
+ .withError(error as Error)
+ .error('Failed to load website images')
+ }
+
+ const websitesWithImages = websites.map((website) => {
+ let hostname: string
+ try {
+ hostname = new URL(website.entry.url).hostname
+ } catch {
+ hostname = website.entry.url
+ }
+ return {
+ ...website,
+ image: imageMap[website.slug] ?? null,
+ hostname,
+ }
+ })
+
+ return (
+ <>
+
+
Websites I Like
+
+ A list of websites I like for one reason or another. Could be, because
+ I enjoy how they look or are built or what they write about.
+