Indie.js

From IndieWeb

Indie.js is an open-source IndieWeb project that was officially started on July 18th, 2014 but has powered mowens.com since July 8th, 2014.

Goals & Model

Indie.js is more than just a homerolled IndieWeb server. Its goal is to provide a turnkey IndieWeb framework that helps people own-your-data and have a better IndieWeb experience. The expectation is that Indie.js will have both a self-hosted and a hosted version.

Development

Michael Owens is the sole developer of Indie.js at the present time. Development tends to correlate pretty directly with the needs of Michael's personal website and time constraints.

Development of mowens.com is generally open-source and available on GitHub. The Indie.js framework, once a stable version is available, will be released simultaneously at IndieJS.com, GitHub, and on NPM.

From that point forth, all development will be fully open-source and separate from the app code for Michael's personal site.

Architecture

Indie.js leverages the bleeding-edge Node.js web framework, Koa.js, which relies heavily on ES6 Generators and Proxy to provide a much more readable, reliable, and enjoyable Node.js experience than current generation Node.js web frameworks like Express. Callbacks are a thing of the past.

Authentication and syndication account management is handled by Passport using the passport-indieauth module also written and maintained by Michael.

Right now the specific module architecture is in flux, but the intent is that the core of the system will be a set of indie- modules that will provide an easily customized experience.

Modules

Currently, the software has the following modules:

  • indie-webmention
  • indie-authentication
  • indie-categories
  • indie-entries
  • indie-publisher
  • indie-search

The intent of these modules is that once fully abstracted, these modules could be used together as the complete Indie.js framework or as standalone components.

indie-webmention

indie-webmention currently supports the following featureset:

  • Incoming Webmention Request Parsing
  • Incoming Webmention Simple Verification
  • Incoming Webmention Complex Verification
  • Incoming Webmention Response Parsing/Caching
  • Incoming Webmention Whitelist Validation
  • Incoming Webmention Custom Validation
  • Incoming Webmention Queuing / Moderation
  • Incoming Webmention Publishing
  • Webmention Endpoint Discovery
  • Outgoing Webmention Sender

indie-authentication

indie-authentication currently supports the following featureset:

  • RelMeAuth as primary login mechanism via passport-indieauth
  • Syndication Account Connection for the following syndication mechanisms:
    • Facebook via passport-facebook
    • Twitter via passport-twitter

indie-categories

indie-categories currently supports the following featureset:

  • h-entry compatible category tagging
  • all categories page (note: highly inefficient currently, should avoid using)
  • individual category archives
  • basic category statistics gathering

indie-entries

indie-entries currently supports the following featureset:

Other planned h-entry extensions:

  • h-as-bookmark
  • h-as-comics
  • h-as-data
  • h-as-event
  • h-as-gallery
  • h-as-presentation
  • h-as-repost
  • h-as-rsvp
  • h-as-video

Note: The term "h-entry extension" in this context specifically refers to a superset of h-entry data. Every entry can be displayed purely as a basic h-entry without losing context, data fidelity, or understanding. A "h-entry extension" is a combination of additional displayed interface and data (i.e. reading time for a h-as-article or an instance of a map for a h-as-checkin) that is not required to understand the entry but may enhance the experience.

indie-publisher

indie-publisher is a module that enables the posting of indie-entries compatible entries. It includes a full suite of publishing tools including the following:

  • Dynamic posting user interface
  • Dynamic editing user interface
  • Automatic webmention sending via indie-webmention
  • Category management via indie-categories
  • Backdating published datetime
  • Automatic syndication post composition (not auto-posting yet)
  • Syndication to Twitter, Facebook, and LinkedIn
  • Media uploading system (supports images and videos but does not optimize either yet)
  • Uploaded media preview
  • Automatic geolocation
  • Automatic place definition to neighborhood resolution

indie-search

indie-search currently is an in-memory full-text search that indexes entry content type, title, summary, and content for all entries. It leverages reds by TJ Holowaychuk and presents a noticeable performance hit upon startup when indexing more than around 10,000 entries.

Live Sites Running Indie.js

The following websites are currently running Indie.js:

IndieMark

As of August 19th, 2014, Indie.js provides an IndieMark score of 3.2 out of 6.0 using mowens.com as the baseline implementation:

  • Level 1: 1.0 / 1.0
    • identity: 0.2 / 0.2
      • βœ“ Personal Domain
    • authentication: 0.2 / 0.2
      • βœ“ IndieAuth
      • βœ“ rel-me
    • posts: 0.4 / 0.4
      • βœ“ permalinks for multiple posts 0.2 / 0.2
      • βœ“ h-entry 0.2 / 0.2
    • search: 0.2 / 0.2
      • βœ“ index-ready
      • βœ“ HTML-based content
      • βœ“ site-searchability (Google)
  • Level 2: 1.0 / 1.0
    • h-card: 0.1 / 0.1
      • βœ“ contact info and icon
    • multiple post types: 0.2 / 0.2
      • βœ“ two or more post types (article, note, photo)
    • POSSE support: 0.2 / 0.2
      • βœ“ POSSE multiple posts to silos you only POSSE to
    • posting UI: 0.1 / 0.1
      • βœ“ automatically compose syndicated posts or post to silo
    • navigation: 0.1 / 0.1
      • βœ“ linear prev/next navigation
    • search: 0.1 / 0.1
      • βœ“ search UI on own site
    • aggregation: 0.1 / 0.1
      • βœ“ autolinking of URLs / mentions
      • βœ“ embeds of external resources
    • web actions: 0.1 / 0.1
      • βœ“ provide one or more hard-coded web action in <action> element wrapper
  • Level 3: 0.8 / 1.0
    • βœ“ post reply post type 0.2 / 0.2
    • βœ“ post other reply types 0.2 / 0.2
    • βœ“ webmention inreplyto 0.2 / 0.2
    • βœ— POSSE thread reply posts with rel-syndication 0.0 / 0.2
    • βœ“ display reply-context on reply posts 0.2 / 0.2
  • Level 4: 0.4 / 1.0
    • βœ“ receive webmentions 0.2 / 0.2
    • βœ“ display comments on all post types 0.2 / 0.2 Note: Not "great" display.
    • βœ— display other reply types on all posts 0.0 / 0.2
    • βœ— post rsvp posts 0.0 / 0.1
    • βœ— send webmention rsvps 0.0 / 0.1
    • βœ— display rich media / embedded reply context 0.0 / 0.1
    • βœ— backfeed interactions from silos 0.0 / 0.1
  • Level 5: 0.0 / 1.0
    • βœ— post event post types 0.0 / 0.2
    • βœ— receive rsvps 0.0 / 0.2
    • βœ— display rsvps on event posts 0.0 / 0.2
    • βœ— CRUD reply posts 0.0 / 0.2
    • βœ— full webmention support 0.0 / 0.2
  • Level 6: 0.0 / 1.0
    • βœ— personal social reader via backfeed 0.0 / 1.0

Screenshots

Posting an article (full UI)
Posting a note (full UI)
Posting a photo (full UI)
h-feed (narrow UI)
h-feed (wide UI)
Webmention manager
Reply Web Action UI
Repost Web Action UI
Search and Categories UI
IndieAuth Login box
IndieAuth Profile / Logout link

TODO

The Indie.js TODO list is maintained currently on the GitHub repo for mowens.com. Once properly abstracted and modularized, the TODO will move to the Indie.js repo.

See Also