Responsive navigation fully working, placeholders for all major items on site, resume pages working, abstracted site-layout, preparing for unit and e2e testing, added flotbite + tailwind + vitest + playwright
This commit is contained in:
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 124 KiB |
|
Before Width: | Height: | Size: 1.9 MiB After Width: | Height: | Size: 1.9 MiB |
@@ -2,13 +2,14 @@
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
class="logo-title"
|
||||
width="21.129419mm"
|
||||
height="9.3295746mm"
|
||||
viewBox="0 0 74.868021 33.057548"
|
||||
id="svg4376"
|
||||
version="1.1"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
sodipodi:docname="AP in C Green Mock UP.svg"
|
||||
sodipodi:docname="logo-title.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
|
||||
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.6 KiB |
Binary file not shown.
Binary file not shown.
@@ -1,5 +1,7 @@
|
||||
---
|
||||
---
|
||||
<footer class="flex justify-center items-center text-center">
|
||||
{import.meta.env.PUBLIC_BUILD_ENVIRONMENT || "development"} | {import.meta.env.PUBLIC_REPO_VERSION_HASH || "invalid"}@{import.meta.env.PUBLIC_PROJECT_VERSION || "0.0.0"}
|
||||
</footer>
|
||||
|
||||
<footer class="fixed bottom-0 left-0 z-20 w-full px-6 py-2 bg-black border-t border-t-caperren-green text-caperren-green text-sm flex items-center justify-between">
|
||||
<span>{import.meta.env.PUBLIC_BUILD_ENVIRONMENT || "development"}</span>
|
||||
<span>{import.meta.env.PUBLIC_REPO_VERSION_HASH || "invalid"}@{import.meta.env.PUBLIC_PROJECT_VERSION || "0.0.0"}</span>
|
||||
</footer>
|
||||
|
||||
@@ -1,150 +1,27 @@
|
||||
---
|
||||
import {Image} from 'astro:assets';
|
||||
import {Astronav, MenuItems, MenuIcon, Dropdown, DropdownItems} from "astro-navbar";
|
||||
import NestedNavbarEntry from "@components/NestedNavbarEntries.astro";
|
||||
|
||||
import logoTitle from "../assets/logo-title.svg";
|
||||
|
||||
const navItems = [
|
||||
{name: 'Home', href: '/'},
|
||||
{
|
||||
name: 'Experience↓',
|
||||
href: "#",
|
||||
dropdown: [
|
||||
{name: 'SpaceX - Hardware Test Engineer II', href: '/experience/spacex-hardware-test-engineer'},
|
||||
{
|
||||
name: 'SpaceX - Avionics Test Engineer (Intern)',
|
||||
href: '/experience/spacex-avionics-test-engineer-intern'
|
||||
},
|
||||
{name: 'SARL - Automation Engineer (Student)', href: '/experience/sarl-automation-engineer-student'},
|
||||
{
|
||||
name: 'CEOAS OMG - Software/Electronics Engineer (Student)',
|
||||
href: '/experience/ceoas-omg-software-electronics-engineer-student'
|
||||
},
|
||||
{
|
||||
name: 'OSURC - Member/Officer/Sub-Team Lead (Student)',
|
||||
href: '/experience/osurc-member-officer-sub-team-lead'
|
||||
},
|
||||
]
|
||||
},
|
||||
{name: 'Projects↓', href: '/project/project'},
|
||||
{name: 'Hobbies↓', href: '/hobby/hobby'},
|
||||
{name: 'Resume', href: '/resume'},
|
||||
{name: 'Contact', href: '/contact'}
|
||||
];
|
||||
import logoTitle from "@assets/logo-title.svg?raw";
|
||||
import {siteLayout} from "@data/site-layout.ts";
|
||||
---
|
||||
|
||||
<header class="navbar md:flex p-5 gap-5">
|
||||
<Astronav>
|
||||
<div class="flex w-full justify-between">
|
||||
<a href="/">
|
||||
<Image src={logoTitle} alt="Logo Title" height="50" loading="eager"/>
|
||||
</a>
|
||||
<div class="block md:hidden">
|
||||
<MenuIcon class="w-4 h-4 text-gray-800"/>
|
||||
</div>
|
||||
|
||||
<nav class="border-b border-b-caperren-green text-caperren-green">
|
||||
<div class="flex flex-wrap items-center justify-between mx-auto p-6">
|
||||
<a href="/">
|
||||
<Fragment class="logo-title" set:html={logoTitle}/>
|
||||
</a>
|
||||
<button data-collapse-toggle="navbar-multi-level" type="button"
|
||||
class="inline-flex items-center p-2 w-10 h-10 justify-center text-sm md:hidden focus:ring-2 focus:ring-caperren-green"
|
||||
aria-controls="navbar-multi-level" aria-expanded="false">
|
||||
<span class="sr-only">Open main menu</span>
|
||||
<svg class="w-5 h-5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 17 14">
|
||||
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
|
||||
d="M1 1h15M1 7h15M1 13h15"/>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="hidden w-full md:block md:w-auto" id="navbar-multi-level">
|
||||
<NestedNavbarEntry items={siteLayout}/>
|
||||
</div>
|
||||
<MenuItems class="hidden md:flex">
|
||||
<ul class="flex flex-col md:flex-row md:gap-5">
|
||||
<li>
|
||||
<a href="/">Home</a>
|
||||
</li>
|
||||
<!--<li>-->
|
||||
<!-- <Dropdown class="group">-->
|
||||
<!-- <button class="flex items-center">-->
|
||||
<!-- <span> Experience </span>-->
|
||||
<!-- <svg-->
|
||||
<!-- xmlns="http://www.w3.org/2000/svg"-->
|
||||
<!-- fill="none"-->
|
||||
<!-- viewBox="0 0 24 24"-->
|
||||
<!-- stroke-width="3"-->
|
||||
<!-- stroke="currentColor"-->
|
||||
<!-- class="w-3 h-3 mt-0.5 group-open:rotate-180">-->
|
||||
<!-- <path-->
|
||||
<!-- stroke-linecap="round"-->
|
||||
<!-- stroke-linejoin="round"-->
|
||||
<!-- d="M19.5 8.25l-7.5 7.5-7.5-7.5"></path>-->
|
||||
<!-- </svg>-->
|
||||
<!-- </button>-->
|
||||
<!-- <DropdownItems class="relative">-->
|
||||
<!-- <div class="bg-black px-1 py-2 absolute top-0">-->
|
||||
<!-- <ul>-->
|
||||
<!-- <li>-->
|
||||
<!-- <a class="whitespace-nowrap" href="#">SpaceX</a>-->
|
||||
<!-- </li>-->
|
||||
<!-- <li>-->
|
||||
<!-- <a class="whitespace-nowrap" href="#">Sinnhuber Aquatic Research Laboratory</a>-->
|
||||
<!-- </li>-->
|
||||
<!-- <li>-->
|
||||
<!-- <a class="whitespace-nowrap" href="#">CEOAS Ocean Mixing Group</a>-->
|
||||
<!-- </li>-->
|
||||
<!-- </ul>-->
|
||||
<!-- </div>-->
|
||||
<!-- </DropdownItems>-->
|
||||
<!-- </Dropdown>-->
|
||||
<!--</li>-->
|
||||
<!--<li>-->
|
||||
<!-- <Dropdown class="group">-->
|
||||
<!-- <button class="flex items-center">-->
|
||||
<!-- <span> Projects </span>-->
|
||||
<!-- <svg-->
|
||||
<!-- xmlns="http://www.w3.org/2000/svg"-->
|
||||
<!-- fill="none"-->
|
||||
<!-- viewBox="0 0 24 24"-->
|
||||
<!-- stroke-width="3"-->
|
||||
<!-- stroke="currentColor"-->
|
||||
<!-- class="w-3 h-3 mt-0.5 group-open:rotate-180">-->
|
||||
<!-- <path-->
|
||||
<!-- stroke-linecap="round"-->
|
||||
<!-- stroke-linejoin="round"-->
|
||||
<!-- d="M19.5 8.25l-7.5 7.5-7.5-7.5"></path>-->
|
||||
<!-- </svg>-->
|
||||
<!-- </button>-->
|
||||
<!-- <DropdownItems class="relative">-->
|
||||
<!-- <div class="bg-black absolute top-0">-->
|
||||
<!-- <ul>-->
|
||||
<!-- <li>-->
|
||||
<!-- <a href="#">Placeholder 1</a>-->
|
||||
<!-- </li>-->
|
||||
<!-- </ul>-->
|
||||
<!-- </div>-->
|
||||
<!-- </DropdownItems>-->
|
||||
<!-- </Dropdown>-->
|
||||
<!--</li>-->
|
||||
<!--<li>-->
|
||||
<!-- <Dropdown class="group">-->
|
||||
<!-- <button class="flex items-center">-->
|
||||
<!-- <span> Hobbies </span>-->
|
||||
<!-- <svg-->
|
||||
<!-- xmlns="http://www.w3.org/2000/svg"-->
|
||||
<!-- fill="none"-->
|
||||
<!-- viewBox="0 0 24 24"-->
|
||||
<!-- stroke-width="3"-->
|
||||
<!-- stroke="currentColor"-->
|
||||
<!-- class="w-3 h-3 mt-0.5 group-open:rotate-180">-->
|
||||
<!-- <path-->
|
||||
<!-- stroke-linecap="round"-->
|
||||
<!-- stroke-linejoin="round"-->
|
||||
<!-- d="M19.5 8.25l-7.5 7.5-7.5-7.5"></path>-->
|
||||
<!-- </svg>-->
|
||||
<!-- </button>-->
|
||||
<!-- <DropdownItems class="relative">-->
|
||||
<!-- <div class="bg-black absolute top-0">-->
|
||||
<!-- <ul>-->
|
||||
<!-- <li>Menu 1</li>-->
|
||||
<!-- <li>Menu 2</li>-->
|
||||
<!-- <li>Menu 3</li>-->
|
||||
<!-- </ul>-->
|
||||
<!-- </div>-->
|
||||
<!-- </DropdownItems>-->
|
||||
<!-- </Dropdown>-->
|
||||
<!--</li>-->
|
||||
<!--<li>-->
|
||||
<!-- <a href="/resume">Resume</a>-->
|
||||
<!--</li>-->
|
||||
<li>
|
||||
<a href="/contact">Contact</a>
|
||||
</li>
|
||||
</ul>
|
||||
</MenuItems>
|
||||
</Astronav>
|
||||
</header>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
47
src/components/NestedNavbarEntries.astro
Normal file
47
src/components/NestedNavbarEntries.astro
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
import type {navLink} from "@interfaces/site-layout.ts";
|
||||
|
||||
const items: navLink[] = Astro.props.items;
|
||||
const depth: number = Astro.props.depth ?? 0;
|
||||
const paths: string[] = Astro.props.paths ?? [];
|
||||
|
||||
const getNavLinkSuffix = (entry: navLink): string => {
|
||||
return "-" + [...paths, entry.path].join("-")
|
||||
}
|
||||
const getHrefPath = (entry: navLink): string => {
|
||||
return entry.pubpath ? entry.pubpath : ("/" + (paths && paths.length ? [...paths, entry.path].join("/") : entry.path));
|
||||
}
|
||||
---
|
||||
<ul class={"flex flex-col p-4 bg-black border-caperren-green " + (depth ? "" : "md:flex-row md:space-x-8 md:mt-0")}>
|
||||
{
|
||||
items.map((entry, index) => (
|
||||
<li >
|
||||
{Array.isArray(entry.children) && entry.children.length ? (
|
||||
<button id={"dropdownNavbarLink" + getNavLinkSuffix(entry)}
|
||||
data-dropdown-toggle={"dropdownNavbar" + getNavLinkSuffix(entry)}
|
||||
data-dropdown-placement="bottom"
|
||||
class="flex items-center justify-between py-2 px-3 w-full hover:text-caperren-green-light md:hover:bg-transparent md:border-0 md:hover:text-caperren-green-light md:p-0 ">
|
||||
{entry.title}
|
||||
<svg class="w-2.5 h-2.5 ms-2.5" aria-hidden="true" xmlns="http://www.w3.org/2000/svg"
|
||||
fill="none" viewBox="0 0 10 6">
|
||||
<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="m1 1 4 4 4-4"/>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<div id={"dropdownNavbar" + getNavLinkSuffix(entry)}
|
||||
class="z-10 hidden bg-black border border-caperren-green shadow-sm w-screen md:w-max">
|
||||
<Astro.self items={entry.children} paths={[...paths, entry.path]} depth={depth + 1}/>
|
||||
</div>
|
||||
|
||||
) : (
|
||||
|
||||
<a href={getHrefPath(entry)}
|
||||
class="block py-2 px-3 bg-transparent hover:text-caperren-green-light ring-caperren-green-dark md:p-0"
|
||||
aria-current="page">{entry.title}</a>
|
||||
|
||||
)}
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
151
src/data/site-layout.ts
Normal file
151
src/data/site-layout.ts
Normal file
@@ -0,0 +1,151 @@
|
||||
import type {navLink} from "@interfaces/site-layout.ts"
|
||||
|
||||
export const siteLayout: navLink[] = [
|
||||
{title: "About", path: ""},
|
||||
{
|
||||
title: "Experiences",
|
||||
path: "experience",
|
||||
children: [
|
||||
{
|
||||
title: "SpaceX",
|
||||
path: "spacex",
|
||||
children: [
|
||||
{
|
||||
title: "Hardware Test Engineer I/II",
|
||||
path: "hardware-test-engineer-i-ii"
|
||||
},
|
||||
{
|
||||
title: "Avionics Test Engineering Internship",
|
||||
path: "avionics-test-engineering-internship"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "OSU CEOAS",
|
||||
path: "osu-ceoas-ocean-mixing-group",
|
||||
children: [
|
||||
{
|
||||
title: "Robotics Oceanographic Surface Sampler",
|
||||
path: "robotic-oceanographic-surface-sampler",
|
||||
},
|
||||
{
|
||||
title: "LeConte Glacier Deployments",
|
||||
path: "leconte-glacier-deployments",
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "OSU SARL",
|
||||
path: "osu-sinnhuber-aquatic-research-laboratory",
|
||||
children: [
|
||||
{
|
||||
title: "Team Lead",
|
||||
path: "team-lead",
|
||||
},
|
||||
{
|
||||
title: "Zebrafish Embryo Pick and Plate",
|
||||
path: "zebrafish-embryo-pick-and-plate",
|
||||
},
|
||||
{
|
||||
title: "Shuttlebox Behavior System",
|
||||
path: "shuttlebox-behavior-system",
|
||||
},
|
||||
{
|
||||
title: "Dechorionator",
|
||||
path: "dechorionator",
|
||||
},
|
||||
{
|
||||
title: "Denso Embryo Pick and Plate",
|
||||
path: "denso-embryo-pick-and-plate",
|
||||
},
|
||||
{
|
||||
title: "ZScan Processor",
|
||||
path: "zscan-processor",
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "OSU Robotics Club",
|
||||
path: "osu-robotics-club",
|
||||
children: [
|
||||
{
|
||||
title: "Club Officer",
|
||||
path: "club-officer",
|
||||
},
|
||||
{
|
||||
title: "Mars Rover Software Team Lead",
|
||||
path: "mars-rover-software-team-lead",
|
||||
},
|
||||
{
|
||||
title: "Mars Rover Emergency Software Team Lead",
|
||||
path: "mars-rover-emergency-software-team-lead",
|
||||
},
|
||||
{
|
||||
title: "Mars Rover Electrical Team Lead",
|
||||
path: "mars-rover-electrical-team-lead",
|
||||
}
|
||||
]
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Hobbies",
|
||||
path: "hobby",
|
||||
children: [
|
||||
|
||||
{
|
||||
title: "Homelab", path: "homelab",
|
||||
children: [
|
||||
{title: "Home Server Rack", path: "home-server-rack"},
|
||||
{title: "Offsite Backup Rack", path: "offsite-backup-rack"},
|
||||
{title: "Kubernetes Cluster", path: "kubernetes-cluster"},
|
||||
{title: "Home Automation", path: "home-automation"},
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Motorcycling",
|
||||
path: "motorcycling",
|
||||
children: [
|
||||
{title: "Lineup", path: "lineup"},
|
||||
{
|
||||
title: "Custom Accessories",
|
||||
path: "custom-accessories",
|
||||
children: [
|
||||
{title: "Chubby Buttons 2 Mount", path: "chubby-buttons-2-mount"},
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Trips",
|
||||
path: "trips",
|
||||
children: [
|
||||
{title: "2025-08 | Alaska ", path: "2025-08-alaska"},
|
||||
{title: "2024-10 | Norway ", path: "2024-10-norway"}
|
||||
]
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Homelab", path: "homelab",
|
||||
children: [
|
||||
{title: "Home Server Rack", path: "home-server-rack"},
|
||||
{title: "Offsite Backup Rack", path: "offsite-backup-rack"},
|
||||
{title: "Kubernetes Cluster", path: "kubernetes-cluster"},
|
||||
{title: "Home Automation", path: "home-automation"},
|
||||
]
|
||||
},
|
||||
{title: "NixOS", path: "nixos"},
|
||||
{title: "Body Mods", path: "body-mods"},
|
||||
]
|
||||
},
|
||||
{
|
||||
title: "Resumes",
|
||||
path: "resume",
|
||||
children: [
|
||||
{title: "2025-11-10 | Complete CV", path: "2025-11-10-complete-cv"},
|
||||
{title: "2025-11-10 | Infrastructure Engineer", path: "2025-11-10-infrastructure-engineer"},
|
||||
{title: "2019-07-01 | Hardware Test Engineer", path: "2019-07-01-hardware-test-engineer"},
|
||||
]
|
||||
},
|
||||
{title: "Github", pubpath: "https://github.com/caperren"},
|
||||
{title: "LinkedIn", pubpath: "https://www.linkedin.com/in/caperren/"}
|
||||
]
|
||||
6
src/interfaces/site-layout.ts
Normal file
6
src/interfaces/site-layout.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export interface navLink {
|
||||
title: string;
|
||||
path?: string;
|
||||
pubpath?: string;
|
||||
children?: navLink[];
|
||||
}
|
||||
@@ -9,15 +9,17 @@ const pageTitle = Astro.props.title ? `${Astro.props.title} - Corwin Perren` : "
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8"/>
|
||||
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
||||
<link rel="icon" href="/favicon.svg" type="image/svg+xml"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<title>{pageTitle}</title>
|
||||
</head>
|
||||
<body>
|
||||
<body class="bg-black text-white">
|
||||
<Navbar/>
|
||||
<main style="padding: 2rem;">
|
||||
<main class="mx-6 mt-6 mb-14">
|
||||
<slot/>
|
||||
</main>
|
||||
<Footer/>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
<script is:inline type="module" src="/src/scripts/main.js"></script>
|
||||
6
src/layouts/HobbyLayout.astro
Normal file
6
src/layouts/HobbyLayout.astro
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import BaseLayout from './BaseLayout.astro';
|
||||
---
|
||||
<BaseLayout>
|
||||
<slot/>
|
||||
</BaseLayout>
|
||||
10
src/layouts/ResumeLayout.astro
Normal file
10
src/layouts/ResumeLayout.astro
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
import BaseLayout from './BaseLayout.astro';
|
||||
|
||||
const resume = Astro.props.resume;
|
||||
---
|
||||
<BaseLayout>
|
||||
<div class="h-dvh">
|
||||
<iframe src={resume} class="mx-auto w-9/10 md:w-3/5 h-7/10 md:h-4/5"/>
|
||||
</div>
|
||||
</BaseLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
---
|
||||
|
||||
<ExperienceLayout>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
---
|
||||
|
||||
<ExperienceLayout>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
---
|
||||
|
||||
<ExperienceLayout>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
---
|
||||
|
||||
<ExperienceLayout>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
---
|
||||
|
||||
<ExperienceLayout>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
---
|
||||
|
||||
<ExperienceLayout>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
---
|
||||
|
||||
<ExperienceLayout>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
---
|
||||
|
||||
<ExperienceLayout>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
---
|
||||
|
||||
<ExperienceLayout>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
---
|
||||
|
||||
<ExperienceLayout>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
---
|
||||
|
||||
<ExperienceLayout>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ExperienceLayout from "@layouts/ExperienceLayout.astro";
|
||||
---
|
||||
|
||||
<ExperienceLayout>
|
||||
</ExperienceLayout>
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
import ExperienceLayout from '../../../layouts/ExperienceLayout.astro';
|
||||
import {Image} from 'astro:assets';
|
||||
|
||||
import spring_2019_interns from "../../../assets/experience/spacex/avionics-test-engineering-intern/spring-2019-interns.jpg";
|
||||
---
|
||||
<ExperienceLayout>
|
||||
<Image class="mx-auto block" src={spring_2019_interns} alt="spring-2019-interns.jpg" loading="eager"/>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,11 @@
|
||||
---
|
||||
import ExperienceLayout from '@layouts/ExperienceLayout.astro';
|
||||
import {Image} from 'astro:assets';
|
||||
|
||||
import spring_2019_interns from "@assets/experience/spacex/avionics-test-engineering-internship/spring-2019-interns.jpg";
|
||||
---
|
||||
<ExperienceLayout>
|
||||
<Image class="mx-auto block" src={spring_2019_interns} alt="spring-2019-interns.jpg" loading="eager"/>
|
||||
|
||||
<span>Final text here</span>
|
||||
</ExperienceLayout>
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
import ExperienceLayout from '@layouts/ExperienceLayout.astro';
|
||||
import {Image} from 'astro:assets';
|
||||
|
||||
import starlink_headquarters_selfie from "@assets/experience/spacex/hardware-test-engineer-i-ii/starlink_headquarters_selfie.jpg";
|
||||
---
|
||||
<ExperienceLayout title="SpaceX - Hardware Test Engineer II" >
|
||||
<Image class="mx-auto block" src={starlink_headquarters_selfie} alt="starlink_headquarters_selfie" loading="eager"/>
|
||||
<h2 >Timeline</h2>
|
||||
<ul>
|
||||
<li>Test</li>
|
||||
</ul>
|
||||
</ExperienceLayout>
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
import ExperienceLayout from '../../../layouts/ExperienceLayout.astro';
|
||||
import {Image} from 'astro:assets';
|
||||
|
||||
import starlink_headquarters_selfie from "../../../assets/experience/spacex/hardware-test-engineer-ii/starlink_headquarters_selfie.jpg";
|
||||
---
|
||||
<ExperienceLayout>
|
||||
<Image class="mx-auto block" src={starlink_headquarters_selfie} alt="starlink_headquarters_selfie" loading="eager"/>
|
||||
</ExperienceLayout>
|
||||
6
src/pages/hobby/body-mods.astro
Normal file
6
src/pages/hobby/body-mods.astro
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import HobbyLayout from "@layouts/HobbyLayout.astro";
|
||||
---
|
||||
|
||||
<HobbyLayout>
|
||||
</HobbyLayout>
|
||||
6
src/pages/hobby/homelab/home-automation.astro
Normal file
6
src/pages/hobby/homelab/home-automation.astro
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import HobbyLayout from "@layouts/HobbyLayout.astro";
|
||||
---
|
||||
|
||||
<HobbyLayout>
|
||||
</HobbyLayout>
|
||||
6
src/pages/hobby/homelab/home-server-rack.astro
Normal file
6
src/pages/hobby/homelab/home-server-rack.astro
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import HobbyLayout from "@layouts/HobbyLayout.astro";
|
||||
---
|
||||
|
||||
<HobbyLayout>
|
||||
</HobbyLayout>
|
||||
6
src/pages/hobby/homelab/kubernetes-cluster.astro
Normal file
6
src/pages/hobby/homelab/kubernetes-cluster.astro
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import HobbyLayout from "@layouts/HobbyLayout.astro";
|
||||
---
|
||||
|
||||
<HobbyLayout>
|
||||
</HobbyLayout>
|
||||
6
src/pages/hobby/homelab/offsite-backup-rack.astro
Normal file
6
src/pages/hobby/homelab/offsite-backup-rack.astro
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import HobbyLayout from "@layouts/HobbyLayout.astro";
|
||||
---
|
||||
|
||||
<HobbyLayout>
|
||||
</HobbyLayout>
|
||||
@@ -1,2 +0,0 @@
|
||||
---
|
||||
---
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import HobbyLayout from "@layouts/HobbyLayout.astro";
|
||||
---
|
||||
|
||||
<HobbyLayout>
|
||||
</HobbyLayout>
|
||||
6
src/pages/hobby/motorcycling/lineup.astro
Normal file
6
src/pages/hobby/motorcycling/lineup.astro
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import HobbyLayout from "@layouts/HobbyLayout.astro";
|
||||
---
|
||||
|
||||
<HobbyLayout>
|
||||
</HobbyLayout>
|
||||
6
src/pages/hobby/motorcycling/trips/2024-10-norway.astro
Normal file
6
src/pages/hobby/motorcycling/trips/2024-10-norway.astro
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import HobbyLayout from "@layouts/HobbyLayout.astro";
|
||||
---
|
||||
|
||||
<HobbyLayout>
|
||||
</HobbyLayout>
|
||||
6
src/pages/hobby/motorcycling/trips/2025-08-alaska.astro
Normal file
6
src/pages/hobby/motorcycling/trips/2025-08-alaska.astro
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import HobbyLayout from "@layouts/HobbyLayout.astro";
|
||||
---
|
||||
|
||||
<HobbyLayout>
|
||||
</HobbyLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import HobbyLayout from "@layouts/HobbyLayout.astro";
|
||||
---
|
||||
|
||||
<HobbyLayout>
|
||||
</HobbyLayout>
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
import BaseLayout from '../layouts/BaseLayout.astro';
|
||||
---
|
||||
|
||||
<BaseLayout>
|
||||
</BaseLayout>
|
||||
6
src/pages/resume/2019-07-01-hardware-test-engineer.astro
Normal file
6
src/pages/resume/2019-07-01-hardware-test-engineer.astro
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ResumeLayout from "@layouts/ResumeLayout.astro";
|
||||
import resume from "@assets/resume/corwin_perren_2019-07-01_hardware_test_engineer.pdf"
|
||||
---
|
||||
|
||||
<ResumeLayout resume={resume}/>
|
||||
5
src/pages/resume/2025-11-10-complete-cv.astro
Normal file
5
src/pages/resume/2025-11-10-complete-cv.astro
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
import ResumeLayout from "@layouts/ResumeLayout.astro";
|
||||
---
|
||||
|
||||
<ResumeLayout/>
|
||||
@@ -0,0 +1,6 @@
|
||||
---
|
||||
import ResumeLayout from "@layouts/ResumeLayout.astro";
|
||||
import resume from "@assets/resume/corwin_perren_2025_10_27_infrastructure_engineer.pdf"
|
||||
---
|
||||
|
||||
<ResumeLayout resume={resume}/>
|
||||
1
src/scripts/main.js
Normal file
1
src/scripts/main.js
Normal file
@@ -0,0 +1 @@
|
||||
import 'flowbite';
|
||||
@@ -1,33 +1,13 @@
|
||||
@import "tailwindcss";
|
||||
@import "flowbite/src/themes/default.css";
|
||||
|
||||
@plugin "flowbite/plugin";
|
||||
@source "../../node_modules/flowbite";
|
||||
|
||||
@theme {
|
||||
--default-font-family: font-mono;
|
||||
|
||||
--color-caperren-green: #10ac25;
|
||||
--color-caperren-green-light: #00ff2a;
|
||||
--color-caperren-green-dark: #06370e;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: system-ui, sans-serif;
|
||||
background-color: #000000;
|
||||
color: var(--color-caperren-green);
|
||||
}
|
||||
a {
|
||||
color: var(--color-caperren-green);
|
||||
text-decoration: none;
|
||||
}
|
||||
.navbar {
|
||||
align-items: center;
|
||||
background-color: #000000;
|
||||
border-bottom: 2px solid var(--color-caperren-green);
|
||||
}
|
||||
.navbar a, .navbar span {
|
||||
font-weight: bold;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
||||
footer {
|
||||
border-top: 2px solid var(--color-caperren-green);
|
||||
}
|
||||
/*.astronav-dropdown .group {*/
|
||||
/* background-color: black;*/
|
||||
/*}*/
|
||||
Reference in New Issue
Block a user