Define a specific feature that deals with one small aspect of a website (i.e. links, comments, forums, etc.)

While someone makes a change to a page on his computer, other people may be viewing that very same page. It would be neat, using AJAX, for the user viewing the same page to see the update once the first user saves his changes.

Such a feature would consume a lot of traffic and so we may want to do that only in a few cases (i.e. front page, pages considered live.) With HTTP2 we can actually keep a connection open, so it uses a lot of connections but not so much traffic (i.e. we can switch from a Poll system to a Push system so if someone is on page A and page B gets edited, not much happens ...

Many parameters define how a page behaves. This includes things such as how fast a page will get loaded, which directly depends on how large the page is, how many pages need to be loaded, whether we can make use of the browser caches, etc.

We want to collect these statistics and let owners know that information is available. This way we can let them optimize their data over time.

Statistics of interest:

  • Size of the resulting HTML page
  • Size of each included content of data (i.e. "boxes")
  • Count of allowed / forbidden boxes; (this will require a per user counter?)
  • ...

Secure Pages feature

In order to offer secure pages on a site we need to offer customers to (1) create a key for their new SSL certificate, (2) get an IP address, (3) install their signed certificate.

Then one can mark a page as secure meaning that whenever someone tries to access that page, the Redirect feature forces a redirect to the secure version of the page if accessed via HTTP instead of HTTPS (the Redirect feature works in concert with the Secure Pages feature.)

See: Redirection feature

To Think About

At this time I'm thinking that the implementation of Redirect will be to (1) check whether there is ...

Redirection feature

To Be Noted

This feature is not marked as a Core Feature because it is not exactly required for a website to function properly. However, it is so user friendly to have this feature that it is very much like it had been marked as part of Core already. Of course, the functionality of redirecting users is already available in the Snap Websites library and it is in use by many plugins!

We want a plugin that can be used to redirect people from one path to another.

With the Cassandra setup, a person who hits a website arrives on a page. That page may be marked as a redirection so users who ...

Home Page feature


As the software has evolved, we may not want to support a special home page as described below (i.e. go to a page of content in the database, and mark that page as the home page—this is not possible because a page is always reference by its Object ID and thus it cannot be in two places at the same time.) That being said, we can of course have a filter such as [node:<some name>] which shows another page as the home page or an easy way to go to a page and swap it with the home page.

The Home Page is created by assigning the empty path to the page. If another ...

Anti-Spam feature

Whenever someone posts a message on any one site (sharing is great here!) we can check whether the post looks like spam. This can be done in all sorts of ways and some are highlighted here.

Spammers are then listed in a black list (IP address, and whatever other information we can easily gather.)

We also can check spammy external links. These are links created by a website owner to another site which reveals itself as being a bad site. For example, some websites may redirect search engines to another completely different site or the external site owner may quickly remove your backlink.



This concept was taken from Drupal.org which offers tarballs of module and themes you can download to install in your installation. Instead we are now offering a set of pre-compiled packages that can be installed on your Ubuntu server with apt-get. This includes all the necessary security (SSL, MD5 and similar sums, key signatures, and also it can be auto-updated as required.)

However, we may want to have some form of a signal that tells websites whether they are up to date and whether an update is a security update (i.e. we can connect to a server that gives us ...

Search feature

Table of words

With a Cassandra environment, the system can simply save all the words (3 letters or more, or whatever we can think of) in a table used as an index that references all the pages with those words.

search_table[word][page] = 1;

"[page]" is specific to a website, but not "[word]". We could also control and make sure that words inserted in this table are limited to a dictionary, however, it could be difficult if we support 200 languages. (We have to think of speed as well and we may want to have one table per letter.)


When a page is ...

Scripting feature

A plug-in can be created to allow for scripts found in templates to be executed.

For example, a template could be written in PHP and another in perl.

This is counter intuitive since you'd think everything would be in C++. However, a feature could be developed using a Ruby script at first and later re-written in C++ and compiled in the server as a normal plug-in.

Also, some libraries are available in a scripting language, such as Java, and not in C++. It would be a shame to not be able to use such just because it isn't the same language.

Note that we could also run standard shell ...

Help feature

The idea of a help feature is to add pages of data that are used to help the end users in running, maintaining, updating, etc. their website.

The help is online meaning that users can see the help pages while browsing their website.

The help comes from HTML pages defined by the plug-ins and core system.

The main idea is to have help buttons everywhere it is deemed necessary. The users can then click those buttons and see the corresponding help in a pop-up window or a side frame (the pop-up is likely going to hide the very thing being documented in the help and thus not be as user ...

Snap! Websites
An Open Source CMS System in C++

Contact Us Directly