Compare commits

...

4 Commits

Author SHA1 Message Date
8fd009ffda Remove blank line
All checks were successful
Build and Test - Staging / test (pull_request) Successful in 3m48s
Build and Test - Staging / build_and_push (pull_request) Successful in 3m31s
Build and Test - Staging / deploy_staging (pull_request) Successful in 4s
2025-11-12 01:48:42 -08:00
4b1eb3777f Removed Timeline fixed height that was only used for testing 2025-11-12 01:36:35 -08:00
7858d95f58 Reformatted the project 2025-11-12 01:21:48 -08:00
b91d37db45 Fixed navbar button border and list overlap 2025-11-12 01:14:54 -08:00
13 changed files with 80 additions and 244 deletions

View File

@@ -1,7 +1,7 @@
name: Build and Test - Production name: Build and Test - Production
on: on:
push: push:
branches: [main] branches: [ main ]
jobs: jobs:
test: test:

View File

@@ -1,48 +1,3 @@
# Astro Starter Kit: Basics # Corwin Perren's Personal Portfolio Website
```sh Check the Makfile and/or package.json for the commands needed to build and run this project.
npm create astro@latest -- --template basics
```
[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/basics)
[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/basics)
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/basics/devcontainer.json)
> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun!
![just-the-basics](https://github.com/withastro/astro/assets/2244813/a0a5533c-a856-4198-8470-2d67b1d7c554)
## 🚀 Project Structure
Inside of your Astro project, you'll see the following folders and files:
```text
/
├── public/
│ └── favicon.svg
├── src/
│ ├── layouts/
│ │ └── Layout.astro
│ └── pages/
│ └── index.astro
└── package.json
```
To learn more about the folder structure of an Astro project, refer to [our guide on project structure](https://docs.astro.build/en/basics/project-structure/).
## 🧞 Commands
All commands are run from the root of the project, from a terminal:
| Command | Action |
| :------------------------ | :----------------------------------------------- |
| `npm install` | Installs dependencies |
| `npm run dev` | Starts local dev server at `localhost:4321` |
| `npm run build` | Build your production site to `./dist/` |
| `npm run preview` | Preview your build locally, before deploying |
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
| `npm run astro -- --help` | Get help using the Astro CLI |
## 👀 Want to learn more?
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).

View File

@@ -1,151 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- 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="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"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs4378" />
<sodipodi:namedview
id="base"
pagecolor="#000000"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="1"
inkscape:pageshadow="2"
inkscape:zoom="11.313709"
inkscape:cx="329.77692"
inkscape:cy="530.2417"
inkscape:document-units="px"
inkscape:current-layer="layer2"
showgrid="false"
inkscape:window-width="2546"
inkscape:window-height="1386"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:showpageshadow="true"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#505050"
inkscape:export-bgcolor="#ffffff00">
<inkscape:page
x="0"
y="0"
width="74.868019"
height="33.057549"
id="page2"
margin="0"
bleed="0" />
</sodipodi:namedview>
<metadata
id="metadata4381">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-262.90298,-476.37904)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#10ac25;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="279.60336"
y="517.86682"
id="text4159-4"
transform="scale(1.0283363,0.97244452)"
inkscape:export-xdpi="120.07"
inkscape:export-ydpi="120.07"
inkscape:export-filename="text4159-4.svg"><tspan
sodipodi:role="line"
x="279.60336"
y="517.86682"
style="font-size:15.425px;line-height:1.25"
id="tspan4167-2">Perren</tspan></text>
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 2"
transform="translate(-262.90298,-476.37904)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#10ac25;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="260.65689"
y="506.06656"
id="text3344-4-5"
inkscape:export-xdpi="120.07"
inkscape:export-ydpi="120.07"><tspan
sodipodi:role="line"
id="tspan3346-7-6"
x="260.65689"
y="506.06656"
style="font-size:40px;line-height:1.25">C</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#10ac25;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="270.34253"
y="498.55893"
id="text3348-1-8"
transform="scale(1.0028223,0.99718564)"
inkscape:export-xdpi="120.07"
inkscape:export-ydpi="120.07"><tspan
sodipodi:role="line"
id="tspan3350-3-1"
x="270.34253"
y="498.55893"
style="font-size:16.283px;line-height:1.25">A</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#10ac25;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="96.614212"
y="537.43079"
id="text3344-5-7-6"
transform="matrix(0.88187751,-0.35574603,0.36069903,0.98843971,0,0)"
inkscape:export-xdpi="120.07"
inkscape:export-ydpi="120.07"><tspan
sodipodi:role="line"
id="tspan3370-7-8"
x="96.614212"
y="537.43079"
style="font-size:14.587px;line-height:1.25">P</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#10ac25;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="287.28516"
y="490.68661"
id="text4159"
inkscape:export-xdpi="120.07"
inkscape:export-ydpi="120.07"><tspan
sodipodi:role="line"
id="tspan4161"
x="287.28516"
y="490.68661"
style="font-size:15px;line-height:1.25">Corwin</tspan><tspan
sodipodi:role="line"
x="287.28516"
y="509.43661"
style="font-size:15px;line-height:1.25"
id="tspan4167"> </tspan></text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 5.6 KiB

View File

@@ -25,7 +25,7 @@ import {Image} from "astro:assets";
d="M1 1h15M1 7h15M1 13h15"/> d="M1 1h15M1 7h15M1 13h15"/>
</svg> </svg>
</button> </button>
<div class="z-40 hidden w-full lg:block lg:w-auto" id="navbar-multi-level"> <div class="z-40 hidden mt-1 w-full lg:block lg:w-auto" id="navbar-multi-level">
<NestedNavbarEntry items={siteLayout}/> <NestedNavbarEntry items={siteLayout}/>
</div> </div>
</div> </div>

View File

@@ -29,7 +29,7 @@ const timeline: timelineEntry[] = Astro.props.timeline || [];
</div> </div>
))} ))}
</div> </div>
<div class="z-0 h-10 w-full max-w-full overflow-x-visible" data-custom-timeline-line-wrapper/> <div class="z-0 w-full max-w-full overflow-x-visible" data-custom-timeline-line-wrapper/>
</div> </div>
</custom-timeline> </custom-timeline>

View File

@@ -1,9 +1,10 @@
import { DateTime } from 'luxon'; import {DateTime} from 'luxon';
export interface experience { export interface experience {
} }
export interface subExperience { export interface subExperience {
name: string; name: string;
description: string; description: string;

View File

@@ -3,7 +3,8 @@ import ExperienceLayout from '@layouts/ExperienceLayout.astro';
import Timeline from '@components/Timeline/Timeline.astro'; import Timeline from '@components/Timeline/Timeline.astro';
import Carousel from "@components/CustomCarousel/CustomCarousel.astro"; import Carousel from "@components/CustomCarousel/CustomCarousel.astro";
import spring_2019_interns from "@assets/experience/spacex/avionics-test-engineering-internship/spring-2019-interns.jpg"; import spring_2019_interns
from "@assets/experience/spacex/avionics-test-engineering-internship/spring-2019-interns.jpg";
import type {carouselGroup} from "@interfaces/image-carousel.ts"; import type {carouselGroup} from "@interfaces/image-carousel.ts";
import type {timelineEntry} from "@interfaces/timeline.ts"; import type {timelineEntry} from "@interfaces/timeline.ts";
@@ -58,9 +59,20 @@ const timeline: timelineEntry[] = [
<h2 class="font-bold md:text-2xl my-4">Details</h2> <h2 class="font-bold md:text-2xl my-4">Details</h2>
Though I did get to work on some really fun projects during my internship at SpaceX, I unfortunately cant go into
much detail due to NDAs and ITAR restrictions. What I can say is that I mainly wrote Python for a new avionics
hardware test system. My experience with writing Python in the numerous other projects Ive done really helped me
out here, as the framework SpaceX has created was quite complex and would otherwise have been fairly difficult to
write code for. I also wrote a simple tool for automating the creation of Jira work tickets so that the two teams
that ended up using it wouldnt have to have their members manually creating dozens of them as work and issues came
in through a separate system.
Though I did get to work on some really fun projects during my internship at SpaceX, I unfortunately cant go into much detail due to NDAs and ITAR restrictions. What I can say is that I mainly wrote Python for a new avionics hardware test system. My experience with writing Python in the numerous other projects Ive done really helped me out here, as the framework SpaceX has created was quite complex and would otherwise have been fairly difficult to write code for. I also wrote a simple tool for automating the creation of Jira work tickets so that the two teams that ended up using it wouldnt have to have their members manually creating dozens of them as work and issues came in through a separate system. I was also quite happy in that I got to perform some circuit debugging on avionics test system hardware, both for my
project and for a separate test system. A final experience I had here was getting to work directly with the head
I was also quite happy in that I got to perform some circuit debugging on avionics test system hardware, both for my project and for a separate test system. A final experience I had here was getting to work directly with the head engineer from a company that supplied a piece of test hardware I was interfacing with. It was quite incredible to see just how much weight a SpaceX email address had when trying to solve problems I had found with the hardware. Not only were they responsive, but in fact were willing to fast-track firmware updates for us to get things working. Coming from clubs and small labs where a support email might not even get a response for months, it was quite a refreshing experience. engineer from a company that supplied a piece of test hardware I was interfacing with. It was quite incredible to
see just how much weight a SpaceX email address had when trying to solve problems I had found with the hardware. Not
only were they responsive, but in fact were willing to fast-track firmware updates for us to get things working.
Coming from clubs and small labs where a support email might not even get a response for months, it was quite a
refreshing experience.
</ExperienceLayout> </ExperienceLayout>

View File

@@ -45,15 +45,18 @@ const timeline: timelineEntry[] = [
--- ---
<ExperienceLayout title="SpaceX - Hardware Test Engineer I/II"> <ExperienceLayout title="SpaceX - Hardware Test Engineer I/II">
<Carousel carouselGroup={headerCarouselGroup}/> <Carousel carouselGroup={headerCarouselGroup}/>
<h2 class="font-bold md:text-2xl my-4">Summary</h2> <h2 class="font-bold md:text-2xl my-4">Summary</h2>
<h3 class="font-bold md:text-lg my-4">Timeline</h3> <h3 class="font-bold md:text-lg my-4">Timeline</h3>
<Timeline timeline={timeline}/> <Timeline timeline={timeline}/>
<h3 class="font-bold md:text-lg my-4">Key Takeaways</h3> <h3 class="font-bold md:text-lg my-4">Key Takeaways</h3>
<ul class="list-disc list-inside"> <ul class="list-disc list-inside">
<li>Created test systems which validated ~4500 Starlink satellite flight computers, and ~4000 power boards</li> <li>Created test systems which validated ~4500 Starlink satellite flight computers, and ~4000 power boards</li>
<li>Developed program-critical infrastructure that enabled efficient triage, management, and tracking of hardware failures</li> <li>Developed program-critical infrastructure that enabled efficient triage, management, and tracking of
<li>Designed and deployed automated, unified, and containerized infrastructure to greatly increase application reliability and development speed </li> hardware failures
</li>
<li>Designed and deployed automated, unified, and containerized infrastructure to greatly increase application
reliability and development speed
</li>
</ul> </ul>
<h3 class="font-bold md:text-lg my-4">Skills Used</h3> <h3 class="font-bold md:text-lg my-4">Skills Used</h3>
<div class="relative grid gap-6 grid-flow-row sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 border-caperren-green"> <div class="relative grid gap-6 grid-flow-row sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 border-caperren-green">

View File

@@ -12,7 +12,8 @@ import enclosure_right from "@assets/hobby/homelab/offsite-backup-rack/enclosure
import enclosure_with_ups from "@assets/hobby/homelab/offsite-backup-rack/enclosure-with-ups.jpg"; import enclosure_with_ups from "@assets/hobby/homelab/offsite-backup-rack/enclosure-with-ups.jpg";
import power_adapter_tray_and_dc_dc from "@assets/hobby/homelab/offsite-backup-rack/power-adapter-tray-and-dc-dc.jpg"; import power_adapter_tray_and_dc_dc from "@assets/hobby/homelab/offsite-backup-rack/power-adapter-tray-and-dc-dc.jpg";
import power_supply_closeup from "@assets/hobby/homelab/offsite-backup-rack/power-supply-closeup.jpg"; import power_supply_closeup from "@assets/hobby/homelab/offsite-backup-rack/power-supply-closeup.jpg";
import power_supply_mounting_location from "@assets/hobby/homelab/offsite-backup-rack/power-supply-mounting-location.jpg"; import power_supply_mounting_location
from "@assets/hobby/homelab/offsite-backup-rack/power-supply-mounting-location.jpg";
import sata_tight_fit from "@assets/hobby/homelab/offsite-backup-rack/sata-tight-fit.jpg"; import sata_tight_fit from "@assets/hobby/homelab/offsite-backup-rack/sata-tight-fit.jpg";
import sff_pc_with_sata_and_usb_ssds from "@assets/hobby/homelab/offsite-backup-rack/sff-pc-with-sata-and-usb-ssds.jpg"; import sff_pc_with_sata_and_usb_ssds from "@assets/hobby/homelab/offsite-backup-rack/sff-pc-with-sata-and-usb-ssds.jpg";
import up_and_running from "@assets/hobby/homelab/offsite-backup-rack/up-and-running.png"; import up_and_running from "@assets/hobby/homelab/offsite-backup-rack/up-and-running.png";

View File

@@ -12,13 +12,12 @@ import fjr1300 from "@assets/hobby/motorcycling/lineup/2015-fjr-1300-mountaintop
import sg400 from "@assets/hobby/motorcycling/lineup/2021-csc-sg400.jpg"; import sg400 from "@assets/hobby/motorcycling/lineup/2021-csc-sg400.jpg";
const fjrCarouselGroup: carouselGroup = {animation: "slide",images: [fjr1300]} const fjrCarouselGroup: carouselGroup = {animation: "slide", images: [fjr1300]}
const cscCarouselGroup: carouselGroup = {animation: "slide",images: [sg400]} const cscCarouselGroup: carouselGroup = {animation: "slide", images: [sg400]}
const drzCarouselGroup: carouselGroup = {animation: "slide",images: [drz400]} const drzCarouselGroup: carouselGroup = {animation: "slide", images: [drz400]}
const concoursCarouselGroup: carouselGroup = {animation: "slide",images: [concours]} const concoursCarouselGroup: carouselGroup = {animation: "slide", images: [concours]}
const ninjaCarouselGroup: carouselGroup = {animation: "slide",images: [ninja600]} const ninjaCarouselGroup: carouselGroup = {animation: "slide", images: [ninja600]}
const kz750CarouselGroup: carouselGroup = {animation: "slide",images: [kz750]} const kz750CarouselGroup: carouselGroup = {animation: "slide", images: [kz750]}
--- ---
<HobbyLayout title="Motorcycling - Lineup"> <HobbyLayout title="Motorcycling - Lineup">

View File

@@ -1,4 +1,4 @@
import type { APIRoute } from 'astro'; import type {APIRoute} from 'astro';
const getRobotsTxt = (sitemapURL: URL) => `\ const getRobotsTxt = (sitemapURL: URL) => `\
User-agent: * User-agent: *
@@ -7,7 +7,7 @@ Allow: /
Sitemap: ${sitemapURL.href} Sitemap: ${sitemapURL.href}
`; `;
export const GET: APIRoute = ({ site }) => { export const GET: APIRoute = ({site}) => {
const sitemapURL = new URL('sitemap-index.xml', site); const sitemapURL = new URL('sitemap-index.xml', site);
return new Response(getRobotsTxt(sitemapURL)); return new Response(getRobotsTxt(sitemapURL));
}; };

View File

@@ -1,16 +1,32 @@
{ {
"compilerOptions": { "compilerOptions": {
"paths": { "paths": {
"@assets/*": ["./src/assets/*"], "@assets/*": [
"@components/*": ["./src/components/*"], "./src/assets/*"
"@data/*": ["./src/data/*"], ],
"@interfaces/*": ["./src/interfaces/*"], "@components/*": [
"@layouts/*": ["./src/layouts/*"], "./src/components/*"
"@styles/*": ["./src/styles/*"] ],
"@data/*": [
"./src/data/*"
],
"@interfaces/*": [
"./src/interfaces/*"
],
"@layouts/*": [
"./src/layouts/*"
],
"@styles/*": [
"./src/styles/*"
]
} }
}, },
"extends": "astro/tsconfigs/strict", "extends": "astro/tsconfigs/strict",
"include": [".astro/types.d.ts", "**/*"], "include": [
"exclude": ["dist"] ".astro/types.d.ts",
"**/*"
],
"exclude": [
"dist"
]
} }