Serpent an Extension API is not just for Tentacle!

I had posted this question on Forrst, and it got me wondering how best to go about keeping track of an applications core version and pushing updates ( not using GIT ).

Using git would be ideal if I was the one managing a single web application. Obviously using Git would complicate things for beginner users. But its likely that Extension and Theme developers will be using some form of source control.

I then set off to build a developer portal to manage this versioning.

Features

  • Contributors can register/login
  • They see a list of their public repositories and can hide unrelated repos
  • Releases must be tagged v<major>.<minor>.<patch>
  • Choose weather they are submitting a theme, or extension
  • If a new release has been tagged then the extension can be Versioned

Benefits

  • All themes and extensions are central
  • Privately managed
  • Source code is hosted on Github
  • Extensions are version

API Calls

  • get/core/
  • get/themes/
  • get/themes/{slug}
  • get/plugins/
  • get/plugins/{slug}
  • get/author/{username}
  • get/versions/{slug}

Later on I will collect ratings, statistics such as number of downloads and compatibility. You will also be able to look up all extensions from an author, and search categories.

Depending on demand I may integrate other Public Git Hosting services such as Bitbucket.

Hierarchical Data

I am proud to announce that Tentacle will now support sub pages! That’s right! Nest as many as you want!

One of the biggest challenges I had with building this CMS is the data structure.

On paper it looks easy.

Posts will have an ID, a Parent ID, Date, Title, and so on.

We end up with something like this:

ID Parent ID Title
1 0 Home
2 1 Portfolio
3 2 Web Design
4 0 About

Like I said, Simple!

But, Once you begin to work with the data you will soon realize that in order to query the data and return something usable you will have to work a bit of magic.

Typically hierarchical data is better handled with a database like Mongo DB.  MySQL is a relational database and is not hierarchical. Establishing a Parent/Child relationship that is dynamic has a number of issues. It can’t be done with one query. Since I would like to make Tentacle just as easy to install as it is to use I go with what the majority of web servers offer out of the box, MySQL!

Some common methods for dealing with hierarchical data include the Nested Set Model and the Adjasency List Model but they are complicated and for every record added, multiple records need to be updated.

To complicated!

I reviewed a hand full of popular CMS solutions and a few smaller up and coming MVC/Framework based CMS’s wondering how they went about storing their page structures. While some of them did use the Nested Set Model almost all used a Patent/Child relationship.

Good enough for me!
One of the challenges had been retrieving the content, ordering ( Sort order ), and then creating the page tree was creating the initial object. Once I created my object it looked a little something like this.
  • Home
    • Portfolio
      • Web Design
  • About

I thought this was perfect… At least it looks cool. That is until I sat back and thought about how I was going to be using the data.

Basic navigation functionality would require that we display one level of navigation at a time, with the option to show sub pages of a parent page in another location.

I had no easy way to loop through the data at this point, and I also didn’t have an easy way to return the children of a sub page.

One problem WordPress has in its navigation functionality is  the dreaded multi level navigation, where the third level has no connectivity to the top-level parent. There are plenty of plugins to solve the problem today, and I have even written a post about this in the past here.

After a bit of magic and a lot of trail and error I ended up with a flat Object that took into account menu order, parent/child relationships, and finally how many levels deep each child is.

Perfect!

Tentacles philosophy

From the Start

Software should work! It should work with little configuration. Tentacle will get you up and running in minutes.  Install will require as few basic details as possible.

Every release of Tentacle will follow this philosophy or improve on it.

Designing for our users

Users of Tentacle will be both technical and non.  Things should just work without worrying about their browser version or what the server is running.  It just needs to work!

If our users want something we will weight the pros and cons and move accordingly, If our users hate something then its out the door!

Design decisions and not Options

The more options you give the more chances for screw ups you create.  Users don’t need lots of options, and often do not understand how they impact the site. Developers need to make these design decisions and should be encouraged to do so. User feed back should guide  these decisions, not options.

Decisive code

The core of Tentacle is written using an MVC, this means the core is maintainable and easily leveraged. Themes have been made to be as flexible as possible while remaining relatively simple when it comes to the infrastructure around them. Plugins also follow the MVC pattern so adding your own helpers, models, controllers, and views is no issue at all.

Simplicity

Making something that is simple to use for Writers, Designers, Developers, and Site owners is no easy chore. But it should never seem that way for the users.  If we can provide Writes with the tools they need and allow developers to fill in any requirement gaps while not limiting what designers can accomplish then we have accomplished our goals.

No release dates

We will have feature releases but will not have a set deadline. Our process will follow a design and development phase, then beta testing, Here is where we will get user feedback from a wider user base. After testing the Beta we will move on to a Release Candidate. After any issues pertaining to the Release Candidate have been resolved a full release will be made available.

In all cases a Beta, Release Candidate, and Release will be made available to the public, We would like to encourage feedback in all phases of development.

Be our vocal minority

Jacob Neilsen wrote an article about the “Participation Inequality” Basically 90% of the users on a site are kicking tires, 9% may from time to time contribute, but there is a golden 1% group of people who actively participate. This 1% has the power to guide the development of Tentacle.

Whats been going on?

We have come a long way and accomplished a lot in the last few weeks.

Key bug fixes and changes

  • Subdirectory installation without configuration now supported
  • Can install on HTTP servers with ports other than 80
  • Consolidated configuration Deployment and Development modes.
  • Updated CodeMirror to v2.2
  • Restyled CKE to match the Bootstrap UI
    • Removed the webkit outline on CKE
  • Users can update their password
  • Snippets can be displayed in content using short codes.
  • Edit posts
    • Update post type
    • Update categories
  • Install via curl get.tcms.me | sh
  • Unlimited page depth
  • Schedule post date

A notable but undocumented improvement is that we have finally hooked up the templates and you can now displayed content on the front end.

As usual we are looking for feedback!

Download it!

And please send me feedback here, or send a tweet, and even an email.

Thanks!

 

User Persona

Tentacle has been built to reduce the level of knowledge needed to run and maintain a web site.

Designing a CMS for various types of users is challenging. Never knowing how something will be used and knowing it will never be used as intended doesn’t help. But with so many different types of users keeping things simple and straightforward is tricky.

The Site Owner
This is the person who is in charge of the site. They will have a list of requirements and be responsible for making decisions.

They probably have very little to do in the actual site site its self and might have little or no technical knowledge.

The Administrator
This person is usually be in charge of approving and potentially moderating feedback. They will need some basic knowledge of the web and how it works but they should not need to see or edit and HTML.

They will may from time to time write content for the web but will likely overlook the Writers.

Continue reading

Bootstrapped Editor!

The CKEditor is a very powerful and customizable WYSIWYG editor, With the ability to customize the output, create your own buttons the CKEditor should be a good fit down the road when we introduce modules.

The original UI greatly resembled the Bootstrap UI so it only made sense to adopt Twitters Bootstrap.

With the number awesome code libraries out there, it is important to have a unified look and feel.

This was not your average CKE theme, I added a hover/active state to the icons, Icons from GitHubs Gollum WIKI.

Help us test our installation process.

I want to make Tentacle dead simple to install.

For the time being I would like to get a group of potential users to test the setup process.

The ideal scenari should be:

  • Upload Files
  • Go to the root of of your CMS in any browser.
  • Tentacle should initiate the setup process.
  • Setup should complete and you should be able to login to the admin page.

At this point the test has been completed.

The ideal tester should be a little techie, you don’t need to be a hard core nerd but you should understand what the errors mean.

Download it!

And please send me feedback here, or send a tweet, and even an email.

Thanks!

What do you look for in a CMS?

It seems that one of the challenges in making web apps specifically a CMS is that you need to appeal to a wider audience. A CMS has some overlap between the client and the developer in terms of usability.

For example, you need to appeal to developers to recommend the product to their managers, and those managers need to be able to sell that product to their clients.

  1. As a developer, What do you look for when choosing a CMS for your self or what do you like about the CSM you use now?
  2. What would make you try another CMS for personal or client work?
  3. What do you look for when recommending a CMS to a client?
  4. What is a deal braker? for you or the client?
  5. What would make your life easier? strictly as a developer.
  6. Are you likely to suggest a paid solution to a client?
  7. Would you purchase a Developer license and pass that on to your client?

What I would like to do with this information is to try and solve some already defined issues that myself and others have found while working with many other CMS solutions.