First commit to new theme

This commit is contained in:
Andrew Scott 2022-12-10 16:16:18 -05:00
parent 5b3db17ec9
commit 02a78eef1d
Signed by: a
GPG key ID: 3EB62D0BBB8DB381
50 changed files with 436 additions and 335 deletions

View file

@ -6,6 +6,6 @@ import tailwind from "@astrojs/tailwind";
// https://astro.build/config // https://astro.build/config
export default defineConfig({ export default defineConfig({
site: 'https://astro-modern-personal-website.netlify.app', site: 'https://andyscott.me',
integrations: [mdx(), sitemap(), tailwind()] integrations: [mdx(), sitemap(), tailwind()]
}); });

4
package-lock.json generated
View file

@ -1,12 +1,12 @@
{ {
"name": "Astro Modern Personal Website", "name": "Astro Modern Personal Website",
"version": "1.1.0", "version": "1.1.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "Astro Modern Personal Website", "name": "Astro Modern Personal Website",
"version": "1.1.0", "version": "1.1.1",
"dependencies": { "dependencies": {
"@astrojs/mdx": "^0.11.1", "@astrojs/mdx": "^0.11.1",
"@astrojs/rss": "^1.0.1", "@astrojs/rss": "^1.0.1",

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 318 B

View file

@ -1,13 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 36 36">
<path fill="#000" d="M22.25 4h-8.5a1 1 0 0 0-.96.73l-5.54 19.4a.5.5 0 0 0 .62.62l5.05-1.44a2 2 0 0 0 1.38-1.4l3.22-11.66a.5.5 0 0 1 .96 0l3.22 11.67a2 2 0 0 0 1.38 1.39l5.05 1.44a.5.5 0 0 0 .62-.62l-5.54-19.4a1 1 0 0 0-.96-.73Z"/>
<path fill="url(#gradient)" d="M18 28a7.63 7.63 0 0 1-5-2c-1.4 2.1-.35 4.35.6 5.55.14.17.41.07.47-.15.44-1.8 2.93-1.22 2.93.6 0 2.28.87 3.4 1.72 3.81.34.16.59-.2.49-.56-.31-1.05-.29-2.46 1.29-3.25 3-1.5 3.17-4.83 2.5-6-.67.67-2.6 2-5 2Z"/>
<defs>
<linearGradient id="gradient" x1="16" x2="16" y1="32" y2="24" gradientUnits="userSpaceOnUse">
<stop stop-color="#000"/>
<stop offset="1" stop-color="#000" stop-opacity="0"/>
</linearGradient>
</defs>
<style>
@media (prefers-color-scheme:dark){:root{filter:invert(100%)}}
</style>
</svg>

Before

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 919 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

BIN
public/profile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -1,4 +1,4 @@
User-agent: * User-agent: *
Allow: / Allow: /
Sitemap: https://astro-modern-personal-website.netlify.app/sitemap-index.xml Sitemap: https://andyscott.me/sitemap-index.xml

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

View file

@ -15,24 +15,10 @@ const { title, description, image = '/social_img.png' } = Astro.props;
<!-- Global Metadata --> <!-- Global Metadata -->
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width,initial-scale=1" /> <meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="/favicon.ico" />
<meta name="generator" content={Astro.generator} /> <meta name="generator" content={Astro.generator} />
<!-- Primary Meta Tags --> <!-- Primary Meta Tags -->
<title>{title}</title> <title>{title}</title>
<meta name="title" content={title} /> <meta name="title" content={title} />
<meta name="description" content={description} /> <meta name="description" content={description} />
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website" />
<meta property="og:url" content={Astro.url} />
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:image" content={new URL(image, Astro.url)} />
<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:url" content={Astro.url} />
<meta property="twitter:title" content={title} />
<meta property="twitter:description" content={description} />
<meta property="twitter:image" content={new URL(image, Astro.url)} />

View file

@ -3,15 +3,30 @@ const today = new Date();
--- ---
<footer class="footer footer-center block mb-5 pt-10"> <footer class="footer footer-center block mb-5 pt-10">
<div class="pb-2">
&copy; {today.getFullYear()} Manuel Ernesto
</div>
<div class="inline opacity-75"> <div class="inline opacity-75">
<!-- Thanks for using this template. Please keep this line to support my work :) --> <!-- Thanks for using this template. Please keep this line to support my work :) -->
<a href="https://github.com/manuelernestog/astro-modern-personal-website" target="_blank" class="font-bold">Website Template</a> developed by <a
<a href="https://manuelernestog.github.io" target="_blank" class="font-bold">Manuel Ernesto ⚡️</a> href="https://github.com/manuelernestog/astro-modern-personal-website"
target="_blank"
class="font-bold"
>Website Template</a
>
developed by
<a href="https://manuelernestog.github.io" target="_blank" class="font-bold"
>Manuel Ernesto ⚡️</a
>
</div>
<div class="pb-2">
<p>
Excluding the template design, all page content for
<a href="https://andyscott.me" class="font-bold">andyscott dot me</a>
&copy; 2021 Andrew Scott under a
<a
href="https://creativecommons.org/licenses/by-sa/4.0/"
class="font-bold"
>Creative Commons Attribution-ShareAlike 4.0 International License</a
>
</p>
</div> </div>
</footer> </footer>
<style> <style></style>
</style>

View file

@ -4,13 +4,23 @@
<div class="navbar"> <div class="navbar">
<div class="navbar-start"> <div class="navbar-start">
<label for="my-drawer" class="btn btn-square btn-ghost"> <label for="my-drawer" class="btn btn-square btn-ghost">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="inline-block w-5 h-5 stroke-current" <svg
><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"></path> xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
class="inline-block w-5 h-5 stroke-current"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M4 6h16M4 12h16M4 18h16"
></path>
</svg> </svg>
</label> </label>
</div> </div>
<div class="navbar-center"> <div class="navbar-center">
<a class="btn btn-ghost normal-case text-xl" href="/">Manuel Ernesto ⚡️</a> <a class="btn btn-ghost normal-case text-xl" href="/">Andrew Scott</a>
</div> </div>
<div class="navbar-end"></div> <div class="navbar-end"></div>
</div> </div>

View file

@ -3,9 +3,15 @@
<div class="menu p-4 overflow-y-auto w-[19rem] bg-base-200 text-base-content"> <div class="menu p-4 overflow-y-auto w-[19rem] bg-base-200 text-base-content">
<div class="w-fit"> <div class="w-fit">
<a href="/"> <a href="/">
<div class="avatar transition ease-in-out w-1/2 hover:scale-[102%] block m-auto mt-3 mb-6"> <div
class="avatar transition ease-in-out w-1/2 hover:scale-[102%] block m-auto mt-3 mb-6"
>
<div> <div>
<img class="mask mask-circle" src="/profile.jpg" alt="profile image" /> <img
class="mask mask-circle"
src="/profile.png"
alt="profile image"
/>
</div> </div>
</div> </div>
</a> </a>
@ -14,15 +20,18 @@
<!-- Sidebar content here --> <!-- Sidebar content here -->
<li><a href="/">Home</a></li> <li><a href="/">Home</a></li>
<li><a href="/projects">Projects</a></li> <li><a href="/projects">Projects</a></li>
<li><a href="/store/1">Store</a></li>
<li><a href="/blog/1">Blog</a></li> <li><a href="/blog/1">Blog</a></li>
<li><a href="/cv">CV</a></li> <li><a href="/cv">CV</a></li>
<li><a href="https://manuelernestog.github.io/paylink/" target="_blank">Support my Work</a></li> <li><a href="mailto:andy@andyscott.me">Contact</a></li>
<li><a href="mailto:contact.manuelernestog@gmail.com">Contact</a></li>
</ul> </ul>
<div class="grow"></div> <div class="grow"></div>
<div class="social-icons px-4 my-2 flex self-center"> <div class="social-icons px-4 my-2 flex self-center">
<a href="https://github.com/manuelernestog" target="_blank" class="mx-3" aria-label="Github"> <a
href="https://codeberg.org/andcscott"
target="_blank"
class="mx-3"
aria-label="Git"
>
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
width="24" width="24"
@ -30,13 +39,17 @@
viewBox="0 0 24 24" viewBox="0 0 24 24"
style="fill: currentColor;transform: ;msFilter:;" style="fill: currentColor;transform: ;msFilter:;"
><path ><path
fill-rule="evenodd" d="M3 19h18a1.002 1.002 0 0 0 .823-1.569l-9-13c-.373-.539-1.271-.539-1.645 0l-9 13A.999.999 0 0 0 3 19z"
clip-rule="evenodd"
d="M12.026 2c-5.509 0-9.974 4.465-9.974 9.974 0 4.406 2.857 8.145 6.821 9.465.499.09.679-.217.679-.481 0-.237-.008-.865-.011-1.696-2.775.602-3.361-1.338-3.361-1.338-.452-1.152-1.107-1.459-1.107-1.459-.905-.619.069-.605.069-.605 1.002.07 1.527 1.028 1.527 1.028.89 1.524 2.336 1.084 2.902.829.091-.645.351-1.085.635-1.334-2.214-.251-4.542-1.107-4.542-4.93 0-1.087.389-1.979 1.024-2.675-.101-.253-.446-1.268.099-2.64 0 0 .837-.269 2.742 1.021a9.582 9.582 0 0 1 2.496-.336 9.554 9.554 0 0 1 2.496.336c1.906-1.291 2.742-1.021 2.742-1.021.545 1.372.203 2.387.099 2.64.64.696 1.024 1.587 1.024 2.675 0 3.833-2.33 4.675-4.552 4.922.355.308.675.916.675 1.846 0 1.334-.012 2.41-.012 2.737 0 .267.178.577.687.479C19.146 20.115 22 16.379 22 11.974 22 6.465 17.535 2 12.026 2z"
></path> ></path>
</svg> </svg>
</a> </a>
<a href="https://twitter.com/manuelernestog" target="_blank" class="mx-3" aria-label="Twitter"> <a
href="https://fosstodon.org/@ascott"
rel="me"
target="_blank"
class="mx-3"
aria-label="Mastodon"
>
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
width="24" width="24"
@ -44,11 +57,16 @@
viewBox="0 0 24 24" viewBox="0 0 24 24"
style="fill: currentColor;transform: ;msFilter:;" style="fill: currentColor;transform: ;msFilter:;"
><path ><path
d="M19.633 7.997c.013.175.013.349.013.523 0 5.325-4.053 11.461-11.46 11.461-2.282 0-4.402-.661-6.186-1.809.324.037.636.05.973.05a8.07 8.07 0 0 0 5.001-1.721 4.036 4.036 0 0 1-3.767-2.793c.249.037.499.062.761.062.361 0 .724-.05 1.061-.137a4.027 4.027 0 0 1-3.23-3.953v-.05c.537.299 1.16.486 1.82.511a4.022 4.022 0 0 1-1.796-3.354c0-.748.199-1.434.548-2.032a11.457 11.457 0 0 0 8.306 4.215c-.062-.3-.1-.611-.1-.923a4.026 4.026 0 0 1 4.028-4.028c1.16 0 2.207.486 2.943 1.272a7.957 7.957 0 0 0 2.556-.973 4.02 4.02 0 0 1-1.771 2.22 8.073 8.073 0 0 0 2.319-.624 8.645 8.645 0 0 1-2.019 2.083z" d="M16 17.24c2.5-.3 4.69-1.84 5-3.25a33.59 33.59 0 0 0 .4-5.42C21.33 4.23 18.48 3 18.48 3A17.64 17.64 0 0 0 12 2a17.64 17.64 0 0 0-6.48 1S2.68 4.23 2.68 8.57v3.44c.1 4.24.78 8.42 4.7 9.46A14.73 14.73 0 0 0 12 22a9.21 9.21 0 0 0 3.54-.81l-.07-1.64A11.41 11.41 0 0 1 12 20c-1.8-.06-3.71-.19-4-2.4a4.26 4.26 0 0 1 0-.63 22.68 22.68 0 0 0 4 .54 23.6 23.6 0 0 0 4-.27zm-6.54-9.8q-1.35 0-1.35 1.62v5.1H6V8.9a3.78 3.78 0 0 1 .82-2.56 2.85 2.85 0 0 1 2.23-1 2.68 2.68 0 0 1 2.4 1.23l.52.87.52-.87a2.68 2.68 0 0 1 2.4-1.23 2.85 2.85 0 0 1 2.23 1A3.78 3.78 0 0 1 18 8.9v5.26h-2.11v-5.1q0-1.62-1.35-1.62c-1 0-1.51.64-1.51 1.92v2.79H11V9.36c0-1.28-.54-1.92-1.54-1.92z"
></path> ></path>
</svg> </svg>
</a> </a>
<a href="https://t.me/manuelernestog" target="_blank" class="mx-3" aria-label="Telegram"> <a
href="xmpp:andrew@chat.acscott.dev?omemo-sid-1469474723=2f136a2443193c56bf6106509f126cb91a06d2765a1cab2b3ef49d7dedef4d12"
target="_blank"
class="mx-3"
aria-label="XMPP"
>
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
width="24" width="24"
@ -56,12 +74,19 @@
viewBox="0 0 24 24" viewBox="0 0 24 24"
style="fill: currentColor;transform: ;msFilter:;" style="fill: currentColor;transform: ;msFilter:;"
><path ><path
d="m20.665 3.717-17.73 6.837c-1.21.486-1.203 1.161-.222 1.462l4.552 1.42 10.532-6.645c.498-.303.953-.14.579.192l-8.533 7.701h-.002l.002.001-.314 4.692c.46 0 .663-.211.921-.46l2.211-2.15 4.599 3.397c.848.467 1.457.227 1.668-.785l3.019-14.228c.309-1.239-.473-1.8-1.282-1.434z" d="M5 18v3.766l1.515-.909L11.277 18H16c1.103 0 2-.897 2-2V8c0-1.103-.897-2-2-2H4c-1.103 0-2 .897-2 2v8c0 1.103.897 2 2 2h1zM4 8h12v8h-5.277L7 18.234V16H4V8z"
></path><path
d="M20 2H8c-1.103 0-2 .897-2 2h12c1.103 0 2 .897 2 2v8c1.103 0 2-.897 2-2V4c0-1.103-.897-2-2-2z"
></path> ></path>
</svg> </svg>
</a> </a>
<a href="https://www.linkedin.com/in/manuelernestogr" target="_blank" class="mx-3" aria-label="Linkedin"> <a
href="https://www.linkedin.com/in/andcscott"
target="_blank"
class="mx-3"
aria-label="Linkedin"
>
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
width="24" width="24"
@ -74,6 +99,24 @@
</svg> </svg>
</a> </a>
<a
href="https://keyoxide.org/28690B7BD571C5764970FAA0A40D4DEEBCE23B57"
target="_blank"
class="mx-3"
aria-label="Keyoxide"
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
style="fill: currentColor;transform: ;msFilter:;"
><path
d="M3.433 17.325 3.079 19.8a1 1 0 0 0 1.131 1.131l2.475-.354C7.06 20.524 8 18 8 18s.472.405.665.466c.412.13.813-.274.948-.684L10 16.01s.577.292.786.335c.266.055.524-.109.707-.293a.988.988 0 0 0 .241-.391L12 14.01s.675.187.906.214c.263.03.519-.104.707-.293l1.138-1.137a5.502 5.502 0 0 0 5.581-1.338 5.507 5.507 0 0 0 0-7.778 5.507 5.507 0 0 0-7.778 0 5.5 5.5 0 0 0-1.338 5.581l-7.501 7.5a.994.994 0 0 0-.282.566zM18.504 5.506a2.919 2.919 0 0 1 0 4.122l-4.122-4.122a2.919 2.919 0 0 1 4.122 0z"
></path>
</svg>
</a>
<a href="/rss.xml" target="_blank" class="mx-3" aria-label="RSS Feed"> <a href="/rss.xml" target="_blank" class="mx-3" aria-label="RSS Feed">
<svg <svg
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
@ -81,8 +124,11 @@
height="24" height="24"
viewBox="0 0 24 24" viewBox="0 0 24 24"
style="fill: currentColor;transform: ;msFilter:;" style="fill: currentColor;transform: ;msFilter:;"
><path d="M19 20.001C19 11.729 12.271 5 4 5v2c7.168 0 13 5.832 13 13.001h2z"></path><path ><path
d="M12 20.001h2C14 14.486 9.514 10 4 10v2c4.411 0 8 3.589 8 8.001z"></path><circle cx="6" cy="18" r="2"></circle> d="M19 20.001C19 11.729 12.271 5 4 5v2c7.168 0 13 5.832 13 13.001h2z"
></path><path
d="M12 20.001h2C14 14.486 9.514 10 4 10v2c4.411 0 8 3.589 8 8.001z"
></path><circle cx="6" cy="18" r="2"></circle>
</svg> </svg>
</a> </a>
</div> </div>

View file

@ -1,5 +1,5 @@
// Place any global data in this file. // Place any global data in this file.
// You can import this data from anywhere in your site by using the `import` keyword. // You can import this data from anywhere in your site by using the `import` keyword.
export const SITE_TITLE = 'Astro Modern Personal Website Template'; export const SITE_TITLE = "Andy Scott";
export const SITE_DESCRIPTION = 'Astro Modern Personal Website template with Project Section, CV Section, Paginated Blog, RSS Feed, SEO Friendly, Visual themes and Responsive Desing.'; export const SITE_DESCRIPTION = "Personal and Portfolio Site for Andy Scott";

View file

@ -10,7 +10,7 @@ const { image, title = SITE_TITLE, description = SITE_DESCRIPTION } = Astro.prop
--- ---
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en" data-theme="lofi"> <html lang="en" data-theme="dark">
<head> <head>
<BaseHead title={title} description={description} image={image} /> <BaseHead title={title} description={description} image={image} />
</head> </head>

View file

@ -0,0 +1,15 @@
---
layout: "../../layouts/PostLayout.astro"
title: "Exercise Tracker"
description: "Single Page Application using the MERN Stack"
pubDate: "Jun 16 2022"
heroImage: "/post_images/exercise_tracker_home.jpg"
---
I was finally able to make the first of my projects from this spring public today. This single
page application uses the MongoDB, Express, React, and Node (MERN) Stack to implement
a REST API and a graphical interface for logging exercises. The home page greets the user
with a table of past exercises. An exercise can be edited, or deleted, by clicking on the
appropriate icon within the table. [source code](https://git.andyscott.me/a/ExerciseTracker)
*Updated Dec 9 2022*

View file

@ -0,0 +1,23 @@
---
layout: "../../layouts/PostLayout.astro"
title: "First Post"
description: "It's time for the inaugural post!"
pubDate: "Jan 11 2022"
heroImage: "/profile.png"
---
Hello and welcome to the blog section of my page! I intend to use this section to post some
updates on my projects. This will include new projects I'm working on along with updated
information on pre-existing projects. Most of the posts will be short and to the point,
especially while I get used to this style of writing and form some expectations for how I
might want to use these posts in the future.
I may also occasionally take the opportunity to provide some commentary and personal
opinions. For the moment, however, I do not anticipate writing lengthy and in-depth posts
on a regular basis like you might see on someone's personal blog. I anticipate the
frequency of my posts will largely be dictated by the projects I'm working on, and whether
or not I can discuss them publicly.
There also won't be any way to comment or react to posts simply because I
don't anticipate being very popular. If that changes for some reason I'll be happy to add
more features in the future.

View file

@ -0,0 +1,17 @@
---
layout: "../../layouts/PostLayout.astro"
title: "Hash Maps"
description: "Two hash maps with different collision avoidance mechanisms"
pubDate: "Jun 25 2022"
heroImage: "/post_images/hash_maps.jpg"
---
This is the second of the two projects I prepared for this spring. For this project
I've focussed on implementing data structures in Python, namely hash maps and hash
tables. In these implementations I demonstrate two different methods for avoiding hash
colisions: open addressing with quadratic probing; and separate chaining.
While data structures might seem bit mundane I actually had a lot of fun with this one!
I felt much more confident in this project than I have in the past as well. It's really
exciting to see the progress I've made since last fall and I can't wait to share more in
the future. [source code](https://git.andyscott.me/a/HashMaps)

View file

@ -0,0 +1,20 @@
---
layout: "../../layouts/PostLayout.astro"
title: "MASM & Low Level I/O"
description: "Using the Microsoft Macro Assembler for low level operations"
pubDate: "Mar 26 2022"
heroImage: "/post_images/masm_low_level_io.jpg"
---
Definitely check this one out if you're interested in MASM or IA-32 (x86) Assembly
Language. This program uses string primitives, macros and procedures to perform low
level I/O operations with the Microsoft Macro Assembler (MASM). MASM is an x86
assembler.
The program asks for 10 signed integers from the user as strings. The strings are
converted from ASCII to SDWORDs and stored in an array. Then, their sum, and the
truncated average are calculated. Finally, all numbers entered by the user as well as the
results are converted back to their ASCII representations and printed as strings.
[source code](https://git.andyscott.me/a/MASM-Low-Level-IO/)
*Updated Dec 9 2022*

View file

@ -0,0 +1,36 @@
---
layout: "../../layouts/PostLayout.astro"
title: "OpenWeather gRPC API"
description: "A high performance API for gRPC clients to fetch weather data"
pubDate: "Aug 28 2022"
heroImage: "/post_images/openweather_grpc_api_uml.jpg"
---
Long time, no see! This is the first of three new projects from this summer that
I'd like to introduce to you.
Written in Go, this microservice uses
[protocol buffers](https://developers.google.com/protocol-buffers/docs/overview)
to define a highly performant
[gRPC API](https://grpc.io/docs/what-is-grpc/introduction/).
Compared to other APIs like RESTful APIs, gRPC offers several key benefits,
including:
- Efficient connection management with HTTP/2
- Simpler server implementation
- Easily generate client-side code for a variety of programming languages
- Messages serialized to binary for more efficient payloads
The API accepts remote procedure calls to fetch weather and gelocation data from
[OpenWeatherMap.org](https://openweathermap.org). The service acts as an intermediary
between gRPC clients and the OpenWeather API.
The following features are currently available:
- Current forecasts by city, zip code, or exact location
- Five day forecasts by city, zip code, or exact location
- Geolocation data (latitude and longitude) for a particular city or zip code
- Choose your preferred units among imperial, metric, or the OpenWeather default (Kelvin/meters per second)
[source code](https://git.andyscott.me/a/OpenWeather-gRPC-API)

View file

@ -1,17 +0,0 @@
---
layout: "../../layouts/PostLayout.astro"
title: "Demo Post 1"
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
pubDate: "Sep 10 2022"
heroImage: "/post_img.webp"
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae ultricies leo integer malesuada nunc vel risus commodo viverra. Adipiscing enim eu turpis egestas pretium. Euismod elementum nisi quis eleifend quam adipiscing. In hac habitasse platea dictumst vestibulum. Sagittis purus sit amet volutpat. Netus et malesuada fames ac turpis egestas. Eget magna fermentum iaculis eu non diam phasellus vestibulum lorem. Varius sit amet mattis vulputate enim. Habitasse platea dictumst quisque sagittis. Integer quis auctor elit sed vulputate mi. Dictumst quisque sagittis purus sit amet.
Morbi tristique senectus et netus. Id semper risus in hendrerit gravida rutrum quisque non tellus. Habitasse platea dictumst quisque sagittis purus sit amet. Tellus molestie nunc non blandit massa. Cursus vitae congue mauris rhoncus. Accumsan tortor posuere ac ut. Fringilla urna porttitor rhoncus dolor. Elit ullamcorper dignissim cras tincidunt lobortis. In cursus turpis massa tincidunt dui ut ornare lectus. Integer feugiat scelerisque varius morbi enim nunc. Bibendum neque egestas congue quisque egestas diam. Cras ornare arcu dui vivamus arcu felis bibendum. Dignissim suspendisse in est ante in nibh mauris. Sed tempus urna et pharetra pharetra massa massa ultricies mi.
Mollis nunc sed id semper risus in. Convallis a cras semper auctor neque. Diam sit amet nisl suscipit. Lacus viverra vitae congue eu consequat ac felis donec. Egestas integer eget aliquet nibh praesent tristique magna sit amet. Eget magna fermentum iaculis eu non diam. In vitae turpis massa sed elementum. Tristique et egestas quis ipsum suspendisse ultrices. Eget lorem dolor sed viverra ipsum. Vel turpis nunc eget lorem dolor sed viverra. Posuere ac ut consequat semper viverra nam. Laoreet suspendisse interdum consectetur libero id faucibus. Diam phasellus vestibulum lorem sed risus ultricies tristique. Rhoncus dolor purus non enim praesent elementum facilisis. Ultrices tincidunt arcu non sodales neque. Tempus egestas sed sed risus pretium quam vulputate. Viverra suspendisse potenti nullam ac tortor vitae purus faucibus ornare. Fringilla urna porttitor rhoncus dolor purus non. Amet dictum sit amet justo donec enim.
Mattis ullamcorper velit sed ullamcorper morbi tincidunt. Tortor posuere ac ut consequat semper viverra. Tellus mauris a diam maecenas sed enim ut sem viverra. Venenatis urna cursus eget nunc scelerisque viverra mauris in. Arcu ac tortor dignissim convallis aenean et tortor at. Curabitur gravida arcu ac tortor dignissim convallis aenean et tortor. Egestas tellus rutrum tellus pellentesque eu. Fusce ut placerat orci nulla pellentesque dignissim enim sit amet. Ut enim blandit volutpat maecenas volutpat blandit aliquam etiam. Id donec ultrices tincidunt arcu. Id cursus metus aliquam eleifend mi.
Tempus quam pellentesque nec nam aliquam sem. Risus at ultrices mi tempus imperdiet. Id porta nibh venenatis cras sed felis eget velit. Ipsum a arcu cursus vitae. Facilisis magna etiam tempor orci eu lobortis elementum. Tincidunt dui ut ornare lectus sit. Quisque non tellus orci ac. Blandit libero volutpat sed cras. Nec tincidunt praesent semper feugiat nibh sed pulvinar proin gravida. Egestas integer eget aliquet nibh praesent tristique magna.

View file

@ -1,17 +0,0 @@
---
layout: "../../layouts/PostLayout.astro"
title: "Demo Post 2"
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
pubDate: "Sep 11 2022"
heroImage: "/post_img.webp"
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae ultricies leo integer malesuada nunc vel risus commodo viverra. Adipiscing enim eu turpis egestas pretium. Euismod elementum nisi quis eleifend quam adipiscing. In hac habitasse platea dictumst vestibulum. Sagittis purus sit amet volutpat. Netus et malesuada fames ac turpis egestas. Eget magna fermentum iaculis eu non diam phasellus vestibulum lorem. Varius sit amet mattis vulputate enim. Habitasse platea dictumst quisque sagittis. Integer quis auctor elit sed vulputate mi. Dictumst quisque sagittis purus sit amet.
Morbi tristique senectus et netus. Id semper risus in hendrerit gravida rutrum quisque non tellus. Habitasse platea dictumst quisque sagittis purus sit amet. Tellus molestie nunc non blandit massa. Cursus vitae congue mauris rhoncus. Accumsan tortor posuere ac ut. Fringilla urna porttitor rhoncus dolor. Elit ullamcorper dignissim cras tincidunt lobortis. In cursus turpis massa tincidunt dui ut ornare lectus. Integer feugiat scelerisque varius morbi enim nunc. Bibendum neque egestas congue quisque egestas diam. Cras ornare arcu dui vivamus arcu felis bibendum. Dignissim suspendisse in est ante in nibh mauris. Sed tempus urna et pharetra pharetra massa massa ultricies mi.
Mollis nunc sed id semper risus in. Convallis a cras semper auctor neque. Diam sit amet nisl suscipit. Lacus viverra vitae congue eu consequat ac felis donec. Egestas integer eget aliquet nibh praesent tristique magna sit amet. Eget magna fermentum iaculis eu non diam. In vitae turpis massa sed elementum. Tristique et egestas quis ipsum suspendisse ultrices. Eget lorem dolor sed viverra ipsum. Vel turpis nunc eget lorem dolor sed viverra. Posuere ac ut consequat semper viverra nam. Laoreet suspendisse interdum consectetur libero id faucibus. Diam phasellus vestibulum lorem sed risus ultricies tristique. Rhoncus dolor purus non enim praesent elementum facilisis. Ultrices tincidunt arcu non sodales neque. Tempus egestas sed sed risus pretium quam vulputate. Viverra suspendisse potenti nullam ac tortor vitae purus faucibus ornare. Fringilla urna porttitor rhoncus dolor purus non. Amet dictum sit amet justo donec enim.
Mattis ullamcorper velit sed ullamcorper morbi tincidunt. Tortor posuere ac ut consequat semper viverra. Tellus mauris a diam maecenas sed enim ut sem viverra. Venenatis urna cursus eget nunc scelerisque viverra mauris in. Arcu ac tortor dignissim convallis aenean et tortor at. Curabitur gravida arcu ac tortor dignissim convallis aenean et tortor. Egestas tellus rutrum tellus pellentesque eu. Fusce ut placerat orci nulla pellentesque dignissim enim sit amet. Ut enim blandit volutpat maecenas volutpat blandit aliquam etiam. Id donec ultrices tincidunt arcu. Id cursus metus aliquam eleifend mi.
Tempus quam pellentesque nec nam aliquam sem. Risus at ultrices mi tempus imperdiet. Id porta nibh venenatis cras sed felis eget velit. Ipsum a arcu cursus vitae. Facilisis magna etiam tempor orci eu lobortis elementum. Tincidunt dui ut ornare lectus sit. Quisque non tellus orci ac. Blandit libero volutpat sed cras. Nec tincidunt praesent semper feugiat nibh sed pulvinar proin gravida. Egestas integer eget aliquet nibh praesent tristique magna.

View file

@ -1,17 +0,0 @@
---
layout: "../../layouts/PostLayout.astro"
title: "Demo Post 3"
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
pubDate: "Sep 12 2022"
heroImage: "/post_img.webp"
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae ultricies leo integer malesuada nunc vel risus commodo viverra. Adipiscing enim eu turpis egestas pretium. Euismod elementum nisi quis eleifend quam adipiscing. In hac habitasse platea dictumst vestibulum. Sagittis purus sit amet volutpat. Netus et malesuada fames ac turpis egestas. Eget magna fermentum iaculis eu non diam phasellus vestibulum lorem. Varius sit amet mattis vulputate enim. Habitasse platea dictumst quisque sagittis. Integer quis auctor elit sed vulputate mi. Dictumst quisque sagittis purus sit amet.
Morbi tristique senectus et netus. Id semper risus in hendrerit gravida rutrum quisque non tellus. Habitasse platea dictumst quisque sagittis purus sit amet. Tellus molestie nunc non blandit massa. Cursus vitae congue mauris rhoncus. Accumsan tortor posuere ac ut. Fringilla urna porttitor rhoncus dolor. Elit ullamcorper dignissim cras tincidunt lobortis. In cursus turpis massa tincidunt dui ut ornare lectus. Integer feugiat scelerisque varius morbi enim nunc. Bibendum neque egestas congue quisque egestas diam. Cras ornare arcu dui vivamus arcu felis bibendum. Dignissim suspendisse in est ante in nibh mauris. Sed tempus urna et pharetra pharetra massa massa ultricies mi.
Mollis nunc sed id semper risus in. Convallis a cras semper auctor neque. Diam sit amet nisl suscipit. Lacus viverra vitae congue eu consequat ac felis donec. Egestas integer eget aliquet nibh praesent tristique magna sit amet. Eget magna fermentum iaculis eu non diam. In vitae turpis massa sed elementum. Tristique et egestas quis ipsum suspendisse ultrices. Eget lorem dolor sed viverra ipsum. Vel turpis nunc eget lorem dolor sed viverra. Posuere ac ut consequat semper viverra nam. Laoreet suspendisse interdum consectetur libero id faucibus. Diam phasellus vestibulum lorem sed risus ultricies tristique. Rhoncus dolor purus non enim praesent elementum facilisis. Ultrices tincidunt arcu non sodales neque. Tempus egestas sed sed risus pretium quam vulputate. Viverra suspendisse potenti nullam ac tortor vitae purus faucibus ornare. Fringilla urna porttitor rhoncus dolor purus non. Amet dictum sit amet justo donec enim.
Mattis ullamcorper velit sed ullamcorper morbi tincidunt. Tortor posuere ac ut consequat semper viverra. Tellus mauris a diam maecenas sed enim ut sem viverra. Venenatis urna cursus eget nunc scelerisque viverra mauris in. Arcu ac tortor dignissim convallis aenean et tortor at. Curabitur gravida arcu ac tortor dignissim convallis aenean et tortor. Egestas tellus rutrum tellus pellentesque eu. Fusce ut placerat orci nulla pellentesque dignissim enim sit amet. Ut enim blandit volutpat maecenas volutpat blandit aliquam etiam. Id donec ultrices tincidunt arcu. Id cursus metus aliquam eleifend mi.
Tempus quam pellentesque nec nam aliquam sem. Risus at ultrices mi tempus imperdiet. Id porta nibh venenatis cras sed felis eget velit. Ipsum a arcu cursus vitae. Facilisis magna etiam tempor orci eu lobortis elementum. Tincidunt dui ut ornare lectus sit. Quisque non tellus orci ac. Blandit libero volutpat sed cras. Nec tincidunt praesent semper feugiat nibh sed pulvinar proin gravida. Egestas integer eget aliquet nibh praesent tristique magna.

View file

@ -0,0 +1,14 @@
---
layout: "../../layouts/PostLayout.astro"
title: "Spring '22 Term"
description: "Wrapping Up Spring '22"
pubDate: "May 31 2022"
heroImage: "/post_images/krokusse_violett.jpg"
---
I can't believe the Spring '22 term is almost over! I'll be working on final projects this week
and look forward to sharing them when I can. You can expect a HashMap implementation for my
Data Structures class and a Full Stack MERN app that I'm writing for Web Developement.
Final exams are next week, and then it's on to the summer term.
*Photo Thomas Wolf, [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/deed.en)*

View file

@ -0,0 +1,19 @@
---
layout: "../../layouts/PostLayout.astro"
title: "Ship Game"
description: "A backend for the Battleship-like 'Ship Game'"
pubDate: "Apr 11 2022"
heroImage: "/post_images/ship_game.jpg"
---
I've added the second of the two projects I mentioned in my
[previous post](https://andyscott.me/blog/w22_term_almost_over). ShipGame is a
Battleship-like game for two players. This code provides a backend for the game written in
Python.
Each player has a 10x10 grid on which they place their ships. On their turn, the player
fires a torpedo at a square on their opponents grid. Player 'first' gets the first turn, after
which the players alternate. A ship is sunk when all of its squares have been hit. A player
wins when all of their opponents ships have been sunk. [source code]()
*Updated Dec 10 2022*

View file

@ -0,0 +1,21 @@
---
layout: "../../layouts/PostLayout.astro"
title: "Winter '22 Term"
description: "Winter 2022 at Oregon State is almost over!"
pubDate: "Mar 16 2022"
heroImage: "/post_images/snowman_on_frozen_lake.jpg"
---
It's been a while since I had any updates to post. Unfortunately this term at OSU left little
time for personal projects. I had expected this but it's still a little disappointing. Even
though I wasn't able to share any code publicly I was definitely keeping busy with
Computer Architecture, Assembly, Python, and UX Design. UX Design in particular was a
different experience for me and got me outside my comfort zone, which is always a good
thing!
Some good news too! I finished my last final exam today so I'll be ready to showcase a
couple more projects soon. One project experiments with low level I/O and string
primitives in IA-32 Assembly with MASM, and the other is a backend for a Battleship-like
game written in Python.
*Photo Petri Tapola, [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0)*

View file

@ -3,16 +3,21 @@ import BaseLayout from "../layouts/BaseLayout.astro";
import TimeLineElement from "../components/cv/TimeLine.astro"; import TimeLineElement from "../components/cv/TimeLine.astro";
--- ---
<BaseLayout title = "Resume"> <BaseLayout title="Resume">
<div class="mb-5"> <div class="mb-5">
<div class="text-3xl w-full font-bold">Profile</div> <div class="text-3xl w-full font-bold">About Me</div>
</div> </div>
<div class="mb-10 text-justify"> <div class="mb-10 text-justify">
Engineer in Informatics Science with 6 years + of experience in software development. Dominion of various programming My first memorable experience with technology was at age five - Nintendo
languages, frameworks, CMS and graphics engines. Experience in WEB design and development. Work with Data Base handled introduced me to Mario, Tetris, and Zelda. My love of games took hold
systems, as well as design, normalization and migration. Knowledge of work with graphic design tools for image immediately, and I've been hooked on technology ever since. Games, and the
manipulation , User Interfaces design, Web sites, logos and other ones. hardware necessary to play them, were always evolving so I became determined
to build my own desktop computer in high school. Since then, I've built at
least another dozen computers and a couple home servers to host my own
privacy focussed cloud services. These experiences have led me to become a
strong proponent of open source software, in part due to its transparency,
quality, innovation, and diversity.
</div> </div>
<div class="mb-5"> <div class="mb-5">
@ -21,95 +26,65 @@ import TimeLineElement from "../components/cv/TimeLine.astro";
<div class="time-line-container grid gap-4 mb-10"> <div class="time-line-container grid gap-4 mb-10">
<TimeLineElement <TimeLineElement
title="Technician Information-Technology" title="Bachelor of Science Computer Science"
subtitle="2006 to 2009 at Osvaldo Herrera Polytechnic institute, Habana, Cuba" subtitle="2021 to Present at Oregon State University, Corvallis, OR"
/> />
<TimeLineElement <TimeLineElement
title="Informatics Science Engineer" title="Bachelor of Arts Ethics, History, and Public Policy"
subtitle="2010 to 2015 at University of Informatics Science (UCI), Habana, Cuba" subtitle="2005 to 2009 at Carnegie-Mellon University, Pittsburgh, PA"
/> />
</div> </div>
<div class="mb-5"> <div class="mb-5">
<div class="text-3xl w-full font-bold">Experience</div> <div class="text-3xl w-full font-bold">Work Experience</div>
</div> </div>
<div class="time-line-container mb-10"> <div class="time-line-container mb-10">
<TimeLineElement <TimeLineElement
title="UI Designer and Developer at Integral Access Control System (Thesis)" title="Health and Well-Being"
subtitle="From 2015 at XETID, Habana, Cuba" subtitle="From Mar 2017 to Present"
desc="System multiplatform that includes the steps of a company's personnel, the structure and composition thereof, as well as a powerful designer of credentials and module of control of access. Outspread at the MINFAR and another entities of the country. Technologies: C++, Qt Framework, Subversión, Visual Paradigm, PostgreSQL, Jmeter"
/> />
<TimeLineElement <TimeLineElement
title="Web Developer at Integral Oil Drilling System 2.0" title="Senior Representative, Annuity Claims"
subtitle="From 2015 to 2016 at CEDIN, UCI, Habana, Cuba" subtitle="From Mar 2013 to Mar 2017 at New York Life Insurance Company"
desc="System of steps of process of perforation of oil wells. Outspread in the direction of Intervención of Wells and various wells of drilling of the Occident of the country. Generate reports and graphs of process of perforation making use of data mining. Technologies: Php,Symfony 2.7 , Subversión, PostgreSQL, HigthChart, Ireport, Boostrap 2, JQuery, HTML,CSS, JavaScript" desc="Managed migration of annuity claims processing from legacy mainframe system to a modern web interface, conducting quality assurance testing while ensuring compliance with state laws. Implemented new correspondence templates increasing efficiency and accuracy, saving approximately 100 hours per processor per year."
/> />
<TimeLineElement <TimeLineElement
title="Full Stack Dev, Software Architect and Project Leader at Integral Oil Drilling System 3.0" title="Representative"
subtitle="From 2016 to 2017 at CEDIN, UCI, Habana, Cuba" subtitle="From Feb 2010 to Mar 2013 at New York Life Insurance Company"
desc="System of steps of process of perforation of oil wells. Outspread in the direction of Intervención of Wells and various wells of drilling of the Occident of the country. Generate reports and graphs of process of perforation making use of data mining. Technologies: Php,Symfony 2.8 , Gitlab, PostgreSQL, HigthChart, Boostrap 2, JQuery, HTML,CSS, JavaScript" desc="Processed death claims against life insurance policies and annuities. Assisted claimants and their representatives in both establishing new claims and finalizing existing claims."
/> />
<TimeLineElement <TimeLineElement
title="Full Stack Dev, UI/UX Designer and Software Architect at Primary Information System" title="Work Study Assistant, Equal Opportunity Services"
subtitle="From 2017 to 2018 at CEDIN, UCI, Habana, Cuba" subtitle="From Jan 2006 to May 2009 at Carnegie-Mellon University"
desc="System of steps of primary information at a company. personnel's steps, control of access, impression of credentials, steps of locales, structure and composition. Technologies: Php,Symfony 3.3 , Gitlab, PostgreSQL, , Boostrap 3, JQuery, HTML,CSS, JavaScript" desc="Converted existing student and employee files from traditional paper to a digital database. Proctored distraction reduced test-taking environment for learning disabled students. Acted as primary on-call contact for after hours assignments. Directly assisted the Manager of Disability Resources in meeting the needs of disabled students as delineated by federal guidelines and University policy."
/> />
</div> </div>
<div class="mb-5">
<div class="text-3xl w-full font-bold">Certifications</div>
</div>
<ul class="list-disc mx-6 mb-10 grid gap-2">
<li>
<a href="https://www.efset.org/cert/DxtNKG" target="_blank"> EF SET English Certificate 74/100 (C2 Proficient)</a>
</li>
<li>
<a href="https://certiprof.com/pages/scrum-foundation-professional-certificate-sfpc-en-sp" target="_blank"> Scrum Foundation Professional Certificate (SFPC)</a>
</li>
</ul>
<div class="mb-5"> <div class="mb-5">
<div class="text-3xl w-full font-bold">Skills</div> <div class="text-3xl w-full font-bold">Skills</div>
</div> </div>
<ul class="list-disc md:columns-5 columns-2 mx-6"> <ul class="list-disc md:columns-5 columns-2 mx-6">
<li>Spanish (Native)</li> <li>C</li>
<li>English (C2)</li>
<li>JavaScript</li>
<li>C++</li> <li>C++</li>
<li>PHP</li> <li>Python</li>
<li>Ruby</li> <li>Go</li>
<li>Postgres SQL</li> <li>x86 Assembly</li>
<li>MySQL</li> <li>MASM</li>
<li>CSS</li> <li>Agile</li>
<li>SASS</li>
<li>HTML</li>
<li>Node.js</li>
<li>Ruby on Rails</li>
<li>AngularJS</li>
<li>VUE</li>
<li>Astro</li>
<li>Symfony 3</li>
<li>Yii2</li>
<li>Bootstrap</li>
<li>Taildwind</li>
<li>JQuery</li>
<li>Wordpress</li>
<li>Git</li> <li>Git</li>
<li>CI/CD</li>
<li>Linux</li>
<li>Linux Server</li>
<li>SELinux</li>
<li>KVM</li>
<li>UX Research</li>
<li>UX Design</li>
<li>Jira</li> <li>Jira</li>
<li>Trello</li> <li>Trello</li>
<li>BaseCamp</li>
<li>Scrum</li>
<li>Shape Up</li>
<li>LeanStartup</li>
<li>UI Design</li>
<li>WEB Design</li>
<li>Logo Design</li>
<li>Image Manipulation</li>
<li>Office Suite</li> <li>Office Suite</li>
<li>Adobe Photoshop</li> <li>Emacs</li>
<li>KdenLive</li> <li>Vim</li>
</ul> </ul>
</BaseLayout> </BaseLayout>

View file

@ -3,64 +3,77 @@ import BaseLayout from "../layouts/BaseLayout.astro";
import HorizontalCard from "../components/HorizontalCard.astro"; import HorizontalCard from "../components/HorizontalCard.astro";
const posts = (await Astro.glob("./blog/*.{md,mdx}")).sort( const posts = (await Astro.glob("./blog/*.{md,mdx}")).sort(
(a, b) => new Date(b.frontmatter.pubDate).valueOf() - new Date(a.frontmatter.pubDate).valueOf() (a, b) =>
new Date(b.frontmatter.pubDate).valueOf() -
new Date(a.frontmatter.pubDate).valueOf()
); );
const last_posts = posts.slice(0, 3); const last_posts = posts.slice(0, 3);
--- ---
<BaseLayout> <BaseLayout>
<div class="pb-12 mt-5">
<div class="pb-12 mt-5"> <div class="text-xl py-1">Greetings, fellow human 🤘</div>
<div class="text-xl py-1">Hey there 👋</div> <div class="text-5xl font-bold">I'm Andy Scott</div>
<div class="text-5xl font-bold">I'm Manuel Ernesto</div> <div class="text-3xl py-3 font-bold">
<div class="text-3xl py-3 font-bold">Software Engineer and Entrepreneur</div> Computer Science Student & Free Software Advocate
<div class="py-2">
<text class="text-lg">
I made this template for everyone who needs to create a personal website easily and quickly. This template includes Project Section, CV Section, Store, Paginated Blog, RSS Feed, SEO Friendly, Responsive Desing and 29 Visual themes. I hope you find it useful!
</text
>
</div>
<div class="mt-8">
<a class="btn" href="https://twitter.com/manuelernestog" target="_blank"> Let's connect!</a>
<a href="https://github.com/manuelernestog/astro-modern-personal-website" target="_blank" class="btn btn-outline ml-5"> Get This template</a>
</div>
</div> </div>
<div class="py-2">
<div> <text class="text-lg">
<div class="text-3xl w-full font-bold mb-2">My last projects {"</>"}</div> I created this site to showcase my projects, and occasionally blog about
their developement. Check out the sidebar, or continue reading if youd
like to know more!
</text>
</div> </div>
<div class="mt-8">
<a class="btn" href="https://fosstodon.org/@ascott" target="_blank">
Connect on The Fediverse</a
>
<a
href="https://codeberg.org/andcscott"
target="_blank"
class="btn btn-outline ml-5"
>
Show Me the Code</a
>
</div>
</div>
<HorizontalCard <div>
title="Demo Project 1" <div class="text-3xl w-full font-bold mb-2">Latest projects {"</>"}</div>
img="/post_img.webp" </div>
desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
url="#" <HorizontalCard
badge="NEW" title="2D Puzzle Solver"
/> img="/project_images/2d_puzzle_solver.jpg"
<div class="divider my-0"></div> desc="Uses breadth first search (BFS) for graph traversal to solve 2D puzzles"
<HorizontalCard url="https://codeberg.org/andcscott/2D-Puzzle-Solver"
title="Demo Project 2" badge="Graphs"
img="/post_img.webp"
desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
url="#"
/> />
<div class="divider my-0"></div> <div class="divider my-0"></div>
<HorizontalCard <HorizontalCard
title="Demo Project 3" title="OpenWeather gRPC API"
img="/post_img.webp" img="/project_images/openweather_grpc_api.jpg"
desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." desc="Written in Go, this microservice uses protocol buffers to define a highly performant gRPC API"
url="#" url="https://codeberg.org/andcscott/OpenWeather-gRPC-API"
badge="FOSS" badge="gRPC"
/>
<div class="divider my-0"></div>
<HorizontalCard
title="Hash Maps"
img="/project_images/hash_maps.jpg"
desc="Two hash map implementations featuring open addressing with quadratic probing and separate chaining"
url="https://codeberg.org/andcscott/HashMaps"
badge="Data Structures"
/> />
<div>
<div class="text-3xl w-full font-bold mb-5 mt-10">Latest posts</div>
</div>
<div> {
<div class="text-3xl w-full font-bold mb-5 mt-10">Latest from blog</div> last_posts.map((post) => (
</div> <>
{
last_posts.map((post) => (
<HorizontalCard <HorizontalCard
title={post.frontmatter.title} title={post.frontmatter.title}
img={post.frontmatter.heroImage} img={post.frontmatter.heroImage}
@ -68,8 +81,8 @@ const last_posts = posts.slice(0, 3);
url={post.url} url={post.url}
target="_self" target="_self"
/> />
<div class="divider my-0"></div> <div class="divider my-0" />
)) </>
} ))
}
</BaseLayout> </BaseLayout>

View file

@ -3,49 +3,83 @@ import BaseLayout from "../layouts/BaseLayout.astro";
import HorizontalCard from "../components/HorizontalCard.astro"; import HorizontalCard from "../components/HorizontalCard.astro";
--- ---
<BaseLayout title = "Projects"> <BaseLayout title="Active Projects">
<div> <div>
<div class="text-3xl w-full font-bold mb-5">Projects Header</div> <div class="text-3xl w-full font-bold mb-5">Active Projects</div>
</div> </div>
<HorizontalCard <HorizontalCard
title="Demo Project 1" title="Advent of Code 2022"
img="/post_img.webp" img=""
desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." desc="An advent calendar of programming puzzles"
url="#" url="https://adventofcode.com"
badge="NEW" badge="NEW"
/> />
<div class="divider my-0"></div> <div class="divider my-0"></div>
<HorizontalCard
title="Demo Project 2"
img="/post_img.webp"
desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
url="#"
/>
<div> <div>
<div class="text-3xl w-full font-bold mb-5 mt-10">Projects Header</div> <div class="text-3xl w-full font-bold mb-5 mt-10">All Projects</div>
</div> </div>
<HorizontalCard <HorizontalCard
title="Demo Project 3" title="2D Puzzle Solver"
img="/post_img.webp" img="/project_images/2d_puzzle_solver.jpg"
desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." desc="Uses breadth first search (BFS) for graph traversal to solve 2D puzzles in the fewest moves possible"
url="#" url="https://codeberg.org/andcscott/2D-Puzzle-Solver"
badge="FOSS" badge="Graphs"
/> />
<div class="divider my-0"></div> <div class="divider my-0"></div>
<HorizontalCard <HorizontalCard
title="Demo Project 4" title="OpenWeather gRPC API"
img="/post_img.webp" img="/project_images/openweather_grpc_api.jpg"
desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." desc="Written in Go, this microservice uses protocol buffers to define a highly performant gRPC API for fetching weather data"
url="#" url="https://codeberg.org/andcscott/OpenWeather-gRPC-API"
badge="gRPC"
/> />
<div class="divider my-0"></div> <div class="divider my-0"></div>
<HorizontalCard <HorizontalCard
title="Demo Project 5" title="Hash Maps"
img="/post_img.webp" img="/project_images/hash_maps.jpg"
desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." desc="Two hash map implementations featuring open addressing with quadratic probing and separate chaining to handle collisions"
url="#" url="https://codeberg.org/andcscott/HashMaps"
badge="Data Structures"
/>
<div class="divider my-0"></div>
<HorizontalCard
title="Exercise Tracker"
img="/project_images/exercise_tracker.jpg"
desc="A full stack MERN app for tracking your exercises."
url="https://codeberg.org/andcscott/ExerciseTracker"
badge="SPA"
/>
<div class="divider my-0"></div>
<HorizontalCard
title="Ship Game"
img="/project_images/hash_maps.jpg"
desc="A backend for the Battleship-like 'Ship Game'"
url="https://codeberg.org/andcscott/ShipGame"
badge="Game"
/>
<div class="divider my-0"></div>
<HorizontalCard
title="MASM & Low Level I/O"
img="/project_images/masm_low_level_io.jpg"
desc="Using the Microsoft Macro Assembler for low level operations"
url="https://git.acscott.dev/a/MASM-Low-Level-IO"
badge="Assembly"
/>
<div class="divider my-0"></div>
<HorizontalCard
title="Dotfiles"
img="/project_images/dotfiles.jpg"
desc="Not a project per se, but always a work in progress"
url="https://codeberg.org/andcscott/dotfiles"
/>
<div class="divider my-0"></div>
<HorizontalCard
title="Password Generator (CLI)"
img="/project_images/password_generator_cli.jpg"
desc="My first Python project"
url="https://codeberg.org/andcscott/password-generator-cli"
/> />
</BaseLayout> </BaseLayout>

View file

@ -1,45 +0,0 @@
---
import BaseLayout from "../../layouts/BaseLayout.astro";
import HorizontalShopItem from "../../components/HorizontalShopItem.astro";
export async function getStaticPaths({ paginate }) {
const posts = (await Astro.glob("./*.{md,mdx}")).sort(
(a, b) => new Date(b.frontmatter.pubDate).valueOf() - new Date(a.frontmatter.pubDate).valueOf()
);
return paginate(posts, { pageSize: 10 });
}
const { page } = Astro.props;
---
<BaseLayout title = "Store">
<ul>
<!--List the array of astronaut info-->
{page.data.map(( post ) => (
<HorizontalShopItem
title={post.frontmatter.title}
img={post.frontmatter.heroImage}
desc={post.frontmatter.description}
pricing={post.frontmatter.pricing}
oldPricing={post.frontmatter.oldPricing}
checkoutUrl={post.frontmatter.checkoutUrl}
badge={post.frontmatter.badge}
details={post.frontmatter.details}
tags={post.frontmatter.tags}
url={post.url}
custom_link={post.frontmatter.custom_link}
custom_link_label={post.frontmatter.custom_link_label}
target="_self"
/>
<div class="divider my-0"></div>
))}
</ul>
<div class="flex justify-between">
{page.url.prev ? <a href={page.url.prev} class="btn btn-ghost my-10 mx-5" > <svg class="h-6 w-6 fill-current md:h-8 md:w-8" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z"></path></svg> Recent posts</a> : <div></div>}
{page.url.next ? <a href={page.url.next} class="btn btn-ghost my-10 mx-5">Older Posts <svg class="h-6 w-6 fill-current md:h-8 md:w-8" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"> <path d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z"></path></svg></a> : <div></div>}
</div>
</BaseLayout>

View file

@ -1,17 +0,0 @@
---
layout: "../../layouts/StoreItemLayout.astro"
title: "Demo Item 1"
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
details: true
custom_link_label: "Live Preview"
custom_link: "https://demourl.com/"
pubDate: "Sep 15 2022"
pricing: "$15"
badge: "Featured"
checkoutUrl: "https://checkouturl.com/"
heroImage: "/itemPreview.png"
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae ultricies leo integer malesuada nunc vel risus commodo viverra. Adipiscing enim eu turpis egestas pretium. Euismod elementum nisi quis eleifend quam adipiscing. In hac habitasse platea dictumst vestibulum. Sagittis purus sit amet volutpat. Netus et malesuada fames ac turpis egestas. Eget magna fermentum iaculis eu non diam phasellus vestibulum lorem. Varius sit amet mattis vulputate enim. Habitasse platea dictumst quisque sagittis. Integer quis auctor elit sed vulputate mi. Dictumst quisque sagittis purus sit amet.
Morbi tristique senectus et netus. Id semper risus in hendrerit gravida rutrum quisque non tellus. Habitasse platea dictumst quisque sagittis purus sit amet. Tellus molestie nunc non blandit massa. Cursus vitae congue mauris rhoncus. Accumsan tortor posuere ac ut. Fringilla urna porttitor rhoncus dolor. Elit ullamcorper dignissim cras tincidunt lobortis. In cursus turpis massa tincidunt dui ut ornare lectus. Integer feugiat scelerisque varius morbi enim nunc. Bibendum neque egestas congue quisque egestas diam. Cras ornare arcu dui vivamus arcu felis bibendum. Dignissim suspendisse in est ante in nibh mauris. Sed tempus urna et pharetra pharetra massa massa ultricies mi.

View file

@ -1,17 +0,0 @@
---
layout: "../../layouts/StoreItemLayout.astro"
title: "Demo Item 2"
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
details: false
custom_link_label: "Custom Btn"
custom_link: "https://customurl.com/"
pubDate: "Sep 11 2022"
pricing: "$10"
oldPricing: "$25.5"
checkoutUrl: "https://checkouturl.com/"
heroImage: "/itemPreview.png"
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae ultricies leo integer malesuada nunc vel risus commodo viverra. Adipiscing enim eu turpis egestas pretium. Euismod elementum nisi quis eleifend quam adipiscing. In hac habitasse platea dictumst vestibulum. Sagittis purus sit amet volutpat. Netus et malesuada fames ac turpis egestas. Eget magna fermentum iaculis eu non diam phasellus vestibulum lorem. Varius sit amet mattis vulputate enim. Habitasse platea dictumst quisque sagittis. Integer quis auctor elit sed vulputate mi. Dictumst quisque sagittis purus sit amet.
Morbi tristique senectus et netus. Id semper risus in hendrerit gravida rutrum quisque non tellus. Habitasse platea dictumst quisque sagittis purus sit amet. Tellus molestie nunc non blandit massa. Cursus vitae congue mauris rhoncus. Accumsan tortor posuere ac ut. Fringilla urna porttitor rhoncus dolor. Elit ullamcorper dignissim cras tincidunt lobortis. In cursus turpis massa tincidunt dui ut ornare lectus. Integer feugiat scelerisque varius morbi enim nunc. Bibendum neque egestas congue quisque egestas diam. Cras ornare arcu dui vivamus arcu felis bibendum. Dignissim suspendisse in est ante in nibh mauris. Sed tempus urna et pharetra pharetra massa massa ultricies mi.