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.
src/
_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