Indie.js
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
- Facebook via
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:
- algorithmic URL shortening via Whistler
- custom content-type dictionary for algorithmic URL shortening
- pagination for individual entries
- pagination for feed pages by timestamp
- pagination for query-selected feeds
- h-feed generation
- h-entry extensions following the spirit of the posts philosophy:
- Entry metadata regarding character/word length and reading time
- Embedded webmentions
- OEmbedded Related Content
- Varying reply-context displays, based on context type
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:
- Michael Owens - mowens.com
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)
- identity: 0.2 / 0.2
- 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
- h-card: 0.1 / 0.1
- 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
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.