From IndieWeb
Jump to: navigation, search

Marty McGuire

Marty McGuire


Marty McGuire is a web developer in New York, NY, USA.

Elsewhere: Twitter GitHub

IndieWeb Projects

Code / Services


My IndieWeb Setup is my primary home where I post many things via micropub, typically with Quill is a podcast website that I run "IndieWeb-style" where I post via micropub.

  • audio posts are posted via Screech. Manual POSSE with different content to Twitter ( and Facebook (
    • Posting each episode is a multi-step process that involves:
      1. Creating the post via Screech
      2. POSSE
        1. Twitter manually
        2. FB manually
      3. Edit the original post with micropublish to add syndication links (via micropub update)
      4. Syndicate from my personal accounts
        1. Like and Share on Facebook
        2. Manually PESOS my FB post to my site via Quill. Add syndication link with micropublish via micropub update
        3. Send webmentions from my site with Telegraph
      5. Syndicate from the parent podcast network's social media accounts
        • Manually like and share on FB
        • Manually like and retweet on Twitter

Syndication links are added manually for all POSSE copies for all of my sites.

Webmentions for replies, likes, reposts, and general mentions are sent manually using Telegraph.

Likes (and other reactions), reposts, replies, and mentions from the IndieWeb as well as syndicated copies on Twitter and Facebook are automatically received by and

  • I receive a notification for each webmention on my phone and laptop over in a Matrix chat room which receives messages via a custom hubot webhook triggered by
  • They are automatically displayed on my site whenever it is re-built (either in response to a new post or when I trigger it manually).

Silo Posting

While I try to treat silos as purely places where I publish syndication, there are still some things I will post only to silos.

  • Twitter
    • Some likes, retweets, and even quick replies that I don't consider "long-term relevant" enough to keep on my site.
  • Facebook
    • I typically do not post FB reactions such as likes, loves, "haha", etc. to my site. In general I am trying to stop using Facebook reactions (because dang and gosh).
    • Responses to prompts from FB like encouragement to send birthday posts. I am also using these less and less.
    • Comments to other people's FB posts. Unless I started the thread, I generally don't think it's appropriate to copy it to my site.

Personal Site - is my personal website.

What Works


Clean Up Webmentions


  • reduce noise
    • my webmention sender gets triggered by any changes to a published permalink'd post, including when the post template changes. this results in resending every webmention 😱.
      • could keep track of sent mentions and not resend when "content is unchanged". requires some template-independent diff engine. maybe hashed mf2+json.
    • could disable the webmention sender under certain conditions:
      • if some threshold of changed posts?
      • if the list of recently changed source files doesn't include any content files?
      • if the list of changed source files includes any template files?
    • (is this still a problem?) don't send WMs to authors' homepage when a post links to their post.
      • would need to be h-entry aware, ignore author info.

Incoming (Morris)

  • display homepage mentions (this is a whooooole thing)
  • handle deletes!
  • keep changes over time?
  • re-build on new mentions so they show up right away


Want a better way of interpreting incoming WMs in a notifications-friendly way.

  • de-dupe! i shouldn't get multiple notifications for a given post just because the mention is sent again
  • mf2-awareness!
    • i shouldn't get a notification if there's a new comment on a post i'm mentioned in
      • maybe my notifier could let me opt-in to follow replies? maybe i already could with Aperture??
    • i should (maybe) get a notification if a post i'm mentioned in is updated, content-wise
    • be aware of like, repost, bookmark, listen, and other verbs. ("so-and-so liked ...")
    • be aware of person-tags (e.g. "so-and-so tagged you in...")
    • be aware of other attributes like post-type-discovery (e.g. "... posted a photo of you", "mentioned you in a checkin", ...)
  • probably lots more!

Micropub De-Duping

I'd like to catch and reject posts that might be considered "dupes". e.g. don't let me like or bookmark posts more than once.

  • like-of
  • repost-of
  • bookmark-of
  • read-of
    • difficulty: only if read-status is the same as latest read-of post for the same read.
    • more difficulty: read-of is often some title + author string (+ optional ISBN), so dupe detection is weird
  • others?

Lazy Load YouTube Embeds

Automating POSSE

w/ bridgy publish and/or

  • micropub syndication query for Quill's syndicate-to feature
  • embed syndication links for POSSE via webmention
  • send webmentions and save response to post's syndication section
    • currently this is through Telegraph and is as many or more steps as manual POSSE and using to add the syndication links back
    • want to automate this at some point
      • a micropub client that supports the SE in POSSE with my workflow?
        • queries for mp-syndicate-to URLs for a given post
        • some support publishing via webmention and the wm request returns a reply w/ a permalink that could be sent back w/ a micropub update
          • also works for this
        • harder: recognize other kinds of posts and do them.
          • e.g. requires micropubs, probably parsed from the h-entry on the post.

Privacy Policy and Privacy Improvements

Like this one by Daniel Goldsmith

Pano micropub client

  • photo
  • some metadata that indicates it's a pano

more coherent design

  • typography! colors! process-driven thought into what goes on what pages!
  • move /posts to front page? maybe latest 30, link back to monthly archive?
  • more compact display of my own likes, reposts
    • support reacji! (e.g. "Marty reacted 👻 to AUTHOR'S POST")

private posts

  • published: false will prevent the page from being rendered at all. maybe good if I want to host those behind another domain or path w/ an access controller in front.
  • also: "not in main stream posts" that maybe get their own types.

pinned posts for tag pages?

  • first use-case - i want to be able to describe an h-feed on, e.g. the This Week in the IndieWeb podcast page as a stepping stone to mf2-to-RSS (or Atom) with enclosures and all that good stuff.
    • implemented this with a separate "podcast" kind of jekyll. it's configured w/ all the podcast metadata as well as a tag to pull posts from.
  • need another use-case for this

backfill old posts

post my own videos

This is an itch that has returned! Most notably, I post short audiograms containing audio from my IWC interviews for TWITIWAE along with subtitles. Screech can already post these files successfully, but needs to be able to switch from sending a "photo" prop to sending "video".

event posting improvements

These are mostly improvements to Slater, since my site (should) support them all.

  • A venue search with typeahead (like Quill does)
    • this sends an h-card w/ name, lat, lon, and other fields pulled from the Google Places API
    • could also set TZ automatically based on location / date.
    • i'm also interested in foursquare's venue API for this. dunno if they have typeahead support.
  • "duplicate this event" like Facebook allows
  • faster date/time entry. i really like how's works in terms of keyboard nav.
    • smart autocomplete. e.g. typing "6" into the hours field sets the hours to 06 and jumps to minutes. "6:30PM" can be set by typing "630p"

No Longer Itches

  • track listens?
    • "listen-of" => 🎧, "Listened to this"
    • I use Overcast on my iPhone to listen to podcasts. Based on's work, I made a script to create listen-of posts from Overcast's "everything" OPML export. I run this kind of whenever I feel like it, and to keep from crowding my main posts page, listens live at [2]. Will make a new display someday!
  • archives by month/year
    • cleaned these up for my Hugo rewrite at IWC Berlin 2018. example 2017-09 month view, example 2017 year view.
    • inspiration from Rob Weychert
      • great typography/layout!
      • also some great ways to browse
        • source / "also on"
        • type (e.g. movie review)
        • categories/tags
        • year/month
    • ALSO: better next/prev navigation include keyboard nav for left/right? meh. i am content with the details/summary sidebar i have now.
  • speed everything up
    • Port to Hugo. It was a big task but I did it, dangit! At this point I don't even remember when I finished that, haha.
  • Webmention sending
    • 2018-04 I implemented automatic WM sending in my hook-publish handler
      • It uses rsync output to determine what permalink pages are new or updated, parses them for the main h-entry and pulls out "appropriate" links for which to send webmentions.
    • Previously I used the Telegraph service, manually. I wanted a service that:
      • subscribes to my site updates via websub
      • does all the things that lazymention does
      • maybe limit to "relevant" links to send notifications about
        • like-of, in-reply-to is obvious. plain url mentions only in e-content?
        • ignore links in h-entry properties like author, syndication - maybe?
      • if given a status URL, save that too and check later. either on a job queue or manual, probably.
      • UI to review webmentions
  • better reply contexts
    • 2017-12 I switched to using XRay when I rewrote my hook-publish handler in PHP.
    • previously used the ruby microformats2 gem to get mf2 data, XRay for posts.
    • would like to support posts with microdata markup example)
      • that microdata was embedded in a JSONP-like call, yuck. instead, made a custom parser for Soundcloud that extracts the "sound ID" and creates an embed. not great but provides a reasonable reading experience at the moment.
    • would like to support posts with mf1 markup example) (XRay does it well)
    • would like to support posts with json-ld markup example) (the referred post 410s now)
  • use AntennaPod history for creating listen posts
  • websub notifications for tag pages (already work for my /posts/ page)
    • cleaned up my websub handling when i rewrite my hook-publish compile handler in PHP.
    • uses rsync results to see what files actually changed. filters out pagination but includes tag pages and individual pages.
  • Better handling of incoming webmentions
    • tool to slurp data into static files suitable as Jekyll or Hugo data files
    • web hook to accept notifications from wmio and, add the new mention to the data store, and rebuild the site
    • this is now handled by morris
  • an unhosted evernote knockoff using as my backend
    • I'm happy enough with laverna at the moment, though I haven't yet migrated any old notes in and support for files/images is limited/broken.
  • an internet archive style backup that snarfs pages that i want to bookmark into my notes
    • I'm happy enough with pinboard at the moment. ¯\_(ツ)_/¯
  • posting my own video without relying on silos. I post these very rarely. Currently happy w/ an Automator action that sends files from my laptop to my media endpoint and making a new post with a video property that gets embedded.
    • micropub client for video!
      • want to select a poster image, if possible
      • and what else?
    • storage (happy enough w/ my micropub media endpoint, which I could set up with a CDN if desired

Notes on Domains

The .re TLD is a geographic top-level domain for the island of Réunion. I used 101Domain as my registrar because they support setting up a business entity in the country (for a fee), a requirement for domain registration there.

I also have a mirror of my site running as a Tor Onion Service at http://schmartyp7qtjzn7.onion/.

Podcast Site -

We Have to Ask is the site for a podcast I co-host. In addition to hosting an RSS feed for iTunes and Stitcher, we have been publishing episodes here and manually POSSE-ing them to Twitter and Facebook, because that's where the listeners are.

What Works

  • statically compiled website hosted on Amazon S3
  • h-card on home page, relmeauth
  • mf2 for episodes
    • h-feed on front page
    • h-entry with u-audio
  • POSSE to Facebook and Twitter via bridgy publish. Syndication links displayed as "Join the discussion on {silo}".
  • Backfeed Twitter and FB interactions via bridgy and

Working On

  • Automating POSSE with webmentions
    • Works well with Twitter. Need to automate handling response. micropub update, possibly.
    • Doesn't work so well with FB. Facebook doesn't do the automatic link content extraction and embedding when posting this way.
  • Add representative images for each episode
    • Screech needs to support photo upload
    • Templates would also need to support it.


  • micropub media endpoint so Screech can make progress while text etc. get written.

No Longer Itches

  • "Bake in" webmentions at compile time
    • this is now handled by morris and's webhooks