Skip to content

Commit b5d62db

Browse files
francisfuzzclaude
andauthored
feat: agent engine optimization (AEO) for AI crawler visibility (#45)
* feat: add agent engine optimization (AEO) for AI crawler visibility Add structured data, llms.txt/llms-full.txt, and robots.txt so AI agents can reliably discover, parse, and cite this site's content. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix: address review findings from multi-agent AEO audit - Convert llms.txt to Jekyll template so post index auto-updates - Add /gear/ page to llms.txt and llms-full.txt - Add claude-web crawler to robots.txt (Anthropic's third agent) - Fix publisher type to Organization in BlogPosting JSON-LD - Add jsonify filter to bare Liquid interpolations in JSON-LD - Fix placeholder channel metadata in public/feed.xml Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * docs: add AEO maintenance guidance to CLAUDE.md Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 322ed59 commit b5d62db

7 files changed

Lines changed: 212 additions & 4 deletions

File tree

CLAUDE.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,11 @@ All CSS is inline in `_layouts/default.html` (lines 10-45). Uses system fonts an
6868
## Deployment
6969

7070
GitHub Pages automatically builds and deploys from the `main` branch. No manual build or deployment steps required.
71+
72+
## AEO (Agent Engine Optimization)
73+
74+
`llms.txt` and `llms-full.txt` serve structured content to AI agents (ChatGPT, Claude, Perplexity, etc.).
75+
76+
- **New posts** are included automatically via Jekyll Liquid templates — no action needed.
77+
- **New top-level page** (beyond About, Résumé, Gear, Posts): add it to the `## About` section in `llms.txt` and add a prose section to `llms-full.txt`.
78+
- **About/Résumé/Gear content changes**: update the corresponding hardcoded sections in `llms-full.txt`.

_layouts/default.html

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,25 @@
77
<link rel="icon" type="image/x-icon" href="/public/favicon.ico">
88
{% seo %}
99
{% feed_meta %}
10+
<script type="application/ld+json">
11+
{
12+
"@context": "https://schema.org",
13+
"@type": "Person",
14+
"name": {{ site.author | jsonify }},
15+
"url": {{ site.url | jsonify }},
16+
"jobTitle": "Senior Software Engineer",
17+
"worksFor": {
18+
"@type": "Organization",
19+
"name": "GitHub, Inc.",
20+
"url": "https://github.com"
21+
},
22+
"description": {{ site.description | jsonify }},
23+
"sameAs": [
24+
"https://github.com/francisfuzz",
25+
"https://www.linkedin.com/in/francis-batac"
26+
]
27+
}
28+
</script>
1029
<style>
1130
body {
1231
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;

_layouts/post.html

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,32 @@
22
layout: default
33
---
44

5+
<script type="application/ld+json">
6+
{
7+
"@context": "https://schema.org",
8+
"@type": "BlogPosting",
9+
"headline": {{ page.title | jsonify }},
10+
"datePublished": "{{ page.date | date_to_xmlschema }}",
11+
"dateModified": "{{ page.date | date_to_xmlschema }}",
12+
"description": {{ page.description | default: page.excerpt | strip_html | strip | jsonify }},
13+
"url": "{{ page.url | absolute_url }}",
14+
"author": {
15+
"@type": "Person",
16+
"name": {{ site.author | jsonify }},
17+
"url": {{ site.url | jsonify }}
18+
},
19+
"publisher": {
20+
"@type": "Organization",
21+
"name": {{ site.author | jsonify }},
22+
"url": {{ site.url | jsonify }}
23+
},
24+
"mainEntityOfPage": {
25+
"@type": "WebPage",
26+
"@id": "{{ page.url | absolute_url }}"
27+
}
28+
}
29+
</script>
30+
531
<article>
632
<header>
733
<h1>{{ page.title }}</h1>

llms-full.txt

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
---
2+
layout: null
3+
permalink: /llms-full.txt
4+
---
5+
# {{ site.author }} — Full Site Content
6+
7+
> {{ site.description }}
8+
9+
Source: {{ site.url }}
10+
Last updated: {{ site.time | date: "%Y-%m-%d" }}
11+
12+
---
13+
14+
## About
15+
16+
URL: {{ site.url }}/
17+
18+
Hi, I'm Francis Batac.
19+
20+
I'm a Senior Software Engineer at GitHub on the New User Experience team, where I work on initiatives that streamline signups, simplify onboarding, and surface the highest-signal information on the dashboard—helping millions of developers get the most out of GitHub and GitHub Copilot. I build with React, TypeScript, and Rails, and I'm experienced in A/B testing, feature flagging, and conversion optimization. I also serve as an Incident Commander, helping keep GitHub reliable during critical incidents.
21+
22+
Previous to my current role, I spent time in partner engineering and program management, where I built localization infrastructure for GitHub Docs and designed nurture campaigns connecting marketing systems to customer workflows.
23+
24+
Earlier in my career, I joined GitHub in 2015 as a Support Engineer, building expertise in REST/GraphQL APIs, OAuth, and the GitHub Apps platform—knowledge that still informs how I think about developer experience today.
25+
26+
I believe in learning in public, pair programming, and creating brave spaces where teams can thrive. I'm committed to building inclusive products and environments where great work happens.
27+
28+
Social: GitHub (https://github.com/francisfuzz), LinkedIn (https://www.linkedin.com/in/francis-batac)
29+
30+
---
31+
32+
## Gear
33+
34+
URL: {{ site.url }}/gear/
35+
36+
A running list of tools and equipment I rely on.
37+
38+
### Software
39+
- Screen Studio — Go-to for recording clean, polished screen recordings.
40+
41+
### Audio / Video
42+
- Opal C1 — Dedicated webcam. Makes a noticeable difference on calls and recordings.
43+
- Blue Yeti — Reliable USB microphone, clear audio out of the box.
44+
- Sennheiser Momentum 4 Wireless — Comfortable for long sessions, great noise cancellation, exceptional battery life.
45+
46+
### Desk Setup
47+
- MacBook Pro 13-inch, M1 (2020) — The machine everything runs on.
48+
- Jarvis Bamboo Standing Desk — Solid, height-adjustable standing desk.
49+
- Herman Miller Aeron — Worth every penny for long work sessions.
50+
- OWC 11-Port Thunderbolt Dock — One cable to the laptop, everything connected.
51+
- Lenovo ThinkVision P44w — Wide-format ultrawide monitor.
52+
53+
---
54+
55+
## Résumé
56+
57+
URL: {{ site.url }}/resume/
58+
59+
### Experience
60+
61+
#### GitHub, Inc. — Senior Software Engineer (Oct 2022–Present)
62+
- Jul 2024–Present: Co-leading a cross-team initiative to quantifiably improve GitHub.com's new user experience: onboarding, engagement, and retention.
63+
- Mar 2023–Jun 2024: Leading engineering efforts for GitHub Education's Redesign.
64+
- Oct 2022–Mar 2023: Spearheaded a significant Internationalization initiative at GitHub, solving complex technical issues and establishing a comprehensive translation pipeline in partnership with Microsoft.
65+
66+
#### GitHub, Inc. — Senior Partner Engineer (May 2021–Oct 2022)
67+
- Served as primary technical point of contact with GitHub's largest technical partners for optimizing API usage and extracting the most value from our platform.
68+
- Advocated for partner needs to Product and Engineering teams.
69+
- Led a cross-functional team to fully automate localization builds for GitHub Docs.
70+
71+
#### GitHub, Inc. — Senior Program Manager (Sep 2020–May 2021)
72+
- Crafted product paths and content workflows for customers to self-solve their issues in the GitHub Support Community.
73+
74+
#### GitHub, Inc. — Senior Technical Support Engineer (Dec 2015–Sep 2020)
75+
- Advised customers with technical solutions regarding GitHub Actions, APIs, and applications.
76+
- Coordinated with product managers and engineering teams before and after feature releases.
77+
- Educated and empowered support engineers with mentorship, documentation, and tooling.
78+
79+
#### Software Consultant (May 2015–Present)
80+
81+
#### Beacon Cloud Solutions, Inc. — Software Engineer (Jul 2014–Apr 2015)
82+
83+
#### 1POINT21INTERACTIVE — Software Developer Intern (Jul 2013–Oct 2013)
84+
85+
### Education
86+
87+
Pepperdine University, Seaver College — B.S. Mathematics (April 2012)
88+
89+
---
90+
91+
## Posts
92+
93+
{% for post in site.posts reversed %}
94+
### {{ post.title }}
95+
96+
URL: {{ post.url | absolute_url }}
97+
Date: {{ post.date | date: "%B %d, %Y" }}
98+
{% if post.description %}Description: {{ post.description }}{% endif %}
99+
{% if post.tag %}Tag: {{ post.tag }}{% endif %}
100+
101+
{{ post.content | strip_html | strip }}
102+
103+
---
104+
105+
{% endfor %}

llms.txt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
layout: null
3+
permalink: /llms.txt
4+
---
5+
# Francis Batac
6+
7+
> Senior Software Engineer at GitHub on the New User Experience team. I work on onboarding, engagement, and retention for millions of developers. I write about engineering craft, code review culture, psychological safety, and lessons from the field.
8+
9+
## About
10+
11+
- [About](https://francisfuzz.com/): Who I am, my role at GitHub, and my professional background
12+
- [Résumé](https://francisfuzz.com/resume/): Full work history from GitHub (2015–present), partner engineering, program management, and earlier software roles. B.S. Mathematics, Pepperdine University.
13+
- [Gear](https://francisfuzz.com/gear/): Software, audio/video, and desk setup I rely on daily
14+
15+
## Posts
16+
17+
{% for post in site.posts %}
18+
- [{{ post.title }}]({{ post.url | absolute_url }}): {{ post.description }}
19+
{% endfor %}
20+
21+
## Social
22+
23+
- [GitHub](https://github.com/francisfuzz)
24+
- [LinkedIn](https://www.linkedin.com/in/francis-batac)

public/feed.xml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
22
<channel>
3-
<title><![CDATA[Your Name]]></title>
4-
<description><![CDATA[Your Name]]></description>
5-
<link>https://yoursite.com</link>
3+
<title><![CDATA[francisfuzz.com]]></title>
4+
<description><![CDATA[Francis' personal portfolio]]></description>
5+
<link>https://francisfuzz.com</link>
66
<generator>RSS for Node</generator>
77
<lastBuildDate>Sun, 14 Dec 2025 04:29:09 GMT</lastBuildDate>
8-
<atom:link href="https://yoursite.com/feed.xml" rel="self" type="application/rss+xml"/>
8+
<atom:link href="https://francisfuzz.com/public/feed.xml" rel="self" type="application/rss+xml"/>
99
<item>
1010
<title><![CDATA[Seeking Clarity Without Being A Jerk]]></title>
1111
<description><![CDATA[How to reduce ambiguity when presented unclear expectations at work]]></description>

robots.txt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
User-agent: *
2+
Allow: /
3+
4+
# AI training crawlers
5+
User-agent: anthropic-ai
6+
Allow: /
7+
8+
User-agent: ClaudeBot
9+
Allow: /
10+
11+
User-agent: claude-web
12+
Allow: /
13+
14+
User-agent: GPTBot
15+
Allow: /
16+
17+
User-agent: OAI-SearchBot
18+
Allow: /
19+
20+
User-agent: PerplexityBot
21+
Allow: /
22+
23+
User-agent: Googlebot
24+
Allow: /
25+
26+
Sitemap: https://francisfuzz.com/feed.xml

0 commit comments

Comments
 (0)