Personal website and writing home for Stefan Taitano.
Live site: stefantaitano.com
This repository powers a personal site built with Eleventy. Writing, talks, projects, a /now page, platform links, and generated feeds all live here. Stefan is an Army veteran turned ServiceNow developer, getting deeper into Ruby and slowly training for a 2027 marathon.
- Personal website
- Article archive
/nowpage- Talks, projects, résumé, and a
/links/page - Home for experiments that do not fit cleanly on social platforms
- Homepage is a pixel night-sky banner, then type (no circle portrait).
/nowleads with Commit Your Code volunteering. - Top nav is four items: Now, Articles, Talks, Projects. Bookshelf, Field Notes, and Links live in the footer.
- Inner pages share a calm intro. Talks stay cinematic. The photo is on
/links/as a rounded square; holding it is a small easter egg. - Branding: slate + amber, Fraunces + Atkinson Hyperlegible + Caveat, ST monogram, favicons.
- Writing lives here. Medium is a footer identity link, not a competing CTA.
- Product checklist is complete. Next work is content as it comes: articles,
/now, and projects.
- Eleventy as the static site generator
- Nunjucks, Markdown, and data files for content and templates
- CUBE CSS with Tailwind utilities, design tokens, and local CSS layers
- Netlify for deployment
- Generated Atom and JSON feeds
- Generated Open Graph assets and image optimization
- Accessibility checks available through
pa11y
- Node
>=20
npm installnpm startnpm run buildnpm run test:a11yThe site is configured for Netlify.
- Build command:
npm run build - Publish directory:
dist - Security headers and cache headers are defined in
netlify.toml vercel.jsonmirrors those cache headers if the site is served from Vercel
The canonical site URL comes from src/_data/meta.js and defaults to:
https://stefantaitano.comIf needed, you can override it with the URL environment variable.
CHECKIN_MAP_EXCLUDE lists the home-area cities and places that the check-ins city list leaves out. It's set in Netlify only, never in the repo. Production builds fail without it. Other builds warn and leave out the city list. The format is in docs/checkins-map-project-plan.md.
npm testsrc/
_data/ Site metadata, navigation, personal links, projects, résumé, external data
_includes/ Reusable partials and head templates
_layouts/ Base, page, post, and tag layouts
_config/ Eleventy config, filters, shortcodes, events, setup scripts
pages/ Standalone pages: home, now, articles, talks, projects, links, résumé, bookshelf, colophon
posts/ Blog posts and article content
talks/ Talk pages
now-entries/ Dated /now notes
common/ Feeds, redirects, sitemap, robots, manifest, misc outputs
assets/ CSS, JS, SVG, images, talk slidessrc/pages/index.njk: homepage and current preview sectionssrc/pages/now.njk: current/nowpagesrc/pages/articles.njk: article index and paginationsrc/pages/talks.njkandsrc/talks/: talks index and individual talkssrc/pages/projects.njkandsrc/_data/projects.yaml: data-driven projects pagesrc/pages/links.njkandsrc/_data/links.yaml:/links/pagesrc/pages/resume.njkandsrc/_data/resume.yaml: résumésrc/_layouts/post.njk: post layout, newsletter CTA insertion, edit linksrc/_data/meta.js: site URL, metadata, feeds, theme, and testing configsrc/_data/navigation.js: top and bottom navigation linkssrc/_data/personal.yaml: personal links and profile/platform datasrc/_includes/partials/newsletter-cta.njk: current Field Notes CTAnetlify.toml: deployment, security, and cache header configdocs/site-voice.md: voice guide for page copy
- Create a new Markdown file in
src/posts/ - Add front matter such as
title,description, anddate - Add one or two hand-picked internal links under
relatedso the article suggests a useful next read - Optionally include hero image metadata if the post needs it
- Run
npm startornpm run buildto verify output
related:
- title: A related article title
url: /articles/related-article/- Standalone pages live in
src/pages/ - Shared metadata and links live in
src/_data/ - Reusable UI pieces live in
src/_includes/partials/ - Check
docs/site-voice.mdbefore writing headings, introductions, project summaries, or calls to action
- Lichess data is pulled through
src/_data/lichess.js - Feed outputs are generated through
src/common/feed-atom.njkandsrc/common/feed-json.njk robots.txt,_redirects, andsitemap.xmlare generated fromsrc/common/
- Personalized the Eleventy Excellent starter into a custom personal site
- Rewrote the homepage around a pixel night sky, type-first intro,
/now, recent articles, and Field Notes - Built a
/nowpage with live Lichess stats pulled at build time - Seven articles live in
src/posts/(some started on Medium; later posts are site-native) - Added a Talks page, starting with the RubyConf 2026 lightning talk
- Applied slate + amber branding, ST monogram logo, and regenerated favicons
- Cleaned up stale starter content, demo posts, and unused data files
- Replaced the starter README with a project-specific one
- Tightened first-visit and repeat-visit performance (cache headers, image formats, less JS on every page)
Complete. Content (articles, /now, projects) lands as it comes.
Fix the legal/imprint data pathDone: rewritten as a lightweight legal notice with email contactReplace the default Open Graph imageDone: subtitle updated, 11ty logo replaced with ST monogram on per-post cardsBuild a dedicated Projects pageDone: data-driven viaprojects.yaml, live at/projects/Replace the interim Field Notes email CTADone: links to the Buttondown publicationSwap default fonts for something that fits the brandDone: Fraunces for headings, Atkinson Hyperlegible kept for bodyDecide whether to add supporting pages likeDone: Colophon live atBookshelf,Uses, andColophon/colophon/, Bookshelf live at/bookshelf/, Uses skippedAdd end-of-article cross-links so each post suggests the next clickDone: articles now use curatedrelatedlinksCalm inner-page intros, four-item nav, and this site as the writing homeDoneHomepage as type under the pixel sky; Bookshelf/Projects off inline stylesDoneUpdate the colophon so it mentions the pixel sky and that the photo lives onDone/links/Keep the homepage header usable after you scroll past the skyDone: it follows and switches to page colors past the hillsFinish overlay menu access details (focus trap, restore focus, Close name)DoneBring the résumé into 2026 last (talk, volunteering, Ruby; drop the consulting one-pager voice)Done
This site started from the Eleventy Excellent starter, but it has been steadily reshaped into a personal site with custom homepage content, a custom /now page, personal metadata, feed configuration, and project-specific content structure.
If you are browsing because you are interested in the site itself, the best places to start are:
src/pages/index.njksrc/pages/now.njksrc/_data/meta.jssrc/_layouts/post.njkdocs/site-voice.md
- Built on top of Eleventy Excellent by Lene Saile
- Inspired by the broader Eleventy, accessibility, and build-excellent-websites community