From f24030844b7f85b39bf3fddef5faaef1b8aecfc1 Mon Sep 17 00:00:00 2001
From: Nick Oates <58091943+n1ckoates@users.noreply.github.com>
Date: Mon, 20 Jul 2026 20:33:16 -0700
Subject: [PATCH 01/13] slop
---
README.md | 9 --
app/about/page.tsx | 125 +++++++++++++-----
app/blog/page-client.tsx | 94 +++++++------
app/blog/page.tsx | 4 +-
app/components/Menu.tsx | 32 ++---
app/components/Navbar.tsx | 18 +--
app/components/NewsletterForm.tsx | 63 ---------
app/components/Orb.tsx | 2 +-
app/components/Prose.tsx | 17 ++-
app/components/Sidebar.tsx | 26 ++--
app/components/SidebarLinks.tsx | 13 +-
app/components/SocialIcons.tsx | 4 +-
app/components/TextInput.tsx | 2 +-
app/components/ThemeSwitch.tsx | 31 -----
app/components/typography.tsx | 31 ++---
app/feed.xml/route.ts | 2 +-
app/globals.css | 13 +-
app/layout.tsx | 21 ++-
app/lib/actions.ts | 47 -------
app/lib/mergeMetadata.ts | 5 +-
app/not-found.tsx | 8 +-
app/page.tsx | 106 +++++++--------
app/projects/page.tsx | 71 ++++++----
bun.lockb | Bin 307973 -> 307508 bytes
.../artificial-intelligence-and-copyright.mdx | 2 -
package.json | 1 -
26 files changed, 333 insertions(+), 414 deletions(-)
delete mode 100644 app/components/NewsletterForm.tsx
delete mode 100644 app/components/ThemeSwitch.tsx
delete mode 100644 app/lib/actions.ts
diff --git a/README.md b/README.md
index 5a999a2..630787b 100644
--- a/README.md
+++ b/README.md
@@ -3,12 +3,3 @@

This is my website, blog, and portfolio. I designed and built it myself using Next.js, Tailwind CSS, TypeScript, and MDX. For more information on the tech stack, see [my initial blog post](https://nickoates.com/blog/rebuilding-my-website). Parts of the design were inspired by [Lee Robinson's website](https://leerob.io) and [Apple's newsroom](https://www.apple.com/newsroom).
-
-## Setting up newsletter subscriptions
-
-I use [Resend](https://resend.com) to manage my newsletter. To setup your own newsletter, create a Resend account (if you haven't already), then add an audience for your newsletter. Generate an API key with full access to your account, and add both the key and audience ID to your `.env.local` file:
-
-```bash
-RESEND_API_KEY=re_yourApiKey
-RESEND_AUDIENCE_ID=your-audience-id
-```
diff --git a/app/about/page.tsx b/app/about/page.tsx
index c481ffe..e3a83ae 100644
--- a/app/about/page.tsx
+++ b/app/about/page.tsx
@@ -4,46 +4,99 @@ import Image from "next/image";
import me from "../../public/images/nick-oates.webp";
import { Orb } from "@/components/Orb";
import { OrbContainer } from "@/components/Orb";
-import { S, CustomLink } from "@/components/typography";
+import { CustomLink } from "@/components/typography";
import { ViewTransition } from "react";
export const metadata = mergeMetadata({
- title: "About",
+ title: "About",
});
export default function About() {
- return (
-
-
-
-
-
-
- About Nick Oates
-
-
-
- Photo of me by AJ Dimke
-
-
-
-
- Hey, I'm Nick Oates , a software engineer with a passion for designing and building cool things on the web. I love obsessing over the small details of my work, and I'm always looking for new things to learn and ways to improve my skills.
-
-
-
-
- I'm a strong believer in internet freedom & privacy, and I believe those values are essential to a healthy, open web. I'm also a big fan of open-source software, reflected in much of my work .
-
-
-
- Outside of tech, I'm an editor of my high school's newspaper, The Benson Orbit , which I helped start in 2024. I cover school news and culture, and handle our digital presence. I'm also the Chief of Music at KBPS , the oldest high school radio station in America, where I help manage the music library, DJ on-air, and write and announce news. I have a lot of fun playing video games, especially with friends, with my favorites being Portal 2 , Minecraft , and Zelda: Skyward Sword , in that order.
-
-
-
- You can follow me on Twitter or check out my code on GitHub to see what I'm working on, or if you'd like to get in touch, send me an email at hey@nickoates.com .
-
-
-
- )
+ return (
+
+
+
+
+
+
+
+ About Nick Oates
+
+
+
+
+
+ Photo by{" "}
+
+ AJ Dimke
+
+
+
+
+
+
+ I'm a software engineer at Vercel, where I work on the{" "}
+ AI SDK . I care
+ about thoughtful developer tools, open-source software, and the small
+ details that make technology feel good to use.
+
+
+
+
+ I'm a strong believer in internet freedom and privacy, and I
+ believe those values are essential to a healthy, open web. They're
+ reflected in much of my work .
+
+
+
+ I graduated from Benson Polytechnic High School in 2026, where I studied
+ radio broadcasting and gave the valedictorian speech. While I was there,
+ I helped start the school newspaper,{" "}
+
+ The Benson Orbit
+
+ , and served as Chief of Music at{" "}
+ KBPS , the oldest high
+ school radio station in America.
+
+
+
+ Outside of work, I like writing and playing video games with friends. My
+ favorites are{" "}
+
+ Portal 2
+
+ ,{" "}
+
+ Minecraft
+
+ , and{" "}
+
+ Zelda: Skyward Sword
+
+ , in that order.
+
+
+
+ You can follow me on{" "}
+ Twitter , see what
+ I'm building on{" "}
+ GitHub , or
+ email me at{" "}
+
+ hey@nickoates.com
+
+ .
+
+
+ );
}
diff --git a/app/blog/page-client.tsx b/app/blog/page-client.tsx
index b06519e..cee8b71 100644
--- a/app/blog/page-client.tsx
+++ b/app/blog/page-client.tsx
@@ -20,9 +20,7 @@ type PartialBlogPost = {
blurDataURL: string;
};
-export function BlogClient(props: {
- posts: PartialBlogPost[];
-}) {
+export function BlogClient(props: { posts: PartialBlogPost[] }) {
const [queryText, setQueryText] = useState("");
const [animationParent] = useAutoAnimate();
@@ -35,70 +33,82 @@ export function BlogClient(props: {
return (
<>
-
+
- Blog Posts
+
+
+ Blog
+
+
+ Notes on software, the web, and things I'm learning.
+
+
-
+
setQueryText(e.target.value)}
/>
-
+
-
+
{!filteredPosts.length && (
-
No posts were found with that search term.
+
+ No posts were found with that search term.
+
)}
{filteredPosts.map(({ post }) => (
-
+
+
+
-
-
-
-
+
+
+
+
{post.date.toLocaleDateString(undefined, {
- dateStyle: "long",
+ month: "short",
+ day: "numeric",
+ year: "numeric",
})}
-
- {post.readingTime} min read
-
+ {" "}
+ • {post.readingTime} min read
+
-
-
-
- {post.title}
-
-
-
- {post.summary}
-
-
+
+
+ {post.title}
+
+
+
+
+ {post.summary}
+
))}
diff --git a/app/blog/page.tsx b/app/blog/page.tsx
index 890cf07..4664607 100644
--- a/app/blog/page.tsx
+++ b/app/blog/page.tsx
@@ -1,8 +1,8 @@
-import { BlogClient } from "./page-client"
+import { BlogClient } from "./page-client";
import allPosts from "@/lib/posts";
import mergeMetadata from "@/lib/mergeMetadata";
-export const metadata = mergeMetadata({ title: "Blog Posts" });
+export const metadata = mergeMetadata({ title: "Blog" });
export default function Blog() {
// Remove unneeded fields from posts before sending them to the client
diff --git a/app/components/Menu.tsx b/app/components/Menu.tsx
index 03449c5..51eb397 100644
--- a/app/components/Menu.tsx
+++ b/app/components/Menu.tsx
@@ -13,18 +13,16 @@ export default function Menu({
open: boolean;
setOpen: (open: boolean) => void;
}) {
- if (typeof window !== "undefined") {
- const main = document.getElementById("main") as HTMLElement;
- const body = document.body;
+ useEffect(() => {
+ const main = document.getElementById("main");
+ main?.toggleAttribute("inert", open);
+ document.body.classList.toggle("overflow-hidden", open);
- if (open) {
- main.inert = true;
- body.classList.add("overflow-hidden");
- } else {
- main.inert = false;
- body.classList.remove("overflow-hidden");
- }
- }
+ return () => {
+ main?.removeAttribute("inert");
+ document.body.classList.remove("overflow-hidden");
+ };
+ }, [open]);
useEffect(() => {
function handleResize() {
@@ -41,7 +39,7 @@ export default function Menu({
aria-label="Toggle navigation"
aria-expanded={open}
onClick={() => setOpen(!open)}
- className="grid size-10 items-center justify-center gap-1.5 rounded-md p-4 transition-colors hover:bg-zinc-300/50 dark:hover:bg-zinc-700/50"
+ className="grid size-8 items-center justify-center gap-1.5 rounded-md p-2 transition-colors hover:bg-zinc-200/70 dark:hover:bg-zinc-800/70"
type="button"
>
-
+
{links.map(({ title, href }) => (
setOpen(false)}
>
-
diff --git a/app/components/Navbar.tsx b/app/components/Navbar.tsx
index 98853f7..9fc8b86 100644
--- a/app/components/Navbar.tsx
+++ b/app/components/Navbar.tsx
@@ -2,7 +2,6 @@
import { useEffect, useState } from "react";
import Menu from "./Menu";
-import ThemeSwitch from "./ThemeSwitch";
import Link from "next/link";
import clsx from "clsx";
@@ -12,21 +11,18 @@ export default function Navbar() {
useEffect(() => {
function handleScroll() {
- if (window.scrollY >= 20) {
- setSolid(true);
- } else {
- setSolid(false);
- }
+ setSolid(window.scrollY >= 20);
}
- window.addEventListener("scroll", handleScroll);
+ handleScroll();
+ window.addEventListener("scroll", handleScroll, { passive: true });
return () => window.removeEventListener("scroll", handleScroll);
}, []);
return (
-
-
Nick Oates
-
+
);
}
diff --git a/app/components/NewsletterForm.tsx b/app/components/NewsletterForm.tsx
deleted file mode 100644
index d683df9..0000000
--- a/app/components/NewsletterForm.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-"use client";
-
-import { IconLoader2, IconMail } from "@tabler/icons-react";
-import clsx from "clsx";
-import { subscribe, type State } from "@/lib/actions";
-import { useActionState } from "react";
-import TextInput from "@/components/TextInput";
-
-export default function NewsletterForm({
- title = "Subscribe to my newsletter",
-}: {
- title?: string;
-}) {
- const [{ message, status }, formAction, isPending] = useActionState<
- State,
- FormData
- >(subscribe, {
- status: "idle",
- message: title,
- });
-
- return (
-
-
- {message}
-
-
-
-
- );
-}
diff --git a/app/components/Orb.tsx b/app/components/Orb.tsx
index b078b36..4780939 100644
--- a/app/components/Orb.tsx
+++ b/app/components/Orb.tsx
@@ -11,7 +11,7 @@ export function OrbContainer({ children }: { children: React.ReactNode }) {
export function Orb({ className }: { className?: string }) {
return (
);
}
diff --git a/app/components/Prose.tsx b/app/components/Prose.tsx
index 7491490..b8556b3 100644
--- a/app/components/Prose.tsx
+++ b/app/components/Prose.tsx
@@ -1,4 +1,13 @@
-export function Prose(props: React.HTMLAttributes
& { as?: React.ElementType }) {
- const Component = props.as || "article";
- return
-}
\ No newline at end of file
+export function Prose({
+ as,
+ ...props
+}: React.HTMLAttributes & { as?: React.ElementType }) {
+ const Component = as || "article";
+
+ return (
+
+ );
+}
diff --git a/app/components/Sidebar.tsx b/app/components/Sidebar.tsx
index e598605..faa1321 100644
--- a/app/components/Sidebar.tsx
+++ b/app/components/Sidebar.tsx
@@ -1,26 +1,24 @@
import Link from "next/link";
-import ThemeSwitch from "./ThemeSwitch";
import SidebarLinks from "@/components/SidebarLinks";
import SocialIcons from "@/components/SocialIcons";
export default function Sidebar() {
return (
-
-
-
-
- Nick Oates
-
-
-
-
+
+
+
+ Nick Oates
+
+
+ Software Engineer
+
-
diff --git a/app/components/SidebarLinks.tsx b/app/components/SidebarLinks.tsx
index 9b7291a..224f2f5 100644
--- a/app/components/SidebarLinks.tsx
+++ b/app/components/SidebarLinks.tsx
@@ -10,21 +10,22 @@ export default function SidebarLinks() {
if (pathname.startsWith("/blog")) pathname = "/blog";
return (
-
+
{links.map((link) => (
-
+
{link.title}
diff --git a/app/components/SocialIcons.tsx b/app/components/SocialIcons.tsx
index 67a4953..4855ca7 100644
--- a/app/components/SocialIcons.tsx
+++ b/app/components/SocialIcons.tsx
@@ -28,13 +28,13 @@ export default function SocialIcons() {
href={social.href}
key={social.href}
className={clsx(
- "group relative rounded-md p-2 text-zinc-700 transition hover:bg-zinc-300/50 dark:text-zinc-300 dark:hover:bg-zinc-700/50",
+ "group relative flex flex-1 items-center justify-center rounded-md p-2 text-zinc-500 hover:bg-zinc-200/70 dark:text-zinc-400 dark:hover:bg-zinc-800/70",
social.color,
)}
title={social.label}
target="_blank"
>
-
+
));
}
diff --git a/app/components/TextInput.tsx b/app/components/TextInput.tsx
index 41a058c..25392c2 100644
--- a/app/components/TextInput.tsx
+++ b/app/components/TextInput.tsx
@@ -8,7 +8,7 @@ export default function TextInput(
type="text"
{...props}
className={clsx(
- "box-border border border-zinc-400/50 bg-white px-4 py-2 placeholder-zinc-500 drop-shadow-xs focus-within:outline-hidden hover:border-zinc-500/50 focus:border-blue-500 dark:border-zinc-600/50 dark:bg-zinc-900 dark:placeholder-zinc-500 dark:hover:border-zinc-500/50 dark:focus:border-blue-500",
+ "box-border border border-zinc-300 bg-white/80 px-3 py-2 placeholder-zinc-500 shadow-xs transition hover:border-zinc-400 focus:border-blue-500 dark:border-zinc-700 dark:bg-zinc-900/80 dark:placeholder-zinc-500 dark:hover:border-zinc-600 dark:focus:border-blue-500",
props.className,
)}
/>
diff --git a/app/components/ThemeSwitch.tsx b/app/components/ThemeSwitch.tsx
deleted file mode 100644
index ce04cb8..0000000
--- a/app/components/ThemeSwitch.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-"use client";
-
-import { useEffect, useState } from "react";
-import { useTheme } from "next-themes";
-import { IconSunFilled, IconMoonFilled } from "@tabler/icons-react";
-
-export default function ThemeSwitch() {
- const [mounted, setMounted] = useState(false);
- const { setTheme, resolvedTheme } = useTheme();
-
- // This is needed to avoid a hydration error
- // eslint-disable-next-line react-hooks/set-state-in-effect
- useEffect(() => setMounted(true), []);
-
- const toggleTheme = () => {
- setTheme(resolvedTheme === "dark" ? "light" : "dark");
- };
- const Icon =
- mounted && resolvedTheme === "dark" ? IconSunFilled : IconMoonFilled;
-
- return (
-
-
-
- );
-}
diff --git a/app/components/typography.tsx b/app/components/typography.tsx
index 6a9334b..f3bd86a 100644
--- a/app/components/typography.tsx
+++ b/app/components/typography.tsx
@@ -1,4 +1,3 @@
-import NewsletterForm from "@/components/NewsletterForm";
import { MDXContent } from "@content-collections/mdx/react";
import Image from "next/image";
import Link from "next/link";
@@ -31,23 +30,20 @@ export async function CustomImage(props: ImageProps & { src: string }) {
);
}
-export function CustomLink(props: { href: string; children: React.ReactNode; className?: string }) {
+export function CustomLink(props: {
+ href: string;
+ children: React.ReactNode;
+ className?: string;
+}) {
if (props.href.startsWith("/")) return
;
if (props.href.startsWith("#")) return
;
return
;
}
-const CustomNewsletterForm = ({
- title = "Like what you're reading?",
-}: {
- title?: string;
-}) => (
-
-
-
-);
-
-export function CustomCode({ children, ...props }: React.HTMLAttributes
& { children: string }) {
+export function CustomCode({
+ children,
+ ...props
+}: React.HTMLAttributes & { children: string }) {
const html = highlight(children);
return ;
}
@@ -86,14 +82,6 @@ export function CustomTweet({ id }: { id: string }) {
);
}
-export async function S({ children }: { children: React.ReactNode }) {
- return (
-
- {children}
-
- );
-}
-
export function CustomMDX({ code }: { code: string }) {
return (
diff --git a/app/feed.xml/route.ts b/app/feed.xml/route.ts
index a19cb8a..d6fad74 100644
--- a/app/feed.xml/route.ts
+++ b/app/feed.xml/route.ts
@@ -7,7 +7,7 @@ export const dynamic = "force-static";
export function GET() {
const feed = new RSS({
title: "Nick Oates",
- description: "I write about tech and other things I find interesting.",
+ description: "Notes on software, the web, and things I'm learning.",
feed_url: `${origin}/feed.xml`,
site_url: origin,
image_url: `${origin}/favicon.ico`,
diff --git a/app/globals.css b/app/globals.css
index b79c4fc..86d14a5 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -1,8 +1,6 @@
@import "tailwindcss";
@plugin "@tailwindcss/typography";
-@custom-variant dark (&:where(.dark, .dark *));
-
@layer base {
*,
::after,
@@ -20,3 +18,14 @@
linear-gradient(to bottom, currentColor 1px, transparent 1px);
background-attachment: fixed;
}
+
+@layer base {
+ ::selection {
+ background: color-mix(in srgb, var(--color-blue-500) 25%, transparent);
+ }
+
+ :focus-visible {
+ outline: 2px solid var(--color-blue-500);
+ outline-offset: 3px;
+ }
+}
diff --git a/app/layout.tsx b/app/layout.tsx
index 95f8502..a054540 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -5,7 +5,6 @@ import Sidebar from "@/components/Sidebar";
import { Analytics } from "@vercel/analytics/react";
import { SpeedInsights } from "@vercel/speed-insights/next";
import mergeMetadata from "@/lib/mergeMetadata";
-import { ThemeProvider } from "next-themes";
export const metadata = mergeMetadata();
@@ -13,7 +12,6 @@ export const viewport = {
themeColor: [
{ media: "(prefers-color-scheme: light)", color: "#fafafa" },
{ media: "(prefers-color-scheme: dark)", color: "#09090b" },
- { color: "#2563eb" },
],
};
@@ -27,21 +25,18 @@ export default function RootLayout({
return (
-
-
+
+
-
-
+
-
+
-
- {children}
-
-
+
+ {children}
+
diff --git a/app/lib/actions.ts b/app/lib/actions.ts
deleted file mode 100644
index 59448ba..0000000
--- a/app/lib/actions.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-"use server";
-
-const { RESEND_API_KEY, RESEND_AUDIENCE_ID } = process.env;
-
-export type State = {
- message: string;
- status: "idle" | "success" | "error";
-};
-
-export async function subscribe(
- prevState: State,
- formData: FormData,
-): Promise {
- if (!RESEND_API_KEY || !RESEND_AUDIENCE_ID) {
- return {
- status: "error",
- message:
- "RESEND_API_KEY or RESEND_AUDIENCE_ID environment variables are not set.",
- };
- }
-
- const email = formData.get("email");
- if (!email || typeof email !== "string") {
- return { status: "error", message: "Please enter an email address." };
- }
-
- const response = await fetch(
- `https://api.resend.com/audiences/${RESEND_AUDIENCE_ID}/contacts`,
- {
- method: "POST",
- headers: {
- Authorization: `Bearer ${RESEND_API_KEY}`,
- "Content-Type": "application/json",
- },
- body: JSON.stringify({ email }),
- },
- );
-
- if (!response.ok) {
- return {
- status: "error",
- message: "Something went wrong, please try again later.",
- };
- }
-
- return { status: "success", message: "Thank you for subscribing!" };
-}
\ No newline at end of file
diff --git a/app/lib/mergeMetadata.ts b/app/lib/mergeMetadata.ts
index b3608ee..b5eb573 100644
--- a/app/lib/mergeMetadata.ts
+++ b/app/lib/mergeMetadata.ts
@@ -1,6 +1,8 @@
import { Metadata } from "next";
+import { origin } from "@/lib/origin";
-const defaultDescription = "I'm Nick Oates, a software engineer with a passion for designing and building cool things on the web. I love obsessing over the small details of my work, and I'm always looking for new things to learn and ways to improve my skills."
+const defaultDescription =
+ "Software engineer at Vercel working on the AI SDK, open-source software, and thoughtful developer tools.";
export default function mergeMetadata({
title,
@@ -14,6 +16,7 @@ export default function mergeMetadata({
imageAlt?: string;
} = {}): Metadata {
return {
+ metadataBase: new URL(origin),
title: title ? `${title} • Nick Oates` : "Nick Oates — Software Engineer",
openGraph: {
siteName: "Nick Oates",
diff --git a/app/not-found.tsx b/app/not-found.tsx
index a51511c..80ff387 100644
--- a/app/not-found.tsx
+++ b/app/not-found.tsx
@@ -12,8 +12,8 @@ export default async function NotFound() {
const photo = await getCatPhoto();
return (
-
-
+
+
404: That page doesn't exist
@@ -26,10 +26,10 @@ export default async function NotFound() {
.
-
+
-
- Hey, I'm Nick Oates , a software engineer with a passion for designing and building cool things on the web. I love obsessing over the small details of my work, and I'm always looking for new things to learn and ways to improve my skills. Read more…
-
+
+
+ Software engineer at Vercel, working on the AI SDK.
+
+
+
+ I care about thoughtful developer tools, open-source software, and
+ the small details that make technology feel good to use.
+
+
+ I recently graduated from Benson Polytechnic High School, where I
+ studied radio broadcasting, helped start a student newspaper, and
+ learned that you can just do things.{" "}
+
+ More about me
+
+
+
+
-
+
- Blog Posts
+
+ Recent writing
+
- View All
+ View all
-
-
-
-
-
-
-
Newsletter
-
- Occasionally, I send out a newsletter to share my thoughts about the
- latest tech news and other things I find interesting — I
- won't spam you, promise!
-
-
>
);
}
function PostGrid() {
- const posts = allPosts.slice(0, 2);
+ const posts = allPosts.slice(0, 4);
return (
-
- {posts.map((post) => (
+
+ {posts.map((post, index) => (
@@ -75,43 +87,31 @@ function PostGrid() {
src={post.cover}
alt={post.coverAlt}
fill
- className="object-cover transition group-hover:scale-105"
- sizes="(max-width: 896px) 100vw, 896px"
- priority
+ className="object-cover transition duration-250 group-hover:scale-[1.05]"
+ sizes="(max-width: 640px) 100vw, (max-width: 896px) 50vw, 600px"
+ priority={index < 2}
placeholder="blur"
blurDataURL={post.blurDataURL}
/>
+
-
-
-
-
+
+
+
{post.date.toLocaleDateString(undefined, {
- dateStyle: "long",
+ month: "short",
+ day: "numeric",
+ year: "numeric",
})}{" "}
• {post.readingTime} min read
-
-
-
-
+
+
{post.title}
-
+
-
- {/* This is a instead of a
because the card itself is a Link */}
-
- Read post
-
))}
diff --git a/app/projects/page.tsx b/app/projects/page.tsx
index bd6d842..0376e78 100644
--- a/app/projects/page.tsx
+++ b/app/projects/page.tsx
@@ -3,10 +3,11 @@ import getBlurDataURL from "@/lib/getBlurDataURL";
import mergeMetadata from "@/lib/mergeMetadata";
import { IconExternalLink } from "@tabler/icons-react";
import Image from "next/image";
+import clsx from "clsx";
export const metadata = mergeMetadata({
title: "Projects",
- description: "Here's a few of the projects I've worked on.",
+ description: "A selection of projects I've designed and built.",
});
interface Project {
@@ -23,7 +24,7 @@ const projects: Record = {
coverAlt: "Quoter's logo, a speech bubble with three dots inside.",
noCrop: true,
description:
- "Quote book for Discord servers, built with Discord.js, MongoDB, and Typescript. The bot allows users to add, remove, edit, and search for quotes. You can also add quotes from Discord messages, or generate images from them. I created the bot, which has grown to over 2,000 servers and 200,000+ users.",
+ "Quote book for Discord servers, built with Discord.js, MongoDB, and TypeScript. The bot allows users to add, remove, edit, and search for quotes. You can also add quotes from Discord messages, or generate images from them. I created the bot, which has grown to over 2,000 servers and 200,000+ users.",
links: {
Website: "https://quoter.cc",
"Source Code": "https://github.com/quoter/quoter",
@@ -67,7 +68,7 @@ const projects: Record = {
cover: "blog.webp",
coverAlt: "Home page of nickoates.com",
description:
- "The site you're on! I built my blog with Next.js, Tailwind CSS, Typescript, and MDX. Hosted on Vercel.",
+ "The site you're on! I built my blog with Next.js, Tailwind CSS, TypeScript, and MDX. Hosted on Vercel.",
links: {
"Source Code": "https://github.com/n1ckoates/blog",
},
@@ -111,21 +112,23 @@ export default function Page() {
- Projects
+
+ Projects
+
-
- Here's a few of the projects I've worked on. To see everything
+
+ Here are a few projects I've designed and built. To see everything
I've contributed to, check out{" "}
my GitHub profile
.
-
+
{Object.entries(projects).map(ProjectCard)}
@@ -138,41 +141,51 @@ export default function Page() {
async function ProjectCard([name, data]: [string, Project]) {
return (
-
{data.cover && data.coverAlt && (
-
+
)}
-
{name}
-
{data.description}
-
- {data.links && (
-
- {Object.entries(data.links).map(([title, href]) => (
-
- {title}
-
- ))}
+
+
+
{name}
+
+ {data.links && (
+
+ {Object.entries(data.links).map(([title, href]) => (
+
+ {title}
+
+ ))}
+
+ )}
- )}
-
+
+
+ {data.description}
+
+
+
);
}
diff --git a/bun.lockb b/bun.lockb
index 43fdd0b4cd29e947f9610ae9a607b1e0f06b7bdf..788774c4f055c696cd0f085df0195ed30b4fe454 100755
GIT binary patch
delta 55924
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
delta 57044
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