http://codepen.io/davidyarham/pen/Ajdms
The fastest way to find an IT contract role.
Wizerati is an ongoing project to test out user interface ideas and hone my skills developing JavaScript-heavy single-page web applications.
Please note:
- This application has not been made cross-browser compatible yet - please use Chrome or Safari.
- Wizerati may be slow to start because of the way Heroku works with quiet applications.
##Aims
- To obsolete CWJobs and JobServe.
- One-second page load times.
- Delightful user experience.
##Technical Details
###Server-side
- Node.js
- EJS (templating)
- Grunt (task runner)
- Uglify (minification)
- Concat/GruntCSS (concatenation)
- CouchDB / Cloudant (data-tier)
###Client-side
- Underscore.js (string/collection utility methods)
- Zepto.js (DOM manipulation)
- TinyPubSub (string-based messaging)
- _Cookie.js (cookie manipulation)
- Invertebrate.js (client-side MVC, client-side routing, templating (in concert with underscore templating))
- Lucid.css (CSS)
###Application Initialisation Sequence
- Vendor libraries are included/initialised.
- The "root namespace object" is created. The root namespace object is
window.wizerati
, this forms a top-level "namespace" and is created inpublic/javascripts/application/wizerati.js
. Everything in the application hangs off this (apart from JavaScript from 3rd party vendors). This is therefore the first application object to be created. - All constructor functions known about at this point (models, views, controllers, services, repositories, caches and so on) are registered with the root namespace object.
- The runtime object-graph is then initialised ("wired-up") in modules.js, with dependencies between objects constructor-injected.
- The application constructor function is registered with the root object (
public/javascripts/application/wizerati.core/App.js
). This inherits from invertebrate.App to gain access to client-side routing and templating. - The DOM is rendered.
- The onDomReady function on all the views is invoked to give any functionality requiring the DOM to be built an opportunity to run before the user gets to use the application.
- The application instance (i.e. the Wizerati invertebrate application) is instantiated in
public/javascripts/application/appStart.js
, the router is initialised and then the routes are registered. Leaving router initialisation until this late stage ensures that the user will be unable to invoke routes before the application is ready to deal with the requests.
When initialised, the running instance of the application is located at window.wizerati.instance
.
##Launch Guide
- Install base node modules for the application. To do this:
-
Copy the following into a file named
package.json
the root folder of the application:{ "name": "application-name", "version": "0.0.1", "private": true, "scripts": { "start": "node App.js" }, "dependencies": { "express": "3.3.8", "ejs": "*" } }
-
Run
npm install
from the application directoy.
- Install the express executable. To do this:
- Run
npm install -g express
- Create application skeleton. To do this:
-
Run
express --ejs wizerati
add files
install the npm packages
express app (this runs it)
git init
git add -A
git commit -m "init"
heroku create
git push heroku master
heroku logs (view)
More:
Express documentation: http://expressjs.com/guide.html
http://evanhahn.com/understanding-express-js/
##Working with couch:
git add -A && git commit -m "wip" && git push heroku master && git push origin master
common.js has useful library functions for things like interfacing with CouchDBB: http://wiki.commonjs.org/wiki/CommonJS.
Finding businesses, online find the top several thousand companies my revenue then search linkedin "recruitment manager x-company-name". Connnect and then contact directly.
Include browserify, to enable Node-like syntax on both client and server.