Compare commits

..

12 Commits

15 changed files with 2976 additions and 734 deletions

2
.omni.yaml Normal file
View File

@@ -0,0 +1,2 @@
up:
- just

12
Justfile Normal file
View File

@@ -0,0 +1,12 @@
set shell := ["zsh", "-c"]
deploy:
vercel pull --yes --environment=production
vercel --prod --yes
preview:
vercel pull --yes --environment=preview
vercel --yes
dev:
yarn dev

View File

@@ -73,3 +73,17 @@ bun run preview
```
Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information.
## Favicons
The SVG favicon is the source of truth: `public/favicon.svg`.
Generate a multi-size `favicon.ico` from the SVG using rsvg-convert + ImageMagick:
```bash
yarn favicons
```
Notes:
- ImageMagick on macOS can have issues loading arbitrary TTFs by file path (RenderFreetype errors). To avoid font lookup issues entirely, this project rasterizes the SVG directly using `rsvg-convert` and then packages the sizes into a single ICO using ImageMagick.
- If browsers fail to load webfonts in an external SVG, consider converting the “b” glyph to paths inside the SVG to guarantee pixel-identical rendering across formats.

View File

@@ -1,8 +1,15 @@
<template>
<div>
<NuxtRouteAnnouncer />
<Analytics />
<SpeedInsights />
<NuxtLayout>
<NuxtPage />
</NuxtLayout>
</div>
</template>
<script setup lang="ts">
import { Analytics } from '@vercel/analytics/nuxt'
import { SpeedInsights } from '@vercel/speed-insights/nuxt'
</script>

View File

@@ -1,5 +1,7 @@
/* Match brosner.com font */
@import url("@fontsource-variable/roboto-slab/index.css");
@import url("@fontsource/noto-sans-hebrew/400.css");
@import url("@fontsource/noto-sans-hebrew/600.css");
html, body {
font-family: "Roboto Slab Variable", Roboto, "Helvetica Neue", Arial, sans-serif;
font-optical-sizing: auto;
@@ -10,4 +12,12 @@ html, body {
fill: #fff;
}
.hebrew, :lang(he) {
font-family: "Noto Sans Hebrew", system-ui, sans-serif;
}
:lang(he) {
direction: rtl;
unicode-bidi: isolate;
}

File diff suppressed because one or more lines are too long

9
app/components/Heb.vue Normal file
View File

@@ -0,0 +1,9 @@
<template>
<span class="hebrew" lang="he" dir="rtl"><slot /></span>
</template>
<script setup lang="ts">
// no-op
</script>

View File

@@ -35,7 +35,7 @@
<footer class="footer">
<div class="content is-small has-text-centered">
<p>
Site built with <a href="https://nuxt.com" target="_blank">Nuxt</a> and <a href="https://bulma.io" target="_blank">Bulma</a>. Hosted on <a href="https://firebase.google.com" target="_blank">Firebase</a>.
Site built with <a href="https://nuxt.com" target="_blank">Nuxt</a> and <a href="https://bulma.io" target="_blank">Bulma</a>. Hosted on <a href="https://vercel.com" target="_blank">Vercel</a>.
</p>
</div>
</footer>

View File

@@ -29,6 +29,45 @@
</div>
</div>
</section>
<section class="section" id="learning">
<div class="container">
<div class="columns">
<div class="column is-two-thirds content is-large">
<h2>Learning</h2>
<p>These are some topics I am actively exploring:</p>
<h3 class="title is-4">Aviation</h3>
<p>I learn aviation through flight simsmostly MSFS 2020 (XPlane nostalgia is real). Im drawn to airliners; the A350 and 757 are my favorites.</p>
<h3 class="title is-4">Israel</h3>
<p>I visited Israel for the first time in December 2024. Im reconnecting with my familys Jewish roots, and I left with a deep appreciation for the country and its people.</p>
<h3 class="title is-4">Hebrew</h3>
<p><Heb>אני לומד עברית</Heb></p>
<p>Id love to be fluent. Im a little embarrassed that most of my study is Duolingo right nowbut it keeps me consistentand I lean on <a href="https://www.pealim.com/">Pealim</a> for vocab and verbs.</p>
</div>
</div>
</div>
</section>
<section class="section" id="projects">
<div class="container">
<div class="columns">
<div class="column is-two-thirds content is-large">
<h2>Projects</h2>
<h3 class="title is-4">Project Name</h3>
<p>Short description of what it is, why it exists, and your role.</p>
<h3 class="title is-4">Project Name</h3>
<p>Short description of what it is, why it exists, and your role.</p>
<h3 class="title is-4">Project Name</h3>
<p>Short description of what it is, why it exists, and your role.</p>
</div>
</div>
</div>
</section>
</div>
</template>

View File

@@ -9,7 +9,10 @@ export default defineNuxtConfig({
},
app: {
head: {
link: []
link: [
{ rel: 'icon', type: 'image/svg+xml', href: '/favicon.svg' },
{ rel: 'alternate icon', type: 'image/x-icon', href: '/favicon.ico' }
]
}
}
})

View File

@@ -7,10 +7,14 @@
"dev": "nuxt dev",
"generate": "nuxt generate",
"preview": "nuxt preview",
"favicons": "bash tools/generate-favicon.sh",
"postinstall": "nuxt prepare"
},
"dependencies": {
"@fontsource-variable/roboto-slab": "^5.2.6",
"@fontsource/noto-sans-hebrew": "^5.2.6",
"@vercel/analytics": "^1.5.0",
"@vercel/speed-insights": "^1.2.0",
"bulma": "^1.0.4",
"nuxt": "^4.0.3",
"typescript": "^5.6.3",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 31 KiB

17
public/favicon.svg Normal file
View File

@@ -0,0 +1,17 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128">
<defs>
<style>
.bg { fill: #111111; }
.txt {
fill: #ffffff;
font-family: "Roboto Slab Variable", Roboto, "Helvetica Neue", Arial, sans-serif;
font-weight: 700;
font-size: 88px;
}
</style>
</defs>
<rect class="bg" x="0" y="0" width="128" height="128" rx="24" ry="24" />
<text class="txt" x="50%" y="50%" dominant-baseline="central" text-anchor="middle">b</text>
</svg>

After

Width:  |  Height:  |  Size: 499 B

40
tools/generate-favicon.sh Executable file
View File

@@ -0,0 +1,40 @@
#!/usr/bin/env bash
set -euo pipefail
# Generates a multi-size favicon.ico from public/favicon.svg
# Dependencies:
# - rsvg-convert (from librsvg)
# - ImageMagick (magick)
# macOS install:
# brew install librsvg imagemagick
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
SVG_PATH="${ROOT_DIR}/public/favicon.svg"
OUT_ICO_PATH="${ROOT_DIR}/public/favicon.ico"
if ! command -v rsvg-convert >/dev/null 2>&1; then
echo "ERROR: rsvg-convert not found. Install with: brew install librsvg" >&2
exit 1
fi
if ! command -v magick >/dev/null 2>&1; then
echo "ERROR: ImageMagick (magick) not found. Install with: brew install imagemagick" >&2
exit 1
fi
tmp_dir="$(mktemp -d)"
cleanup() { rm -rf "${tmp_dir}"; }
trap cleanup EXIT
sizes=(16 32 48 64)
pngs=()
for s in "${sizes[@]}"; do
out_png="${tmp_dir}/favicon-${s}.png"
rsvg-convert -w "${s}" -h "${s}" "${SVG_PATH}" -o "${out_png}"
pngs+=("${out_png}")
done
magick "${pngs[@]}" "${OUT_ICO_PATH}"
echo "Generated ${OUT_ICO_PATH}"

1479
yarn.lock

File diff suppressed because it is too large Load Diff