Votellect Tech

From the start, I recognized that building Votellect to fit what I’d imagined was going to kick my ass. Not solely because I am developing Votellect alone, but I’ll be doing so while learning new methodologies and languages.

Votellect won’t be just another website, of which I’ve designed and built many, but a fully realized app. It has to be responsive with an interface that doesn’t reload after every selection. Since Votellect was initially conceived in a voting booth, it additionally needs to be light and natively mobile.

This post covers what will make Votellect tick.



The backend of Votellect is almost exclusively handled by WordPress. WordPress is robust, continually being expanded and secured, is extensible, and is something I’ve worked with for a long time.

When I began planning Votellect, I came across an article discussing RESTful apps and the eventual introduction of REST into the core of WordPress. REST wasn’t something that I was familiar with, but it was exactly what I needed. A way of changing the user’s presented data, without refreshing the page.

Added Functionality

Currently, Votellect is a standard WP installation with the WP REST API (v2) plugin installed for adding the RESTful functionality. That’s the current WordPress community approach until the REST architecture is fully integrated by the folks over at WordPress and Automattic.

In addition to the REST plugin, Votellect’s core will be in plugin form. In addition to being the recommended way of adding functionality to WordPress, it is also for modularity. If I ever get to the point where I want to release Votellect for deployment in other countries, it will be best as a plug and play experience for whoever uses it.



Interaction with Votellect has to feel immediate. To achieve that, I’m employing Angular 2, Typescript, and Javascript for user-side computation and of course CSS3 and HTML5 for styling and presentation.

Angular / Typescript / JS

After researching framework options, I landed on Angular as my initial JS framework of choice. I chose Angular over the other options like Backbone or Ember due to the support community, built in templating, and the fact that Google was maintaining the code base.

I started down the road of learning Angular when Angular 2 Beta dropped, so I switched over to reap the benefits of the new framework. Angular 2 is a complete refactoring of the Angular framework and is built with Typescript. As a result, I’ll be cultivating some familiarity with Typescript to help make working with Angular 2 a smoother process.

CSS3 and HTML5

The Presentation side of Votellect is straight forward. I’m using CSS3 with Sass and BEM formatting. The only two mixin libraries in use are Susy and Juice. At the moment I’m not utilizing a framework like Bootstrap. That could change, but isn’t currently in the books. Maybe if core team manages to get Bootstrap 4 released, I’ll reconsider.

In regards to CSS3 and HTML libraries, all of this is tentative and bound to change or evolve.


Votellect will at first be mostly be comprised of manually entered information. The next step is to have it be a more automated process by harnessing external civic minded APIs including the Google Civic API and possibly the Sunlight Foundation’s APIs.

Eventually I’ll add a more social component to Votellect using various APIs supplied by companies like Facebook and Twitter.

I’ve run into some issues with the DOM, but I’d like to eventually use web components and Polymer to help this project along. There are some tricks that I haven’t yet tried, but if it feels too hacky, I’ll just have to pass.


So at this point of development, and this point being very early, Votellect is a RESTful WordPress back-end with an Angular 2 driven front-end. Looking forward, I don’t foresee this core changing unless something large pops up.

In the next post, I’ll discuss my approach for creating the interaction experience of Votellect. I’ll be writing smaller posts with more “at the moment” updates, thoughts, and struggles with Votellect.

Thanks for reading.