From James' Coffee Wiki
Jump to navigation Jump to search

Projects are projects on which I have worked.

Personal Projects

My guiding principles for building personal projects are:

  • Build something that I will use myself;
  • Open source code where appropriate;
  • Write documentation on how to get started with my open source code and;
  • Write a blog post announcing a larger projects.

I like to experiment with new programming languages, especially for small, limited-scope projects.

ML and AI

  • James Bot: An AI chatbot that references my blog, wiki, and other sources to answer questions. Powered by ChatGPT.
  • personal-notebooks: Notebooks for personal experiments with machine learning and computer vision.


  • indieweb-utils: A Python library with over a dozen functions useful for building IndieWeb and publishing tools, including implementations of parts of the W3C IndieAuth and Webmention specifications and the Post Type Discovery W3C Note. Functions include:
    • Original post discovery implementation
    • Discover feeds on a web page
    • Get representative h-card on a page
    • Page name discovery implementation
    • Authorship discovery
    • Endpoint discovery
    • Get post reply URLs
    • URL canonicalization
    • Add hashtags and person tags to a string
    • Remove URL tracking parameters
    • Slugify a URL
    • Generate reply contexts
    • Discover IndieAuth endpoints
    • Retrieve RelMeAuth links
    • Retrieve a h-app item
    • Discover Webmention endpoint
    • Send a Webmention
    • Discover a Trackback endpoint
    • Send and validate trackbacks
    • Really Simple Discovery (RSD) implementation
    • Reduce size of a given image
    • Process a Salmention
    • Paginate a sequence
  • pyatproto: Abstract Python functions for engaging with BlueSky and AT Protocol implementations.
  • getsitemap: Retrieve URLs from a sitemap. Recursive retrieval supported.

Specification Implementations

  • Cinnamon: An implementation of the Microsub draft specification.
  • Micropub: An implementation of the W3C Micropub specification used to post content on websites.
  • Trackback Server: A front-end using the Trackback functionality built into indieweb-utils.
  • Webmention Receiver: An implementation of the W3C Webmention specification to send and receive Webmentions.
  • IndieAuth Server: Authenticate with a website using the IndieAuth protocol.
  • Salmention: A playground for experimenting with the Salmention protocol.
  • WebSub: An implementation of the W3C WebSub specification.

JavaScript Utilities

  • commandk.js: A script to enable Command + K search on a website.
  • highlight.js: Inline text highlights for web pages. Also available as a browser extension.
  • seasonal.js: Change an emoji on your website for different seasonal events.
  • fragmention.js: An implementation of the Fragmentation specification in JavaScript.
  • hovercard.js: A script to load cards when you hover over a link in an article.
  • darkmode.js: Trigger dark mode and light mode on your website.
  • Generate shareable, embeddable links for Bluesky posts.
  • Generate shareable, embeddable links for Mastodon and other posts, marked up with mf2.



  • IndieWeb Search: A search engine for the IndieWeb community. Indexed over 410,000 documents at peak.
    • Elasticsearch used for storing data
    • Back-end API for interfacing with Elasticsearch
    • Front-end contains logic for parsing various microformats to return featured snippets
    • Link graph analysis for calculating weights for ranking
    • Custom-built crawler. Algorithms for:
      • Identifying thin content
      • Parsing link headers
      • Discovering new content
      • Validating whether a URL is eligible to be crawled
      • Identifying canonical links
      • Suspending crawling if a target server slows down notably
      • Filtering nofollow links
      • And more
  • Microformats to Mediawiki: Turn documents marked up with microformats2 into MediaWiki markup. Posts the MediaWiki markup to a wiki instance.
  • Novacast: Internal linking API powered by embeddings.
  • Semantic Search with CLIP: Simple script that uses CLIP to enable semantic search on a directory of images.
  • HyperText Coffee Pot: A Python implementation of the HyperText Coffee Pot Control Protocol.
  • markdown-revision-extension: A proposed extension to markdown used for making inline revisions to text.



  • MediaWiki Sparkline Generator: Generate sparklines showing the number of contributions made by a contributor on a MediaWiki instance.
  • markdown-html-link-rot: A script to substitute invalid links in markdown and HTML with a link to an Internet Archive backup.
  • Microsub OPML Utilities: Import OPML files into a Microsub server and export Microsub subscriptions to an OPML file.
  • Static Site Webring: A webring for static websites, built with Ruby and Sinatra.
  • Planet: An aggregator that shows new posts from tech blogs I follow. Built with Ruby and Sinatra.


  • A front-end for plotting saved GeoJSON data onto OpenStreetMap maps using leaflet.js.
  • Screenshots: A Node.js wrapper around puppeteer to retrieve screenshots of web pages.
  • Spontaneity RSS Feed: RSS Feed for @telepathics' Spontaneity Generator.
  • airport-pianos: The website.
  • stories.js: A HTML component that enables stories on your personal website.






IndieWeb Events

Professional Projects