Try our conversational search powered by Generative AI!

Bartosz Sekula
Jul 2, 2019
(5 votes)

New version of Advanced Reviews (v0.2.0)

Together with Grzegorz Wiecheć we have just published a new version of our Open Source project Advanced Reviews

This version contains a few major bugfixes and improvements that we gathered during the past 3 weeks from both internal and external developers.

Release notes for v0.2.0 can be found here:

This documentation can also be found on our github page

The nuget is available on the EPiServer nuget feed at:


Previously, we did not have much documentation so this time we focus a bit more to describe how it actually works in details.

This project is a set of useful enhancements that may gradually improve the reviewing process in organizations using EPiServer as their CMS.

It solves a few major issues the Authors identified during their journey with EPiServer and after working on a number of EPiServer related enterprise solutions.

Feature list

Preview unpublished content

Allow editors to preview unpublished and unreviewed content.

As we all know, an EPiServer page is usually not self-contained but rather consists of many other content items like blocks or media files.

In such scenarios it is very hard for reviewers to see the "big picture". Let's say a page consists of several blocks and a few images. Now, in case the page author changed all those blocks and images the reviewer will have to manually go through all of them and approve them individually without, in fact, being able to see those changes in the actual page context.

This project gives the editors a way to generate a unique URL that will present the page exactly as they see it. The preview engine will ignore content status and the content approval process.


Context aware smart reviewing

In the current workflow, the reviewer can just provide a single comment that has to include all comments for a particular content version. Then, it is the editor's responsibility to match the issues raised by the reviewer with specific parts of the page.

This project aims at moving the comments closer to the specific page fragments which will help editors to understand & fix the issues faster. Pin review 1

You can also take screenshots of your page and highlight specific parts to make it clear to the editor what the concern is. Pin review 2

It is also important to set the priority to each comment to make it clear to the editor which comments are important and which ones are just cosmetic or optional. Pin review 3

After receiving such comments the author of the content will see all issues raised by the reviewer.

Pin answer 1

The author can respond to each of them individually by adding a reply message or attaching another screenshot with explanations.

Once a Pin is reviewed it can be marked as Resolved

Pin answer 2

All pins are saved and can be reviewed at any time in a dedicated Review pane.

Pin answer 3

Integration with default approval workflow

Let's say we configure a very basic approval workflow with a single approval step and a single reviewer.

We will also force the reviewer to provide a comment when either approving or declining the changes. Configure approval

Later on, an editor decides to send the page for review. Approval 1

The reviewer can now use Pins to comment on specific parts of the page and use those comments to populate the Decline message Approval answer

If the reviewer ever tries to approve content that still has some unresolved Pins, a prompt will be shown. Approval prompt

Each pin is in fact a standalone Thread the can go on until both Reviewer and the Author are satisfied with the end result.

External reviewers

This feature is a combination of the previous ones. It is to allow external reviewers, so the user that may not be a part of your organization, or simply users who are reluctant to learn EPiServer to access unpublished data and provide feedback if needed.

Expirable token based urls

All generated links are token-based. You can generate as many links as needed, each of them can be revoked at any time.

Additionally, all urls are time limited (the TimeSpan can be configured, please look further down) which means that after a specific amount of time such link will no longer work.

Visual content reviews

You can visually express issues in reviewed content by highlighting or adding screenshots

Once you decide to attach a screenshot then we will automatically determine the dimensions of the EPiServer property that was clicked on and preselect it. The default crop can be changed according to your needs.

The highlighting tool allows you to clear and redraw.

Screenshot manipulation

External reviews

Allow to display draft content version without logging to Episerver.

External review component

This is an Edit mode component used to generate external review links. There are two types of links:

  • view - external reviewer can preview draft content version
  • editable - external reviewver can add comments using advanced review widget

Share dialog

Editor can share external review links using share dialog. The [#link#] constant will be replaced with link to content.

External review share dialog

Below is an email example:

External review email example

All features are also described in details in our demo:

Advanced Reviews

Jul 02, 2019


valdis Jul 4, 2019 10:35 AM

btw, advanced reviews now also works with Twitter bootstrap aware content area renderer. or... actually it's vice versa :) thx for great plugin!

Bartosz Sekula
Bartosz Sekula Jul 6, 2019 10:55 AM

cool :) I saw you expected that your BootstrapAwareContentAreaRenderer was registered for ContentAreaRenderer and thrown exception if the cast was unsuccessful right? now I see you change to just create a new instance if the cast fails.

what we are doing is:

                (locator, defaultContentAreaRenderer) => new DraftContentAreaRenderer(defaultContentAreaRenderer));

and then in the DraftContentAreaRenderer we just fallback to default unless we are in the 'external reviewer' context.

do you think also we should also change something in our code? any ideas for improvements are also very welcome :)

Please login to comment.
Latest blogs
From Procrastination to Proficiency: Navigating Your Journey to Web Experimentation Certification

Hey there, Optimizely enthusiasts!   Join me in celebrating a milestone – I'm officially a certified web experimentation expert! It's an exhilarati...

Silvio Pacitto | May 17, 2024

GPT-4o Now Available for Optimizely via the AI-Assistant plugin!

I am excited to announce that GPT-4o is now available for Optimizely users through the Epicweb AI-Assistant integration. This means you can leverag...

Luc Gosso (MVP) | May 17, 2024 | Syndicated blog

The downside of being too fast

Today when I was tracking down some changes, I came across this commit comment Who wrote this? Me, almost 5 years ago. I did have a chuckle in my...

Quan Mai | May 17, 2024 | Syndicated blog

Optimizely Forms: Safeguarding Your Data

With the rise of cyber threats and privacy concerns, safeguarding sensitive information has become a top priority for businesses across all...

K Khan | May 16, 2024