Coder Social home page Coder Social logo

whistlepost / whistlepost Goto Github PK

View Code? Open in Web Editor NEW
1.0 2.0 0.0 2.16 MB

Digital content authoring and publishing

Home Page: http://whistlepost.org

License: Apache License 2.0

CSS 6.19% JavaScript 5.59% Groovy 11.11% Shell 1.10% Java 65.88% Dockerfile 1.06% HTML 9.06%
publishing cms web jekyll wordpress aem apache-sling content-management-system template-engine

whistlepost's Introduction

Whistlepost - Digital content authoring and publishing

Table of Contents

  1. Introduction - What is Whistlepost?
  2. Features
  3. Getting Started
  4. Extensions

Introduction

Whistlepost is a templating engine for Web sites, that helps to manage site structure and content independently of the presentation. The goal is to provide many of the benefits of a Content Management System (CMS) without the management overhead.

Often we think of modularity and encapsulation as important design principles for software that is more secure, reliable and easier to maintain. This is often expressed as a separation of concerns, which is the basis for the Whistlepost platform.

Apache Sling

Whistlepost is built on Apache Sling, which has a unique approach to content management in that it provides separation of not only the presentation and content but also the content structure itself. This helps to conceptualise the relationship between content and structure without being distracted by the presentation.

Whilst Whistlepost shares the same origins as Adobe Experience Manager, it's focus is more aligned to the popular Jekyll template engine, which is more concerned with content rendering than lifecycle management. Whistlepost is designed to make it easy to "drop in" to a new or existing site to assist with the separation of the UI and content concerns. This is especially beneficial as sites grow larger and more unweildly over time, and allows both (UX/UI) designers and (content) developers to focus on what is most important to them.

Features

The primary focus of Whistlepost is the separation of UI and content. Whistlepost doesn't impose restrictions on how the UI is built, nor does it dictate how and where content is managed.

The key features of Whistlepost include:

  • Support for multiple template engines including JSP, Thymeleaf and HTL (Sightly)
  • Multiple content management solutions including NoSQL (e.g. MongoDB), AWS S3, Filesystem, etc.
  • Extensions provide additional functionality to support additional site integrations (e.g. OpenGraph, json-ld, etc.)
  • Built for containerisation (i.e. Docker) with support for horizontal scaling and multi-tenant solutions.

Getting Started

Prerequisites

The only requirements to deploy and test a Whistlepost site locally are Docker and a good text editor.

Creating a new site

  1. Create a project. Use the yeoman site generator to create a default directory structure
  2. Run Docker. Use docker-compose to deploy and test locally
  3. Develop the UI. Modify and test static page fragments for UI and layout adjustments
  4. Author site content. Define content and add template tags to render dynamic page elements

Migrating a static site

  1. Create directories for both application (ie. HTML, CSS, JavaScript) and content.
  2. Create a Whistlepost docker-compose.yml file
  3. Deploy locally and adjust static content to render correctly (eg. Prefix absolute paths with "/apps/")
  4. Define content and add template tags to render dynamic content

Migrating an Adobe AEM/Sling site

  1. Define a Dockerfile that extends from the Whistlepost image to load additional required bundles
  2. Define a docker-compose.yml file with volumes for app and content directories
  3. Deploy locally and adjust content to render correctly

Migrating a Jekyll site

  1. Create directories for both application (ie. HTML, CSS, JavaScript) and content.
  2. Relocate Jekyll HTML and static assets to the application directory
  3. Refactor Jekyll config files as JSON files in the content directory
  4. Create a Whistlepost docker-compose.yml file
  5. Deploy locally and adjust static content to render correctly (eg. Prefix absolute paths with "/apps/")
  6. Replace Jekyll Liquid template tags with your preferred template tags

Extensions

Whistlepost Extensions provide libraries of reusable code that make it simple to integrate your site with third-party libraries and services.

Analytics

The analytics extension provides support for adding analytics integration to your site.

  1. To add support for Google Analytics sign up to obtain a tracking ID (e.g. UA-XXXXXX-XX)

  2. Add your tracking ID to the gradle.properties configuration file

     gaTrackingCode=UA-XXXXXX-XX
    
  3. Include the analytics content node in each page you want to track. This will render the appropriate tracking code to include analytics on your page.

    A common approach is to add the node in a shared footer page fragment that is included in all pages (as demonstrated in the file <projectId-app>/src/main/resources/SLING-INF/content/footer/html.esp)

     <% sling.include("analytics.google.html"); %>
    

Comments

The comments extension provides integration with well-known commenting solutions for web sites.

  1. To add integration with Disqus sign up to create a short name.

  2. Add the short name in your gradle.properties configuration

      disqusShortName=myorg-projectId
    
  3. Include the comments content node at the bottom of the page where comments should appear. Ensure the current path is appended to the request URI

     <% sling.include("comments.disqus.html/" + currentNode.path); %>
    

Cross-origin Resource Sharing (CORS) Filter

The CORS filter extension adds HTTP response headers to allow for making AJAX requests to other sites

Error Handler

The error handler extension overrides the default error handling to provide a more user-friendly response that also suppresses the details of the underlying technology implementation.

HTTP Headers

The HTTP header extension supports the addition of configurable HTTP response headers.

JSON-LD

The JSON-LD extension provides support for rich metadata through the rendering of well-known JSON-LD structures.

Opengraph

The Opengraph extension provides support for rich metadata through rendering well-known Opengraph meta tags.

Paging

The paging extension adds support for rendering paging for list pages.

Link Rewriting

The link rewriting extension supports rewriting links in the HTML response to allow for reverse proxying, etc.

RSS Feeds

The RSS feed extension provides support for including RSS feeds in page content.

whistlepost's People

Stargazers

 avatar

Watchers

 avatar  avatar

whistlepost's Issues

Extension: link generator

Add a transformer that will detect web and mail addresses and automatically insert a hyperlink. For email addresses encode so they are less susceptible to spam.

Bookmarks

Support for bookmarking site pages for later reference.

Centralised bookmark managers are too difficult to maintain, but potentially each site could maintain a curated best-of list of pages that is easily recallable.

S3 resource provider

Ability to browse resources in S3 buckets means content can be integrated with automated workflows.

For example, emailed attachments can be saved and processed in S3 buckets. Attachment is automatically available when creating new site content.

Extension builder's guide

A guide to building extension libs for whistlepost. May include:

  • embedded libraries vs bundles
  • Don't include third-party npm packages that may conflict with client packages

Create article editor

Support creation of article nodes with following structure:

  • Title
  • Date
  • Paragraphs
  • Media link
  • Sidebar link
  • Related links
  • Page type (select from registered types)
  • Parent path

Application signature

A watermark at bottom of each page. Elements may include:

  • Logo/name (whistlepost)
  • Version info
  • Build date
  • Logos of included software (SSL, HTML5, CSS, ..)
  • Licence info (Apache, GPL, ..)

Forums

One of the major benefits of forums like whirlpool is that you get to experience conversations between/about experts in other fields (e.g. auto, solar, etc.)

A forum site that capitalises on this might focus on listing member occupations (e.g. mechanic, electrician) which may give more weight to their comments/make it easier to browse expert opinions.

Admin application

Provide a site admin plugin for managing content and preferences. Base url could be: site/wp-admin

  • Content - edit and publish site content
  • Media - upload and manage digital media
  • Extensions - configure and install extensions

Whistlepost remote for android

An android app for controlling Whistlepost environments and Felix based applications. Support for bundle control, logs, cache controls, content.

Feed plugin

Support for loading and caching site feeds

Media plugin

Use apache pdfbox to generate thumbnails of pdfs.

Extension: meeting

Capture meetings and discussions.

  • Attendees
  • Absentees
  • Notes
  • Actions
  • References
  • Chatham house rules (don't publish attendees)

  • Editor with auto complete

  • parse icalendar for template basis

Implement paging using suffix

Expand on the limit for list components to support offset as well. eg:

  • /page.html/5 - return max 5 elements at offset 0
  • /page.html/2-4 - starting at offset 2, return max 4 elements
  • /page.html/5- - starting at offset 5, return all remaining elements

Media search

Text search can be achieved via jcr queries or external indexers like elastic search.

Searching images and video for faces, things and text can be integrated using aws rekognition.

iCalendar content

Add support for rendering iCalendar page metadata including:

  • Event
  • Todo
  • Freebusy
  • Journal

Include json-ld and link to iCalendar content.

Reference back to url from iCalendar for syncing updates

Create as extension to support cq/aem and other sling-based apps

Lazybones template

Create a lazybones template for a whistlepost project. Directory structure something like this:

mysite

  • mysite-app
  • mysite-content
  • mysite-config

Lambdas for media processing

Provide lambda functions for manipulating content, eg:

  • convert image size, formats, dimensions, etc.
  • extract text, images from PDF

Add cache invalidation

Support invalidation of cached files after deploy. e.g. in nginx can send cookie nocache=true

Build community site/knowledge base

Create a site (whistlepost.org) that hosts articles and forums to support digital content creation.

Topics: analytics, templates (bootstrap), comments, media, authentication, services/apis

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.