diff --git a/netlify.toml b/netlify.toml deleted file mode 100755 index 383c421..0000000 --- a/netlify.toml +++ /dev/null @@ -1,6 +0,0 @@ -[build] -publish = "dist" -command = "yarn build" - -[build.environment] -NODE_VERSION = "22.20.0" diff --git a/public/images/projects/dv_dark.png b/public/images/projects/dv_dark.png new file mode 100644 index 0000000..6dbaf5f Binary files /dev/null and b/public/images/projects/dv_dark.png differ diff --git a/public/images/projects/dv_light.png b/public/images/projects/dv_light.png new file mode 100644 index 0000000..116ce65 Binary files /dev/null and b/public/images/projects/dv_light.png differ diff --git a/public/images/projects/prismo.png b/public/images/projects/prismo.png new file mode 100644 index 0000000..a5f1dbc Binary files /dev/null and b/public/images/projects/prismo.png differ diff --git a/src/content.config.ts b/src/content.config.ts index 9a4c6ea..9f45793 100755 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -44,6 +44,7 @@ const projectsCollection = defineCollection({ description: z.string().optional(), date: z.date().optional(), image: z.string().optional(), + dark_image: z.string().optional(), show_image: z.boolean().default(true), categories: z.array(z.string()).default(["others"]), tags: z.array(z.string()).default(["others"]), diff --git a/src/content/awards/2015-central-california-science-fair.mdx b/src/content/awards/2015-central-california-science-fair.mdx index cf30d65..e6e7dbe 100644 --- a/src/content/awards/2015-central-california-science-fair.mdx +++ b/src/content/awards/2015-central-california-science-fair.mdx @@ -13,11 +13,11 @@ draft: false Alongside Project Maverick, I received several awards from the 2015 Central California Science and Engineering Fair! -* Sweepstakes Champion – Best in Show -* 1st Place in the category of Robotics -* Fresno State University Engineering Scholarship -* Downing Planetarium Award -* Fresno-Madera Dental Association Best in Show Award +- Sweepstakes Champion – Best in Show +- 1st Place in the category of Robotics +- Fresno State University Engineering Scholarship +- Downing Planetarium Award +- Fresno-Madera Dental Association Best in Show Award diff --git a/src/content/awards/2015-intel-isef.mdx b/src/content/awards/2015-intel-isef.mdx index ce9fac8..0cebf07 100644 --- a/src/content/awards/2015-intel-isef.mdx +++ b/src/content/awards/2015-intel-isef.mdx @@ -29,6 +29,6 @@ Alongside Project Maverick, I won the IEEE President’s Scholarship Award at th src: "/images/awards/HSScienceFair/2015_IEEE_Award.jpg", alt: "IEEE Award Plaque", caption: "IEEE Award Plaque", - } + }, ]} /> diff --git a/src/content/awards/2016-central-california-science-fair.mdx b/src/content/awards/2016-central-california-science-fair.mdx index 61daa50..9de18f5 100644 --- a/src/content/awards/2016-central-california-science-fair.mdx +++ b/src/content/awards/2016-central-california-science-fair.mdx @@ -13,10 +13,10 @@ draft: false Alongside Project Maverick, I received several awards from the 2016 Central California Science and Engineering Fair! -* Sweepstakes Champion – Best in show -* 1st Place in the category of Engineering -* 2016 Excellence in Science Award -* Downing Planetarium Award +- Sweepstakes Champion – Best in show +- 1st Place in the category of Engineering +- 2016 Excellence in Science Award +- Downing Planetarium Award In recognition of my performance at the 2016 Intel International Science - and Engineering Fair, MIT Lincoln Laboratory named a newly discovered - asteroid in my honor. Welcome to existence, Minor Planet 33662 Tacescu! - Read more about it here: - https://ssd.jpl.nasa.gov/tools/sbdb_lookup.html#/?sstr=33662 +and Engineering Fair, MIT Lincoln Laboratory named a newly discovered +asteroid in my honor. Welcome to existence, Minor Planet 33662 Tacescu! +Read more about it here: +https://ssd.jpl.nasa.gov/tools/sbdb_lookup.html#/?sstr=33662 ![Minor Planet Diploma](/images/awards/2017-Minor-Planet-Award.jpg) diff --git a/src/content/projects/dimensional-variable.md b/src/content/projects/dimensional-variable.md new file mode 100644 index 0000000..4b18867 --- /dev/null +++ b/src/content/projects/dimensional-variable.md @@ -0,0 +1,24 @@ +--- +title: "Dimensional Variable" +meta_title: "Dimensional Variable - Alex Tacescu" +description: "A multi-language units library that makes dimensional analysis, conversions, and unit-safe math behave correctly in code" +date: 2025-09-18 +image: "/images/projects/dv_light.png" +dark_image: "/images/projects/dv_dark.png" +categories: ["Software", "Personal Projects"] +tags: ["Dimensional Variable", "Developer Tools", "Rust", "Python"] +featured: true +draft: false +--- + +Dimensional Variable, or DV, is a software library for working with physical units in code without the usual ambiguity and conversion mistakes. It is designed to make units first-class, so calculations stay dimensionally correct while still being straightforward to write and integrate into real projects. It supports multiple programming languages, with a focus on Rust, C++, and Python, and provides features like unit-safe math, automatic conversions, and dimensional analysis. + +Learn more on the project's website: https://dv.alextac.com. + +## Links + +- [Project site](https://dv.alextac.com) +- [Documentation](https://dv.alextac.com/docs/intro) +- [GitHub](https://github.com/alextac98/dv) +- [crates.io package](https://crates.io/crates/dv) +- [PyPI package](https://pypi.org/project/dv-py/) diff --git a/src/content/projects/prismo.md b/src/content/projects/prismo.md new file mode 100644 index 0000000..633279b --- /dev/null +++ b/src/content/projects/prismo.md @@ -0,0 +1,21 @@ +--- +title: "Prismo" +meta_title: "Prismo - Alex Tacescu" +description: "A terminal-first telemetry viewer for debugging robots, spacecraft, and other systems with live data in a fast plugin-extensible TUI" +date: 2026-04-15 +image: "/images/projects/prismo.png" +categories: ["Software", "Personal Projects"] +tags: ["Prismo", "Telemetry", "Developer Tools", "TUI"] +featured: true +draft: false +--- + +Prismo is a terminal-first telemetry viewer built for fast debugging. It lets users inspect live data streams directly in the shell, which keeps the feedback loop tight when working on robots, spacecraft, and other systems that produce a lot of runtime telemetry. It can be used for anything from CAN bus data on a robot to live sensor readings from a satellite, and its plugin architecture makes it adaptable to different protocols and platforms. + +Learn more at the project website: https://prismo.alextac.com. + +## Links + +- [Project site](https://prismo.alextac.com) +- [Documentation](https://prismo.alextac.com/docs/) +- [GitHub](https://github.com/alextac98/prismo) diff --git a/src/content/projects/ri3d-2018.mdx b/src/content/projects/ri3d-2018.mdx index 7ac40a6..7531900 100644 --- a/src/content/projects/ri3d-2018.mdx +++ b/src/content/projects/ri3d-2018.mdx @@ -7,7 +7,7 @@ image: "/images/projects/ri3d-2018.png" show_image: false categories: ["Robotics"] tags: ["RobotIn3Days", "WPI", "FIRST FRC"] -featured: true +featured: false draft: false --- diff --git a/src/content/projects/smallkat-mqp.mdx b/src/content/projects/smallkat-mqp.mdx index c460b2d..d10b2a2 100644 --- a/src/content/projects/smallkat-mqp.mdx +++ b/src/content/projects/smallkat-mqp.mdx @@ -7,7 +7,7 @@ image: "/images/projects/SmallKat/SmallKat.jpg" show_image: false categories: ["Robotics", "Personal Projects"] tags: ["SmallKat MQP", "Major Project", "WPI"] -featured: true +featured: false draft: false --- diff --git a/src/layouts/PostSingle.astro b/src/layouts/PostSingle.astro index e667f92..33a6fe8 100755 --- a/src/layouts/PostSingle.astro +++ b/src/layouts/PostSingle.astro @@ -16,7 +16,16 @@ const { post } = Astro.props; const posts = await getSinglePage(COLLECTION_FOLDER); const similarPosts = similarItems(post, posts); const { Content } = await render(post); -const { title, description, author, categories, image, date, tags, show_image } = post.data; +const { + title, + description, + author, + categories, + image, + date, + tags, + show_image, +} = post.data; ---
diff --git a/src/layouts/components/BlogCard.astro b/src/layouts/components/BlogCard.astro index ee1761e..2eb0561 100644 --- a/src/layouts/components/BlogCard.astro +++ b/src/layouts/components/BlogCard.astro @@ -11,48 +11,63 @@ const { }: { summary_length: number; blog_folder: string } = config.settings; const { data } = Astro.props; const { title, image, date, author, categories } = data.data; +const href = `/${blog_folder}/${data.id}`; --- -
- { - image && ( - - ) - } -

- - {title} - -

- -

{plainify(data.body?.slice(0, Number(summary_length)))}

- - read more - -
+ + +

{plainify(data.body?.slice(0, Number(summary_length)))}

+ + read more + + + diff --git a/src/layouts/components/ImageMod.astro b/src/layouts/components/ImageMod.astro index 1ce807a..88480a7 100644 --- a/src/layouts/components/ImageMod.astro +++ b/src/layouts/components/ImageMod.astro @@ -1,10 +1,11 @@ --- import type { ImageMetadata } from "astro"; -import { Image } from "astro:assets"; +import { getImage, Image } from "astro:assets"; // Props interface for the component interface Props { src: string; + darkSrc?: string; alt: string; width: number; height: number; @@ -18,6 +19,7 @@ interface Props { // Destructuring Astro.props to get the component's props let { src, + darkSrc, alt, width, height, @@ -28,33 +30,131 @@ let { style, } = Astro.props; -src = `/public${src}`; +const lightSrc = `/public${src}`; +const resolvedDarkSrc = darkSrc ? `/public${darkSrc}` : undefined; // Glob pattern to load images from the /public/images folder const images = import.meta.glob("/public/images/**/*.{jpeg,jpg,png,gif,svg}"); // Check if the source path is valid -const isValidPath = images[src] ? true : false; +const isValidPath = images[lightSrc] ? true : false; +const isValidDarkPath = resolvedDarkSrc ? !!images[resolvedDarkSrc] : true; +const imageFormat = format === "auto" ? undefined : format; +const imageTransform = { + width, + height, + ...(imageFormat ? { format: imageFormat } : {}), +}; + +const lightImage = + isValidPath && resolvedDarkSrc && isValidDarkPath + ? await getImage({ + src: images[lightSrc]() as Promise<{ + default: ImageMetadata; + }>, + ...imageTransform, + }) + : undefined; +const darkImage = + resolvedDarkSrc && isValidDarkPath + ? await getImage({ + src: images[resolvedDarkSrc]() as Promise<{ + default: ImageMetadata; + }>, + ...imageTransform, + }) + : undefined; // Log a warning message in red if the image is not found !isValidPath && console.error( - `\x1b[31mImage not found - ${src}.\x1b[0m Make sure the image is in the /public/images folder.`, + `\x1b[31mImage not found - ${lightSrc}.\x1b[0m Make sure the image is in the /public/images folder.`, + ); + +!isValidDarkPath && + console.error( + `\x1b[31mImage not found - ${resolvedDarkSrc}.\x1b[0m Make sure the image is in the /public/images folder.`, ); --- { - isValidPath && ( - } - alt={alt} - width={width} - height={height} - loading={loading} - decoding={decoding} - class={className} - format={format} - style={style} - /> - ) + isValidPath && + (lightImage && darkImage ? ( + <> + {alt} + + + ) : ( + } + alt={alt} + width={width} + height={height} + loading={loading} + decoding={decoding} + class={className} + format={format} + style={style} + /> + )) } + + diff --git a/src/layouts/components/ProjectCard.astro b/src/layouts/components/ProjectCard.astro index 57d3e34..6b11565 100644 --- a/src/layouts/components/ProjectCard.astro +++ b/src/layouts/components/ProjectCard.astro @@ -10,6 +10,7 @@ interface Props { data: { title: string; image?: string; + dark_image?: string; date?: Date; categories?: string[]; description?: string; @@ -21,52 +22,69 @@ interface Props { } const { data, basePath } = Astro.props; -const { title, image, date, categories, description, featured } = data.data; +const { title, image, dark_image, date, categories, description, featured } = + data.data; +const href = `/${basePath}/${data.id}`; --- -
- { - image && ( - - ) - } - { - featured && ( - - Featured - - ) - } -

- - {title} - -

- - {description &&

{description}

} - - read more - -
+ { + featured && ( + + Featured + + ) + } +

+ + {title} + +

+ + {description &&

{description}

} + + read more + + + diff --git a/src/layouts/shortcodes/ImageGallery.astro b/src/layouts/shortcodes/ImageGallery.astro index db09885..909fc6d 100644 --- a/src/layouts/shortcodes/ImageGallery.astro +++ b/src/layouts/shortcodes/ImageGallery.astro @@ -51,44 +51,71 @@ const swiperOptions = {