385 Commits
Author SHA1 Message Date
jake d6bd6a4702 refactor: simplify comment form state, auth client exports, and feed builder
- Replace CommentFormContext/Provider with a plain `useCommentFormState` hook; the context abstraction was unused outside the file
- Narrow auth-client exports to only `signIn`; `authClient` and `useSession` are no longer exported
- Add `getPosts()` as a canonical sorted-posts helper and use it in `getFrontMatter` and `buildFeed`, removing the redundant sort in the latter
- Drop JSON feed support from `createFeedHandler` since no JSON feed route exists
- Rewrite `FrontMatter` as a `Pick` over the content-collections `Post` type to stay in sync automatically
2026-10-03 09:21:59 -04:00
jakeandClaude Sonnet 5.5 a8c4a0a09e perf: render site header as a server component
Split the scroll shell, home link and theme toggle into small client
components so the contact popover markup and icon SVGs render on the
server instead of shipping in the client bundle.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 08:57:20 -04:00
jakeandClaude Sonnet 5.5 feedd866cc fix: theme toggle no-op on first click in system mode
Use resolvedTheme instead of theme so the toggle flips what is actually displayed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 08:53:05 -04:00
jakeandClaude Sonnet 5.5 6527c7081c perf: fetch session and comments in parallel, pass current user to comment components instead of useSession
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 08:48:15 -04:00
jakeandClaude Sonnet 5.5 6d255ce822 refactor: move read queries into server-only lib/data and render post stats on the server
Reads no longer live in "use server" files (which made them public
endpoints). /notes stats come from one cached query pair rendered on the
server; the post page comment count streams in as a dynamic hole.
revalidateTag("views"/"comments") now invalidates the cached stats.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 08:40:14 -04:00
jakeandClaude Sonnet 5.5 a9091eb4b3 fix: don't cache failed tweet/gist embeds for 30 days
Move cacheLife into the success/failure branches so a transient fetch
failure is retried after ~1 hour instead of being cached for 30 days.
Also catch thrown fetch errors in Gist so they no longer fail the build.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 08:23:37 -04:00
jake a9859215f2 refactor: replace class-variance-authority with cva, centralize in lib/utils 2026-09-26 13:37:40 -04:00
jake ed62c0cd6e feat: change main font to Schibsted Grotesk, adjust sizes 2026-09-26 13:17:25 -04:00
jake 2403842f39 fix: address react-doctor violations 2026-09-26 12:54:00 -04:00
jake f91bcd5dae chore: replace sonner with base-ui toast primitive 2026-08-16 18:28:44 -04:00
jake 38a00cf203 chore: next 16.3, drizzle v1, other cleanup (#2620) 2026-08-16 16:17:10 -04:00
jake c2bf0c610e chore: update to pnpm 11, bump other deps 2026-06-04 11:58:19 -04:00
jake 62d632f909 refactor: replace react-countup with @number-flow/react 2026-04-30 10:36:33 -04:00
jake b2416ff0db refactor: overhaul view transitions with granular per-page animation components
- Replace single `<ViewTransition>` wrapper in layout with `FadeTransition` and `DirectionalTransition` components applied per page
- Add `components/page-transition.tsx` with reusable transition wrappers
- Expand view transition CSS with named classes: fade, slide, nav-forward/back, morph, text-morph, scale — all driven by CSS custom property durations
- Use React `<ViewTransition name=... share="text-morph">` for shared note title element between list and detail views
- Wrap comments suspense boundary with enter/exit slide transitions
- Add `persistent-nav` and `persistent-footer` view-transition-name groups to keep chrome static during navigation
- Fix reduced-motion override to target delay and duration instead of `animation: none`
- Add tracking-tight and letter-spacing tweaks to home page typography
2026-04-25 10:50:31 -04:00
jake 5a3c7b9613 refactor: redesign home page, remove old video pages, migrate to @tailwindcss/typography
- Replace root page with new (home) route featuring a project showcase (Domainstack, Sofa, Versioneer, Snoozle)
- Remove /birthday and /hillary video pages
- Replace custom hand-rolled .prose styles with @tailwindcss/typography via a .markdown utility class
- Remove heading-anchor component and .nvmrc
2026-04-08 15:00:49 -04:00
jake 5a1636baa3 refactor: migrate from Biome to oxlint/oxfmt, remove contact form
- Replace Biome with oxlint + oxfmt (OXC toolchain) for linting and formatting
- Add .oxlintrc.json and .oxfmtrc.json configuration files
- Update VS Code settings and devcontainer to use oxc-vscode extension
- Remove contact form, Resend email integration, and related server action/schema
- Remove unused UI components (accordion, alert, card, tabs, toggle, etc.)
2026-04-05 19:45:18 -04:00
jake b857ab2754 feat: increase GitHub repository limit and enhance styling
- Updated repository limit from 12 to 24 in getRepos function.
- Added new icons and adjusted styles for better visual consistency in the page component.
- Modified text sizes and spacing for improved layout and readability.
2026-02-19 14:44:29 -05:00
jakeandClaude Opus 4.6 6f86fd1ca9 refactor: remove @t3-oss/env-nextjs, use process.env directly
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 14:12:42 -05:00
jake c30197ccc5 refactor: eslint/prettier ➡️ biome 2026-02-19 14:02:03 -05:00
jake 4858c8928c refactor: update font imports and variables
- Replaced GeistSans and GeistMono with Inter and JetBrainsMono in globals.css and layout.tsx.
- Updated font variable names to reflect the new font choices in fonts.ts.
2026-02-19 13:36:13 -05:00
jake 62ebedabf4 fix: update PageTitle component styling
- Changed font weight from 'font-semibold' to 'font-medium' for better visual consistency.
- Added 'not-prose' class to improve layout handling.
- Updated Link component's class to include 'text-foreground' for enhanced visibility.
2026-02-01 10:26:19 -05:00
jakeandClaude Opus 4.5 bcc595e141 refactor: migrate contact form to TanStack Form
- Replace manual state management with @tanstack/react-form
- Add proper Field/FieldLabel components for accessibility
- Simplify server action (remove useActionState signature)
- Remove use-debounce dependency
- Update PGP key links and minor styling tweaks

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 22:08:54 -05:00
jakeandClaude Opus 4.5 013311a618 fix: improve accessibility across components
- Add aria-hidden to decorative SVG icons
- Add title attributes to iframe embeds (CodePen, Gist, YouTube)
- Add aria-labels to comment form textareas
- Use proper button element for Markdown help popover trigger
- Use proper ellipsis character in placeholders

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 21:38:39 -05:00
jake cd57a9c4dd refactor: convert Tweet and Gist to cache components 2026-01-29 21:24:44 -05:00
jake 74be4382a9 refactor: improve comment components and enhance styling
- Refactored CommentActions to use a state machine for managing action modes (replying, editing, deleting).
- Introduced CommentAvatar component for better avatar handling in comments.
- Updated CommentForm to use context for managing form state, allowing for better state sharing among components.
- Enhanced styling in next.config.ts for improved prose formatting.
- Adjusted CommentSingle to utilize the new CommentAvatar component for consistency.
2026-01-29 21:18:24 -05:00
jake 189dcef673 fix: menu button sizes 2026-01-28 18:16:31 -05:00
jake 9afe8abfed fix: image comparison component weirdness 2026-01-28 17:11:28 -05:00
jake 4dca81b58a fix: batch server requests from posts list 2026-01-28 14:37:37 -05:00
jake 9d8e775fcd chore: update shadcn primitives 2026-01-28 13:56:39 -05:00
jake 5fc9efb181 fix: don't pre-render view and comment count components
- Introduced a new PostStats component to handle view and comment counts, replacing the previous async implementation with a client-side approach.
- Updated CommentCount component to use client-side state management for fetching comment counts.
- Removed unnecessary caching logic from view and comment fetching functions.
- Simplified date formatting by moving it inline, enhancing performance and readability.
2026-01-28 13:35:16 -05:00
jake 29487e6d5f refactor: simplify next link component usage 2026-01-28 12:40:59 -05:00
jake 928ec66cf6 fix: view transitions 2026-01-28 11:18:56 -05:00
jake b80768cab6 feat: enhance mobile navigation with simple dropdown menu 2026-01-28 10:57:34 -05:00
jake 2ece5c79fa 2026 Redesign (#2531) 2026-01-27 22:53:59 -05:00
jake 5ac49b9fe1 fix: disable prefetching for links across multiple components to improve performance 2025-11-27 11:21:40 -05:00
jake 8a09aa918c chore: Next.js 15 → 16 (#2503) 2025-11-22 17:11:42 -05:00
jake 9db5c142e5 Refactor contact form to use Next.js Form component, improving structure and readability. Update error handling logic to enhance clarity in error retrieval based on input touch state. 2025-09-02 19:21:08 -04:00
jake b06e7bbf4d Refactor contact form validation to use useDebounce for improved performance and streamline error handling. Simplify error retrieval logic and ensure touched state is updated on input changes. 2025-09-02 19:10:56 -04:00
jake 20d8aad41f Add @bprogress/next dependency and update layout to use Providers component 2025-09-02 19:00:19 -04:00
jake 6a0ff897da Enhance contact form with client-side validation and error handling. Import validation schema from shared module and improve user experience by tracking input touch state for error display. 2025-09-02 18:39:54 -04:00
jake ab6b188a99 Remove Cloudflare Turnstile integration and replace it with Vercel's BotID for spam protection in the contact form. Update environment variables and dependencies accordingly. 2025-08-28 18:08:05 -04:00
jake 06ac28df1f bump some deps 2025-06-09 22:02:27 -04:00
jake f8974e9a92 fixing header icons (once again) 2025-05-22 10:50:46 -04:00
jake 879c2b9dbe fix flash of white in dark mode 2025-05-21 16:56:54 -04:00
jake fd7673c8c5 fix menu shifting in safari 2025-05-21 08:12:31 -04:00
jake 1996ad6c10 fix more icons 2025-05-20 16:55:28 -04:00
jake f4c69292df do react types more better too 🧠 2025-05-19 17:58:03 -04:00
jake 51708c9b17 do tailwind more smarter 🧠 2025-05-19 16:27:10 -04:00
jake 2796ce189b revert a9d83768ca 2025-05-18 23:38:56 -04:00
jake f272fb8b5f improve tweet styling 2025-05-18 14:53:18 -04:00