Skip to content

ShinyCMS: Project Progress


(Note: this document is out of date and doesn't include all currently-implemented features.)

Features from the Perl version that are now available in the Ruby version

(Noting improvements from the Perl version, if any)

  • Pages, with page templates, page sections, and dynamically-generated menus
    • Improvements: the Perl version requires all pages to be in a section, and you can only nest sections two levels deep. The Ruby version allows you to have pages at the top-level of your site, and to nest sections to any depth
  • Inserts (re-usable content fragments that can be pulled into any template)
    • Improvements: snappier name? ;) (Renamed from Shared Content to Inserts)
  • Access control for content on main site (separate from auth system for admin area)
  • Basic form handlers
    • Improvements: MJML email templates
  • Blog
    • Improvements: Split up single-blog and multi-blog versions (the latter of which was never fully implemented in the Perl version but just cluttered up the codebase a bit) into two separate plugins. Now the multi-blog feature is in an unmerged development branch and the merged single-blog code is much cleaner
  • News section
  • Newsletters and mailing lists
    • Improvements:
      • Email address verification (AKA double opt-in) for email recipients
      • MJML templates
      • Records exact consent text agreed to for list subscriptions (for GDPR compliance)
  • Nested comment threads
    • Currently enabled on blog posts and news posts
    • Ready to add to any other content type going forward
    • Improvements:
      • Perl's main ORM doesn't have native support for polymorphism, and in fact I'd never heard of polymorphism at the time - but to get the comments feature to work how I wanted, I basically came up with all the same ideas. The Ruby version uses ActiveRecord's native polymorphism, which is no doubt better than my hand-rolled version :)
      • MJML templates for reply notification emails
      • Double opt-in required before sending notification emails
  • Tags
    • Currently enabled on blog posts and news posts
    • Ready to add to any other content type going forward
    • Improvements: more generic implementation (powered by ActAsTaggableOn)
  • 'Likes'
    • Currently enabled on comments, blog posts, and news posts
    • Ready to add to any other content type going forward
    • Improvements: adds optional 'downvote' feature; more generic implementation (powered by ActsAsVoteable)
  • Site search
    • Improvements: Support for multiple search back-ends
  • User accounts and administration
    • Improvements:
    • The Perl version has role-based authorisation. The Ruby version has more flexible ACL-based authorisation (powered by Pundit).
    • MJML templates for all user account emails (welcome, forgot password, etc)
  • User profile pages
    • With links to user-generated content, e.g. recent comments/blog posts/etc
  • reCAPTCHA bot protection for registrations, comments, and forms
    • Improvements: supports reCAPTCHA v3 with scores. Tries an invisible CAPTCHA first, falling back to an interactive CAPTCHA if that fails.
  • Akismet support, to flag potential spam comments and form submissions
    • Comment moderation queue in admin area
    • Confirming/removing flag sends ham/spam training data to Akismet
    • Improvements: the Perl version doesn't feed back to Akismet (yet)

Features that the Perl version didn't have, but the Ruby version does

  • Support for themes
    • Low-lift; override the core templates on a per-file, as-needed basis
    • Two themes included
  • ShinyConcerns
    • While re-implementing various features I've tried to pull useful common functionality out into concerns, that might be handy building blocks for anybody else who wants to write a ShinyCMS plugin
  • Recoverable soft delete on almost all models (powered by ActsAsParanoid)
  • Admin page for viewing/managing (non-user) email recipients
  • Double opt-in for comment notification emails, newsletter subscriptions, etc
  • Email open and click tracking (powered by Ahoy::Email)
    • Disabled by default (privacy, yay!)
  • Web tracking (powered by Ahoy) - track visits, visitors, page views, etc
    • Disabled by default, and has support for GDPR-friendly stats (IP masking, etc)
  • Build your own charts and dashboards to dig into the data gathered by Ahoy (powered by Blazer)

TODO / In Progress

See the multiple 'To-do' columns of the ShinyCMS project board for features from the original ShinyCMS that I haven't started implementing in this version yet, and ideas for new features too (theoretically to be built after the first list, but... things happen) ;)

There are also still to-do items in the old TODO document, which are slowly being transferred to the board as I get a chance.

Everything from the old 'in-progress' document has now been moved to the 'In Progress' column of the project board.