Commit Graph
2236 Commits
Author SHA1 Message Date
renovate[bot] d306606ebd chore(deps): update dependency oxlint to ^1.89.0 2026-10-22 21:50:41 +00:00
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