Compare commits

...

10 Commits
2.0.1 ... main

Author SHA1 Message Date
b58cbdbe0a remove old files
All checks were successful
renovate / renovate (push) Successful in 38s
test-build / build (push) Successful in 1m15s
2025-08-11 21:11:44 -05:00
49e2376dbf release 2.0.5
All checks were successful
renovate / renovate (push) Successful in 25s
test-build / build (push) Successful in 55s
release-image / release (push) Successful in 4m45s
2025-08-11 19:37:01 -05:00
6b1eaa439a fix value
Some checks failed
renovate / renovate (push) Has been cancelled
test-build / build (push) Has been cancelled
2025-08-11 19:36:44 -05:00
f92f911360 release 2.0.4
Some checks failed
renovate / renovate (push) Successful in 46s
test-build / build (push) Failing after 47s
release-image / release (push) Failing after 1m26s
2025-08-11 19:34:59 -05:00
1cdbbd4a11 use double quotes
Some checks failed
test-build / build (push) Has been cancelled
renovate / renovate (push) Has been cancelled
2025-08-11 19:34:43 -05:00
da7c5c4a58 release 2.0.3
Some checks failed
renovate / renovate (push) Successful in 26s
test-build / build (push) Failing after 33s
release-image / release (push) Failing after 1m18s
2025-08-11 19:29:43 -05:00
931d1009ed support published value
Some checks failed
renovate / renovate (push) Has been cancelled
test-build / build (push) Has been cancelled
2025-08-11 19:29:26 -05:00
43ff986963 release 2.0.2
Some checks failed
renovate / renovate (push) Successful in 34s
test-build / build (push) Failing after 35s
release-image / release (push) Failing after 1m11s
2025-08-11 19:11:27 -05:00
b9d85a5520 fix layout
Some checks failed
renovate / renovate (push) Successful in 31s
test-build / build (push) Failing after 39s
2025-08-11 19:10:46 -05:00
9836b40531 fix height 2025-08-11 18:48:08 -05:00
14 changed files with 24 additions and 116 deletions

View File

@@ -1,7 +1,7 @@
ARG REGISTRY=docker.io ARG REGISTRY=docker.io
FROM ${REGISTRY}/node:22.18.0-alpine3.22 AS base FROM ${REGISTRY}/node:22.18.0-alpine3.22 AS base
LABEL version="2.0.1" LABEL version="2.0.5"
LABEL description="Astro based personal website" LABEL description="Astro based personal website"
ENV PNPM_HOME="/pnpm" ENV PNPM_HOME="/pnpm"

View File

@@ -1,23 +0,0 @@
# MIT License
Copyright (c) 2025 Lê Vĩnh Khang
Copyright (c) 2025 Alex Lebens
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,7 +1,7 @@
{ {
"name": "site-profile", "name": "site-profile",
"type": "module", "type": "module",
"version": "2.0.1", "version": "2.0.5",
"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",

View File

@@ -5,21 +5,9 @@ interface Props {
description: string; description: string;
count: number; count: number;
publishDate: string; publishDate: string;
layoutPattern?: {
smCol: number;
mdCol: number;
row: number;
index: number;
};
} }
const { slug, layoutPattern, title, description, count, publishDate } = Astro.props; const { slug, title, description, count, publishDate } = Astro.props;
const isSingleItem =
layoutPattern &&
layoutPattern.row === 1 &&
(layoutPattern.smCol === 1 || layoutPattern.mdCol === 1);
const formatedDescription = isSingleItem ? `No description available` : description;
const baseClasses = const baseClasses =
'group group-hover rounded-xl flex h-full min-h-[220px] cursor-pointer flex-col overflow-hidden'; 'group group-hover rounded-xl flex h-full min-h-[220px] cursor-pointer flex-col overflow-hidden';
@@ -32,17 +20,17 @@ const bgColorClasses =
<div <div
class={`relative min-h-0 flex-grow overflow-hidden transition-all duration-300 ${bgColorClasses}`} class={`relative min-h-0 flex-grow overflow-hidden transition-all duration-300 ${bgColorClasses}`}
> >
<div class="absolute inset-1 flex flex-col justify-end p-3 md:p-4 lg:p-5"> <div class="absolute inset-1 flex flex-col p-3 md:p-4 lg:p-5">
<div class="overflow-hidden">
<h2 <h2
class="group-hover:text-steel dark:group-hover:text-bermuda transition-text mb-4 text-4xl font-extrabold tracking-tight text-balance text-neutral-800 duration-300 dark:text-neutral-200" class="group-hover:text-steel dark:group-hover:text-bermuda transition-text mb-4 text-4xl font-extrabold tracking-tight text-balance whitespace-nowrap text-neutral-800 duration-300 dark:text-neutral-200"
> >
{title} {title}
</h2> </h2>
<p <p class="mb-4 font-light text-neutral-600 sm:text-lg dark:text-neutral-400">
class=`mb-4 ${isSingleItem ? 'hidden lg:block' : ''} max-w-prose text-pretty font-light text-neutral-600 dark:text-neutral-400 sm:text-lg` {description}
>
{formatedDescription}
</p> </p>
</div>
<div <div
class="mt-auto flex items-center justify-between pt-1 text-xs text-neutral-600 md:pt-2 dark:text-neutral-300" class="mt-auto flex items-center justify-between pt-1 text-xs text-neutral-600 md:pt-2 dark:text-neutral-300"
> >

View File

@@ -10,7 +10,7 @@ interface Props {
const { title, description, url, icon } = Astro.props; const { title, description, url, icon } = Astro.props;
const baseClasses = 'smooth-reveal-2 group group-hover flex flex-col'; const baseClasses = 'smooth-reveal-2 group group-hover flex flex-col ';
const borderClasses = 'border border-neutral-100 dark:border-stone-500/20'; const borderClasses = 'border border-neutral-100 dark:border-stone-500/20';
const bgColorClasses = const bgColorClasses =
'bg-neutral-100/80 hover:bg-neutral-100 dark:bg-neutral-800/60 dark:hover:bg-neutral-800/90'; 'bg-neutral-100/80 hover:bg-neutral-100 dark:bg-neutral-800/60 dark:hover:bg-neutral-800/90';
@@ -19,7 +19,7 @@ const shadowClasses = 'shadow-xs hover:shadow-md dark:shadow-md dark:hover:shado
<div class={`${baseClasses}`}> <div class={`${baseClasses}`}>
<a <a
class={`rounded-xl duration-300 transition-all ${borderClasses} ${bgColorClasses} ${shadowClasses}`} class={`rounded-xl duration-300 transition-all h-30 ${borderClasses} ${bgColorClasses} ${shadowClasses}`}
href={url} href={url}
data-astro-prefetch data-astro-prefetch
> >

View File

@@ -7,6 +7,7 @@ import BlogCard from '@components/blog/BlogCard.astro';
const posts = await directus.request( const posts = await directus.request(
readItems('posts', { readItems('posts', {
filter: { published: { _eq: true } },
fields: ['*'], fields: ['*'],
sort: ['-published_date'], sort: ['-published_date'],
}) })

5
src/env.d.ts vendored
View File

@@ -1,8 +1,3 @@
<<<<<<< HEAD
/// <reference path="../.astro/types.d.ts" /> /// <reference path="../.astro/types.d.ts" />
/// <reference types="astro/client" /> /// <reference types="astro/client" />
/// <reference types="astro/content" /> /// <reference types="astro/content" />
=======
/// <reference types="astro/client" />
/// <reference path="../.astro/types.d.ts" />
>>>>>>> 184f0c7 (fix path)

View File

@@ -25,6 +25,7 @@ export type Post = {
tags: string[]; tags: string[];
category: string; category: string;
selected: boolean; selected: boolean;
published: boolean;
content: string; content: string;
image: string; image: string;
image_alt: string; image_alt: string;

View File

@@ -13,6 +13,7 @@ import blogImg from '@images/autumn_tree.png';
const global = await directus.request(readSingleton('site_global')); const global = await directus.request(readSingleton('site_global'));
const posts = await directus.request( const posts = await directus.request(
readItems('posts', { readItems('posts', {
filter: { published: { _eq: true } },
fields: ['*'], fields: ['*'],
sort: ['-published_date'], sort: ['-published_date'],
}) })

View File

@@ -21,6 +21,7 @@ const { category } = Astro.props;
const global = await directus.request(readSingleton('site_global')); const global = await directus.request(readSingleton('site_global'));
const posts = await directus.request( const posts = await directus.request(
readItems('posts', { readItems('posts', {
filter: { published: { _eq: true } },
fields: ['*'], fields: ['*'],
sort: ['-published_date'], sort: ['-published_date'],
}) })

View File

@@ -14,6 +14,7 @@ import categoryImg from '@images/autumn_bench.png';
const global = await directus.request(readSingleton('site_global')); const global = await directus.request(readSingleton('site_global'));
const posts = await directus.request( const posts = await directus.request(
readItems('posts', { readItems('posts', {
filter: { published: { _eq: true } },
fields: ['*'], fields: ['*'],
sort: ['-published_date'], sort: ['-published_date'],
}) })
@@ -118,7 +119,6 @@ const description =
description={category.data.description} description={category.data.description}
count={postMap.get(category.slug)?.length ?? 0} count={postMap.get(category.slug)?.length ?? 0}
publishDate={timeago(postMap.get(category.slug)?.[0]?.published_date)} publishDate={timeago(postMap.get(category.slug)?.[0]?.published_date)}
layoutPattern={category.layoutPattern}
/> />
</div> </div>
); );

View File

@@ -11,7 +11,8 @@ import homeImg from '@images/autumn_mountain.png';
const global = await directus.request(readSingleton('site_global')); const global = await directus.request(readSingleton('site_global'));
const description = 'Engineering the cloud by day, homelab by night, and exploring Minnesota in between.'; const description =
'Engineering the cloud by day, homelab by night, and exploring Minnesota in between.';
--- ---
<BaseLayout <BaseLayout

View File

@@ -23,6 +23,7 @@ export async function GET(context: APIContext) {
// Load the content collection entries to add to our RSS feed. // Load the content collection entries to add to our RSS feed.
const posts = await directus.request( const posts = await directus.request(
readItems('posts', { readItems('posts', {
filter: { published: { _eq: true } },
fields: ['*'], fields: ['*'],
sort: ['-published_date'], sort: ['-published_date'],
}) })

View File

@@ -1,58 +0,0 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}', '*.{js,ts,jsx,tsx,mdx}'],
darkMode: 'class',
theme: {
extend: {
typography: (theme) => ({
DEFAULT: {
css: {
a: {
color: theme('colors.zinc.900'),
'&:hover': {
color: theme('colors.zinc.700'),
},
textDecoration: 'underline',
textDecorationColor: theme('colors.zinc.400'),
textUnderlineOffset: '2px',
},
'h1, h2, h3, h4, h5, h6': {
color: theme('colors.zinc.900'),
},
code: {
color: theme('colors.zinc.900'),
backgroundColor: theme('colors.zinc.100'),
borderRadius: theme('borderRadius.md'),
padding: `${theme('padding.1')} ${theme('padding.1.5')}`,
},
'code::before': {
content: '""',
},
'code::after': {
content: '""',
},
},
},
invert: {
css: {
a: {
color: theme('colors.zinc.100'),
'&:hover': {
color: theme('colors.zinc.300'),
},
textDecorationColor: theme('colors.zinc.700'),
},
'h1, h2, h3, h4, h5, h6': {
color: theme('colors.zinc.100'),
},
code: {
color: theme('colors.zinc.100'),
backgroundColor: theme('colors.zinc.800'),
},
},
},
}),
},
},
plugins: [require('@tailwindcss/typography')],
};