100 Commits
Author SHA1 Message Date
jake c337c3a706 chore: bump dependencies 2026-10-12 17:17:23 -04:00
jake 913dfe26bd feat: add Clicker to home page projects list 2026-10-12 17:12:52 -04:00
jake 3baffbbd29 fix: add cacheLife("max") to build-time cached functions and clarify throw-vs-catch caching rule
- Add `cacheLife("max")` to `getLocalImage` (OG image) and `getStaticRoutes` (sitemap) so entries are held as long as possible during prerender instead of expiring at the default TTL
- Update AGENTS.md to distinguish build-time reads (catch inside the cached function, return a fallback, use a short `cacheLife` on the error path) from request-time reads (may throw from the cached function since they never run during prerender)
- Expand the `getCachedComments` comment to explain why throwing is only safe there: a throw inside `"use cache"` during prerender fails the build even if the caller catches it
2026-10-03 09:55:33 -04:00
jake d3b2d07de7 refactor: use "use cache: remote" for request-time reads and updateTag/refresh for mutations
- Replace `"use cache"` with `"use cache: remote"` on functions that run inside dynamic holes (`getContributions`, `getRepos`, `getPostStats`, `getCachedComments`) so entries are shared across server instances
- Switch comment and view server actions from `revalidatePath`/`revalidateTag` to `updateTag` + `refresh` for read-your-writes invalidation
- Extract a `commentsTag(pageSlug)` helper so each page's comment cache is expired independently instead of blowing the whole "comments" tag
- Refactor `getComments` to delegate to a cached inner function that throws on failure (so errors are never cached); `getCommentCount` now reuses that cache entry instead of issuing a separate COUNT query
- Drop `lib/data/views.ts` (`getAllViewCounts`) — the `/api/hits` route now calls `getPostStats()` instead
- Remove `revalidateTag("views")` from `incrementViews`; view counts in `getPostStats` are allowed to lag by a cache TTL
- Remove the `Suspense`/`Skeleton` wrapper on the projects page since `getContributions` is now a remote-cached call
2026-10-03 09:50:06 -04:00
jakeandClaude Sonnet 5.5 373f1cfc75 refactor: load env files with @next/env instead of dotenv
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 09:32:06 -04:00
jakeandClaude Sonnet 5.5 b5f0b01998 docs: document env vars and local setup
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 09:32:05 -04:00
jakeandClaude Sonnet 5.5 2023694e3f fix: devcontainer postCreateCommand without nvm
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 09:32:05 -04:00
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 1d8b8358ca docs: document lib/data and mutations-only server actions in AGENTS.md
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 08:40:14 -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 bd18c6d553 fix: validate server action inputs for views and comments
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 08:33:57 -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
jakeandClaude Sonnet 5.5 ae2ab88988 fix: disable better-auth update-user endpoint
Names and avatars come from GitHub at sign-up; prevent signed-in users
from renaming themselves to impersonate other commenters.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 08:19:41 -04:00
jakeandClaude Sonnet 5.5 1b472214a9 docs: update AGENTS.md for oxlint/oxfmt and current conventions
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-03 08:01:10 -04:00
jake 7393b723ea fix: improve view transition handling for notes and static pages 2026-10-01 18:18:27 -04:00
jake a322be13e6 chore: bump next to 16.3.8 2026-10-01 18:17:06 -04:00
jake f110c3aa04 refactor: centralize feed handler creation, use typed route props 2026-10-01 18:14:25 -04:00
jake 541489dfc9 refactor: redesign notes opengraph image template 2026-09-26 14:33:36 -04:00
jake 3e3e9a04a3 feat: add @better-auth/infra dash plugin 2026-09-26 14:03:02 -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 82eedf02bb chore: bump deps 2026-09-26 12:47:29 -04:00
jake f91bcd5dae chore: replace sonner with base-ui toast primitive 2026-08-16 18:28:44 -04:00
jake 9b19f9eb39 fix: make sitemap.xml prerenderable 2026-08-16 18:04:40 -04:00
jake 38a00cf203 chore: next 16.3, drizzle v1, other cleanup (#2620) 2026-08-16 16:17:10 -04:00
jake dcddf6e3ec fix: exclude route groups from sitemap 2026-06-30 16:49:52 -04:00
jake b6cf79ff12 refactor: integrate content-collections for notes (#2609) 2026-06-30 16:29:50 -04:00
jake c2bf0c610e chore: update to pnpm 11, bump other deps 2026-06-04 11:58:19 -04:00
jakeandCursor Agent 37200155cf chore: bump Next.js and React security patches (#2587)
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2026-05-08 17:31:35 -04:00
jake a8c102d8d0 chore: remove Claude GitHub Actions workflows 2026-05-08 17:31:06 -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 ad90539df4 chore: update dependencies and add new project icon
- Bump versions for @base-ui/react, better-auth, react-activity-calendar, and other dependencies.
- Introduce new 'jarvis-ui' project in the home page with an associated icon.
- Update pnpm-lock.yaml to reflect changes in dependency versions.
2026-04-15 14:14:58 -04:00
jakeandClaude Opus 4.6 e59aee63c5 fix: load OG image fonts from @fontsource/inter instead of Google Fonts
Vercel's build infra was intermittently hitting ETIMEDOUT against
fonts.googleapis.com, causing OG image generation errors during
prerender. Ship the Inter .woff files with the function via
outputFileTracingIncludes so the build is network-free. Also add
turbopackIgnore hints on process.cwd() calls to silence an NFT warning
that was over-tracing next.config.ts into the route bundle.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 15:44:40 -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 22ea1aa0bc chore: update deps, pin Node 24 via mise, harden Claude code review workflow
- Bump better-auth, shadcn, oxfmt, oxlint, postcss, and pnpm to latest versions
- Add mise.toml to pin Node 24 as the project runtime
- Restrict claude-code-review to non-draft, non-bot, non-fork PRs; pin model to claude-opus-4-6 and scope allowed tools
- Set claude-opus-4-6 as default model in the main Claude workflow
2026-04-08 09:23:38 -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
jakeandClaude Opus 4.6 eecf93e7cc fix: remove wildcard view transition animations causing double fade-in
The ::view-transition-old(*) and ::view-transition-new(*) rules were
applying fade animations to the root snapshot (header/footer/chrome)
in addition to the main-content transition, causing a double fade
effect and blocking interactivity during navigation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 15:11:09 -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 0d6e489cc8 refactor: neon -> planetscale 2026-01-28 12:26:17 -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 7743976db8 fix: remove unnecessary flex classname from post titles 2026-01-28 09:35:46 -05:00
jake 2ece5c79fa 2026 Redesign (#2531) 2026-01-27 22:53:59 -05:00
jakeandClaude Opus 4.5 d72e587401 Add Claude Code GitHub Workflow (#2530)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 18:26:53 -05:00
jake e50074bff3 feat: add Domainstack link to the homepage 2025-12-21 13:35:04 -05:00
jake 9cd2810bff chore: bump deps 2025-12-07 14:27:58 -05:00
jake fa409cc96f Update renovate.json 2025-12-03 12:22:29 -05:00
jake 5ac49b9fe1 fix: disable prefetching for links across multiple components to improve performance 2025-11-27 11:21:40 -05:00
jake b81a9aca91 fix: remove /previously stylesheet from DOM when navigating away 2025-11-23 15:15:05 -05:00
jake 8a09aa918c chore: Next.js 15 → 16 (#2503) 2025-11-22 17:11:42 -05:00
jake 19960ca2b0 Update import paths in next.config.ts to use relative paths for remark and rehype plugins, ensuring consistency in module resolution. 2025-09-08 11:30:39 -04:00
jake 2fa9b73f8d Enhance notes page with comment counts and display. Update data fetching to include comment counts alongside views, and integrate comment count badges in both the notes listing and individual post pages. 2025-09-07 16:26:45 -04:00
jake f4fd80f20a Add BotID verification in comment creation to enhance security. Update instrumentation-client to include new notes route for POST requests. 2025-09-03 11:13:32 -04:00
jake a3f05dc7d8 Refactor bot detection logic in contact form to improve error handling. Log verification failures and throw errors for better debugging. 2025-09-03 11:05:24 -04: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 c4188a4bee Add image configuration options in next.config.ts: set image qualities and disable client-side router cache for dynamic pages. 2025-09-02 19:15:47 -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 a05357bc90 soft launch https://snoozle.ai 2025-08-29 18:18:18 -04:00
jake b0ed5ceaf8 Rename app/instrumentation.client.ts to instrumentation-client.ts 2025-08-28 20:09:01 -04:00
jake d80e05deba Update Node.js version to 22.19.0 and bump pnpm to 10.15.0 in package.json; change devcontainer image to Node.js 24-bookworm 2025-08-28 18:12:23 -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 d4f2b812ed finally bump a tooooooooon of deps 2025-08-26 13:56:38 -04:00
jake 29bc75f3ec always be bumping 2025-06-29 10:20:19 -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 9933d20868 complete giscus migration 2025-05-22 09:05:22 -04:00
jake 879c2b9dbe fix flash of white in dark mode 2025-05-21 16:56:54 -04:00
jake 83f1cc2fa9 disable caching for /api/auth/** 2025-05-21 08:56:21 -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 9d8c9e6395 correct icon wrapping 2025-05-19 22:03:38 -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
jake a9d83768ca re-enable comments on non-post pages 2025-05-18 14:38:10 -04:00
jake 3f56632313 add speed insights 2025-05-18 08:24:13 -04:00
jake cb5934647f revert back to zod 2025-05-17 20:43:15 -04:00
jake 360d0fda1b fix oauth scopes 2025-05-14 22:20:03 -04:00