commits
This reverts commit 0dc9bd88756080d58c5fd077d51a5ed3031bcffc.
Now displays:
- Positions (work experience with employment type, workplace type)
- Education (degrees, fields of study)
- Volunteering (organizations, causes)
- Publications (titles, publishers)
- Honors & Awards
- Courses
- Languages
- Skills (by category)
- Projects
- Certifications
- External accounts/links
Updated to @ewanc26/atproto@0.2.10
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
New route showcasing Sifa ID data:
- Profile hero with headline, about, location, open to
- Skills grid grouped by category
- Projects grid with dates
- Languages with proficiency levels
- Certifications timeline
- External accounts links
Uses linked local @ewanc26/atproto@0.2.9 for Sifa fetch functions.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Each page already has its own MetaTags, causing duplicates.
Remove from layout to ensure single, correct meta tag set.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Replace process.env with $env/static/public import for PUBLIC_ATPROTO_DID.
Fixes potential 500 errors on the well-known endpoint.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Simplify MetaTags component to accept single merged meta object
- Update layout to pass page-specific meta when available
- Fix error page MetaTags usage
- All routes (/archive, /github, /site/meta) now generate unique OG images
Note: Minor SSR quirk produces duplicate tags (site default then page-specific),
but crawlers use the final (correct) tag.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Fixes OG image generation on Vercel with improved font loading
including CDN fallback for serverless environments.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Published v0.1.3 with font CDN fallback for Vercel serverless.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Fixes OG image generation failing on Vercel serverless by adding
CDN font fallback for when local font files aren't accessible.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Fixed ReferenceError where template referenced removed `meta` variable.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Add lucide icons for each error type (404, 403, 500, 503)
- Contextual suggestions based on error type
- Better action buttons with icons (Home, Try Again)
- Quick links for 404 pages (Archive, GitHub, About)
- Improved error message display for debugging
- Fixed Svelte 5 compatibility (removed deprecated svelte:component)
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
SvelteKit layouts don't receive child page load returns directly.
Each page now renders its own MetaTags component, overriding layout defaults.
Fixed Svelte 5 $derived() usage in github page.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
$derived requires an expression, not an immediately-invoked function.
Use $derived.by() for complex reactive computations.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Replace static OG images with on-demand generation via /api/og endpoint.
Uses createOgEndpoint from the package with noise backgrounds enabled.
- Add /api/og dynamic endpoint using createOgEndpoint
- Enable seeded noise backgrounds for unique per-page visuals
- Remove static OG images from static/og/
- Update defaultSiteMeta to generate dynamic OG URLs
- Add createDynamicSiteMeta helper for page-specific OG images
- Update archive, github, and site/meta pages to use dynamic OG
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Simplify README to brief overview with docsite link
- Update MetaTags component with fediverse:creator support
- Compute fediverseCreator from AP instance/username in layout
- Add vercel CLI as dev dependency
- Update .env.example with current structure
馃懢 Generated with [Letta Code](https://letta.com)
- Fetch user events from GitHub API
- Aggregate contributions by date
- Render GitHub-style contribution grid
- Shows last 90 days with intensity levels
- New /github route showing profile stats, avatar, bio
- Notable repositories grid with language colors, stars, topics
- GitHub API service with caching
- Navigation link in header
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Self-hosted Inter variable font (privacy, performance)
- Fixed BlueskyPostCard style and accessibility issues
- Fixed all TypeScript type errors
- Removed unused code
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Move __APP_VERSION__ and __GIT_COMMIT__ declarations inside the
declare global block to fix TypeScript not finding them in Svelte
components.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Switch from @ewanc26/ui MetaTags to local version that supports
fediverse:creator meta tag via apInstanceUrl and apUsername props.
- Make instanceDomain and fediverseCreator reactive with $derived
- Export local MetaTags.svelte from seo/index.ts
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Spread all defaultSiteMeta properties to satisfy SiteMetadata type
requirements (keywords, image, imageWidth, imageHeight).
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
The engagement module was never imported or used. EngagementType is
only available from @ewanc26/atproto/engagement subpath, but since
it's unused, remove the file entirely.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Export PopfeedReview, PopfeedCreativeWorkType, PopfeedMainCreditRole
from @ewanc26/atproto types.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Fix invalid inline style (sm: prefix not valid in CSS)
- Remove useless empty track element for video captions
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Replace Google Fonts dependency with self-hosted Inter variable font files.
Benefits: improved privacy, faster loading, no external requests.
- Add InterVariable.woff2 and InterVariable-Italic.woff2
- Add @font-face rules in app.css
- Add preload hints in app.html
- Remove Google Fonts preconnect and stylesheet links
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Add fetchRecentPopfeedReviews to @ewanc26/atproto (social.popfeed.feed.review)
- Add PopfeedCard to @ewanc26/ui, styled after PostCard/DocumentCard
- Add NoiseImage to @ewanc26/ui (was website-only); update MusicStatusCard
and PopfeedCard in the package to use it
- Wire Popfeed reviews into the website homepage loader and masonry grid
- Swap TangledRepoCard icon from GitBranch to Code
- Bump @ewanc26/atproto to 0.2.7, @ewanc26/ui to 0.3.8
- Update transitive dependencies (svelte, tailwindcss, rollup, esbuild, etc.)
- Add +layout.server.ts to expose PUBLIC_AP_INSTANCE_URL and
PUBLIC_AP_USERNAME via server load using process.env
- Pass apInstanceUrl and apUsername as props through +layout.svelte
to MetaTags.svelte; remove $env/dynamic/public import
- Rewrite webfinger route to read AP vars from process.env at
request time; return 501 if unconfigured
- Rewrite atproto-did route to read PUBLIC_ATPROTO_DID from
process.env; remove $env/dynamic/public import
- Add /.well-known/atproto-did server route driven by PUBLIC_ATPROTO_DID
- Add /.well-known/webfinger server route; proxies AP instance response,
injects site-domain alias (acct:user@sitedomain)
- Remove static/.well-known/atproto-did
- Remove hardcoded fediverse:creator from app.html; inject conditionally
via MetaTags.svelte using PUBLIC_AP_INSTANCE_URL + PUBLIC_AP_USERNAME
- Remove webfinger redirect from vercel.json; add Content-Type header rule
- Document PUBLIC_AP_INSTANCE_URL and PUBLIC_AP_USERNAME in .env.example
- bump @ewanc26/noise-avatar to ^0.2.1
- replace initial-letter and icon placeholders with noise canvas in
ProfileCard, BlueskyPostCard, MusicStatusCard, SupportersCard
- add noise canvas cover image fallback to BlogPostCard and DocumentCard
- svelte.config.js: replace deprecated csrf.checkOrigin with trustedOrigins
- bump website to v11.2.1
Now displays:
- Positions (work experience with employment type, workplace type)
- Education (degrees, fields of study)
- Volunteering (organizations, causes)
- Publications (titles, publishers)
- Honors & Awards
- Courses
- Languages
- Skills (by category)
- Projects
- Certifications
- External accounts/links
Updated to @ewanc26/atproto@0.2.10
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
New route showcasing Sifa ID data:
- Profile hero with headline, about, location, open to
- Skills grid grouped by category
- Projects grid with dates
- Languages with proficiency levels
- Certifications timeline
- External accounts links
Uses linked local @ewanc26/atproto@0.2.9 for Sifa fetch functions.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Simplify MetaTags component to accept single merged meta object
- Update layout to pass page-specific meta when available
- Fix error page MetaTags usage
- All routes (/archive, /github, /site/meta) now generate unique OG images
Note: Minor SSR quirk produces duplicate tags (site default then page-specific),
but crawlers use the final (correct) tag.
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Add lucide icons for each error type (404, 403, 500, 503)
- Contextual suggestions based on error type
- Better action buttons with icons (Home, Try Again)
- Quick links for 404 pages (Archive, GitHub, About)
- Improved error message display for debugging
- Fixed Svelte 5 compatibility (removed deprecated svelte:component)
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Replace static OG images with on-demand generation via /api/og endpoint.
Uses createOgEndpoint from the package with noise backgrounds enabled.
- Add /api/og dynamic endpoint using createOgEndpoint
- Enable seeded noise backgrounds for unique per-page visuals
- Remove static OG images from static/og/
- Update defaultSiteMeta to generate dynamic OG URLs
- Add createDynamicSiteMeta helper for page-specific OG images
- Update archive, github, and site/meta pages to use dynamic OG
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Simplify README to brief overview with docsite link
- Update MetaTags component with fediverse:creator support
- Compute fediverseCreator from AP instance/username in layout
- Add vercel CLI as dev dependency
- Update .env.example with current structure
馃懢 Generated with [Letta Code](https://letta.com)
Switch from @ewanc26/ui MetaTags to local version that supports
fediverse:creator meta tag via apInstanceUrl and apUsername props.
- Make instanceDomain and fediverseCreator reactive with $derived
- Export local MetaTags.svelte from seo/index.ts
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
Replace Google Fonts dependency with self-hosted Inter variable font files.
Benefits: improved privacy, faster loading, no external requests.
- Add InterVariable.woff2 and InterVariable-Italic.woff2
- Add @font-face rules in app.css
- Add preload hints in app.html
- Remove Google Fonts preconnect and stylesheet links
馃懢 Generated with [Letta Code](https://letta.com)
Co-Authored-By: Letta Code <noreply@letta.com>
- Add fetchRecentPopfeedReviews to @ewanc26/atproto (social.popfeed.feed.review)
- Add PopfeedCard to @ewanc26/ui, styled after PostCard/DocumentCard
- Add NoiseImage to @ewanc26/ui (was website-only); update MusicStatusCard
and PopfeedCard in the package to use it
- Wire Popfeed reviews into the website homepage loader and masonry grid
- Swap TangledRepoCard icon from GitBranch to Code
- Bump @ewanc26/atproto to 0.2.7, @ewanc26/ui to 0.3.8
- Update transitive dependencies (svelte, tailwindcss, rollup, esbuild, etc.)
- Add +layout.server.ts to expose PUBLIC_AP_INSTANCE_URL and
PUBLIC_AP_USERNAME via server load using process.env
- Pass apInstanceUrl and apUsername as props through +layout.svelte
to MetaTags.svelte; remove $env/dynamic/public import
- Rewrite webfinger route to read AP vars from process.env at
request time; return 501 if unconfigured
- Rewrite atproto-did route to read PUBLIC_ATPROTO_DID from
process.env; remove $env/dynamic/public import
- Add /.well-known/atproto-did server route driven by PUBLIC_ATPROTO_DID
- Add /.well-known/webfinger server route; proxies AP instance response,
injects site-domain alias (acct:user@sitedomain)
- Remove static/.well-known/atproto-did
- Remove hardcoded fediverse:creator from app.html; inject conditionally
via MetaTags.svelte using PUBLIC_AP_INSTANCE_URL + PUBLIC_AP_USERNAME
- Remove webfinger redirect from vercel.json; add Content-Type header rule
- Document PUBLIC_AP_INSTANCE_URL and PUBLIC_AP_USERNAME in .env.example
- bump @ewanc26/noise-avatar to ^0.2.1
- replace initial-letter and icon placeholders with noise canvas in
ProfileCard, BlueskyPostCard, MusicStatusCard, SupportersCard
- add noise canvas cover image fallback to BlogPostCard and DocumentCard
- svelte.config.js: replace deprecated csrf.checkOrigin with trustedOrigins
- bump website to v11.2.1