diff --git a/.sitepins/schema/authors.json b/.sitepins/schema/authors.json deleted file mode 100644 index c2b5d87..0000000 --- a/.sitepins/schema/authors.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "file": "src/content/authors/john-doe.md", - "name": "authors", - "fileType": "md", - "fmType": "yaml", - "template": [ - { - "label": "Title", - "name": "title", - "type": "string", - "value": "" - }, - { - "label": "Email", - "name": "email", - "type": "string", - "value": "" - }, - { - "label": "Image", - "name": "image", - "type": "media", - "value": "" - }, - { - "label": "Description", - "name": "description", - "type": "string", - "value": "" - }, - { - "label": "Social", - "name": "social", - "type": "Array", - "fields": [ - { - "label": "Name", - "name": "name", - "type": "string", - "value": "" - }, - { - "label": "Icon", - "name": "icon", - "type": "string", - "value": "" - }, - { - "label": "Link", - "name": "link", - "type": "string", - "value": "" - } - ] - } - ] -} \ No newline at end of file diff --git a/astro.config.mjs b/astro.config.mjs index 4b296e8..aca8fba 100755 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -13,7 +13,7 @@ import config from "./src/config/config.json"; export default defineConfig({ site: config.site.base_url ? config.site.base_url : "http://examplesite.com", base: config.site.base_path ? config.site.base_path : "/", - trailingSlash: config.site.trailing_slash ? "always" : "never", + trailingSlash: "ignore", image: { service: sharp() }, vite: { plugins: [tailwindcss()] }, integrations: [ @@ -28,6 +28,9 @@ export default defineConfig({ "@/shortcodes/Youtube", "@/shortcodes/Tabs", "@/shortcodes/Tab", + "@/shortcodes/FloatImage", + "@/shortcodes/ImageGallery.astro", + "@/components/ImageMod.astro", ], }), mdx(), diff --git a/package.json b/package.json index e508ecf..991d19b 100755 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "remark-collapse": "^0.1.2", "remark-toc": "^9.0.0", "sharp": "^0.34.5", + "spacekit.js": "^0.1.1", "vite": "^7.3.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6df75aa..1add995 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -74,6 +74,9 @@ importers: sharp: specifier: ^0.34.5 version: 0.34.5 + spacekit.js: + specifier: ^0.1.1 + version: 0.1.1 vite: specifier: ^7.3.0 version: 7.3.0(@types/node@24.10.3)(jiti@2.6.1)(lightningcss@1.30.2)(yaml@2.8.2) @@ -1919,6 +1922,9 @@ packages: jsonc-parser@3.3.1: resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + julian@0.2.0: + resolution: {integrity: sha512-rpBcYy7SiT9ogHfxcJQDLycCVGx7nTvAbu0wm3dVnpY71P7asAFT5oOOLrlsDqQYS6qenhE/NHfhtMR7AQqWSQ==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -2368,6 +2374,11 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postprocessing@6.38.2: + resolution: {integrity: sha512-7DwuT7Tkst41ZjSj287g7C9c5/D3Xx5rMgBosg0dadbUPoZD2HNzkadKPol1d2PJAoI9f+Jeh1/v9YfLzpFGVw==} + peerDependencies: + three: '>= 0.157.0 < 0.183.0' + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -2663,6 +2674,9 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spacekit.js@0.1.1: + resolution: {integrity: sha512-JnZWYT2GOmBFX8CXvTpDjc7GlyZxYokjmMDkoQSvIc/9myjSo8KGGICq1Mr4XDoG5NH4CGk2flkEhB16jshiSg==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -2735,6 +2749,9 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} + three@0.135.0: + resolution: {integrity: sha512-kuEpuuxRzLv0MDsXai9huCxOSQPZ4vje6y0gn80SRmQvgz6/+rI0NAvCRAw56zYaWKMGMfqKWsxF9Qa2Z9xymQ==} + tiny-inflate@1.0.3: resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} @@ -5123,6 +5140,8 @@ snapshots: jsonc-parser@3.3.1: {} + julian@0.2.0: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -5819,6 +5838,10 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postprocessing@6.38.2(three@0.135.0): + dependencies: + three: 0.135.0 + prelude-ls@1.2.1: {} prettier-plugin-astro@0.14.1: @@ -6164,6 +6187,12 @@ snapshots: space-separated-tokens@2.0.2: {} + spacekit.js@0.1.1: + dependencies: + julian: 0.2.0 + postprocessing: 6.38.2(three@0.135.0) + three: 0.135.0 + sprintf-js@1.0.3: {} stream-replace-string@2.0.0: {} @@ -6238,6 +6267,8 @@ snapshots: tapable@2.3.0: {} + three@0.135.0: {} + tiny-inflate@1.0.3: {} tinyexec@1.0.2: {} diff --git a/public/images/awards/2017-Minor-Planet-Award.jpg b/public/images/awards/2017-Minor-Planet-Award.jpg new file mode 100644 index 0000000..c8fe437 Binary files /dev/null and b/public/images/awards/2017-Minor-Planet-Award.jpg differ diff --git a/public/images/awards/HSScienceFair/2015-CCSF-1.jpg b/public/images/awards/HSScienceFair/2015-CCSF-1.jpg new file mode 100644 index 0000000..dd7490b Binary files /dev/null and b/public/images/awards/HSScienceFair/2015-CCSF-1.jpg differ diff --git a/public/images/awards/HSScienceFair/2015-CCSF-2.jpg b/public/images/awards/HSScienceFair/2015-CCSF-2.jpg new file mode 100644 index 0000000..bb97aa0 Binary files /dev/null and b/public/images/awards/HSScienceFair/2015-CCSF-2.jpg differ diff --git a/public/images/awards/HSScienceFair/2015-California-Science-Fair.jpg b/public/images/awards/HSScienceFair/2015-California-Science-Fair.jpg new file mode 100644 index 0000000..8d9aa42 Binary files /dev/null and b/public/images/awards/HSScienceFair/2015-California-Science-Fair.jpg differ diff --git a/public/images/awards/HSScienceFair/2015_IEEE_Award.jpg b/public/images/awards/HSScienceFair/2015_IEEE_Award.jpg new file mode 100644 index 0000000..83c592c Binary files /dev/null and b/public/images/awards/HSScienceFair/2015_IEEE_Award.jpg differ diff --git a/public/images/awards/HSScienceFair/2015_ISEF_1.jpg b/public/images/awards/HSScienceFair/2015_ISEF_1.jpg new file mode 100644 index 0000000..274a46e Binary files /dev/null and b/public/images/awards/HSScienceFair/2015_ISEF_1.jpg differ diff --git a/public/images/awards/HSScienceFair/2015_ISEF_2.jpg b/public/images/awards/HSScienceFair/2015_ISEF_2.jpg new file mode 100644 index 0000000..2b85207 Binary files /dev/null and b/public/images/awards/HSScienceFair/2015_ISEF_2.jpg differ diff --git a/public/images/awards/HSScienceFair/2016-ISEF-2nd-Place-Award-2.jpg b/public/images/awards/HSScienceFair/2016-ISEF-2nd-Place-Award-2.jpg new file mode 100644 index 0000000..fcc299d Binary files /dev/null and b/public/images/awards/HSScienceFair/2016-ISEF-2nd-Place-Award-2.jpg differ diff --git a/public/images/awards/HSScienceFair/2016-ISEF-Poster-1.pdf b/public/images/awards/HSScienceFair/2016-ISEF-Poster-1.pdf new file mode 100644 index 0000000..e3b80ab Binary files /dev/null and b/public/images/awards/HSScienceFair/2016-ISEF-Poster-1.pdf differ diff --git a/public/images/awards/HSScienceFair/CentralCaliforniaScienceFairAward2016.jpg b/public/images/awards/HSScienceFair/CentralCaliforniaScienceFairAward2016.jpg new file mode 100644 index 0000000..4c547ff Binary files /dev/null and b/public/images/awards/HSScienceFair/CentralCaliforniaScienceFairAward2016.jpg differ diff --git a/public/images/awards/HSScienceFair/GoogleScienceFair_Award.jpg b/public/images/awards/HSScienceFair/GoogleScienceFair_Award.jpg new file mode 100644 index 0000000..9f1d891 Binary files /dev/null and b/public/images/awards/HSScienceFair/GoogleScienceFair_Award.jpg differ diff --git a/public/images/awards/HSScienceFair/INCOSE_Award.jpg b/public/images/awards/HSScienceFair/INCOSE_Award.jpg new file mode 100644 index 0000000..19537a4 Binary files /dev/null and b/public/images/awards/HSScienceFair/INCOSE_Award.jpg differ diff --git a/public/images/awards/HSScienceFair/ISEF_2016.jpeg b/public/images/awards/HSScienceFair/ISEF_2016.jpeg new file mode 100644 index 0000000..27b8801 Binary files /dev/null and b/public/images/awards/HSScienceFair/ISEF_2016.jpeg differ diff --git a/public/images/awards/HSScienceFair/ISEF_2016_1.jpg b/public/images/awards/HSScienceFair/ISEF_2016_1.jpg new file mode 100644 index 0000000..a354559 Binary files /dev/null and b/public/images/awards/HSScienceFair/ISEF_2016_1.jpg differ diff --git a/public/images/awards/HSScienceFair/ISEF_2016_3.jpg b/public/images/awards/HSScienceFair/ISEF_2016_3.jpg new file mode 100644 index 0000000..847ff64 Binary files /dev/null and b/public/images/awards/HSScienceFair/ISEF_2016_3.jpg differ diff --git a/public/images/awards/HealthHacksRI2017/Drogo_Demo1.jpg b/public/images/awards/HealthHacksRI2017/Drogo_Demo1.jpg new file mode 100644 index 0000000..70a5dc6 Binary files /dev/null and b/public/images/awards/HealthHacksRI2017/Drogo_Demo1.jpg differ diff --git a/public/images/awards/HealthHacksRI2017/Drogo_Demo2.jpg b/public/images/awards/HealthHacksRI2017/Drogo_Demo2.jpg new file mode 100644 index 0000000..7b21a8b Binary files /dev/null and b/public/images/awards/HealthHacksRI2017/Drogo_Demo2.jpg differ diff --git a/public/images/awards/HealthHacksRI2017/HealthHacks17.jpg b/public/images/awards/HealthHacksRI2017/HealthHacks17.jpg new file mode 100644 index 0000000..473f330 Binary files /dev/null and b/public/images/awards/HealthHacksRI2017/HealthHacks17.jpg differ diff --git a/public/images/awards/isef-2016.jpg b/public/images/awards/isef-2016.jpg deleted file mode 100755 index a61a0c0..0000000 Binary files a/public/images/awards/isef-2016.jpg and /dev/null differ diff --git a/public/images/blog/filament-spools.jpg b/public/images/blog/filament-spools.jpg deleted file mode 100755 index a61a0c0..0000000 Binary files a/public/images/blog/filament-spools.jpg and /dev/null differ diff --git a/public/images/blog/linux-desktop.jpg b/public/images/blog/linux-desktop.jpg deleted file mode 100755 index a61a0c0..0000000 Binary files a/public/images/blog/linux-desktop.jpg and /dev/null differ diff --git a/public/images/blog/macbook-setup.jpg b/public/images/blog/macbook-setup.jpg deleted file mode 100755 index a61a0c0..0000000 Binary files a/public/images/blog/macbook-setup.jpg and /dev/null differ diff --git a/public/images/blog/vscode-extensions.jpg b/public/images/blog/vscode-extensions.jpg deleted file mode 100755 index a61a0c0..0000000 Binary files a/public/images/blog/vscode-extensions.jpg and /dev/null differ diff --git a/public/images/personal/team2761/team2761_2013_robot.jpg b/public/images/personal/team2761/team2761_2013_robot.jpg new file mode 100644 index 0000000..db1a95c Binary files /dev/null and b/public/images/personal/team2761/team2761_2013_robot.jpg differ diff --git a/public/images/personal/team2761/team2761_2013_swerve.jpg b/public/images/personal/team2761/team2761_2013_swerve.jpg new file mode 100644 index 0000000..f622637 Binary files /dev/null and b/public/images/personal/team2761/team2761_2013_swerve.jpg differ diff --git a/public/images/personal/team2761/team2761_2014.jpg b/public/images/personal/team2761/team2761_2014.jpg new file mode 100644 index 0000000..0b7b5aa Binary files /dev/null and b/public/images/personal/team2761/team2761_2014.jpg differ diff --git a/public/images/personal/team2761/team2761_2015.jpg b/public/images/personal/team2761/team2761_2015.jpg new file mode 100644 index 0000000..19ed2f7 Binary files /dev/null and b/public/images/personal/team2761/team2761_2015.jpg differ diff --git a/public/images/personal/team2761/team2761_2016.jpg b/public/images/personal/team2761/team2761_2016.jpg new file mode 100644 index 0000000..03174b4 Binary files /dev/null and b/public/images/personal/team2761/team2761_2016.jpg differ diff --git a/public/images/personal/team2761/team2761_alex.jpg b/public/images/personal/team2761/team2761_alex.jpg new file mode 100644 index 0000000..be26b4a Binary files /dev/null and b/public/images/personal/team2761/team2761_alex.jpg differ diff --git a/public/images/personal/team2761/team2761_tshirtcannon.jpg b/public/images/personal/team2761/team2761_tshirtcannon.jpg new file mode 100644 index 0000000..8af50fc Binary files /dev/null and b/public/images/personal/team2761/team2761_tshirtcannon.jpg differ diff --git a/public/images/projects/smallkat.jpg b/public/images/projects/SmallKat/SmallKat.jpg similarity index 100% rename from public/images/projects/smallkat.jpg rename to public/images/projects/SmallKat/SmallKat.jpg diff --git a/public/images/projects/SmallKat/SmallKatMQP_Bowler.png b/public/images/projects/SmallKat/SmallKatMQP_Bowler.png new file mode 100644 index 0000000..8f1416b Binary files /dev/null and b/public/images/projects/SmallKat/SmallKatMQP_Bowler.png differ diff --git a/public/images/projects/SmallKat/SmallKatMQP_Comms.jpg b/public/images/projects/SmallKat/SmallKatMQP_Comms.jpg new file mode 100644 index 0000000..176b925 Binary files /dev/null and b/public/images/projects/SmallKat/SmallKatMQP_Comms.jpg differ diff --git a/public/images/projects/SmallKat/SmallKatMQP_Electronics.jpg b/public/images/projects/SmallKat/SmallKatMQP_Electronics.jpg new file mode 100644 index 0000000..c38f3f0 Binary files /dev/null and b/public/images/projects/SmallKat/SmallKatMQP_Electronics.jpg differ diff --git a/public/images/projects/poverty-stoplight-iqp/IQP_screenshot-indicator-question.png b/public/images/projects/poverty-stoplight-iqp/IQP_screenshot-indicator-question.png new file mode 100644 index 0000000..eb40618 Binary files /dev/null and b/public/images/projects/poverty-stoplight-iqp/IQP_screenshot-indicator-question.png differ diff --git a/public/images/projects/poverty-stoplight-iqp/PS-logo.png b/public/images/projects/poverty-stoplight-iqp/PS-logo.png new file mode 100644 index 0000000..046a6d1 Binary files /dev/null and b/public/images/projects/poverty-stoplight-iqp/PS-logo.png differ diff --git a/public/images/projects/poverty-stoplight-iqp/fp-person-holding-tablet.png b/public/images/projects/poverty-stoplight-iqp/fp-person-holding-tablet.png new file mode 100644 index 0000000..680f1a5 Binary files /dev/null and b/public/images/projects/poverty-stoplight-iqp/fp-person-holding-tablet.png differ diff --git a/public/images/projects/poverty-stoplight-iqp/iqp_screenshot-dashboard.png b/public/images/projects/poverty-stoplight-iqp/iqp_screenshot-dashboard.png new file mode 100644 index 0000000..791c1a6 Binary files /dev/null and b/public/images/projects/poverty-stoplight-iqp/iqp_screenshot-dashboard.png differ diff --git a/public/images/projects/poverty-stoplight.jpg b/public/images/projects/poverty-stoplight.jpg deleted file mode 100755 index a61a0c0..0000000 Binary files a/public/images/projects/poverty-stoplight.jpg and /dev/null differ diff --git a/public/images/projects/ri3d-2018.jpg b/public/images/projects/ri3d-2018.jpg deleted file mode 100755 index a61a0c0..0000000 Binary files a/public/images/projects/ri3d-2018.jpg and /dev/null differ diff --git a/public/images/projects/ri3d-2018.png b/public/images/projects/ri3d-2018.png new file mode 100644 index 0000000..50575b8 Binary files /dev/null and b/public/images/projects/ri3d-2018.png differ diff --git a/public/spacekit/textures/smallparticle.png b/public/spacekit/textures/smallparticle.png new file mode 100644 index 0000000..e0b17a9 Binary files /dev/null and b/public/spacekit/textures/smallparticle.png differ diff --git a/src/config/config.json b/src/config/config.json index a143be8..8faba3c 100755 --- a/src/config/config.json +++ b/src/config/config.json @@ -3,7 +3,6 @@ "title": "AlexTac's Blog and Personal Website", "base_url": "https://alextac.com", "base_path": "/", - "trailing_slash": false, "favicon": "/images/favicon.png", "logo": "/images/logo.png", "logo_darkmode": "/images/logo-darkmode.png", diff --git a/src/config/menu.json b/src/config/menu.json index 57323db..8eff9dd 100755 --- a/src/config/menu.json +++ b/src/config/menu.json @@ -11,7 +11,7 @@ }, { "name": "Publications", - "url": "/publications" + "url": "https://scholar.google.com/citations?user=kqvM1s4AAAAJ&hl=en&oi=ao" }, { "name": "Awards", diff --git a/src/content.config.ts b/src/content.config.ts index 4b1051d..9a4c6ea 100755 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -19,33 +19,14 @@ const blogCollection = defineCollection({ description: z.string().optional(), date: z.date().optional(), image: z.string().optional(), - author: z.string().default("Admin"), + show_image: z.boolean().default(true), + author: z.string().default("Alex Tacescu"), categories: z.array(z.string()).default(["others"]), tags: z.array(z.string()).default(["others"]), draft: z.boolean().optional(), }), }); -// Author collection schema -const authorsCollection = defineCollection({ - loader: glob({ pattern: "**/*.{md,mdx}", base: "src/content/authors" }), - schema: z.object({ - ...commonFields, - social: z - .array( - z - .object({ - name: z.string().optional(), - icon: z.string().optional(), - link: z.string().optional(), - }) - .optional(), - ) - .optional(), - draft: z.boolean().optional(), - }), -}); - // Pages collection schema const pagesCollection = defineCollection({ loader: glob({ pattern: "**/*.{md,mdx}", base: "src/content/pages" }), @@ -63,6 +44,7 @@ const projectsCollection = defineCollection({ description: z.string().optional(), date: z.date().optional(), image: z.string().optional(), + show_image: z.boolean().default(true), categories: z.array(z.string()).default(["others"]), tags: z.array(z.string()).default(["others"]), featured: z.boolean().optional(), @@ -79,6 +61,7 @@ const awardsCollection = defineCollection({ description: z.string().optional(), date: z.date().optional(), image: z.string().optional(), + show_image: z.boolean().default(true), categories: z.array(z.string()).default(["others"]), tags: z.array(z.string()).default(["others"]), featured: z.boolean().optional(), @@ -91,6 +74,7 @@ const aboutCollection = defineCollection({ loader: glob({ pattern: "**/*.{md,mdx}", base: "src/content/about-me" }), schema: z.object({ ...commonFields, + show_image: z.boolean().default(true), }), }); @@ -131,7 +115,6 @@ const homepageCollection = defineCollection({ .object({ enable: z.boolean(), title: z.string(), - url: z.string(), thumbnail: z.string().optional(), fallback_url: z.string().optional(), }) @@ -235,7 +218,6 @@ export const collections = { // Pages homepage: homepageCollection, blog: blogCollection, - authors: authorsCollection, pages: pagesCollection, "about-me": aboutCollection, projects: projectsCollection, diff --git a/src/content/about-me/-index.md b/src/content/about-me/-index.md index ac0af01..d1f7346 100644 --- a/src/content/about-me/-index.md +++ b/src/content/about-me/-index.md @@ -3,18 +3,19 @@ title: "About Me" meta_title: "About Alex Tacescu" description: "Learn more about Alex Tacescu - Lead Flight Software Engineer, Robotics Engineer, and Space Systems Developer" image: "/images/awards/tonight-show.jpg" +show_image: false draft: false --- -Hi, my name is Alex Tacescu, and I am a Lead Flight Software Engineer at [Inversion Space](https://www.inversionspace.com/). Throughout the 14+ years of experience working with robots and 5+ years working in the space industry, I have designed and built over 20 robots, launched countless rockets into space while at SpaceX (including 4+ crewed missions and NASA's Double Asteroid Redirection Test), built and launched a satellite into space with Inversion, written hundreds of thousands lines of code while working with companies like **SpaceX**, **Tesla**, **Amazon Robotics**, and **NASA**. +Hi, my name is Alex Tacescu, and I am a Lead Flight Software Engineer at [Inversion Space](https://www.inversionspace.com/). Throughout the 14+ years of experience working with robots and 5+ years working in the space industry, I have designed and built over 20 robots, launched countless rockets into space while at SpaceX (including 4+ crewed missions and NASA's Double Asteroid Redirection Test), built and launched a satellite into space with Inversion, written hundreds of thousands lines of code while working with companies like [**Inversion Space**](https://inversionspace.com), [**SpaceX**](https://spacex.com), [**Tesla**](https://spacex.com), [**Amazon Robotics**](https://www.aboutamazon.com/news/tag/robotics). -I received my Bachelors and Masters in Robotics Engineering from Worcester Polytechnic Institute (WPI). +I received my Bachelors and Masters in Robotics Engineering from [Worcester Polytechnic Institute (WPI)](https://wpi.edu). ## My Journey For as long as I can remember, I've enjoyed taking things apart to discover how they work. When I was 8 years old, I saved up my money and pre-ordered the LEGO Mindstorm NXT 1.0, which sparked my passion for robotics. After joining my high school FIRST FRC Robotics team (FIRST FRC Team 2761), I became captivated by innovation and the engineering process for making a product. As the Engineering Team Leader of the FRC Team 2761, I really enjoyed designing, building, programming and testing robots. -Inspired by my grandfather's suffering from Parkinson's disease, I started [Project Maverick](https://pmaverick.com/), an omni-directional robotic mobility system for people with walking disabilities. Since then, I've built a fully functional prototype and worked on implementing additional features to optimize the driving capabilities of my system. This project has taken me from the Intel International Science and Engineering Fair, where I got 2nd place in my category of Applied Mechanics, to **The Tonight Show starring Jimmy Fallon**. +Inspired by my grandfather's suffering from Parkinson's disease, I started [Project Maverick](https://pmaverick.com/), an omni-directional robotic mobility system for people with walking disabilities. Since then, I've built a fully functional prototype and worked on implementing additional features to optimize the driving capabilities of my system. This project has taken me from the Intel International Science and Engineering Fair, where I got 2nd place in my category of Applied Mechanics, to [The Tonight Show starring Jimmy Fallon](/awards/tonight-show). ## Academic Experience @@ -28,8 +29,6 @@ During my junior year at WPI, I started work on my Major Qualifying Project: **S In my spare time, I love to play sports and hang out with my friends. Among my favorite sports are tennis and ultimate frisbee, for which I played for my school's teams. I also enjoy skiing, fishing, hiking, and camping with my family and friends. -## My Mission +## Why This Website? -My ultimate aspiration is to one day start a company specializing in applying robotics to enhance people's lifestyles through innovation and technology. - -My motivation for this website is two-fold: share my knowledge, projects, and successes with everyone around the world while having a place to save my personal debugging techniques, show off some of my favorite projects, and share my passion for technology with the world! Therefore, this website will contain all sorts of topics, from 3D printing and mechanical engineering, to software and operating systems, to photography and general technology. I hope you find some of the information useful and entertaining! +My motivation for this website is two-fold: share my knowledge, projects, and successes with everyone around the world while having a place to save my personal debugging techniques, show off some of my favorite projects, and share my passion for technology with the world! This website contains all sorts of topics, from 3D printing and mechanical engineering, to software / operating systems and artificial intelligence. I hope you find some of the information useful and entertaining! diff --git a/src/content/authors/-index.md b/src/content/authors/-index.md deleted file mode 100644 index da93ef3..0000000 --- a/src/content/authors/-index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: "Authors" -meta_title: "" -description: "this is meta description" -image: "" -draft: false ---- diff --git a/src/content/authors/john-doe.md b/src/content/authors/john-doe.md deleted file mode 100644 index 857f439..0000000 --- a/src/content/authors/john-doe.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: John Doe -email: johndoe@email.com -image: "/images/avatar.png" -description: this is meta description -social: - - name: github - icon: FaGithub - link: https://github.com - - - name: twitter - icon: FaTwitter - link: https://twitter.com - - - name: linkedin - icon: FaLinkedin - link: https://linkedin.com ---- - -lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr navigation et dolore magna aliqua. diff --git a/src/content/authors/sam-wilson.md b/src/content/authors/sam-wilson.md deleted file mode 100644 index d3ab0e5..0000000 --- a/src/content/authors/sam-wilson.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Sam Wilson -email: samwilson@email.com -image: "/images/avatar.png" -description: this is meta description -social: - - name: github - icon: FaGithub - link: https://github.com - - - name: twitter - icon: FaTwitter - link: https://twitter.com - - - name: linkedin - icon: FaLinkedin - link: https://linkedin.com ---- - -lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr navigation et dolore magna aliqua. diff --git a/src/content/authors/william-jacob.md b/src/content/authors/william-jacob.md deleted file mode 100644 index ae44bdd..0000000 --- a/src/content/authors/william-jacob.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: William Jacob -email: williamjacob@email.com -image: "/images/avatar.png" -description: this is meta description -social: - - name: github - icon: FaGithub - link: https://github.com - - - name: twitter - icon: FaTwitter - link: https://twitter.com - - - name: linkedin - icon: FaLinkedin - link: https://linkedin.com ---- - -lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr navigation et dolore magna aliqua. diff --git a/src/content/awards/2015-california-science-fair.mdx b/src/content/awards/2015-california-science-fair.mdx new file mode 100644 index 0000000..ea61aad --- /dev/null +++ b/src/content/awards/2015-california-science-fair.mdx @@ -0,0 +1,24 @@ +--- +title: "2015 California State Science Fair - 1st Place!" +meta_title: "2015 California Science Fair - Alex Tacescu" +description: "1st Place in Applied Mechanics at the 2015 California State Science Fair!" +date: 2015-05-02 +image: "/images/awards/HSScienceFair/2015-California-Science-Fair.jpg" +show_image: false +categories: ["ScienceFair"] +tags: ["ISEF", "ProjectMaverick"] +featured: false +draft: false +--- + +Alongside Project Maverick, I received 1st place in the category of Applied Mechanics at the 2015 California State Science Fair! + + diff --git a/src/content/awards/2015-central-california-science-fair.mdx b/src/content/awards/2015-central-california-science-fair.mdx new file mode 100644 index 0000000..cf30d65 --- /dev/null +++ b/src/content/awards/2015-central-california-science-fair.mdx @@ -0,0 +1,35 @@ +--- +title: "2015 Central California Science Fair Awards - 1st Place!" +meta_title: "2015 Central California Science Fair - Alex Tacescu" +description: "1st Place among other awards at the 2015 Central California Science and Engineering Fair!" +date: 2015-03-10 +image: "/images/awards/HSScienceFair/2015-CCSF-1.jpg" +show_image: false +categories: ["ScienceFair"] +tags: ["ProjectMaverick"] +featured: false +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 + + diff --git a/src/content/awards/2015-intel-isef.mdx b/src/content/awards/2015-intel-isef.mdx new file mode 100644 index 0000000..ce9fac8 --- /dev/null +++ b/src/content/awards/2015-intel-isef.mdx @@ -0,0 +1,34 @@ +--- +title: "Intel ISEF 2015 - IEEE Award" +meta_title: "Intel ISEF 2015 - Alex Tacescu" +description: "Awards won at 2015 Intel International Science and Engineering Fair." +date: 2015-05-13 +image: "/images/awards/HSScienceFair/2015_ISEF_1.jpg" +show_image: false +categories: ["ScienceFair"] +tags: ["ISEF", "ProjectMaverick"] +featured: true +draft: false +--- + +Alongside Project Maverick, I won the IEEE President’s Scholarship Award at the 2015 Intel International Science and Engineering Fair “for an outstanding project demonstrating an understanding of electrical engineering, electronics engineering, and computer science”. + + diff --git a/src/content/awards/2016-central-california-science-fair.mdx b/src/content/awards/2016-central-california-science-fair.mdx new file mode 100644 index 0000000..61daa50 --- /dev/null +++ b/src/content/awards/2016-central-california-science-fair.mdx @@ -0,0 +1,29 @@ +--- +title: "2016 Central California Science Fair Awards - 1st Place!" +meta_title: "2016 Central California Science Fair - Alex Tacescu" +description: "1st Place among other awards at the 2016 Central California Science and Engineering Fair!" +date: 2016-03-15 +image: "/images/awards/HSScienceFair/CentralCaliforniaScienceFairAward2016.jpg" +show_image: false +categories: ["Science Fair"] +tags: ["ISEF", "ProjectMaverick"] +featured: true +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 + + diff --git a/src/content/awards/2016-google-science-fair.md b/src/content/awards/2016-google-science-fair.md new file mode 100644 index 0000000..a86a3d3 --- /dev/null +++ b/src/content/awards/2016-google-science-fair.md @@ -0,0 +1,13 @@ +--- +title: "2016 Google Science Fair - Regional Finalist" +meta_title: "2016 Google Science Fair - Alex Tacescu" +description: "Awarded Regional Finalist for 2016 Google Science Fair!" +date: 2016-05-20 +image: "/images/awards/HSScienceFair/GoogleScienceFair_Award.jpg" +categories: ["ScienceFair"] +tags: ["ProjectMaverick"] +featured: true +draft: false +--- + +Alongside Project Maverick, I became a 2016 Google Science Fair Regional Finalist, one of 100 in the entire world! Google has sadly stopped doing science fairs, and subsequently taken down the website, but you can see the project here: https://pmaverick.com diff --git a/src/content/awards/2016-intel-isef.mdx b/src/content/awards/2016-intel-isef.mdx new file mode 100644 index 0000000..41107a4 --- /dev/null +++ b/src/content/awards/2016-intel-isef.mdx @@ -0,0 +1,39 @@ +--- +title: "Intel ISEF 2016 Awards - 2nd Place!" +meta_title: "Intel ISEF 2016 - Alex Tacescu" +description: "Awarded 2nd place in the category of Engineering Mechanics at the Intel International Science and Engineering Fair" +date: 2016-05-19 +image: "/images/awards/HSScienceFair/ISEF_2016.jpeg" +show_image: false +categories: ["Major Awards"] +tags: ["ISEF", "ProjectMaverick"] +featured: true +draft: false +--- + +Awarded 2nd place in the category of Engineering Mechanics at the Intel International Science and Engineering Fair alongside Project Maverick. + +In throughout ISEF 2016, I also received: + +- Best in Show from the International Council of System Engineers (INCOSE) +- [Minor Planet (asteroid) 33662 named in my honor](/awards/asteroid-tacescu) + + diff --git a/src/content/awards/asteroid-tacescu.mdx b/src/content/awards/asteroid-tacescu.mdx new file mode 100644 index 0000000..6a2dec8 --- /dev/null +++ b/src/content/awards/asteroid-tacescu.mdx @@ -0,0 +1,24 @@ +--- +title: "Asteroid 33662 Named Tacescu" +meta_title: "Asteroid 33662 Named Tacescu" +description: "In recognition for my achievements at ISEF 2016, MIT Lincoln Laboratory named an asteroid after me: 33662 Tacescu." +date: 2016-05-20 +image: "/images/awards/2017-Minor-Planet-Award.jpg" +show_image: false +categories: ["Major Awards"] +tags: ["ISEF", "ProjectMaverick"] +featured: true +draft: false +--- + +import AsteroidViewer from "@/shortcodes/AsteroidViewer.tsx"; + + + +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 + +![Minor Planet Diploma](/images/awards/2017-Minor-Planet-Award.jpg) diff --git a/src/content/awards/intel-isef-2016.md b/src/content/awards/intel-isef-2016.md deleted file mode 100644 index 287aa64..0000000 --- a/src/content/awards/intel-isef-2016.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: "2nd Place at Intel ISEF 2016" -meta_title: "Intel ISEF 2016 - Alex Tacescu" -description: "Placed 2nd place in the category of Engineering Mechanics at the Intel International Science and Engineering Fair" -date: 2016-05-20 -image: "/images/awards/isef-2016.jpg" -categories: ["Major Awards"] -tags: ["ISEF", "Project Maverick"] -featured: true -draft: false ---- - -Placed **2nd place** in the category of Engineering Mechanics at the Intel International Science and Engineering Fair alongside Project Maverick. - -## About Intel ISEF - -The Intel International Science and Engineering Fair (ISEF) is the world's largest international pre-college science competition. Each year, approximately 1,800 high school students from more than 80 countries, regions, and territories are awarded the opportunity to showcase their independent research and compete for prizes. - -## My Achievement - -At ISEF 2016, I presented Project Maverick - my omni-directional robotic mobility system designed to help people with walking disabilities. The project was evaluated by expert judges in the Engineering Mechanics category, where I earned 2nd place. - -## Additional Awards at ISEF 2016 - -Throughout ISEF 2016, I also received: - -- **Best in Show from the International Council of System Engineers (INCOSE)** - Recognizing excellence in systems engineering approach -- **Minor Planet 33662 named "Tacescu"** in my honor - An asteroid was named after me as recognition of my scientific achievements - -## The Competition - -Competing at ISEF was an incredible experience. Being surrounded by brilliant young scientists and engineers from around the world was both humbling and inspiring. The rigorous judging process challenged me to clearly articulate the engineering principles behind Project Maverick and defend my design decisions. - -## Presentation Materials - -The poster I presented at the 2016 Intel International Science and Engineering Fair showcased: - -- The problem of mobility challenges for people with walking disabilities -- The innovative omni-directional drive system -- Engineering analysis and testing results -- Future development plans - -## Impact - -This recognition at ISEF validated years of work on Project Maverick and opened doors for further development and opportunities, including my appearance on The Tonight Show starring Jimmy Fallon. diff --git a/src/content/awards/nasa-src-finalist.md b/src/content/awards/nasa-src-finalist.md deleted file mode 100644 index 638853d..0000000 --- a/src/content/awards/nasa-src-finalist.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: "NASA Space Robotics Challenge Team WPI Finalists" -meta_title: "NASA Space Robotics Challenge Finalist - Alex Tacescu" -description: "Finalists in NASA's Space Robotics Challenge, developing software for humanoid robots to perform tasks on Mars" -date: 2018-01-15 -image: "/images/awards/nasa-src.png" -categories: ["Awards"] -tags: ["NASA SRC", "WPI"] -featured: true -draft: false ---- - -## What is NASA's Space Robotics Challenge? - -The NASA Space Robotics Challenge was an industry competition that tasked teams with developing software for a humanoid robot designed to perform tasks on Mars. This challenge was part of NASA's Centennial Challenges program, which seeks innovative solutions from the public for space exploration. - -## Team WPI's Achievement - -As a member of Team WPI, working out of the WPI Humanoid Robotics Lab, we competed against teams from around the world and were selected as **finalists** in this prestigious competition. - -## The Challenge - -Participants were required to develop software that would enable a simulated R5 Valkyrie humanoid robot to: - -- Navigate the Martian terrain autonomously -- Perform maintenance tasks on a simulated Mars habitat -- Handle unexpected challenges and recover from failures -- Complete mission objectives within time constraints - -## Our Approach - -Our team developed innovative solutions for: - -- **Autonomous Navigation**: Algorithms for traversing uneven Martian terrain -- **Manipulation**: Software for precise control of the robot's arms and hands -- **Task Planning**: Strategic approaches to completing mission objectives efficiently -- **Fault Recovery**: Methods to detect and recover from unexpected situations - -## My Contributions - -As a freshman at WPI working in the Humanoid Robotics Lab, I contributed to: - -- Motion planning and control systems -- Integration of perception and navigation components -- Testing and validation of autonomous behaviors -- Documentation and team coordination - -## Impact - -This experience was formative for my career in space systems. The skills and knowledge gained from this competition directly contributed to my later work at SpaceX and my current role at Inversion Space. - -## Recognition - -Being recognized as finalists in a NASA competition validated our team's technical abilities and the strength of WPI's robotics program. This achievement opened doors to further opportunities in space robotics and systems engineering. diff --git a/src/content/awards/nasa-src-finalist.mdx b/src/content/awards/nasa-src-finalist.mdx new file mode 100644 index 0000000..6f1cc67 --- /dev/null +++ b/src/content/awards/nasa-src-finalist.mdx @@ -0,0 +1,25 @@ +--- +title: "NASA Space Robotics Challenge Team WPI Finalists" +meta_title: "NASA Space Robotics Challenge Finalist - Alex Tacescu" +description: "Finalists in NASA's Space Robotics Challenge, developing software for humanoid robots to perform tasks on Mars" +date: 2018-01-15 +image: "/images/awards/nasa-src.png" +categories: ["Awards"] +tags: ["NASA SRC", "WPI"] +featured: true +draft: false +--- + +## What is NASA's Space Robotics Challenge? + +The NASA Space Robotics Challenge was an industry competition that tasked teams with developing and displaying the ability of an R5 robot to assist with the necessary tasks within a NASA mission, such as one on Mars. We used the Robot Operating System (ROS), and the virtual environment Gazebo to simulate the robot performing the tasks. Read more about the challenge here: https://www.nasa.gov/directorates/spacetech/centennial_challenges/space_robotics/about.html + +## Team WPI's Achievement + +The WPI Humanoid Robotics Lab team was among 20 finalists in the competition, beating out over 405 teams from 55 countries. + +
+ + + +
diff --git a/src/content/awards/project-drogo.mdx b/src/content/awards/project-drogo.mdx new file mode 100644 index 0000000..c2968d3 --- /dev/null +++ b/src/content/awards/project-drogo.mdx @@ -0,0 +1,27 @@ +--- +title: "Project Drogo Wins at HealthHacksRI 2017" +meta_title: "Project Drogo - Alex Tacescu" +description: "A wearable device designed to assist elderly people through post-hip surgery recovery" +date: 2017-10-15 +image: "/images/awards/HealthHacksRI2017/HealthHacks17.jpg" +categories: ["Hackathon"] +tags: [] +featured: false +draft: false +--- + +We developed a wearable device designed to assist elderly people through post-hip surgery recovery. The device has two main functions: + +1. Looking out for prohibited motions + +After a hip replacement, there are a number of motions you can’t do. For example, you can’t bend over, you can’t cross your legs, and you can’t shift your weight to that foot. The wearable watches out for all of these things in the background and can alert you (and a caretaker) if they happen in the days after surgery. + +[![Project Drogo HealthHacksRI2017](/images/awards/HealthHacksRI2017/Drogo_Demo1.jpg)](/images/awards/HealthHacksRI2017/Drogo_Demo1.jpg) + +2. Guiding the user through rehab + +Rehab begins almost immediately after surgery but can be quite expensive and difficult to remember when not under supervision. The app not only makes sure the rehab exercise is completed, but also makes sure the exercise is completed correctly without strain on the new hip. + +[![Project Drogo HealthHacksRI2017](/images/awards/HealthHacksRI2017/Drogo_Demo2.jpg)](/images/awards/HealthHacksRI2017/Drogo_Demo2.jpg) + +I specifically worked on the software running on our microcontroller. It sent information to the iPhone over the internet like when a user crossed his legs and when a user correctly did his exercise. diff --git a/src/content/awards/tonight-show-fallonventions.md b/src/content/awards/tonight-show.mdx similarity index 53% rename from src/content/awards/tonight-show-fallonventions.md rename to src/content/awards/tonight-show.mdx index 1359c0d..8639a5c 100644 --- a/src/content/awards/tonight-show-fallonventions.md +++ b/src/content/awards/tonight-show.mdx @@ -4,34 +4,33 @@ meta_title: "Tonight Show Fallonventions - Alex Tacescu" description: "Project Maverick was featured on The Tonight Show starring Jimmy Fallon in the GE Fallonventions segment" date: 2016-04-11 image: "/images/awards/tonight-show.jpg" +show_image: false categories: ["Major Awards"] -tags: ["Project Maverick", "Tonight Show"] +tags: ["ProjectMaverick"] featured: true draft: false --- +
+
+ +
+
+ Project Maverick was featured on **The Tonight Show starring Jimmy Fallon**. The segment GE Fallonventions was aired on NBC on April 11th, 2016! ## About the Segment -GE Fallonventions was a recurring segment on The Tonight Show where young inventors were invited to showcase their innovative projects to Jimmy Fallon and a national television audience. Being selected for this segment was an incredible honor and opportunity to share Project Maverick with millions of viewers. +GE Fallonventions was a recurring segment on The Tonight Show where young inventors were invited to showcase their innovative projects to Jimmy Fallon and a national television audience. Being selected for this segment was an incredible honor and opportunity to share Project Maverick with millions of viewers. You can find the archived NBC link here: https://www.nbc.com/the-tonight-show/video/ge-fallonventions-project-maverick/3017453 ## The Experience -Appearing on The Tonight Show was a surreal experience. Getting to demonstrate Project Maverick - my omni-directional robotic mobility system designed to help people with walking disabilities - to Jimmy Fallon and the studio audience was a dream come true. - -## Impact - -This national exposure helped raise awareness about: - -- The potential for robotics to improve quality of life for people with disabilities -- The capabilities of young inventors and engineers -- The importance of accessible mobility solutions - -## Watch the Segment - -The segment showcased how Project Maverick works and its potential to help people with walking disabilities maintain their independence and mobility. - -## Gratitude - -I'm incredibly grateful to GE, The Tonight Show, and everyone who made this opportunity possible. This experience reinforced my commitment to using technology and robotics to make a positive impact on people's lives. +Appearing on The Tonight Show was a surreal experience. Getting to demonstrate Project Maverick - my omni-directional robotic mobility system designed to help people with walking disabilities - to Jimmy Fallon and the studio audience was a dream come true and one of the highlights of my life. diff --git a/src/content/blog/3d-printing-filament-spool-weights.md b/src/content/blog/3d-printing-filament-spool-weights.md deleted file mode 100644 index baa3f2c..0000000 --- a/src/content/blog/3d-printing-filament-spool-weights.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: "3D Printing Filament Spool Weights" -meta_title: "3D Printing Filament Spool Weights - Alex Tacescu" -description: "A reference table of empty and full spool weights for various 3D printing filament brands and materials" -date: 2020-04-05 -image: "/images/blog/filament-spools.jpg" -author: "Alex Tacescu" -categories: ["3D Printing"] -tags: ["3D Printing", "Filament", "Reference"] -draft: false ---- - -In order to get an accurate measurement of a partially used spool of filament, I am compiling the average weight for empty and full spools of different materials from different companies I've used over the years. - -## Why Track Spool Weights? - -When you're in the middle of a long print, knowing exactly how much filament you have left can be crucial. By weighing your current spool and comparing it to known weights, you can calculate approximately how much filament remains and whether you have enough for your next print. - -## Filament Spool Weight Reference Table - -The table below will be compiled with more data as I obtain it! If you would like to contribute, drop a comment below! - -| Brand | Filament Type | Spool Size | Full Spool Weight (lbs) | Empty Spool Weight (lbs) | -| -------- | ------------- | ---------- | ----------------------- | ------------------------ | -| Eryone | PLA (White) | 1kg | N/A | N/A | -| Hatchbox | PLA (Black) | 1kg | 2.253 | - | - -## How to Use This Table - -1. **Weigh your current spool** - Use a kitchen scale or postal scale -2. **Subtract the empty spool weight** - This gives you the remaining filament weight -3. **Calculate percentage remaining** - Divide by the original filament weight (usually 1kg) - -## Contributing - -If you have data from spools you've used, please share in the comments! Include: - -- Brand name -- Filament type and color -- Spool size (1kg, 500g, etc.) -- Full spool weight (with filament) -- Empty spool weight (after using all filament) - -I'll add your data to the table to help the community! diff --git a/src/content/blog/ender-3-upgrades-tips-tricks.md b/src/content/blog/ender-3-upgrades-tips-tricks.md index 9dac3ee..6069cc5 100644 --- a/src/content/blog/ender-3-upgrades-tips-tricks.md +++ b/src/content/blog/ender-3-upgrades-tips-tricks.md @@ -3,10 +3,10 @@ title: "Ender 3 Upgrades + Tips/Tricks" meta_title: "Ender 3 Upgrades and Tips - Alex Tacescu" description: "A collection of useful upgrades, modifications, and tips for the Creality Ender 3 3D printer" date: 2020-04-05 -image: "/images/blog/ender-3.jpg" +# image: "/images/blog/ender-3.jpg" author: "Alex Tacescu" categories: ["3D Printing"] -tags: ["3D Printing", "Ender 3", "Upgrades"] +tags: ["Creality Ender3"] draft: false --- diff --git a/src/content/blog/making-desktop-files-for-linux.md b/src/content/blog/making-desktop-files-for-linux.md index b132c92..87ba30d 100644 --- a/src/content/blog/making-desktop-files-for-linux.md +++ b/src/content/blog/making-desktop-files-for-linux.md @@ -3,10 +3,10 @@ title: "Making .desktop Files for Linux" meta_title: "Making .desktop Files for Linux - Alex Tacescu" description: "A quick guide on creating custom .desktop files to add programs to your Linux launcher" date: 2020-06-10 -image: "/images/blog/linux-desktop.jpg" +# image: "/images/blog/linux-desktop.jpg" author: "Alex Tacescu" categories: ["Software"] -tags: [".desktop", "Linux", "Ubuntu"] +tags: ["Linux", "Ubuntu"] draft: false --- diff --git a/src/content/blog/my-favorite-vs-code-extensions.md b/src/content/blog/my-favorite-vs-code-extensions.md deleted file mode 100644 index 8b2d69a..0000000 --- a/src/content/blog/my-favorite-vs-code-extensions.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: "My Favorite VS Code Extensions" -meta_title: "My Favorite VS Code Extensions - Alex Tacescu" -description: "A curated list of essential VS Code extensions for software developers, covering languages, formatting, and productivity tools" -date: 2021-02-07 -image: "/images/blog/vscode-extensions.jpg" -author: "Alex Tacescu" -categories: ["Software"] -tags: ["VS Code", "Development", "Tools"] -draft: false ---- - -Microsoft's Visual Studio Code (VS Code) has quickly become my favorite IDE and hackable text editor since I first tried it in 2016. The immense flexibility with different languages and file formats makes it the ultimate swiss army knife for any software developer. Add in support for in-line and step-by-step debugging and you have my vote for my favorite IDE. - -However, stock VS Code is rather useless, and Microsoft has done this on purpose to mold your text editor in your style using extensions. Therefore, here are my top favorite VS Code Extensions I have installed on every computer I own and develop. - -_Note: This list is subject to change as I modify my preferences with VS Code. It serves as a list of extensions to install on a new computer for me. Honorable mentions are cool extensions I have found that I don't usually use or have installed, but I thought may be useful for readers who come across this post._ - -## C/C++ - -The official C/C++ extension from Microsoft provides IntelliSense, debugging, and code browsing for C and C++ projects. Essential for any robotics or embedded systems development. - -## CMake Tools - -CMake Tools provides full CMake support in VS Code, including project configuration, building, and debugging. A must-have for any C++ project using CMake as its build system. - -## Code Spell Checker - -Catches common spelling errors in code comments, strings, and documentation. Saves you from embarrassing typos in your codebase. - -## Docker - -The Docker extension makes it easy to build, manage, and deploy containerized applications from VS Code. Essential for modern development workflows. - -## Jupyter - -Provides rich support for Jupyter notebooks directly in VS Code. Great for data science, machine learning, and exploratory coding. - -## LaTeX Workshop - -A comprehensive LaTeX extension that provides building, previewing, and IntelliSense for LaTeX documents. Perfect for writing papers and documentation. - -## Prettier - Code Formatter - -An opinionated code formatter that supports many languages. Ensures consistent code style across your projects with minimal configuration. - -## Python - -The official Python extension from Microsoft provides rich support for Python development, including IntelliSense, linting, debugging, and more. - -## Pylance - -A performant, feature-rich language server for Python that provides fast IntelliSense and type checking. Works alongside the Python extension. - -## ROS - -Essential for Robot Operating System (ROS) development. Provides syntax highlighting, IntelliSense, and tools for working with ROS packages. - -## Todo Tree - -Quickly searches your workspace for comment tags like TODO and FIXME, and displays them in a tree view in the activity bar. Great for tracking outstanding work. - -## YAML - -Provides comprehensive YAML language support including validation and auto-completion. Alternative: docs-yaml by Microsoft. - -## PlatformIO IDE - -An essential extension for embedded systems development. Provides a professional development environment for embedded platforms including Arduino, ESP32, and many more. diff --git a/src/content/blog/my-macbook-setup-as-a-developer.md b/src/content/blog/my-macbook-setup-as-a-developer.md index 1771128..d71efc2 100644 --- a/src/content/blog/my-macbook-setup-as-a-developer.md +++ b/src/content/blog/my-macbook-setup-as-a-developer.md @@ -3,7 +3,7 @@ title: "My Macbook Setup – As a Software Developer" meta_title: "My Macbook Setup - Alex Tacescu" description: "A comprehensive guide to my development setup on macOS, including applications, tools, and must-have settings" date: 2025-07-11 -image: "/images/blog/macbook-setup.jpg" +# image: "/images/blog/macbook-setup.jpg" author: "Alex Tacescu" categories: ["Software"] tags: ["MacOS", "Development", "Tools"] @@ -32,7 +32,9 @@ Not sure if this needs any introduction, but it's one of the first thing I alway I really just want two things out of my browser: vertical tabs and for it to be a browser. It feels like these days, so many browsers are just pushing you to use or do non-browser things such as use their AI tool or their web3 wallet. Zen Browser is just a breath of fresh air. Not only are they simple and don't force you into tools that you don't want to use, but they are innovating on functionality that genuinely improve your web browsing experience! Things like `cmd+shift+c` to copy the URL or `option/alt + click` to open things in a temporary window make my experience much better. -[https://github.com/zen-browser/desktop/discussions/3397](https://github.com/zen-browser/desktop/discussions/3397) +[https://zen-browser.app/](https://github.com/zen-browser/desktop/discussions/3397) + +Honorary mention goes to Helium Browser, which is looking like the chrome alternative to Zen. It's still in early development, but looks promising, and I'm using it as my web development browser for the Chrome dev tools. [https://helium.computer/](https://helium.computer/) ### Editor of Choice: Zed + VS Code diff --git a/src/content/homepage/-index.md b/src/content/homepage/-index.md index beca517..312448e 100755 --- a/src/content/homepage/-index.md +++ b/src/content/homepage/-index.md @@ -24,17 +24,17 @@ mosaic: rowSpan: 3 - title: "Robotics" image: "/images/robotics.jpg" - link: "/categories/robotics" + link: "projects/smallkat-mqp" colSpan: 7 rowSpan: 3 - title: "Aerospace" image: "/images/companies/Inversion/Ray-OnOrbit.jpg" - link: "/categories/aerospace" + link: "https://inversionspace.com" colSpan: 4 rowSpan: 4 - title: "Software & AI" image: "/images/software.png" - link: "/categories/software-ai" + link: "/categories/software" colSpan: 4 rowSpan: 4 - title: "CAD & 3D Printing" @@ -51,8 +51,6 @@ aboutme: video: enable: true title: "Watch me on the Tonight Show!" - url: "https://assets.alextac.com/videos/Tonight-Show-Segment.mp4" - thumbnail: "/images/awards/tonight-show.jpg" fallback_url: "https://www.nbc.com/the-tonight-show/video/ge-fallonventions-project-maverick/3017453" button: enable: true diff --git a/src/content/pages/team2761.mdx b/src/content/pages/team2761.mdx new file mode 100644 index 0000000..860cd55 --- /dev/null +++ b/src/content/pages/team2761.mdx @@ -0,0 +1,62 @@ +--- +title: "My 4 Years on FIRST FRC Team 2761" +meta_title: "FIRST FRC Team 2761 - Alex Tacescu" +description: "If I were to attribute my success as an engineer to one experience, it would be my time on FIRST FRC Team 2761" +date: 2017-05-01 +tags: ["FIRST FRC", "FIRST FRC Team 2761", "Clovis North High School"] +featured: false +draft: false +--- + +![Me working on our 2015 robot during a competition.](/images/personal/team2761/team2761_alex.jpg) + +If I were to attribute my success as an engineer to one experience, it would have to be with my FIRST FRC team (Team 2761). Over the 4 years I was with this team, I designed and built 5 different robots and won several awards! The learning experience, however, was by far the most valuable. Three men - Mr. Mendez, Mr. Lim, and my father - sat down with me as a freshman in high school and taught me everything there is to know about mechanical engineering and CAD. From gearbox physics to the transfer of electrical to mechanical energy, these lessons and experiences are some of my most treasured memories. Sadly the team has since disbanded, so I've put together a short write-up in honor for each of the 4 (+1) robots we built during my time on the team. + + + +## 2016 StrongHold + +This robot was designed for the [2016 FRC StrongHold competition](https://en.wikipedia.org/wiki/FIRST_Stronghold). It was my best design and was fairly successful during the competition. At the end of the season, our team won the coveted Chairman's Award at the Orange County Regional! + + + + + +## 2015 Recycle Rush + +This robot won our only regional in our history, taking 1st place at the Ventura Regional thanks to our awesome alliance in the playoffs! It spans 6ft tall and was powered by a differential drive system. It competed as a part of the [2015 FIRST FRC Recycle Rush competition](https://en.wikipedia.org/wiki/Recycle_Rush). + + + + + +## 2014 Aerial Assist + +This was our most competitive robot, receiving 4th at the Sacramento Regional. It had a differential drive system with a cam actuated radial release mechanism to throw a large yoga ball over 20 feet! It competed as a part of the [2014 FIRC Aerial Assist competition](https://en.wikipedia.org/wiki/Aerial_Assist), and was our best performing robot of all time! + + + +
+ Team 2761 2013 Ultimate Ascent Robot +
+ +## 2013 Ultimate Ascent + +As my first real robot I've ever designed, this one holds a special place in my heart. It has a frame made out of 8020 Aluminum extrusion with 4 omni-directional "swerve" wheel modules, giving this robot the capability of moving in any direction on a 2d plane! Although this robot didn't win any awards, it is my favorite over the years. It competed as a part of the [2013 FRC Ultimate Ascent challenge](https://en.wikipedia.org/wiki/Ultimate_Ascent). + +Team 2761 2013 Swerve Drive + +
+
+ + + +## (Bonus) 2761 T-Shirt Cannon + +This robot was designed to spread the excitement of robotics throughout the central valley. It reuses the 2014 drive system, with 2 scuba tanks for holding pressurization. It saw some use at a few local events, but was mostly a fun side project. + + diff --git a/src/content/projects/project-pather.md b/src/content/projects/archive/project-pather.md similarity index 99% rename from src/content/projects/project-pather.md rename to src/content/projects/archive/project-pather.md index 9d5bf5b..44794bf 100644 --- a/src/content/projects/project-pather.md +++ b/src/content/projects/archive/project-pather.md @@ -7,7 +7,7 @@ image: "/images/projects/project-pather.jpg" categories: ["Software", "Personal Projects"] tags: ["Project Pather", "WPI"] featured: false -draft: false +draft: true --- Project Pather is a kiosk mapping software developed to provide directions to Brigham and Women's Hospital. diff --git a/src/content/projects/first-frc-team-2761.md b/src/content/projects/first-frc-team-2761.md deleted file mode 100644 index 821779c..0000000 --- a/src/content/projects/first-frc-team-2761.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: "My 4 Years on FIRST FRC Team 2761" -meta_title: "FIRST FRC Team 2761 - Alex Tacescu" -description: "If I were to attribute my success as an engineer to one experience, it would be my time on FIRST FRC Team 2761" -date: 2017-05-01 -image: "/images/projects/frc-2761.jpg" -categories: ["Robotics", "Personal Projects"] -tags: ["FIRST FRC", "FIRST FRC Team 2761", "Clovis North"] -featured: false -draft: false ---- - -If I were to attribute my success as an engineer to one experience, it would be my time on FIRST FRC Team 2761. - -## Overview - -FIRST Robotics Competition (FRC) is an international high school robotics competition where teams of students design, build, and program robots to compete in an annual challenge. My four years on Team 2761 at Clovis North High School were transformative for my engineering career. - -## My Role - -As the **Engineering Team Leader** of FRC Team 2761, I was responsible for: - -- Leading the mechanical and electrical design of our competition robots -- Coordinating between sub-teams (mechanical, electrical, programming, business) -- Making critical design decisions under tight competition deadlines -- Mentoring younger team members -- Representing the team at competitions and outreach events - -## What I Learned - -My time on FRC Team 2761 taught me invaluable skills: - -### Technical Skills - -- Mechanical design and fabrication -- CAD modeling and prototyping -- Electrical systems design -- Programming and control systems -- Project management under pressure - -### Soft Skills - -- Team leadership and collaboration -- Communication and presentation -- Problem-solving under constraints -- Time management with strict deadlines -- Mentorship and teaching - -## Impact - -The experience of designing, building, programming, and testing robots from scratch ignited my passion for robotics engineering. The skills I developed on this team directly contributed to my later successes, including: - -- Project Maverick and appearances on The Tonight Show -- Success at Intel ISEF and other science fairs -- My academic career in Robotics Engineering at WPI -- My professional career in robotics and space systems - -## FIRST Values - -FIRST (For Inspiration and Recognition of Science and Technology) emphasizes "Gracious Professionalism" and "Coopertition" - values that I carry with me to this day in my professional work. - -## Gratitude - -I'm deeply grateful to my mentors, teammates, and coaches who made this experience possible. The lessons learned during those four years continue to shape my approach to engineering challenges. diff --git a/src/content/projects/nasa-space-robotics-challenge.md b/src/content/projects/nasa-space-robotics-challenge.md deleted file mode 100644 index 582a7a8..0000000 --- a/src/content/projects/nasa-space-robotics-challenge.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: "NASA Space Robotics Challenge Team WPI" -meta_title: "NASA Space Robotics Challenge - Alex Tacescu" -description: "Finalists in NASA's Space Robotics Challenge, programming a humanoid robot to perform tasks on Mars" -date: 2018-01-15 -image: "/images/projects/nasa-src.png" -categories: ["Robotics", "Personal Projects"] -tags: ["NASA SRC", "WPI", "Major Project"] -featured: true -draft: false ---- - -## What is NASA's Space Robotics Challenge? - -The NASA Space Robotics Challenge was an industry competition that tasked teams with developing software for a humanoid robot designed to perform tasks on Mars. As a part of the WPI Humanoid Robotics Lab, our team competed as finalists in this prestigious competition. - -## Our Approach - -Working in the WPI Humanoid Robotics Lab, we developed sophisticated software solutions for controlling a simulated humanoid robot in a Martian environment. The challenge required us to program the robot to: - -- Navigate complex terrain autonomously -- Manipulate objects and tools -- Complete mission-critical tasks in a simulated Mars habitat -- Handle communication delays and autonomous decision-making - -## Team Contributions - -As a member of Team WPI, I contributed to: - -- Robot motion planning and control algorithms -- Autonomous navigation systems -- Task planning and execution strategies -- Integration of perception and manipulation systems - -## Results - -Our team was selected as **finalists** in the NASA Space Robotics Challenge, demonstrating our ability to develop cutting-edge robotics software for space exploration applications. - -## Impact - -This experience provided invaluable insights into: - -- Space robotics requirements and constraints -- Autonomous systems for remote operation -- Team collaboration on complex robotics projects -- Working with NASA standards and requirements - -The skills and knowledge gained from this competition have been instrumental in my career in the space industry. diff --git a/src/content/projects/poverty-stoplight-iqp.md b/src/content/projects/poverty-stoplight-iqp.md index 646180f..0665de4 100644 --- a/src/content/projects/poverty-stoplight-iqp.md +++ b/src/content/projects/poverty-stoplight-iqp.md @@ -1,58 +1,26 @@ --- -title: "Poverty Stoplight Interactive Qualifying Project" +title: "Poverty Stoplight IQP" meta_title: "Poverty Stoplight IQP - Alex Tacescu" description: "An Android application designed to help social workers in Paraguay better help those in need" date: 2018-11-01 -image: "/images/projects/poverty-stoplight.jpg" -categories: ["Software", "Personal Projects"] -tags: ["IQP", "Poverty Stoplight", "WPI"] +image: "/images/projects/poverty-stoplight-iqp/PS-logo.png" +show_image: false +categories: ["Software"] +tags: ["Poverty Stoplight", "WPI", "Android"] featured: false draft: false --- -This project is an Android application designed to help social workers in Paraguay better help those in need. +This project is an Android application designed to help social workers in Paraguay better help people in poverty. The application was developed for Fundación Paraguay and Poverty Stoplight, and consisted of developing a REST API and an Android application capable of syncing sensitive family data from a secure server. -## Overview +This project was done as an Inquiry Qualifying Project (IQP) at Worcester Polytechnic Institute, on a team of 4 students, requiring to solve real societal issues within a multidisciplinary team. -Throughout my sophomore year at WPI, I completed my Interactive Qualifying Project (IQP). My team and I developed an application for Poverty Stoplight, an organization that helps social workers create better-customized plans to help those in need to get out of poverty. +## What is Poverty Stoplight? -## The Problem +Poverty stoplight is a multidimensional poverty system that is designed to improve the lives of impoverished families, and eventually get them above the poverty line. The system is currently expanding to several nations, including the United States, Great Britain, and Paraguay. If you would like to read more, please visit www.povertystoplight.org -Social workers in Paraguay and other developing nations face significant challenges in: - -- Tracking the progress of families they work with -- Creating customized intervention plans -- Managing large caseloads efficiently -- Measuring the impact of their interventions - -## Our Solution - -We developed an Android application that enables social workers to: - -- Conduct standardized assessments of family needs -- Visualize poverty indicators using a "stoplight" system (red, yellow, green) -- Track progress over time -- Generate reports and insights -- Create targeted action plans based on specific needs - -## Technical Implementation - -The application was built using: - -- Android (Java) for the mobile application -- Firebase for backend data storage and synchronization -- Material Design principles for user interface -- Offline-first architecture for areas with limited connectivity - -## Impact - -The Poverty Stoplight methodology has been adopted by organizations in over 50 countries. Our application contributed to: - -- Improved efficiency for social workers -- Better data collection and analysis -- More targeted interventions for families in need -- Measurable tracking of poverty reduction progress - -## Team - -This was a collaborative project completed as part of WPI's Interactive Qualifying Project requirement, working directly with the Poverty Stoplight organization in Paraguay. +
+ Person holding tablet + Dashboard screenshot + Indicator question screenshot +
diff --git a/src/content/projects/project-drogo.md b/src/content/projects/project-drogo.md deleted file mode 100644 index cec6bd7..0000000 --- a/src/content/projects/project-drogo.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "Project Drogo Wins at HealthHacksRI" -meta_title: "Project Drogo - Alex Tacescu" -description: "A wearable device designed to assist elderly people through post-hip surgery recovery" -date: 2017-10-15 -image: "/images/projects/project-drogo.jpg" -categories: ["Robotics", "Personal Projects"] -tags: ["HealthHacksRI", "Project Drogo", "WPI"] -featured: false -draft: false ---- - -We developed a wearable device designed to assist elderly people through post-hip surgery recovery. - -## Overview - -Project Drogo was created during HealthHacksRI, a healthcare-focused hackathon. Our team identified a critical need in post-operative care for elderly patients recovering from hip surgery. - -## The Problem - -Hip surgery recovery is challenging for elderly patients because: - -- Maintaining proper movement restrictions is difficult -- Physical therapy exercises must be performed correctly -- Patients often lack real-time feedback on their movements -- Recovery progress can be hard to track objectively - -## Our Solution - -We developed a wearable device that: - -- Monitors patient movement in real-time -- Provides feedback to ensure proper form during exercises -- Alerts patients when they exceed safe movement ranges -- Tracks recovery progress over time -- Communicates data to healthcare providers - -## Technical Implementation - -Project Drogo utilized: - -- IMU sensors for accurate motion tracking -- Microcontroller-based processing -- Bluetooth connectivity for data transmission -- Mobile application for user interface -- Cloud backend for data storage and analysis - -## Recognition - -Project Drogo won at HealthHacksRI, demonstrating the viability and impact of our approach to improving post-operative recovery outcomes for elderly patients. - -## Impact - -This project highlighted the potential for wearable technology to: - -- Improve patient outcomes through better adherence to recovery protocols -- Reduce healthcare costs by enabling remote monitoring -- Empower patients with actionable feedback -- Provide healthcare providers with objective recovery metrics diff --git a/src/content/projects/project-maverick.md b/src/content/projects/project-maverick.md index 533aec2..aae2474 100644 --- a/src/content/projects/project-maverick.md +++ b/src/content/projects/project-maverick.md @@ -5,7 +5,7 @@ description: "An Omni-Directional Robotic Mobility System to help people with wa date: 2020-03-18 image: "/images/projects/maverick.jpg" categories: ["Robotics", "Personal Projects"] -tags: ["Project Maverick", "Major Project", "WPI", "Clovis North"] +tags: ["ProjectMaverick", "ClovisNorthHighSchool"] featured: true draft: false --- @@ -20,14 +20,15 @@ Inspired by my grandfather's suffering from Parkinson's disease, I started Proje This project has been recognized at numerous prestigious competitions and events: -- **GE Fallonventions on The Tonight Show starring Jimmy Fallon** - Featured on NBC on April 11th, 2016 -- **2nd Place at Intel ISEF 2016** - Category: Engineering Mechanics -- **Best in Show from INCOSE** - International Council of System Engineers award at Intel ISEF 2016 -- **Minor Planet 33662 named Tacescu** - Named in my honor following ISEF achievements -- **2016 Google Science Fair Finalist** -- **1st Place at 2015 California State Science Fair** -- **IEEE Award at Intel ISEF 2015** +- [**GE Fallonventions on The Tonight Show starring Jimmy Fallon** - Featured on NBC on April 11th, 2016](/awards/tonight-show) +- [**2nd Place at Intel ISEF 2016 + Best in Show from INCOSE**](/awards/2016-intel-isef) +- [**Minor Planet 33662 named Tacescu**](/awards/asteroid-tacescu) +- [**2016 Google Science Fair Finalist**](/awards/2016-google-science-fair) +- [**IEEE Award at Intel ISEF 2015**](/awards/2015-intel-isef) +- [**1st Place at 2015 California State Science Fair**](/awards/2015-california-science-fair) +- [**1st Place at 2016 Central California Science Fair**](/awards/2016-central-california-science-fair) +- [**1st Place at 2015 Central California Science Fair**](/awards/2015-central-california-science-fair) ## Learn More -Check out the dedicated project website: [pmaverick.com](https://www.pmaverick.com) +Check out the dedicated project website: [pmaverick.com](https://pmaverick.com) diff --git a/src/content/projects/ri3d-2018.md b/src/content/projects/ri3d-2018.md deleted file mode 100644 index 9f0667c..0000000 --- a/src/content/projects/ri3d-2018.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: "Team WPI Robot in 3 Days 2018" -meta_title: "Robot in 3 Days 2018 - Alex Tacescu" -description: "As a part of the WPI Robotics Club, we developed this 2018 FIRST FRC robot in just 3 days" -date: 2018-01-10 -image: "/images/projects/ri3d-2018.jpg" -categories: ["Robotics", "Personal Projects"] -tags: ["RI3D 2018", "WPI", "FIRST FRC"] -featured: false -draft: false ---- - -As a part of the WPI Robotics Club, we developed this 2018 FIRST FRC robot in just 3 days after the game reveal. - -## What is Robot in 3 Days (RI3D)? - -Robot in 3 Days is an annual tradition in the FIRST Robotics community where teams attempt to design, build, and test a functional competition robot within 72 hours of the game reveal. The goal is to: - -- Demonstrate rapid prototyping techniques -- Provide inspiration and ideas for FRC teams -- Document the build process for educational purposes -- Showcase what's possible with focused effort and teamwork - -## The Challenge: FIRST Power Up (2018) - -The 2018 FIRST FRC game, Power Up, was an arcade-themed challenge where robots had to: - -- Collect and place "power cubes" onto scales and switches -- Climb a scale at the end of the match -- Work cooperatively with alliance partners -- Navigate around the field efficiently - -## Our Approach - -Within the 72-hour window, our team at WPI: - -### Day 1: Design - -- Analyzed the game rules and identified key strategies -- Brainstormed mechanisms for cube manipulation -- Created CAD designs for major subsystems -- Began prototyping critical mechanisms - -### Day 2: Fabrication - -- Manufactured chassis and structural components -- Assembled the drivetrain -- Built the cube intake and delivery mechanism -- Integrated electrical systems - -### Day 3: Integration & Testing - -- Completed mechanical assembly -- Wired and programmed the robot -- Conducted initial testing and iteration -- Documented the final product - -## Key Features - -Our RI3D robot included: - -- **Robust Drivetrain**: Tank drive capable of navigating the field quickly -- **Cube Intake**: Mechanism to reliably acquire power cubes -- **Delivery System**: Capable of placing cubes on the switch and scale -- **Simple & Reliable**: Focused on core gameplay over complexity - -## Impact - -This RI3D project helped: - -- Inspire FRC teams watching our documentation -- Demonstrate effective rapid prototyping techniques -- Showcase the capabilities of the WPI Robotics Club -- Provide a learning experience for club members - -## Team Effort - -This project was a collaborative effort by members of the WPI Robotics Club, combining skills in mechanical design, electrical systems, and programming to achieve an impressive result in a very short timeframe. diff --git a/src/content/projects/ri3d-2018.mdx b/src/content/projects/ri3d-2018.mdx new file mode 100644 index 0000000..7ac40a6 --- /dev/null +++ b/src/content/projects/ri3d-2018.mdx @@ -0,0 +1,87 @@ +--- +title: "Team WPI Robot in 3 Days 2018" +meta_title: "Robot in 3 Days 2018 - Alex Tacescu" +description: "As a part of the WPI Robotics Club, we developed this 2018 FIRST FRC robot in just 3 days" +date: 2018-01-10 +image: "/images/projects/ri3d-2018.png" +show_image: false +categories: ["Robotics"] +tags: ["RobotIn3Days", "WPI", "FIRST FRC"] +featured: true +draft: false +--- + +
+
+ +
+
+ +Robot in 3 Days is an annual tradition in the FIRST Robotics community where teams attempt to design, build, and test a functional competition robot within 72 hours of the game reveal. As a part of the WPI Robotics Club, we developed this 2018 FIRST FRC robot in 3 days! This robot is for hundreds of thousands of high school students around the world, who will now have a better understanding of what strategies to use when building their own robot in the next 6 weeks. To read the build blog, please visit here, and make sure to look at our videos below! + +
+ + +
+ +
+ + + + +
diff --git a/src/content/projects/robomagellan.md b/src/content/projects/robomagellan.md index 816c194..b23e291 100644 --- a/src/content/projects/robomagellan.md +++ b/src/content/projects/robomagellan.md @@ -7,56 +7,9 @@ image: "/images/projects/robomagellan.jpg" categories: ["Robotics", "Personal Projects"] tags: ["RoboMagellan", "WPI"] featured: false -draft: false +draft: true --- -This robot competed in the RoboMagellan competition at the 2018 RoboGames in California. +This robot competed in the RoboMagellan competition at the 2018 RoboGames in California. The robot was designed to autonomously find cones based on approximate GPS coordinates and report them back to a command module. -## What is RoboMagellan? - -RoboMagellan is an autonomous robotics competition where robots must navigate outdoor terrain to reach designated waypoints marked by orange traffic cones. The challenge tests a robot's ability to: - -- Navigate autonomously through outdoor environments -- Detect and avoid obstacles -- Identify and approach traffic cones using computer vision -- Handle varying terrain and weather conditions -- Operate without human intervention - -## Our Robot - -As part of the WPI Robotics team, we designed and built a robot capable of: - -- **GPS Navigation**: Using GPS waypoints for high-level path planning -- **Computer Vision**: Detecting orange cones using camera-based perception -- **Obstacle Avoidance**: Using LIDAR and ultrasonic sensors to avoid obstacles -- **Terrain Handling**: Robust drivetrain capable of handling grass, gravel, and uneven surfaces - -## Technical Implementation - -### Hardware - -- Rugged outdoor chassis with all-terrain wheels -- GPS module for localization -- Camera system for cone detection -- LIDAR for obstacle detection -- Onboard computer for processing - -### Software - -- ROS (Robot Operating System) for system integration -- OpenCV for computer vision and cone detection -- Custom path planning algorithms -- Sensor fusion for improved localization - -## Competition - -We competed at the 2018 RoboGames in California, one of the world's largest open robot competitions. The RoboMagellan event challenges teams from around the world to demonstrate autonomous outdoor navigation capabilities. - -## Lessons Learned - -This project provided valuable experience in: - -- Outdoor autonomous navigation challenges -- Sensor integration and fusion -- Real-world testing and iteration -- Competition preparation and teamwork +There were three parts to the robot: the base, the navigation, and the cone finding. For simplicity, the base used was the [Dagu Wild Thumper](https://www.pololu.com/product/1554) with added encoders on each wheel. A [Teensy 3.5](https://www.sparkfun.com/products/14055) (soon-to-be an ESP-32 Thing from Sparkfun) was used as a controller for the motors and the basic sensors. PID and other control loops were running on this microcontroller. Connected via Serial over USB was an [NVidia Jetson TX2](https://developer.nvidia.com/embedded/buy/jetson-tx2), a small but powerful single-board computer. We selected this to run the navigation and cone-finding algorithms. The current robot uses a stereo camera to create a 3D map of its surroundings. It can avoid people and other obstacles while navigating to cones. To find those cones, an artificial intelligence algorithm analyzed incoming pictures and created a waypoint for the robot to go to. diff --git a/src/content/projects/smallkat-mqp.md b/src/content/projects/smallkat-mqp.mdx similarity index 50% rename from src/content/projects/smallkat-mqp.md rename to src/content/projects/smallkat-mqp.mdx index fd8591c..c460b2d 100644 --- a/src/content/projects/smallkat-mqp.md +++ b/src/content/projects/smallkat-mqp.mdx @@ -3,7 +3,8 @@ title: "SmallKat MQP" meta_title: "SmallKat MQP - Alex Tacescu" description: "A quadrupedal robotic platform to help research and design new gaits, test sensors, and teach engineering students" date: 2019-04-19 -image: "/images/projects/smallkat.jpg" +image: "/images/projects/SmallKat/SmallKat.jpg" +show_image: false categories: ["Robotics", "Personal Projects"] tags: ["SmallKat MQP", "Major Project", "WPI"] featured: true @@ -18,6 +19,17 @@ To allow for a multitude of gait designs, SmallKat is designed with 4-DoF legs c ## Mechanical Design +
+ +
+ - **4-DoF Legs** powered by JX HV-5932MG for adaptability & maneuverability - Low cost ($30), high torque (32kg-cm stall), & simple communication system - Other options considered: Dynamixel AX-12a & XH430 @@ -32,31 +44,52 @@ To allow for a multitude of gait designs, SmallKat is designed with 4-DoF legs c ## Electronics -Custom Microelectronics designed for this project: - -- Motor Controller -- Custom foot sensors -- Charger -- Motherboard -- Tail Driver and Controller -- IMU - -**Communication Stack:** - -- Receives updates wirelessly -- Calculates IK of the robot -- Updates joint angles -- Returns joint angles, IMU data, foot sensor data, and battery voltage +
+
+ + +
+
+

Custom Microelectronics designed for this project:

+
    +
  • Motor Controller
  • +
  • Custom foot sensors
  • +
  • Charger
  • +
  • Motherboard
  • +
  • Tail Driver and Controller
  • +
  • IMU
  • +
+

+ Communication Stack: +

+
    +
  • Receives updates wirelessly
  • +
  • Calculates IK of the robot
  • +
  • Updates joint angles
  • +
  • + Returns joint angles, IMU data, foot sensor data, and battery voltage +
  • +
+
+
## Software -- Raspberry Pi 3 B+ connected to the microcontroller via HID over USB -- Bowler Studio & Bowler Kernel for development environment & simulation -- Bowler Kernel: underlying kernel, runs headless on the Raspberry Pi 3 -- Forward kinematics & some dynamics are integrated in Bowler Studio -- Developed inverse kinematics software for position control using Geometric approach -- Basic Walking Gait with a Central Pattern Generator (CPG) for trajectory generation -- Dynamic walking gait by calculating the Wide Stability Margin and a CPG for trajectory generation +Raspberry Pi 3 B+ connected to the microcontroller via HID over USBBowler Studio & Bowler Kernel for development environment & simulationBowler Kernel: underlying kernel, runs headless on the Raspberry Pi 3. Forward kinematics & some dynamics are integrated in Bowler Studio. We developed inverse kinematics software for position control using Geometric approach. We developed a basic walking gait with a Central Pattern Generator (CPG) for trajectory generation. Dynamics were calculated using the Wide Stability Margin and a CPG for trajectory generation. + + ## Future Work diff --git a/src/layouts/PostSingle.astro b/src/layouts/PostSingle.astro index 330db69..e667f92 100755 --- a/src/layouts/PostSingle.astro +++ b/src/layouts/PostSingle.astro @@ -16,7 +16,7 @@ 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 } = post.data; +const { title, description, author, categories, image, date, tags, show_image } = post.data; ---
@@ -24,7 +24,7 @@ const { title, description, author, categories, image, date, tags } = post.data;
{ - image && ( + image && show_image && (
  • - + {humanize(author)} diff --git a/src/layouts/components/AuthorCard.astro b/src/layouts/components/AuthorCard.astro deleted file mode 100644 index 3a30ac1..0000000 --- a/src/layouts/components/AuthorCard.astro +++ /dev/null @@ -1,30 +0,0 @@ ---- -import { plainify } from "@/lib/utils/textConverter"; -import ImageMod from "./ImageMod.astro"; -import Social from "./Social.astro"; - -const { data } = Astro.props; -const { title, image, social } = data.data; ---- - -
    - { - image && ( - - ) - } -

    - {title} -

    -

    - {plainify(data.body?.slice(0, 100))} -

    - -
    diff --git a/src/layouts/components/BlogCard.astro b/src/layouts/components/BlogCard.astro index 7d1390b..ee1761e 100644 --- a/src/layouts/components/BlogCard.astro +++ b/src/layouts/components/BlogCard.astro @@ -33,7 +33,7 @@ const { title, image, date, author, categories } = data.data;
    • - + {humanize(author)} diff --git a/src/layouts/shortcodes/AsteroidViewer.tsx b/src/layouts/shortcodes/AsteroidViewer.tsx new file mode 100644 index 0000000..ac9d55b --- /dev/null +++ b/src/layouts/shortcodes/AsteroidViewer.tsx @@ -0,0 +1,426 @@ +import React, { useEffect, useRef, useState } from "react"; + +// Asteroid 33662 Tacescu orbital elements from JPL SBDB API +const TACESCU = { + epoch: 2461000.5, + a: 2.45, + e: 0.106, + i: 7.05, + om: 144, + w: 145, + ma: 272, +}; + +const TIME_SPEEDS = [ + { label: "1 Day", value: 1 }, + { label: "1 Week", value: 7 }, + { label: "1 Month", value: 30 }, + { label: "1 Year", value: 365 }, +]; + +// Planet colors (standard astronomical colors) +const PLANET_COLORS: Record = { + Sun: 0xffff00, + Mercury: 0xb5b5b5, + Venus: 0xffd700, + Earth: 0x6b93d6, + Mars: 0xc1440e, + Jupiter: 0xd8ca9d, + Saturn: 0xead6b8, + Uranus: 0xd1e7e7, + Neptune: 0x5b5ddf, + Pluto: 0x9ca6b7, + Asteroid: 0xffffff, +}; + +// Oversized radii for visibility (in AU, not to scale) +const PLANET_RADII: Record = { + Sun: 0.15, + Mercury: 0.03, + Venus: 0.04, + Earth: 0.045, + Mars: 0.035, + Jupiter: 0.08, + Saturn: 0.07, + Uranus: 0.055, + Neptune: 0.055, + Pluto: 0.025, + Asteroid: 0.03, +}; + +export default function AsteroidViewer() { + const containerRef = useRef(null); + const simRef = useRef(null); + const [isPlaying, setIsPlaying] = useState(true); + const [speed, setSpeed] = useState(7); + const [currentDate, setCurrentDate] = useState(new Date()); + const [dateInput, setDateInput] = useState(""); + const [distances, setDistances] = useState({ earth: 0, sun: 0 }); + const [showScrollHint, setShowScrollHint] = useState(false); + const [simReady, setSimReady] = useState(false); + const animationRef = useRef(null); + const scrollHintTimeoutRef = useRef(null); + + useEffect(() => { + if (!containerRef.current) return; + + let isMounted = true; + let distanceInterval: number | null = null; + + const initSpacekit = async () => { + const Spacekit = await import("spacekit.js"); + + if (!isMounted || !containerRef.current) return; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const sim = new (Spacekit as any).Simulation(containerRef.current, { + basePath: "https://typpo.github.io/spacekit/src", + startDate: new Date(), + startPaused: true, // We control time manually + camera: { + initialPosition: [0, -5, 2.5], + }, + debug: { + showStats: false, + }, + }); + + simRef.current = sim; + + // Sun - stationary at center + sim.createSphere("Sun", { + position: [0, 0, 0], + radius: PLANET_RADII.Sun, + color: PLANET_COLORS.Sun, + labelText: "Sun", + }); + + // Inner planets with spheres + sim.createSphere("Mercury", { + ephem: Spacekit.EphemPresets.MERCURY, + radius: PLANET_RADII.Mercury, + color: PLANET_COLORS.Mercury, + labelText: "Mercury", + }); + sim.createSphere("Venus", { + ephem: Spacekit.EphemPresets.VENUS, + radius: PLANET_RADII.Venus, + color: PLANET_COLORS.Venus, + labelText: "Venus", + }); + const earth = sim.createSphere("Earth", { + ephem: Spacekit.EphemPresets.EARTH, + radius: PLANET_RADII.Earth, + color: PLANET_COLORS.Earth, + labelText: "Earth", + }); + sim.createSphere("Mars", { + ephem: Spacekit.EphemPresets.MARS, + radius: PLANET_RADII.Mars, + color: PLANET_COLORS.Mars, + labelText: "Mars", + }); + + // Outer planets with spheres + sim.createSphere("Jupiter", { + ephem: Spacekit.EphemPresets.JUPITER, + radius: PLANET_RADII.Jupiter, + color: PLANET_COLORS.Jupiter, + labelText: "Jupiter", + }); + sim.createSphere("Saturn", { + ephem: Spacekit.EphemPresets.SATURN, + radius: PLANET_RADII.Saturn, + color: PLANET_COLORS.Saturn, + labelText: "Saturn", + }); + sim.createSphere("Uranus", { + ephem: Spacekit.EphemPresets.URANUS, + radius: PLANET_RADII.Uranus, + color: PLANET_COLORS.Uranus, + labelText: "Uranus", + }); + sim.createSphere("Neptune", { + ephem: Spacekit.EphemPresets.NEPTUNE, + radius: PLANET_RADII.Neptune, + color: PLANET_COLORS.Neptune, + labelText: "Neptune", + }); + sim.createSphere("Pluto", { + ephem: Spacekit.EphemPresets.PLUTO, + radius: PLANET_RADII.Pluto, + color: PLANET_COLORS.Pluto, + labelText: "Pluto", + }); + + // Asteroid 33662 Tacescu + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const asteroidEphem = new (Spacekit as any).Ephem(TACESCU, "deg"); + const asteroid = sim.createSphere("33662 Tacescu", { + ephem: asteroidEphem, + radius: PLANET_RADII.Asteroid, + color: PLANET_COLORS.Asteroid, + labelText: "33662 Tacescu", + }); + + // Add ecliptic drop lines to show inclination + const orbit = asteroid.getOrbit(); + if (orbit) { + const eclipticLines = orbit.getLinesToEcliptic(); + sim.getScene().add(eclipticLines); + } + + // Update distances periodically + const updateDistances = () => { + if (!isMounted) return; + try { + const now = sim.getDate(); + const asteroidPos = asteroid.getPosition(now); + const earthPos = earth.getPosition(now); + const sunDist = Math.sqrt( + asteroidPos[0] ** 2 + asteroidPos[1] ** 2 + asteroidPos[2] ** 2, + ); + const earthDist = Math.sqrt( + (asteroidPos[0] - earthPos[0]) ** 2 + + (asteroidPos[1] - earthPos[1]) ** 2 + + (asteroidPos[2] - earthPos[2]) ** 2, + ); + setDistances({ earth: earthDist, sun: sunDist }); + setCurrentDate(now); + } catch { + // Positions not ready yet + } + }; + + distanceInterval = window.setInterval(updateDistances, 1000); + updateDistances(); + + // Mark simulation as ready to trigger animation + if (isMounted) { + setSimReady(true); + } + }; + + initSpacekit(); + + return () => { + isMounted = false; + if (distanceInterval) { + clearInterval(distanceInterval); + } + if (animationRef.current) { + cancelAnimationFrame(animationRef.current); + } + }; + }, []); + + // Animation loop for time controls + useEffect(() => { + if (!isPlaying || !simReady || !simRef.current) return; + + let lastTime = 0; + + const animate = (currentTime: number) => { + const sim = simRef.current; + if (!sim) return; + + if (lastTime === 0) { + lastTime = currentTime; + animationRef.current = requestAnimationFrame(animate); + return; + } + + const deltaMs = currentTime - lastTime; + lastTime = currentTime; + + // Days per second equals the speed value (1 day/sec for speed=1, 7 days/sec for speed=7, etc.) + const daysPerSecond = speed; + const daysToAdvance = (deltaMs / 1000) * daysPerSecond; + + const currentJd = sim.getJd(); + sim.setJd(currentJd + daysToAdvance); + animationRef.current = requestAnimationFrame(animate); + }; + + animationRef.current = requestAnimationFrame(animate); + + return () => { + if (animationRef.current) { + cancelAnimationFrame(animationRef.current); + } + }; + }, [isPlaying, speed, simReady]); + + // Handle scroll wheel - require Ctrl key for zooming + useEffect(() => { + const container = containerRef.current; + if (!container) return; + + const handleWheel = (e: WheelEvent) => { + if (!e.ctrlKey) { + // Show hint when scrolling without Ctrl + setShowScrollHint(true); + + // Clear existing timeout + if (scrollHintTimeoutRef.current) { + clearTimeout(scrollHintTimeoutRef.current); + } + + // Hide hint after 2 seconds + scrollHintTimeoutRef.current = window.setTimeout(() => { + setShowScrollHint(false); + }, 2000); + + // Stop event from reaching spacekit so it doesn't zoom + e.stopPropagation(); + // Don't prevent default - allow page scroll + return; + } + + // Ctrl is pressed - handle zoom manually with reversed direction + e.preventDefault(); + e.stopPropagation(); + + const sim = simRef.current; + if (!sim) return; + + // Get the camera and manually adjust zoom with reversed direction + const camera = sim.getViewer()?.camera; + if (camera) { + // Reverse the delta: positive deltaY (scroll down) = zoom in, negative = zoom out + const zoomFactor = e.deltaY > 0 ? 0.9 : 1.1; + camera.position.multiplyScalar(zoomFactor); + } + }; + + // Use capture phase to intercept before spacekit's Three.js controls + container.addEventListener("wheel", handleWheel, { + passive: false, + capture: true, + }); + + return () => { + container.removeEventListener("wheel", handleWheel, { capture: true }); + if (scrollHintTimeoutRef.current) { + clearTimeout(scrollHintTimeoutRef.current); + } + }; + }, []); + + const handleStep = (direction: number) => { + if (!simRef.current) return; + const sim = simRef.current; + sim.setJd(sim.getJd() + direction * speed); + }; + + const handleDateSubmit = (e: React.FormEvent) => { + e.preventDefault(); + if (!simRef.current || !dateInput) return; + const date = new Date(dateInput); + if (!isNaN(date.getTime())) { + simRef.current.setDate(date); + setDateInput(""); + } + }; + + const formatDate = (date: Date) => { + return date.toISOString().split("T")[0]; + }; + + return ( +
      +
      + + {/* Time Controls */} +
      +
      + + + + + +
      + +
      + setDateInput(e.target.value)} + placeholder="YYYY-MM-DD" + className="w-24 rounded bg-gray-800/80 px-2 py-1 text-xs text-white placeholder-gray-400" + /> + +
      +
      + + {/* Info Overlay */} +
      +
      33662 Tacescu
      +
      Earth Distance: {distances.earth.toFixed(3)} AU
      +
      Sun Distance: {distances.sun.toFixed(3)} AU
      +
      {formatDate(currentDate)} UTC
      +
      + + {/* Scroll Hint */} + {showScrollHint && ( +
      +
      + Press Ctrl + scroll to zoom +
      +
      + )} +
      + ); +} diff --git a/src/layouts/shortcodes/FloatImage.tsx b/src/layouts/shortcodes/FloatImage.tsx new file mode 100644 index 0000000..7d21a0b --- /dev/null +++ b/src/layouts/shortcodes/FloatImage.tsx @@ -0,0 +1,34 @@ +import React from "react"; + +interface FloatImageProps { + src: string; + alt: string; + side?: "left" | "right"; + width?: string; + children: React.ReactNode; +} + +const FloatImage = ({ + src, + alt, + side = "left", + width = "50%", + children, +}: FloatImageProps) => { + const floatClass = + side === "left" ? "float-left mr-6 mb-4" : "float-right ml-6 mb-4"; + + return ( +
      + {alt} +
      {children}
      +
      + ); +}; + +export default FloatImage; diff --git a/src/layouts/shortcodes/ImageGallery.astro b/src/layouts/shortcodes/ImageGallery.astro new file mode 100644 index 0000000..db09885 --- /dev/null +++ b/src/layouts/shortcodes/ImageGallery.astro @@ -0,0 +1,94 @@ +--- +import ImageMod from "@/components/ImageMod.astro"; +import { + Swiper, + SwiperButtonNext, + SwiperButtonPrev, + SwiperPagination, + SwiperSlide, + SwiperWrapper, +} from "astro-swiper"; + +interface Image { + src: string; + alt?: string; + caption?: string; +} + +interface Props { + images: Image[]; + autoplay?: boolean; + loop?: boolean; + height?: string; +} + +const { images, autoplay = false, loop = true, height = "400px" } = Astro.props; + +const galleryId = `gallery-${Math.random().toString(36).substring(2, 9)}`; + +const swiperOptions = { + spaceBetween: 16, + loop, + ...(autoplay && { + autoplay: { + delay: 3000, + disableOnInteraction: true, + }, + }), + navigation: { + nextEl: `.${galleryId}-next`, + prevEl: `.${galleryId}-prev`, + }, + pagination: { + el: `.${galleryId}-pagination`, + type: "bullets" as const, + clickable: true, + dynamicBullets: false, + }, +}; +--- + + diff --git a/src/lib/utils/dateFormat.ts b/src/lib/utils/dateFormat.ts index 9b960d5..a5d603b 100755 --- a/src/lib/utils/dateFormat.ts +++ b/src/lib/utils/dateFormat.ts @@ -1,12 +1,33 @@ -import { format } from "date-fns"; - +/** + * Formats a date using UTC values to avoid timezone shifting issues. + * YAML dates like "2015-05-02" are parsed as UTC midnight, so we use + * UTC timezone to display the intended date regardless of local timezone. + */ const dateFormat = ( date: Date | string, - pattern: string = "dd MMM, yyyy", + pattern: string = "MMM d, yyyy", ): string => { - const dateObj = new Date(date); - const output = format(dateObj, pattern); - return output; + const d = typeof date === "string" ? new Date(date) : date; + + const formatter = new Intl.DateTimeFormat("en-US", { + timeZone: "UTC", + day: pattern.includes("dd") ? "2-digit" : "numeric", + month: pattern.includes("MMMM") ? "long" : "short", + year: "numeric", + }); + + const parts = formatter.formatToParts(d); + const get = (type: string) => parts.find((p) => p.type === type)?.value ?? ""; + + const tokens: Record = { + dd: get("day"), + d: get("day"), + MMMM: get("month"), + MMM: get("month"), + yyyy: get("year"), + }; + + return pattern.replace(/dd|d|MMMM|MMM|yyyy/g, (match) => tokens[match]); }; export default dateFormat; diff --git a/src/pages/about-me.astro b/src/pages/about-me.astro index 8496c20..074f487 100644 --- a/src/pages/about-me.astro +++ b/src/pages/about-me.astro @@ -7,7 +7,7 @@ import { render } from "astro:content"; const aboutIndex = await getListPage("about-me", "-index"); const { Content } = await render(aboutIndex); -const { title, description, meta_title, image } = aboutIndex.data; +const { title, description, meta_title, image, show_image } = aboutIndex.data; if (aboutIndex.data.draft) { return Astro.redirect("/404"); @@ -25,7 +25,7 @@ if (aboutIndex.data.draft) {
      { - image && ( + image && show_image !== false && ( ({ - params: { - single: author.id, - }, - props: { author }, - })); - return paths; -} - -const { author } = Astro.props; -const { title, social, meta_title, description, image } = author.data; -const { Content } = await render(author); - -// get all posts by author -const BLOG_FOLDER = "blog"; -const posts = await getSinglePage(BLOG_FOLDER); -const postFilterByAuthor = posts.filter( - (post) => slugify(post.data.author) === slugify(title), -); ---- - - -
      -
      -
      -
      - { - image && ( - - ) - } -

      {title}

      -
      - -
      - -
      -
      - -
      - { - postFilterByAuthor.map((post) => ( -
      - -
      - )) - } -
      -
      -
      - diff --git a/src/pages/authors/index.astro b/src/pages/authors/index.astro deleted file mode 100755 index 925fb1a..0000000 --- a/src/pages/authors/index.astro +++ /dev/null @@ -1,31 +0,0 @@ ---- -import AuthorCard from "@/components/AuthorCard.astro"; -import Base from "@/layouts/Base.astro"; -import { getListPage, getSinglePage } from "@/lib/contentParser.astro"; -import PageHeader from "@/partials/PageHeader.astro"; - -const authorIndex = await getListPage("authors", "-index"); - -if (authorIndex.data.draft) { - return Astro.redirect("/404"); -} - -const authors = await getSinglePage("authors"); ---- - - - -
      -
      -
      - { - authors.map((author) => ( -
      - -
      - )) - } -
      -
      -
      - diff --git a/src/pages/awards/[single].astro b/src/pages/awards/[single].astro index 017d692..da0b509 100644 --- a/src/pages/awards/[single].astro +++ b/src/pages/awards/[single].astro @@ -1,6 +1,7 @@ --- import Base from "@/layouts/Base.astro"; import { getSinglePage } from "@/lib/contentParser.astro"; +import dateFormat from "@/lib/utils/dateFormat"; import { markdownify } from "@/lib/utils/textConverter"; import { render } from "astro:content"; import type { GetStaticPaths } from "astro"; @@ -21,8 +22,16 @@ interface Props { const { award } = Astro.props; const { Content } = await render(award); -const { title, meta_title, description, image, date, categories, tags } = - award.data; +const { + title, + meta_title, + description, + image, + date, + categories, + tags, + show_image, +} = award.data; ---
      { - image && ( + image && show_image && (
      - { - date && ( - - {new Date(date).toLocaleDateString("en-US", { - year: "numeric", - month: "long", - day: "numeric", - })} - - ) - } + {date && {dateFormat(date, "MMMM d, yyyy")}} { categories && categories.length > 0 && ( diff --git a/src/pages/index.astro b/src/pages/index.astro index 30e73c1..a247029 100755 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -113,30 +113,21 @@ const { mosaic, aboutme, featured_projects, recent_posts } = homepage.data; { aboutme.video?.enable && (
      -

      +

      {aboutme.video.title}

      - +
      +