diff --git a/AGENTS.md b/AGENTS.md
index 272f94c..c051857 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -39,7 +39,11 @@ all data loaded at build time) · GitHub Pages deploy via `.github/workflows/dep
- Content is hand-authored TS in `lib/content/`, not markdown/JSON (`resolveJsonModule` +
`strict` infers `never[]` from an empty JSON array, which fails typecheck). Travel data is the
exception — script-generated JSON via `scripts/process-travel-data.js` /
- `scripts/fetch-flights.js` (both manual, not automated).
+ `scripts/fetch-flights.js` (both manual, not automated). Countries come from a Notion-exported
+ CSV at `~/personal/travel/`; flights from the `Flighty - App Data` Notion DB. Flighty itself was
+ deleted in 2026, so that DB is no longer a sync target — it's the hand-maintained log of record,
+ and new flights get added to it before re-running the script. `generateRoutes` merges A→B with
+ B→A and stores the alphabetical direction, so a re-run is byte-stable apart from `generatedAt`.
- `github-actions[bot]` pushes with the default `GITHUB_TOKEN` don't trigger workflows, so a cron
that commits data can't make the site rebuild. Anything needing fresh data at deploy time must
fetch during the build, not commit-then-rebuild.
diff --git a/app/globals.css b/app/globals.css
index 4bf78bf..40baff4 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -945,6 +945,34 @@ input,
letter-spacing: 0.04em;
color: var(--blood-400);
}
+.form-success {
+ display: grid;
+ grid-template-columns: auto 1fr;
+ gap: 2px var(--s-3);
+ align-items: center;
+ padding: var(--s-4);
+ border: 2px solid var(--accent);
+ background: color-mix(in srgb, var(--accent) 14%, transparent);
+}
+.form-success-mark {
+ grid-row: 1 / span 2;
+ font-size: 30px;
+ line-height: 1;
+ color: var(--accent-text);
+}
+.form-success-head {
+ font-family: var(--font-mono);
+ font-size: 12px;
+ font-weight: 700;
+ letter-spacing: 0.16em;
+ text-transform: uppercase;
+ color: var(--fg);
+}
+.form-success-body {
+ font-size: 14px;
+ line-height: 1.4;
+ color: var(--fg-muted);
+}
.form-captcha { align-self: flex-start; }
/* ---- Resume ---------------------------------------------- */
diff --git a/app/layout.tsx b/app/layout.tsx
index 934f657..5680a88 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -102,7 +102,7 @@ export default function RootLayout({
url: SITE_URL,
description: "Builds software with AI.",
sameAs: [
- "https://linkedin.com/in/dommangonon",
+ "https://www.linkedin.com/in/dominicmangonon/",
"https://x.com/collapsecontext",
"https://dommangonon.substack.com",
"https://github.com/dommango",
diff --git a/components/landing/Contact.tsx b/components/landing/Contact.tsx
index 45a07c1..42c6489 100644
--- a/components/landing/Contact.tsx
+++ b/components/landing/Contact.tsx
@@ -18,8 +18,10 @@ export function Contact() {
const recaptchaRef = useRef {feedback}
In 2025 I went all in on AI and started shipping actual software: a restaurant cost
- tracker, a tournament bracket engine, an SEC filings pipeline. All built with Claude
- Code, including this site. The projects below are real, deployed, and mostly still
- running.
+ tracker, a tournament bracket engine, an SEC filings pipeline. All built using
+ coding agents, including this site. The projects below are real, deployed, and mostly
+ still running.
- Mostly nights and weekends, mostly with Claude Code. A couple are running in the wild;
+ Mostly nights and weekends, mostly with coding agents. A couple are running in the wild;
a couple are pipelines that only ever needed to run once.
Things I built.