Basic scaffolding of new personal site

This commit is contained in:
badblocks 2026-01-01 21:05:32 -08:00
parent 0e01ed5493
commit e9a666621f
No known key found for this signature in database
11 changed files with 304 additions and 284 deletions

View file

@ -1,46 +0,0 @@
# Astro Starter Kit: Basics
```sh
bun create astro@latest -- --template basics
```
> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun!
## 🚀 Project Structure
Inside of your Astro project, you'll see the following folders and files:
```text
/
├── public/
│ └── favicon.svg
├── src
│   ├── assets
│   │   └── astro.svg
│   ├── components
│   │   └── Welcome.astro
│   ├── 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 |
| :------------------------ | :----------------------------------------------- |
| `bun install` | Installs dependencies |
| `bun dev` | Starts local dev server at `localhost:4321` |
| `bun build` | Build your production site to `./dist/` |
| `bun preview` | Preview your build locally, before deploying |
| `bun astro ...` | Run CLI commands like `astro add`, `astro check` |
| `bun 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).

BIN
bun.lockb

Binary file not shown.

View file

@ -10,5 +10,8 @@
},
"dependencies": {
"astro": "^5.16.6"
},
"devDependencies": {
"@types/bun": "^1.3.5"
}
}

8
public/snes.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -1,210 +0,0 @@
---
import astroLogo from '../assets/astro.svg';
import background from '../assets/background.svg';
---
<div id="container">
<img id="background" src={background.src} alt="" fetchpriority="high" />
<main>
<section id="hero">
<a href="https://astro.build"
><img src={astroLogo.src} width="115" height="48" alt="Astro Homepage" /></a
>
<h1>
To get started, open the <code><pre>src/pages</pre></code> directory in your project.
</h1>
<section id="links">
<a class="button" href="https://docs.astro.build">Read our docs</a>
<a href="https://astro.build/chat"
>Join our Discord <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 127.14 96.36"
><path
fill="currentColor"
d="M107.7 8.07A105.15 105.15 0 0 0 81.47 0a72.06 72.06 0 0 0-3.36 6.83 97.68 97.68 0 0 0-29.11 0A72.37 72.37 0 0 0 45.64 0a105.89 105.89 0 0 0-26.25 8.09C2.79 32.65-1.71 56.6.54 80.21a105.73 105.73 0 0 0 32.17 16.15 77.7 77.7 0 0 0 6.89-11.11 68.42 68.42 0 0 1-10.85-5.18c.91-.66 1.8-1.34 2.66-2a75.57 75.57 0 0 0 64.32 0c.87.71 1.76 1.39 2.66 2a68.68 68.68 0 0 1-10.87 5.19 77 77 0 0 0 6.89 11.1 105.25 105.25 0 0 0 32.19-16.14c2.64-27.38-4.51-51.11-18.9-72.15ZM42.45 65.69C36.18 65.69 31 60 31 53s5-12.74 11.43-12.74S54 46 53.89 53s-5.05 12.69-11.44 12.69Zm42.24 0C78.41 65.69 73.25 60 73.25 53s5-12.74 11.44-12.74S96.23 46 96.12 53s-5.04 12.69-11.43 12.69Z"
></path></svg
>
</a>
</section>
</section>
</main>
<a href="https://astro.build/blog/astro-5/" id="news" class="box">
<svg width="32" height="32" fill="none" xmlns="http://www.w3.org/2000/svg"
><path
d="M24.667 12c1.333 1.414 2 3.192 2 5.334 0 4.62-4.934 5.7-7.334 12C18.444 28.567 18 27.456 18 26c0-4.642 6.667-7.053 6.667-14Zm-5.334-5.333c1.6 1.65 2.4 3.43 2.4 5.333 0 6.602-8.06 7.59-6.4 17.334C13.111 27.787 12 25.564 12 22.666c0-4.434 7.333-8 7.333-16Zm-6-5.333C15.111 3.555 16 5.556 16 7.333c0 8.333-11.333 10.962-5.333 22-3.488-.774-6-4-6-8 0-8.667 8.666-10 8.666-20Z"
fill="#111827"></path></svg
>
<h2>What's New in Astro 5.0?</h2>
<p>
From content layers to server islands, click to learn more about the new features and
improvements in Astro 5.0
</p>
</a>
</div>
<style>
#background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
filter: blur(100px);
}
#container {
font-family: Inter, Roboto, 'Helvetica Neue', 'Arial Nova', 'Nimbus Sans', Arial, sans-serif;
height: 100%;
}
main {
height: 100%;
display: flex;
justify-content: center;
}
#hero {
display: flex;
align-items: start;
flex-direction: column;
justify-content: center;
padding: 16px;
}
h1 {
font-size: 22px;
margin-top: 0.25em;
}
#links {
display: flex;
gap: 16px;
}
#links a {
display: flex;
align-items: center;
padding: 10px 12px;
color: #111827;
text-decoration: none;
transition: color 0.2s;
}
#links a:hover {
color: rgb(78, 80, 86);
}
#links a svg {
height: 1em;
margin-left: 8px;
}
#links a.button {
color: white;
background: linear-gradient(83.21deg, #3245ff 0%, #bc52ee 100%);
box-shadow:
inset 0 0 0 1px rgba(255, 255, 255, 0.12),
inset 0 -2px 0 rgba(0, 0, 0, 0.24);
border-radius: 10px;
}
#links a.button:hover {
color: rgb(230, 230, 230);
box-shadow: none;
}
pre {
font-family:
ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono',
monospace;
font-weight: normal;
background: linear-gradient(14deg, #d83333 0%, #f041ff 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
margin: 0;
}
h2 {
margin: 0 0 1em;
font-weight: normal;
color: #111827;
font-size: 20px;
}
p {
color: #4b5563;
font-size: 16px;
line-height: 24px;
letter-spacing: -0.006em;
margin: 0;
}
code {
display: inline-block;
background:
linear-gradient(66.77deg, #f3cddd 0%, #f5cee7 100%) padding-box,
linear-gradient(155deg, #d83333 0%, #f041ff 18%, #f5cee7 45%) border-box;
border-radius: 8px;
border: 1px solid transparent;
padding: 6px 8px;
}
.box {
padding: 16px;
background: rgba(255, 255, 255, 1);
border-radius: 16px;
border: 1px solid white;
}
#news {
position: absolute;
bottom: 16px;
right: 16px;
max-width: 300px;
text-decoration: none;
transition: background 0.2s;
backdrop-filter: blur(50px);
}
#news:hover {
background: rgba(255, 255, 255, 0.55);
}
@media screen and (max-height: 368px) {
#news {
display: none;
}
}
@media screen and (max-width: 768px) {
#container {
display: flex;
flex-direction: column;
}
#hero {
display: block;
padding-top: 10%;
}
#links {
flex-wrap: wrap;
}
#links a.button {
padding: 14px 18px;
}
#news {
right: 16px;
left: 16px;
bottom: 2.5rem;
max-width: 100%;
}
h1 {
line-height: 1.5;
}
}
</style>

View file

@ -0,0 +1,121 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="generator" content={Astro.generator} />
<link rel="stylesheet" type="text/css" href="/snes.min.css" />
<script src="https://cdn.jsdelivr.net/npm/htmx.org@2.0.8/dist/htmx.min.js"
></script>
<style>
div.container {
display: grid;
grid-template-columns: 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header"
"content"
"footer";
min-height: 100vh;
}
header {
grid-area: header;
display: grid;
grid-template-columns: auto 1fr;
align-items: center;
gap: 2rem;
padding: 1.5rem 2rem;
border-bottom: 1px solid #e5e5e5;
}
nav {
justify-self: end;
}
nav ul {
display: flex;
gap: 2rem;
list-style: none;
}
div.logo {
padding: 1rem 0;
}
nav li {
height: 3.5rem;
}
nav li a {
display: inline-block;
line-height: 3.5rem;
}
section.content {
grid-area: content;
padding: 4rem 2rem;
}
footer {
grid-area: footer;
display: grid;
place-items: center;
padding: 2rem;
border-top: 1px solid #e5e5e5;
}
/* Tablet and up */
@media (min-width: 768px) {
}
/* Desktop */
@media (min-width: 1024px) {
div.container {
grid-template-columns: repeat(12, 1fr);
grid-template-areas:
"header header header header header header header header header header header header"
"content content content content content content content content content content content content"
"footer footer footer footer footer footer footer footer footer footer footer footer";
}
header {
padding: 1.5rem 4rem;
}
content {
padding-left: 4rem;
padding-right: 4rem;
}
}
</style>
<slot name="head" />
</head>
<body>
<div class="container">
<header>
<a href="/"><div class="logo">badblocks.dev</div></a>
<nav>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/projects">Projects</a></li>
<li><a href="/contact">Contact</a></li>
<li><a href="https://git.badblocks.dev">Git</a></li>
</ul>
</nav>
</header>
<section id="content" class="content">
<slot name="content" />
</section>
<footer>
<p>
&copy; <script is:inline>
document.write(new Date().getFullYear());
</script>
badblocks
</p>
</footer>
</div>
</body>
</html>

View file

@ -1,22 +0,0 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="generator" content={Astro.generator} />
<title>Astro Basics</title>
</head>
<body>
<slot />
</body>
</html>
<style>
html,
body {
margin: 0;
width: 100%;
height: 100%;
}
</style>

92
src/pages/article.astro Normal file
View file

@ -0,0 +1,92 @@
---
import Layout from "../layouts/BaseLayout.astro";
---
<Layout>
<title slot="head">Lorem Ipsum</title>
<style>
div.content {
display: grid;
grid-template-columns: minmax(1rem, 1fr) minmax(auto, 70ch) minmax(
1rem,
1fr
);
grid-gap: 1rem;
font-size: 12px;
}
</style>
<style>
p,
h1 {
grid-column: 2;
margin-bottom: 1.5rem;
}
img {
grid-column: 1 / 4;
width: 100%;
max-width: 100ch;
justify-self: center;
}
</style>
<Fragment slot="content">
<h1>Lorem Ipsum</h1>
<p>
"Neque porro quisquam est qui dolorem ipsum quia dolor sit amet,
consectetur, adipisci velit..." "There is no one who loves pain itself,
who seeks after it and wants to have it, simply because it is pain..."
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent vel
justo a diam dapibus posuere eget ut tortor. Nam at orci ligula. Nulla
sollicitudin quam at venenatis aliquam. Quisque aliquam accumsan eros, id
dignissim elit lobortis sed. Proin suscipit ex porta velit lobortis, ut
eleifend ipsum dapibus. Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Donec quis nunc dapibus lectus semper viverra sodales eu enim. Ut ac
metus sed libero luctus auctor. Sed varius turpis nisi, nec rhoncus metus
volutpat nec. Quisque sagittis pulvinar magna a egestas. Vestibulum varius
pretium sapien eget aliquam. Donec tempus quis tellus ac pretium. Sed at
ex sed ipsum facilisis euismod. Nam et sollicitudin velit. Interdum et
malesuada fames ac ante ipsum primis in faucibus. Nam ultricies, felis et
condimentum pharetra, est neque efficitur eros, id porttitor erat tellus
vel nisi.
</p><p>
Integer tincidunt mi at dolor porta elementum. Ut vehicula hendrerit
varius. Sed dictum elementum justo ut dignissim. In dapibus sem ultrices
libero volutpat, sit amet feugiat augue venenatis. Cras vitae lacus sit
amet orci accumsan eleifend varius vitae nisl. Quisque posuere, sem ac
finibus dictum, lectus arcu efficitur quam, at posuere neque orci ut enim.
Nulla vitae egestas justo. Sed at dolor eget dui malesuada tincidunt. In
vel pretium sem. In sapien augue, scelerisque nec tempor at, fringilla
tincidunt nunc. Proin sit amet aliquam ipsum, vel fringilla velit. Mauris
a pharetra lectus. Aenean tempor maximus tellus non pretium. Sed ut ex
pellentesque, dictum tortor in, cursus nisl. Sed ante velit, pretium at
sollicitudin id, rhoncus eget dolor. Sed ac metus metus. Nulla tristique
consequat nisi id tincidunt. Suspendisse sodales lorem tortor.
</p><p>
Proin mollis odio orci, vel tempor risus egestas vehicula. Vivamus dictum
ligula et blandit accumsan. Pellentesque placerat vulputate neque. Integer
varius risus ac suscipit gravida. Nunc vitae tempus diam, eu rhoncus
risus. Donec dignissim lorem turpis, sit amet tempor dolor hendrerit quis.
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per
inceptos himenaeos. Quisque in auctor lacus.
</p><p>
Suspendisse tincidunt diam ac massa tristique, at volutpat libero varius.
Cras eros metus, sodales semper lacus eu, gravida ultrices orci. Integer
elementum tristique ipsum vehicula pellentesque. Sed elementum auctor
velit eget elementum. Nunc mi dolor, porttitor eget euismod sit amet,
molestie non felis. Nulla tempor, tortor et congue viverra, diam orci
finibus lectus, sed dictum lacus velit eget nulla. Interdum et malesuada
fames ac ante ipsum primis in faucibus.
</p><p>
Maecenas sodales, sem et pulvinar pellentesque, massa massa rhoncus velit,
in efficitur odio magna sed eros. Nam efficitur sem sit amet mi suscipit,
nec molestie orci aliquet. Morbi sed feugiat quam. Phasellus a suscipit
mauris, sed efficitur magna. Sed ac dapibus erat. Mauris tincidunt viverra
consequat. Aenean venenatis in elit eu luctus. Aenean convallis aliquam
ante, at bibendum mi pretium nec. Mauris et aliquam sem. Proin accumsan
finibus erat in elementum. Etiam ut augue tincidunt, ornare magna sit
amet, vestibulum mi. Morbi vitae vehicula augue.
</p>
</Fragment>
</Layout>

24
src/pages/contact.astro Normal file
View file

@ -0,0 +1,24 @@
---
import Layout from "../layouts/BaseLayout.astro";
---
<Layout>
<title slot="head">Contact</title>
<style>
.contact {
grid-area: contact;
display: grid;
place-items: center;
padding: 4rem 2rem;
background: #f8f9fa;
}
</style>
<Fragment slot="content">
<section class="contact" id="contact">
<div>
<h2>Contact</h2>
<p>Contact information here</p>
</div>
</section>
</Fragment>
</Layout>

View file

@ -1,11 +1,28 @@
---
import Welcome from '../components/Welcome.astro';
import Layout from '../layouts/Layout.astro';
// Welcome to Astro! Wondering what to do next? Check out the Astro documentation at https://docs.astro.build
// Don't want to use any of this? Delete everything in this file, the `assets`, `components`, and `layouts` directories, and start fresh.
import Layout from "../layouts/BaseLayout.astro";
---
<Layout>
<Welcome />
<title slot="head">Home</title>
<style>
.hero {
grid-area: hero;
display: grid;
place-items: center;
padding: 4rem 2rem;
min-height: 60vh;
background: #f8f9fa;
}
</style>
<Fragment slot="content">
<section class="hero" id="hero">
<div>
<h1>Lorem Ipsum</h1>
<p>
Neque porro quisquam est qui dolorem ipsum quia dolor sit amet,
consectetur, adipisci velit.
</p>
</div>
</section>
</Fragment>
</Layout>

33
src/pages/projects.astro Normal file
View file

@ -0,0 +1,33 @@
---
import Layout from "../layouts/BaseLayout.astro";
---
<Layout>
<title slot="head">Projects</title>
<style>
.projects-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 150px), 1fr));
gap: 2rem;
max-width: 1200px;
margin: 2rem auto 0;
}
.project-card {
background: #f8f9fa;
padding: 2rem;
border-radius: 8px;
min-height: 250px;
}
</style>
<Fragment slot="content">
<section class="projects" id="projects">
<h2>Projects</h2>
<div class="projects-grid">
<div class="project-card">Project 1</div>
<div class="project-card">Project 2</div>
<div class="project-card">Project 3</div>
</div>
</section>
</Fragment>
</Layout>