Snap! Websites
An Open Source CMS System in C++
A plugin can help in setting up a blog or journal.
The fact is that all the necessary features to create a blog are available "by default" so there is nothing to do other than setups. It will be interesting to see whether this is a plugin or some XML settings that the user can install in order to get the feature going.
Since we want to have a Comment feature which is very similar to how Facebook functions, it can be used as a chat. The main difference in a chat is that messages scroll up as new messages appear. This can be achieved with the comments by placing them inside a frame with a scrollbar.
Therefore, once our comments are made to update in someone else's browser (i.e. user A writes a comment, then a few seconds later user B sees it!), we in effect have a chat. The only thing would be to offer a way to reduce the resync delay to make it more appreciable as such.
See: Comment feature
See: ...
The layout concept of Snap! Websites is what forms a page. You select one layout and then assign content to display in the different boxes defined in that layout.
The content being added to the layout may be dynamic content and it may be conditional. For example, it could be the list of the last 5 posts on your website when an anonymous user comes to visit your site. However, the same box could instead show the most important 5 points you need to put your attention on (i.e. posts that need to be moderated, to do items that become due, new emails to check out, etc.)
In that case we have PDFs ...
Whenever a user is attempting to read way more data than expected in a really short period of time, one is quickly marked as a hacker and if the behavior lasts a little too long (i.e. the hacker's robot doesn't follow our requests to slow down its requests) then we block one's IP address using snapfirewall.
Our Snap! Websites implementation counts HTML pages and all the various attachments (images, JS, CSS, etc.) as two separate groups. Each access is logged using Cassandra using the HTTP status, date, type, and URI of each hit. This way we can use the count() functions of ...
Note: This feature may not work well on a multi-site1 installation.
When setting up your website you could have an Apache setting that let your administrators access the site via port 8888 instead of 80 or 443. Then setup the firewall to block all users except those administrators from connecting on port 8888.
A plug-in that lets us change Apache settings without having to do too much (i.e. more or less a way to set one line or more in Apache from the server.)
For example, a customer may want to use www. in front of his domain and enforce it. So if someone tries to access http://example.com instead, we can ask Apache to add the www. which makes it a lot faster than asking the Snap! server to do it.
Another example of such a redirection is for systems such as feedburner. You can setup your Apache system to redirect everyone from your default rss.xml file to read the feedburner feed instead. That ...
When creating a page, it should be possible to password protect that very page.
To extend the feature, it should be possible to password protect a whole area on a website. For example, anything under the /protected/ path would ask users for a password before they can access the data.
This mechanism has been used for photo galleries where a set of photos is uploaded online and the photographer gives the customer access to that section of his website. With this property in the core system we can easily make this work.
Also this is great for Internet Marketers who want to lure people in their ...
We want means to select a layout based on all sorts of criteria such as the domain used to access the website, the device (iPhone, Desktop...), whether the user is logged in or not, depending on the path, the page, the browser in use, etc.
At this point, we have a Page Layout which actually is used to indicate how the contents of the page is to be placed on the screen. That Page Layout can also be a full page layout in which case that page is set (i.e. it has priority over any other selection.)
The layout should be selectable on a per path basis. For example, if you create a set of pages ...
We want to support a robots.txt on a per domain basis.
This means if one website is visible from multiple domains, then we need to be able to have a different robots.txt for each domain, even though it's a single site.
The robots.txt should be easy to edit. That means not giving users access to the technical text file, but instead a flag in each file and folder that let them mark whether that file or folder can be indexed by robots.
The system always provides a default version of the robots.txt. All 3rd party plug-ins that have specific needs can also hide their ...
Allow all users to attach a note to a page.
Offering all users to attach a note can be very helpful to get private comments from anonymous users, reviewers/moderators, etc. without having to create specialized features for each specific case.
By default, anonymous users may not be given access and once given access, it may require them to enter a simple CAPTCHA code to avoid auto-spam bots.
Making one Sticky Note available on all pages could make it useful as a bookmarking system too.
Offer a filter that takes the original body data and searches for TODO ...
Snap! Websites
An Open Source CMS System in C++