Skip to content

Commit dba228b

Browse files
committed
add footer and enrich you metadata
1 parent 146f21e commit dba228b

36 files changed

+233
-40
lines changed

.cache/rss-cache.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"https://gist.github.com/papes1ns.atom": {
3-
"etag": "W/\"9ef60a8a6c199529363faa68287ee7f0\""
3+
"etag": "W/\"a273036f4558af5023a4a22267829a47\""
44
},
55
"https://spin.atomicobject.com/author/nathan-papes/feed/atom/": {
66
"etag": "W/\"4bec340c60f29471a33dd7baa19e7b7e\"",

AGENTS.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
# AGENTS Configuration
22

33
## Commands
4+
45
- Install dependencies: `bun install`
5-
- Dev server: `bun run dev`
6-
- Build: `bun run build`
7-
- Validate schema: `bun run validate`
8-
- RSS feed update: `bun run rss`
6+
- Dev server: `bun run --cwd packages/web dev`
7+
- Build: `bun run --cwd packages/web build`
8+
- Validate schema: `./script/validate.ts`
9+
- RSS feed update: `./script/rss.ts`
910
- Single test: (no tests in this repo)
1011

1112
## Code Style
13+
1214
- ESM modules (`type: module`), explicit `.js` imports
1315
- Two-space indent, semicolons, double quotes
1416
- LowerCamelCase for variables/functions, PascalCase for types
@@ -18,5 +20,6 @@
1820
- File/dir names lowercase, hyphen-separated
1921

2022
## Cursor & Copilot
23+
2124
- No Cursor rules
2225
- No Copilot instructions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ export const Content = z
7373
/** ISO-8601 timestamp of publish date */
7474
created_at: z.string(),
7575
/** Estimated reading time in minutes */
76-
reading_time_minutes: z.number().int().positive().optional(),
76+
estimated_time_minutes: z.number().int().positive().optional(),
7777
tags: z.array(z.string()).optional(),
7878
})
7979
.strict();

packages/core/src/schema.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@ export const Content = z
77
title: z.string(),
88
description: z.string().optional(),
99
url: z.string().url("Must be a valid URL"),
10-
/** ISO-8601 timestamp of publish date */
1110
created_at: z.string(),
12-
/** Estimated reading time in minutes */
13-
reading_time_minutes: z.number().int().positive().optional(),
11+
estimated_time_minutes: z.number().int().positive().optional(),
1412
tags: z.array(z.string()).optional(),
1513
})
1614
.strict();

packages/web/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<html>
33
<head>
44
<meta charset="UTF-8" />
5-
<title>Nathan Papes / Contents</title>
5+
<title>Nate Papes / Contents</title>
66
<meta
77
name="description"
88
content="Drawn to complex problems. Bad at giving up on them."
@@ -27,10 +27,10 @@
2727
sizes="any"
2828
type="image/svg+xml"
2929
/>
30-
<meta property="og:title" content="Nathan Papes / Contents" />
30+
<meta property="og:title" content="Nate Papes / Contents" />
3131
<meta
3232
property="og:description"
33-
content="Drawn to complex problems. Bad at giving up on them."
33+
content="Metadata-Enriched RSS Linker Node (MERLN)"
3434
/>
3535
<meta property="og:url" content="https://natepapes.com" />
3636
<meta property="og:type" content="website" />

packages/web/src/index.css

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,3 +412,75 @@ tbody {
412412
opacity: 1;
413413
}
414414
}
415+
416+
body {
417+
padding-bottom: 2.5rem; /* prevent content from hiding behind footer */
418+
}
419+
420+
/* Fixed footer */
421+
#site-footer {
422+
position: fixed;
423+
bottom: 0;
424+
left: 0;
425+
width: 100%;
426+
height: 2.5rem;
427+
display: flex;
428+
justify-content: flex-end;
429+
align-items: center;
430+
padding: 0 0.75rem;
431+
gap: 0.75rem;
432+
border-top: 1px solid var(--color-border);
433+
background-color: var(--color-background);
434+
backdrop-filter: blur(6px);
435+
z-index: 10;
436+
font-size: 0.75rem;
437+
}
438+
439+
#site-footer a {
440+
color: var(--color-text-secondary);
441+
}
442+
443+
#site-footer a:hover {
444+
color: var(--color-brand);
445+
}
446+
447+
/* Modal styles */
448+
.modal {
449+
position: fixed;
450+
inset: 0;
451+
display: none;
452+
align-items: center;
453+
justify-content: center;
454+
background: rgba(0, 0, 0, 0.5);
455+
z-index: 1000;
456+
}
457+
458+
.modal.show {
459+
display: flex;
460+
}
461+
462+
.modal-content {
463+
max-width: 600px;
464+
max-height: 80vh;
465+
overflow-y: auto;
466+
padding: 1.5rem;
467+
background: var(--color-background);
468+
color: var(--color-text);
469+
border-radius: 0.25rem;
470+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
471+
}
472+
473+
.modal-content h2 {
474+
margin-bottom: 0.75rem;
475+
color: var(--color-brand);
476+
}
477+
478+
.modal-content button {
479+
margin-top: 1rem;
480+
background: var(--color-brand);
481+
color: var(--color-text-invert);
482+
border: none;
483+
padding: 0.5rem 1rem;
484+
border-radius: 0.25rem;
485+
cursor: pointer;
486+
}

packages/web/src/index.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,3 +196,31 @@ function initializeFromURL() {
196196

197197
document.addEventListener("DOMContentLoaded", initializeFromURL);
198198
window.addEventListener("popstate", initializeFromURL);
199+
200+
// Terms & Privacy modal
201+
const openTerms = document.getElementById("open-terms") as HTMLElement | null;
202+
const termsModal = document.getElementById("terms-modal") as HTMLElement | null;
203+
const closeTerms = document.getElementById("close-terms") as HTMLElement | null;
204+
205+
if (openTerms && termsModal && closeTerms) {
206+
openTerms.addEventListener("click", (e) => {
207+
e.preventDefault();
208+
termsModal.classList.add("show");
209+
});
210+
211+
closeTerms.addEventListener("click", () => {
212+
termsModal.classList.remove("show");
213+
});
214+
215+
termsModal.addEventListener("click", (e) => {
216+
if (e.target === termsModal) {
217+
termsModal.classList.remove("show");
218+
}
219+
});
220+
221+
document.addEventListener("keydown", (e) => {
222+
if (e.key === "Escape") {
223+
termsModal.classList.remove("show");
224+
}
225+
});
226+
}

packages/web/src/render.tsx

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,9 @@ export const Rendered = renderToString(
1414
<Fragment>
1515
<header>
1616
<div class="left">
17-
<h1>Nathan Papes</h1>
17+
<h1>Nate Papes</h1>
1818
<span class="slash"></span>
19-
<p>Software Consultant &amp; Developer</p>
20-
<span class="slash"></span>
21-
<p>A2</p>
19+
<p>Contents</p>
2220
</div>
2321
<div class="right">
2422
<a
@@ -112,8 +110,8 @@ export const Rendered = renderToString(
112110
})()}
113111
</td>
114112
<td>
115-
{content.reading_time_minutes !== undefined
116-
? `${content.reading_time_minutes} min`
113+
{content.estimated_time_minutes !== undefined
114+
? `${content.estimated_time_minutes} min`
117115
: "-"}
118116
</td>
119117
<td>
@@ -131,5 +129,21 @@ export const Rendered = renderToString(
131129
)}
132130
</tbody>
133131
</table>
132+
133+
<footer id="site-footer">
134+
<div>
135+
<a href="#" id="open-terms">
136+
Terms &amp; Privacy
137+
</a>
138+
</div>
139+
</footer>
140+
141+
<div id="terms-modal" class="modal">
142+
<div class="modal-content">
143+
<h2>Terms &amp; Privacy</h2>
144+
<p>This site does not collect any PII. Nor will it ever.</p>
145+
<button id="close-terms">Close</button>
146+
</div>
147+
</div>
134148
</Fragment>
135149
);

providers/atomicobject/content/aurora-mysql-8-upgrade-using-the-aws-blue-green-style.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ title = "Aurora MySQL 8 Upgrade: Using the AWS Blue/Green Style"
33
description = "Upgrade database with AWS RDS going from Aurora MySQL 5.7 to 8.0 using Blue/Green deployment. No downtime. No more RDS Extended Support."
44
url = "https://spin.atomicobject.com/aurora-mysql-8-aws-blue-green/"
55
created_at = "2025-02-12T19:52:56Z"
6-
reading_time_minutes = 7
6+
estimated_time_minutes = 7
77
tags = ["AWS","database","aws","app","database migration"]

providers/atomicobject/content/create-a-time-tracking-cli-tool-with-go-oauth2-and-google-ca.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ title = "Create a Time-Tracking CLI Tool with Go, OAuth2, and Google Calendar AP
33
description = "In 2024, there's been a lot of hype around Golang. I felt inspired to try it out and write a program in this language."
44
url = "https://spin.atomicobject.com/golang-time-tracking/"
55
created_at = "2024-04-16T20:59:47Z"
6-
reading_time_minutes = 4
6+
estimated_time_minutes = 4
77
tags = ["Golang","time tracking","oauth2","calendar","golang","google"]

0 commit comments

Comments
 (0)