alpha
Login
or
Join now
russ.fugl.dev
/
sks-website
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
build smart knowledge-sharing systems that combine the best of human expertise with smart technology
Star
0
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
sks-website
/
src
/
lib
/
at
main
2 folders
14 files
Russ T. Fugal
feat: add Coding Projects tab to portfolio
17d ago
1917688d
__tests__
feat: enhance blog with Bluesky comments, cover images, and improved components Add comprehensive Bluesky integration to blog posts with embedded comments via atproto URIs. Introduce new cover images for 15 blog posts with proper Next.js Image optimization. Refactor blog component architecture with new CollapsibleComments and ReadMoreContent components for better code organization. Update favicon to use Next.js app icon system. Replace npm with bun package manager. Add Vitest configuration and comprehensive unit tests for atproto URI parsing. Improve header and footer layouts with better responsive design and styling updates. Clean up deprecated files (clint.md, email artifacts, sequoia.json.bak). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
5 months ago
axiom
fix(axiom): skip env var validation during build NEXT_PHASE=phase-production-build runs with NODE_ENV=production but does not have access to runtime env vars in some deployment setups. Skip the fail-fast throw during build so static generation succeeds; runtime production still fails fast on missing token. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2 months ago
atproto-feed.ts
refactor(blog): delete feed and filtering utilities now in submodule Remove atproto-feed adapter, post filters, category utilities — all now provided by submodule's createAtprotoFeed and filtering exports. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2 months ago
atproto-uris.ts
feat: one-command publish pipeline (bun run publish) New scripts/publish.sh runs the entire publish workflow locally: sequoia publish → git stage + commit → vercel build --prod → vercel deploy --prebuilt --prod → git push. Solves the chicken-and-egg between sequoia minting the AT URI and the <sequoia-comments> widget needing it baked into the build (the comments component is a client island gated by a truthy atUri check; if the build runs without it, the comments React tree is pruned and sequoia inject can't add it back). Other changes in this commit: - Un-gitignore .sequoia-state.json so the state file is tracked. Removes the lossy autoSync-on-every-build path which can drop bskyPostRef on retry and create duplicate Bluesky posts. State file contains no secrets. - Tighten parseAtUriFromContent to return undefined for empty captures (was returning empty string, which is truthy-correct downstream but misleading as a contract). - Add vercel as a devDependency so bunx vercel resolves locally. - CLAUDE.md: add Publishing section and bun run publish to commands. - Initial commit of .sequoia-state.json (17 published posts, audited against PDS with zero unmatched). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2 months ago
blog-config.ts
refactor(blog): drop static postsData fallback and dead markdown loaders Post bodies are sourced from the AT Protocol PDS at request time via createAtprotoFeed. The staticFallback (postsData) only surfaced during a PDS outage and had drifted from the PDS source of truth — it even carried 7 unpublished posts that never rendered in normal operation (now preserved as drafts). Remove it along with the orphaned filesystem markdown chain. - blog-config: drop staticFallback (feed defaults to [] on PDS failure) - posts.ts: delete the postsData array; keep Post type + author/category re-exports - delete unreferenced get-markdown.ts, markdown-cache.ts, load-markdown.ts - CLAUDE.md: fix the stale "add a postsData entry" blog workflow - bump atproto-presskit submodule (drops markdown-cache from @blog/server barrel) - sync dependency versions (shiki, postcss, @types/node, @types/react, vercel) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2 months ago
blog-telemetry.ts
fix(blog): lazy-load axiom server module to prevent AsyncLocalStorage in browser blogConfig is imported by client components (blog-list.tsx), which pulls in blog-telemetry.ts with a static import of axiom/server. That module imports @axiomhq/nextjs, which initializes AsyncLocalStorage at module eval time — crashing in the browser since globalThis.AsyncLocalStorage doesn't exist. Switch to dynamic import inside logServerEvent (only called from server code via next/server after()), so the module is never evaluated in the browser. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2 months ago
bluesky.ts
refactor: clean up component imports and unused code Remove unused blog-context imports, trim markdown rendering, simplify scroll logger. Update bluesky and local-draft utilities. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2 months ago
category-utils.ts
refactor(blog): delete feed and filtering utilities now in submodule Remove atproto-feed adapter, post filters, category utilities — all now provided by submodule's createAtprotoFeed and filtering exports. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2 months ago
client-post-filters.ts
refactor(blog): delete feed and filtering utilities now in submodule Remove atproto-feed adapter, post filters, category utilities — all now provided by submodule's createAtprotoFeed and filtering exports. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2 months ago
cover-images.ts
fix: rethrow feed errors instead of caching not-found; add das-man post files Bump atproto-presskit so a transient PDS failure surfaces as an uncached error instead of an empty feed that gets ISR-cached as a 7-day 404. Register the das-man-as-loss-function cover image and track the post source published to the PDS on 2026-07-03. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
load-about-content.ts
fix(audit): resolve accessibility and lint issues batch 3/3 Refactored src/lib directory to improve code quality and maintainability: - Extracted shared post filtering logic to post-filtering-utils.ts (calculateMatchScore, filterPostsByCategories, sortPostsWithMatchScore, getAllCategoriesFromPosts) - Created markdown-cache.ts with reusable MarkdownCache interface and module-level caching - Created portfolio-formatting.ts to separate formatting utilities from filtering logic (formatEssayDate, truncateAbstract, shouldTruncateAbstract) - Updated client-post-filters.ts to import shared utilities and fixed sortDateAsc default from true to false - Enhanced post-filters.ts with React.cache() decorators for per-request deduplication and improved JSDoc comments - Added React.cache() to loadAboutContent() with extracted parseSection helper - Refactored load-markdown.ts to re-export from markdown-cache module - Optimized portfolio-filters.ts sortEssaysWithMatchScore to pre-compute scores and timestamps - Updated all JSDoc comments to clarify functionality and implementation details Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
5 months ago
local-draft.ts
refactor: clean up component imports and unused code Remove unused blog-context imports, trim markdown rendering, simplify scroll logger. Update bluesky and local-draft utilities. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2 months ago
portfolio-filters.ts
feat: add Coding Projects tab to portfolio Two-tab layout on /portfolio via ?tab=coding query param (academic default, existing URLs unchanged). Coding projects reuse the shared filter/sort/pagination machinery with a disjoint tag vocabulary; school/course filters are academic-only. Project cards show tech pills, GitHub/Tangled/live links, and private/closed-source badges. Content lives in coding-projects.json and marketing-content.tsx. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
portfolio-formatting.ts
fix(audit): resolve accessibility and lint issues batch 3/3 Refactored src/lib directory to improve code quality and maintainability: - Extracted shared post filtering logic to post-filtering-utils.ts (calculateMatchScore, filterPostsByCategories, sortPostsWithMatchScore, getAllCategoriesFromPosts) - Created markdown-cache.ts with reusable MarkdownCache interface and module-level caching - Created portfolio-formatting.ts to separate formatting utilities from filtering logic (formatEssayDate, truncateAbstract, shouldTruncateAbstract) - Updated client-post-filters.ts to import shared utilities and fixed sortDateAsc default from true to false - Enhanced post-filters.ts with React.cache() decorators for per-request deduplication and improved JSDoc comments - Added React.cache() to loadAboutContent() with extracted parseSection helper - Refactored load-markdown.ts to re-export from markdown-cache module - Optimized portfolio-filters.ts sortEssaysWithMatchScore to pre-compute scores and timestamps - Updated all JSDoc comments to clarify functionality and implementation details Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
5 months ago
post-filtering-utils.ts
refactor(blog): delete feed and filtering utilities now in submodule Remove atproto-feed adapter, post filters, category utilities — all now provided by submodule's createAtprotoFeed and filtering exports. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2 months ago
utils.ts
feat: add Axiom observability and format codebase Add comprehensive Axiom logging infrastructure: - Core Axiom client with wide event fields (src/lib/axiom/) - Client-side logger with React hooks and WebVitals monitoring - Server-side logger with Next.js formatters - Request logging proxy middleware (src/proxy.ts) - Global error boundary with error logging (src/app/error.tsx) Also format entire codebase with prettier. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5 months ago