Compare commits

...

28 Commits

Author SHA1 Message Date
c69eb58a49 feat: release 2.16.0
All checks were successful
test-build / guarddog (push) Successful in 53s
renovate / renovate (push) Successful in 1m42s
release-image-gitea / build (push) Successful in 3m1s
release-image-harbor / build (push) Successful in 2m55s
test-build / build (push) Successful in 4m38s
release-image-harbor / release (push) Successful in 5m39s
release-image-gitea / release (push) Successful in 9m19s
2026-02-25 20:02:41 -06:00
543b57647b chore(deps): update node 2026-02-25 20:02:13 -06:00
01cbfab2f7 Merge pull request 'chore(deps): update dependency node to v24.14.0' (#354) from renovate/node-24.x into main
Some checks failed
renovate / renovate (push) Has been cancelled
test-build / build (push) Has been cancelled
test-build / guarddog (push) Has been cancelled
Reviewed-on: #354
2026-02-26 02:01:34 +00:00
b4ecac7396 Merge pull request 'chore(deps): update dependency shiki to v3.23.0' (#359) from renovate/shiki-monorepo into main
Some checks failed
renovate / renovate (push) Has been cancelled
test-build / build (push) Has been cancelled
test-build / guarddog (push) Has been cancelled
Reviewed-on: #359
2026-02-26 02:01:10 +00:00
1a51ccb516 Merge pull request 'chore(deps): update dependency astro to v5.18.0' (#358) from renovate/astro-monorepo into main
Some checks failed
renovate / renovate (push) Has been cancelled
test-build / build (push) Has been cancelled
test-build / guarddog (push) Has been cancelled
Reviewed-on: #358
2026-02-26 02:00:44 +00:00
522cd20fe3 chore(deps): update preline
Some checks failed
renovate / renovate (push) Has been cancelled
test-build / guarddog (push) Has been cancelled
test-build / build (push) Has been cancelled
2026-02-25 19:57:11 -06:00
d8bad121f6 chore(deps): update dependency shiki to v3.23.0
Some checks are pending
renovate/stability-days Updates have not met minimum release age requirement
test-build / guarddog (pull_request) Successful in 2m0s
test-build / build (pull_request) Successful in 3m20s
2026-02-26 01:56:28 +00:00
d6176bd89d chore(deps): update dependency node to v24.14.0
All checks were successful
test-build / guarddog (pull_request) Successful in 1m33s
test-build / build (pull_request) Successful in 3m35s
2026-02-26 01:54:37 +00:00
594ff43110 chore(deps): update dependency astro to v5.18.0
Some checks are pending
renovate/stability-days Updates have not met minimum release age requirement
test-build / guarddog (pull_request) Successful in 1m8s
test-build / build (pull_request) Successful in 3m54s
2026-02-26 01:54:20 +00:00
7fd443535a Merge pull request 'chore(deps): update dependency eslint-plugin-format to v2' (#356) from renovate/eslint-plugin-format-2.x into main
Some checks failed
test-build / guarddog (push) Successful in 40s
test-build / build (push) Successful in 3m37s
renovate / renovate (push) Has been cancelled
Reviewed-on: #356
2026-02-26 01:52:55 +00:00
f8d926199f chore(deps): update dependency eslint-plugin-format to v2
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
test-build / guarddog (pull_request) Successful in 1m17s
test-build / build (pull_request) Successful in 3m3s
2026-02-26 01:47:46 +00:00
8c57f970d6 Merge pull request 'chore(deps): update dependency eslint-plugin-format to v1.5.0' (#353) from renovate/eslint-plugin-format-1.x-lockfile into main
All checks were successful
test-build / guarddog (push) Successful in 47s
renovate / renovate (push) Successful in 3m12s
test-build / build (push) Successful in 3m23s
Reviewed-on: #353
2026-02-26 01:44:57 +00:00
779946cfec Merge pull request 'chore(deps): update tailwindcss monorepo to v4.2.1' (#351) from renovate/tailwindcss-monorepo into main
Some checks failed
renovate / renovate (push) Has been cancelled
test-build / guarddog (push) Has been cancelled
test-build / build (push) Has been cancelled
Reviewed-on: #351
2026-02-26 01:44:02 +00:00
1f926d4184 Merge pull request 'chore(deps): update dependency typescript-eslint to v8.56.1' (#350) from renovate/typescript-eslint-monorepo into main
Some checks failed
renovate / renovate (push) Has been cancelled
test-build / build (push) Has been cancelled
test-build / guarddog (push) Has been cancelled
Reviewed-on: #350
2026-02-26 01:43:43 +00:00
f99638ffe2 Merge pull request 'chore(deps): update dependency eslint-plugin-react-refresh to v0.5.2' (#349) from renovate/eslint-plugin-react-refresh-0.x-lockfile into main
Some checks failed
renovate / renovate (push) Has been cancelled
test-build / build (push) Has started running
test-build / guarddog (push) Has been cancelled
Reviewed-on: #349
2026-02-26 01:43:33 +00:00
eda954542b chore(deps): update dependency eslint-plugin-format to v1.5.0
Some checks failed
renovate/stability-days Updates have met minimum release age requirement
test-build / guarddog (pull_request) Successful in 1m32s
test-build / build (pull_request) Failing after 3m29s
2026-02-26 00:07:59 +00:00
af79a0d4c4 chore(deps): update dependency typescript-eslint to v8.56.1
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
test-build / guarddog (pull_request) Successful in 1m35s
test-build / build (pull_request) Successful in 3m29s
2026-02-26 00:05:56 +00:00
466cbd790e chore(deps): update tailwindcss monorepo to v4.2.1
Some checks failed
renovate/stability-days Updates have met minimum release age requirement
test-build / guarddog (pull_request) Successful in 1m1s
test-build / build (pull_request) Failing after 2m28s
2026-02-25 00:10:11 +00:00
46c69d30aa chore(deps): update dependency eslint-plugin-react-refresh to v0.5.2
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
test-build / guarddog (pull_request) Successful in 1m30s
test-build / build (pull_request) Successful in 3m35s
2026-02-25 00:08:18 +00:00
9dad4aa5bb Merge pull request 'chore(deps): update dependency eslint to v10.0.2' (#348) from renovate/eslint-monorepo into main
All checks were successful
test-build / build (push) Successful in 2m42s
test-build / guarddog (push) Successful in 2m37s
renovate / renovate (push) Successful in 11m0s
2026-02-25 00:03:13 +00:00
08ece5b478 chore(deps): update dependency eslint to v10.0.2
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
test-build / guarddog (pull_request) Successful in 1m57s
test-build / build (pull_request) Successful in 4m56s
2026-02-25 00:02:41 +00:00
ac38bafb9b Merge pull request 'chore(deps): update dependency eslint to v10.0.1' (#347) from renovate/eslint-monorepo into main
All checks were successful
test-build / build (push) Successful in 1m18s
test-build / guarddog (push) Successful in 2m26s
renovate / renovate (push) Successful in 6m30s
2026-02-21 20:19:56 +00:00
f08b754adc chore(deps): update dependency eslint to v10.0.1
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
test-build / guarddog (pull_request) Successful in 28s
test-build / build (pull_request) Successful in 54s
2026-02-21 20:19:31 +00:00
c5cda006bb feat: release 2.15.1
All checks were successful
test-build / guarddog (push) Successful in 53s
test-build / build (push) Successful in 1m1s
release-image-harbor / build (push) Successful in 2m19s
release-image-gitea / build (push) Successful in 2m21s
release-image-gitea / release (push) Successful in 2m5s
release-image-harbor / release (push) Successful in 7m38s
renovate / renovate (push) Successful in 2m51s
2026-02-20 00:43:52 -06:00
959d3bd71d fix: force 3d scaling for button transform
All checks were successful
test-build / guarddog (push) Successful in 18s
renovate / renovate (push) Successful in 1m11s
test-build / build (push) Successful in 1m55s
2026-02-20 00:39:53 -06:00
f3b8d10106 feat: release 2.15.0
All checks were successful
test-build / guarddog (push) Successful in 27s
test-build / build (push) Successful in 52s
renovate / renovate (push) Successful in 1m41s
release-image-harbor / build (push) Successful in 3m25s
release-image-harbor / release (push) Successful in 2m3s
release-image-gitea / build (push) Successful in 5m44s
release-image-gitea / release (push) Successful in 1m41s
2026-02-19 23:51:20 -06:00
0c63c6bef4 feat: use mask to blend content to background
All checks were successful
test-build / guarddog (push) Successful in 31s
test-build / build (push) Successful in 1m7s
renovate / renovate (push) Successful in 1m37s
2026-02-19 23:48:34 -06:00
5e37e2bb53 feat: add background shimmer effect, use mask for content scroll fade 2026-02-19 23:34:56 -06:00
13 changed files with 886 additions and 610 deletions

View File

@@ -22,7 +22,7 @@ jobs:
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: 24.13.1 node-version: 24.14.0
cache: pnpm cache: pnpm
- name: Install Dependencies - name: Install Dependencies

View File

@@ -22,7 +22,7 @@ jobs:
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: 24.13.1 node-version: 24.14.0
cache: pnpm cache: pnpm
- name: Install Dependencies - name: Install Dependencies

View File

@@ -24,7 +24,7 @@ jobs:
- name: Set up Node.js - name: Set up Node.js
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: 24.13.1 node-version: 24.14.0
cache: pnpm cache: pnpm
- name: Install Dependencies - name: Install Dependencies

View File

@@ -1,4 +1,4 @@
FROM docker.io/node:24.13.1-alpine AS builder FROM docker.io/node:24.14.0-alpine AS builder
ENV PNPM_HOME="/pnpm" ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH" ENV PATH="$PNPM_HOME:$PATH"
@@ -17,12 +17,12 @@ FROM build-deps AS build
COPY . . COPY . .
RUN pnpm run build RUN pnpm run build
FROM dhi.io/node:24.13.1 AS runtime FROM dhi.io/node:24.14.0 AS runtime
WORKDIR /app WORKDIR /app
COPY --from=prod-deps /app/node_modules /app/node_modules COPY --from=prod-deps /app/node_modules /app/node_modules
COPY --from=build /app/dist /app/dist COPY --from=build /app/dist /app/dist
LABEL version="2.14.1" LABEL version="2.16.0"
LABEL description="Astro based personal website" LABEL description="Astro based personal website"
ENV HOST=0.0.0.0 ENV HOST=0.0.0.0

View File

@@ -1,7 +1,7 @@
{ {
"name": "site-profile", "name": "site-profile",
"type": "module", "type": "module",
"version": "2.14.1", "version": "2.16.0",
"homepage": "https://www.alexlebens.dev", "homepage": "https://www.alexlebens.dev",
"bugs": { "bugs": {
"url": "https://gitea.alexlebens.dev/alexlebens/site-profile/issues", "url": "https://gitea.alexlebens.dev/alexlebens/site-profile/issues",
@@ -49,7 +49,7 @@
"marked": "^17.0.2", "marked": "^17.0.2",
"marked-shiki": "^1.2.1", "marked-shiki": "^1.2.1",
"mdast-util-to-string": "^4.0.0", "mdast-util-to-string": "^4.0.0",
"preline": "^4.0.1", "preline": "^4.1.1",
"react": "^19.2.4", "react": "^19.2.4",
"react-dom": "^19.2.4", "react-dom": "^19.2.4",
"reading-time": "^1.5.0", "reading-time": "^1.5.0",
@@ -66,7 +66,7 @@
"eslint": "^10.0.0", "eslint": "^10.0.0",
"eslint-config-prettier": "^10.1.8", "eslint-config-prettier": "^10.1.8",
"eslint-plugin-astro": "^1.6.0", "eslint-plugin-astro": "^1.6.0",
"eslint-plugin-format": "^1.4.0", "eslint-plugin-format": "^2.0.0",
"eslint-plugin-react": "^7.37.5", "eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.5.0", "eslint-plugin-react-refresh": "^0.5.0",

1354
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,6 @@ const currentPath = pathname.slice(1);
id="nav" id="nav"
class="fixed flex flex-wrap md:flex-nowrap md:justify-start inset-x-0 top-0 w-full z-50" class="fixed flex flex-wrap md:flex-nowrap md:justify-start inset-x-0 top-0 w-full z-50"
> >
<div class="bg-linear-to-b from-background from-65% to-transparent to-90% absolute top-0 bottom-0 left-0 w-full h-36 z-0"/>
<nav <nav
class="nav-base relative md:flex md:items-center md:justify-between rounded-[36px] w-full px-4 mx-2 py-3 mt-4" class="nav-base relative md:flex md:items-center md:justify-between rounded-[36px] w-full px-4 mx-2 py-3 mt-4"
aria-label="Global" aria-label="Global"

View File

@@ -1,5 +1,4 @@
--- ---
import { Icon } from 'astro-icon/components';
import Logo from "@components/images/Logo.astro" import Logo from "@components/images/Logo.astro"
interface Props { interface Props {

View File

@@ -78,7 +78,7 @@ const experiences = ((await directus.request(
</div> </div>
)} )}
{(experience.responsibilities || experience.achievements) && ( {(experience.responsibilities || experience.achievements) && (
<div class="relative flex flex-col gap-4 after:absolute after:bottom-0 after:h-12 after:w-full after:bg-linear-to-t after:from-neutral-200 dark:after:from-stone-700 after:content-[''] " :class="expanded ? 'after:hidden' : ''" x-show="expanded" x-collapse.min.50px> <div class="relative flex flex-col gap-4" :class="expanded ? '' : 'mask-[linear-gradient(to_bottom,black_50%,transparent)]'" x-show="expanded" x-collapse.min.50px>
{experience.responsibilities && ( {experience.responsibilities && (
<div class="flex flex-col gap-1"> <div class="flex flex-col gap-1">
<h4 class="text-header font-semibold"> <h4 class="text-header font-semibold">

View File

@@ -18,8 +18,8 @@ const skills = ((await directus.request(
<h3 class="smooth-reveal card-text-header flex relative items-center w-full gap-3 pb-5"> <h3 class="smooth-reveal card-text-header flex relative items-center w-full gap-3 pb-5">
Skills Skills
</h3> </h3>
<div class=""> <div>
<div class="tech-stack-slider relative overflow-hidden py-4 sm:py-8"> <div class="tech-stack-slider relative overflow-hidden py-4 sm:py-8 mask-[linear-gradient(to_right,transparent,black_10%,black_90%,transparent)]">
<!-- Main slider container --> <!-- Main slider container -->
<div class="slider-track animate-slide flex"> <div class="slider-track animate-slide flex">
{[...skills, ...skills, ...skills].map((skill: Skill) => { {[...skills, ...skills, ...skills].map((skill: Skill) => {
@@ -54,9 +54,6 @@ const skills = ((await directus.request(
); );
})} })}
</div> </div>
<!-- Gradient overlays -->
<div class="bg-linear-to-r from-neutral-200 to-transparent dark:from-stone-700 absolute top-0 bottom-0 left-0 z-10 w-12 sm:w-24"/>
<div class="bg-linear-to-l from-neutral-200 to-transparent dark:from-stone-700 absolute top-0 bottom-0 right-0 z-10 w-12 sm:w-24"/>
</div> </div>
</div> </div>
</section> </section>

View File

@@ -66,21 +66,21 @@ const normalizeTitle = !title ? global.name : `${title} | ${global.name}`;
data-site-id={global.rybbit_site_id} data-site-id={global.rybbit_site_id}
defer defer
/> />
</head> </head>
<body class="bg-background selection:bg-yellow-400">
<!-- Disabled texture background for now
<div class="fixed inset-0 -z-10">
<div class="bg-grid-pattern absolute inset-0 mask-[radial-gradient(white,transparent_85%)] bg-position-[center_top_-1px]"/>
</div>
-->
<body class="bg-background selection:bg-yellow-400 m-0 p-0 overflow-x-hidden">
<!-- Sliding backgrounds -->
<div class="bg"/>
<div class="bg bg2"/>
<div class="bg bg3"/>
<!-- Layout -->
<div class="grow w-full max-w-(--breakpoint-2xl) px-4 sm:px-6 lg:px-8 py-20 mx-auto"> <div class="grow w-full max-w-(--breakpoint-2xl) px-4 sm:px-6 lg:px-8 py-20 mx-auto">
<Header /> <Header />
<main class="min-h-screen"> <main class="has-js scroll-fade-container min-h-screen">
<slot /> <slot />
</main> </main>
@@ -91,14 +91,84 @@ const normalizeTitle = !title ? global.name : `${title} | ${global.name}`;
</body> </body>
</html> </html>
<script>
document.addEventListener('astro:page-load', () => {
const onScroll = () => {
document.documentElement.style.setProperty('--scroll-offset', `${window.scrollY}px`);
document.documentElement.classList.add('has-js');
};
window.removeEventListener('scroll', onScroll);
window.addEventListener('scroll', onScroll, { passive: true });
onScroll();
});
</script>
<style> <style>
.bg-grid-pattern { /* Fade away content below header when scrolling */
background-size: 24px 24px; .has-js .scroll-fade-container {
background-image: radial-gradient(circle, rgba(0, 0, 0, 0.2) 1px, transparent 1px); -webkit-mask-image: linear-gradient(
transition: background-image 0.7s cubic-bezier(0.65, 0, 0.35, 1); to bottom,
transparent 0px,
transparent 16px,
black 80px,
black 100%
);
mask-image: linear-gradient(
to bottom,
transparent 0px,
transparent 16px,
black 80px,
black 100%
);
-webkit-mask-size: 100vw 100vh;
-webkit-mask-repeat: no-repeat;
-webkit-mask-position-y: var(--scroll-offset);
mask-position-y: var(--scroll-offset);
} }
:global(.dark) .bg-grid-pattern { /* Background that creates the "glimmer" effect */
background-image: radial-gradient(circle, rgba(255, 255, 255, 0.25) 1px, transparent 1px); .bg {
animation: slide 20s ease-in-out infinite alternate;
background-image: linear-gradient(-60deg, var(--bg-primary) 33.3%, var(--bg-secondary) 33.3%, var(--bg-secondary) 66.6%, var(--bg-tertiary) 66.6%);
filter: blur(80px);
top: 0;
bottom: 0;
left: -50%;
right: -50%;
opacity: .5;
position: fixed;
z-index: -1;
--bg-primary: #e5e5e5;
--bg-secondary: #d9d9d9;
--bg-tertiary: #ededed;
}
:global(.dark) .bg {
--bg-primary: #292524;
--bg-secondary: #44403c;
--bg-tertiary: #57534e;
}
.bg2 {
animation-direction: alternate-reverse;
animation-duration: 30s;
}
.bg3 {
animation-duration: 25s;
}
@keyframes slide {
0% {
transform:translateX(-25%);
}
100% {
transform:translateX(25%);
}
} }
</style> </style>

View File

@@ -1,5 +1,4 @@
@import 'tailwindcss'; @import 'tailwindcss';
@import 'preline/variants.css';
@import './utilities.css'; @import './utilities.css';
@plugin '@tailwindcss/typography'; @plugin '@tailwindcss/typography';
@@ -50,8 +49,9 @@
:root { :root {
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
--theme-transition: 0.3s ease; --theme-transition: 0.3s ease;
color-scheme: light; --scroll-offset: 0px;
} }
:root:where(.dark, .dark *) { :root:where(.dark, .dark *) {
@@ -73,9 +73,6 @@
} }
body { body {
margin: 0;
padding: 0;
overflow-x: hidden;
--swup-fade-theme-duration: 0.2s; --swup-fade-theme-duration: 0.2s;
} }

View File

@@ -74,9 +74,9 @@
} }
@utility card-hover-icon-scale { @utility card-hover-icon-scale {
@apply transition-all duration-300 @apply transition-transform duration-300 will-change-transform
drop-shadow-md dark:drop-shadow-xl dark:drop-shadow-neutral-500/60 drop-shadow-md dark:drop-shadow-xl dark:drop-shadow-neutral-500/60
group-hover:scale-110 group-hover:scale-3d group-hover:scale-110
} }
@utility card-text-header { @utility card-text-header {