Compare commits
No commits in common. "main" and "feat/invalidate-cloudfront-cache" have entirely different histories.
main
...
feat/inval
21 changed files with 1198 additions and 1774 deletions
48
.github/workflows/aws.yaml
vendored
Normal file
48
.github/workflows/aws.yaml
vendored
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
name: Deploy to AWS S3
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Setup PNPM
|
||||||
|
uses: pnpm/action-setup@v2
|
||||||
|
with:
|
||||||
|
version: 8
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18
|
||||||
|
cache: "pnpm"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install
|
||||||
|
|
||||||
|
- name: Build site
|
||||||
|
run: pnpm build
|
||||||
|
|
||||||
|
- name: Configure AWS Credentials
|
||||||
|
uses: aws-actions/configure-aws-credentials@v2
|
||||||
|
with:
|
||||||
|
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
aws-region: us-east-2
|
||||||
|
|
||||||
|
- name: Deploy static site to S3 bucket
|
||||||
|
run: |
|
||||||
|
chmod +x scripts/deploy.sh
|
||||||
|
scripts/deploy.sh
|
||||||
|
|
||||||
|
- name: Invalidate CloudFront cache
|
||||||
|
env:
|
||||||
|
AWS_CLOUDFRONT_DISTRIBUTION_ID: ${{ secrets.AWS_CLOUDFRONT_DISTRIBUTION_ID }}
|
||||||
|
run: |
|
||||||
|
chmod +x scripts/invalidate.sh
|
||||||
|
scripts/invalidate.sh
|
||||||
36
.github/workflows/ci.yaml
vendored
36
.github/workflows/ci.yaml
vendored
|
|
@ -1,18 +1,36 @@
|
||||||
name: ci
|
name: CI
|
||||||
|
|
||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [main]
|
branches: [main]
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
ci:
|
lint:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- name: Checkout
|
||||||
- uses: pnpm/action-setup@v4
|
uses: actions/checkout@v4
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
|
- name: Setup PNPM
|
||||||
|
uses: pnpm/action-setup@v4
|
||||||
|
|
||||||
|
- name: Setup Node
|
||||||
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: 20
|
node-version: 20
|
||||||
cache: "pnpm"
|
cache: "pnpm"
|
||||||
- run: pnpm install
|
|
||||||
- run: pnpm prettier --check .
|
- name: Install dependencies
|
||||||
- run: pnpm astro check
|
run: pnpm install
|
||||||
- run: pnpm build
|
|
||||||
|
- name: Prettier check
|
||||||
|
run: pnpm prettier --check .
|
||||||
|
|
||||||
|
- name: Astro check
|
||||||
|
run: pnpm astro check
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: pnpm build
|
||||||
|
|
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -19,4 +19,3 @@ pnpm-debug.log*
|
||||||
.gitignore
|
.gitignore
|
||||||
|
|
||||||
.claude/
|
.claude/
|
||||||
.vercel/
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
import { defineConfig } from "astro/config";
|
import { defineConfig } from "astro/config";
|
||||||
import mdx from "@astrojs/mdx";
|
import mdx from "@astrojs/mdx";
|
||||||
import vercel from "@astrojs/vercel";
|
|
||||||
import rehypeExternalLinks from "rehype-external-links";
|
import rehypeExternalLinks from "rehype-external-links";
|
||||||
import rehypeKatex from "rehype-katex";
|
import rehypeKatex from "rehype-katex";
|
||||||
import remarkMath from "remark-math";
|
import remarkMath from "remark-math";
|
||||||
|
|
@ -38,8 +37,6 @@ const daylight = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
output: "static",
|
|
||||||
adapter: vercel(),
|
|
||||||
build: {
|
build: {
|
||||||
format: "file",
|
format: "file",
|
||||||
},
|
},
|
||||||
|
|
|
||||||
15
package.json
15
package.json
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "barrettruth.sh",
|
"name": "barrettruth.com",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|
@ -17,19 +17,18 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/mdx": "^4.3.13",
|
"@astrojs/mdx": "^4.3.6",
|
||||||
"@astrojs/vercel": "^9.0.4",
|
"astro": "^5.14.1",
|
||||||
"astro": "^5.17.3",
|
|
||||||
"rehype-external-links": "^3.0.0",
|
"rehype-external-links": "^3.0.0",
|
||||||
"rehype-katex": "^7.0.1",
|
"rehype-katex": "^7.0.1",
|
||||||
"remark-math": "^6.0.0"
|
"remark-math": "^6.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@astrojs/check": "^0.9.6",
|
"@astrojs/check": "^0.9.5",
|
||||||
"@typescript-eslint/parser": "^8.56.1",
|
"@typescript-eslint/parser": "^8.46.0",
|
||||||
"husky": "^9.1.7",
|
"husky": "^9.1.7",
|
||||||
"lint-staged": "^16.2.7",
|
"lint-staged": "^16.2.3",
|
||||||
"prettier": "^3.8.1",
|
"prettier": "^3.6.2",
|
||||||
"prettier-plugin-astro": "^0.14.1",
|
"prettier-plugin-astro": "^0.14.1",
|
||||||
"typescript": "^5.9.3"
|
"typescript": "^5.9.3"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
2724
pnpm-lock.yaml
generated
2724
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
BIN
public/fonts/apercu-mono/ApercuMonoProBold.ttf
Normal file
BIN
public/fonts/apercu-mono/ApercuMonoProBold.ttf
Normal file
Binary file not shown.
BIN
public/fonts/apercu-mono/ApercuMonoProLight.ttf
Normal file
BIN
public/fonts/apercu-mono/ApercuMonoProLight.ttf
Normal file
Binary file not shown.
BIN
public/fonts/apercu-mono/ApercuMonoProMedium.ttf
Normal file
BIN
public/fonts/apercu-mono/ApercuMonoProMedium.ttf
Normal file
Binary file not shown.
BIN
public/fonts/apercu-mono/ApercuMonoProRegular.ttf
Normal file
BIN
public/fonts/apercu-mono/ApercuMonoProRegular.ttf
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -111,36 +111,47 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "Berkeley Mono";
|
font-family: "Apercu Mono";
|
||||||
src: url("/fonts/berkeley-mono/BerkeleyMono-Regular.ttf") format("truetype");
|
src: url("/fonts/apercu-mono/ApercuMonoProLight.ttf") format("truetype");
|
||||||
|
font-weight: 300;
|
||||||
|
font-style: normal;
|
||||||
|
font-display: swap;
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Apercu Mono";
|
||||||
|
src: url("/fonts/apercu-mono/ApercuMonoProRegular.ttf") format("truetype");
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-display: swap;
|
font-display: swap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "Berkeley Mono";
|
font-family: "Apercu Mono";
|
||||||
src: url("/fonts/berkeley-mono/BerkeleyMono-Bold.ttf") format("truetype");
|
src: url("/fonts/apercu-mono/ApercuMonoProMedium.ttf") format("truetype");
|
||||||
font-weight: 700;
|
font-weight: 500;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-display: swap;
|
font-display: swap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "Berkeley Mono";
|
font-family: "Apercu Mono";
|
||||||
src: url("/fonts/berkeley-mono/BerkeleyMono-Italic.ttf") format("truetype");
|
src: url("/fonts/apercu-mono/ApercuMonoProBold.ttf") format("truetype");
|
||||||
font-weight: 400;
|
font-weight: 700;
|
||||||
font-style: italic;
|
font-style: normal;
|
||||||
font-display: swap;
|
font-display: swap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
* {
|
||||||
font-family: "Berkeley Mono";
|
margin: 0;
|
||||||
src: url("/fonts/berkeley-mono/BerkeleyMono-BoldItalic.ttf")
|
padding: 0;
|
||||||
format("truetype");
|
box-sizing: border-box;
|
||||||
font-weight: 700;
|
}
|
||||||
font-style: italic;
|
|
||||||
font-display: swap;
|
html,
|
||||||
|
body {
|
||||||
|
font-family: "Signifier", serif;
|
||||||
|
overflow-x: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre,
|
pre,
|
||||||
|
|
@ -148,7 +159,12 @@ code,
|
||||||
pre code,
|
pre code,
|
||||||
.astro-code,
|
.astro-code,
|
||||||
code[class*="language-"] {
|
code[class*="language-"] {
|
||||||
font-family: "Berkeley Mono", monospace !important;
|
font-family: "Apercu Mono", monospace !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
font-family: "Signifier", serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
@media (prefers-color-scheme: dark) {
|
||||||
|
|
@ -166,14 +182,3 @@ code[class*="language-"] {
|
||||||
color: #e0e0e0;
|
color: #e0e0e0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
html,
|
|
||||||
body {
|
|
||||||
font-family: "Signifier", serif;
|
|
||||||
overflow-x: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
html,
|
|
||||||
body {
|
|
||||||
font-family: "Signifier", serif;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -3,18 +3,14 @@
|
||||||
max-width: 55%;
|
max-width: 55%;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 0 clamp(20px, 5vw, 60px);
|
padding: 0 clamp(20px, 5vw, 60px);
|
||||||
min-height: 100vh;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
header {
|
header {
|
||||||
padding: clamp(30px, 5vw, 50px) 0;
|
padding: clamp(80px, 15vw, 150px) 0 clamp(50px, 10vw, 80px) 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
flex-wrap: nowrap;
|
flex-wrap: wrap;
|
||||||
gap: 20px;
|
gap: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -22,18 +18,12 @@ h1,
|
||||||
.delta {
|
.delta {
|
||||||
font-size: clamp(1.5rem, 8vw, 4rem);
|
font-size: clamp(1.5rem, 8vw, 4rem);
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
flex-shrink: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.delta {
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
section {
|
section {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||||||
gap: clamp(20px, 3vw, 40px);
|
gap: clamp(20px, 3vw, 40px);
|
||||||
padding-bottom: clamp(80px, 15vw, 150px);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
|
|
|
||||||
3
scripts/deploy.sh
Executable file
3
scripts/deploy.sh
Executable file
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
aws s3 sync ./dist/ s3://barrettruth.com --delete
|
||||||
8
scripts/invalidate.sh
Normal file
8
scripts/invalidate.sh
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
if [ -z "$AWS_CLOUDFRONT_DISTRIBUTION_ID" ]; then
|
||||||
|
echo 'No cloudfront distribution id found.'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
aws cloudfront create-invalidation --distribution-id "$AWS_CLOUDFRONT_DISTRIBUTION_ID" --paths "/*"
|
||||||
40
src/pages/about.astro
Normal file
40
src/pages/about.astro
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
import BaseLayout from "../layouts/BaseLayout.astro";
|
||||||
|
---
|
||||||
|
|
||||||
|
<BaseLayout title="Barrett Ruth">
|
||||||
|
<div>
|
||||||
|
<header>
|
||||||
|
<h1>Barrett Ruth</h1>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
<p>
|
||||||
|
I am a software developer studying computer science at the University of
|
||||||
|
Virginia.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
I began working as a software engineer part-time with
|
||||||
|
<a target="blank" href="https://gotransverse.com/">GoTransverse</a>
|
||||||
|
in high school. After developing an interest in the financial/venture capital
|
||||||
|
world, I transitioned to
|
||||||
|
<a target="blank" href="https://www.nthventure.com/">Nth Venture</a>
|
||||||
|
in the spring of my second year. I worked at
|
||||||
|
<a target="blank" href="https://usa.visa.com/">VISA</a> and
|
||||||
|
<a href="https://trbcap.com" target="_blank">TRB Capital Management</a>
|
||||||
|
during the summer of 2024. Luckily enough, I'll be joining
|
||||||
|
<a href="https://drw.com" target="_blank">DRW</a> and
|
||||||
|
<a href="https://ramp.com" target="_blank">Ramp</a> in the summer and spring
|
||||||
|
of 2025.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
I've a developing interest in high-performance computing, quantitative
|
||||||
|
finance, and open-source software. I am also a passionate contributor to
|
||||||
|
the (Neo)Vim ecosystem and beyond.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You can see my related contributions on
|
||||||
|
<a target="blank" href="https://github.com/barrettruth">GitHub</a>.
|
||||||
|
</p>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</BaseLayout>
|
||||||
|
|
@ -18,23 +18,20 @@ import BaseLayout from "../layouts/BaseLayout.astro";
|
||||||
<div>
|
<div>
|
||||||
<h2>experience</h2>
|
<h2>experience</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
|
||||||
<a target="_blank" href="https://imc.com">imc</a>—july 2026
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" href="https://ramp.com">ramp</a>—fall 2025
|
<a target="_blank" href="https://ramp.com">ramp</a>—fall 2025
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" href="https://drw.com">drw</a>—summer 2025
|
<a target="_blank" href="https://drw.com">drw</a>—summer 2025
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<a target="_blank" href="https://trbcap.com">trb capital</a
|
|
||||||
>—summer 2024
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" href="https://usa.visa.com">visa</a>—summer
|
<a target="_blank" href="https://usa.visa.com">visa</a>—summer
|
||||||
2024
|
2024
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a target="_blank" href="https://trbcap.com">trb capital</a
|
||||||
|
>—summer 2024
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" href="https://www.nthventure.com">nth venture</a
|
<a target="_blank" href="https://www.nthventure.com">nth venture</a
|
||||||
>—spring 2023
|
>—spring 2023
|
||||||
|
|
@ -48,6 +45,9 @@ import BaseLayout from "../layouts/BaseLayout.astro";
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<h2>ideas</h2>
|
<h2>ideas</h2>
|
||||||
|
<ul>
|
||||||
|
<li>there are none yet</li>
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|
@ -57,11 +57,6 @@ import BaseLayout from "../layouts/BaseLayout.astro";
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" href="https://github.com/barrettruth">github</a>
|
<a target="_blank" href="https://github.com/barrettruth">github</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<a target="_blank" href="https://codeforces.com/profile/barrettruth"
|
|
||||||
>codeforces</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue