Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Source code for
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.

This is the source code of the site that powers my personal site at

In a nutshell, this site is a home grown mini-blog engine using Node.js, Express.js, Angular.js, and MongoDB.


To run this code you need to have Node.js and Mongo DB installed on your machine.

Last but not least, you'll need to install a few modules that are used in the code. You can do this by executing the following commands in the Terminal from inside the folder where you downloaded the source code

cd ~/dev/
npm install 

How to run the site

Download the source code and install the requirements listed above.

Update the file and make sure the dbUrl points to your MongoDB database (e.g. "mongodb://localhost:27017/hectorcorrea").

To kick off the application, just run the following command from the Terminal window:

node server

...and browse to your http://localhost:3000

When the server connects to the database, if there are no other users in the database, it will automatically create a default user with the parameters indicated in the configuration file. You can login with this user by browsing to http://localhost:3000/#/login

Structure of the source code

Server-side Code

  • server.js is the main server-side program.
  • models/ contains the server-side models and database access code.
  • routes/ contains the server-side controllers.
  • views/ contains the server-side views. There is really only on server-side view (index.ejs) since the rest of the content is loaded via Angular views.

Client-side Code

  • public/js/app.js is the main client-side program. This is the where Angular is configured. I am also storing in here the Angular client-side controllers. Ideally they should be on their own JavaScript file but I have not split them.
  • public/js/partials/ contains the views loaded (client-side) by Angular

You can also take a look at the diagrams in the docs folder to get an idea on how the different components work together.

Running the site in production

When you run the site in production you need to pass the connection URL to the database and the information for the default user somehow because the program will not read them from Although reading these values from would have been easier to program I decided against this approach to prevent me (and others) from accidentally pushing these values to GitHub. Instead, the program expect these values in environment variables when it runs in production.

The first time you run the site in production you can do something like this:

NODE_ENV=production DB_URL=the_url BLOG_USER=u BLOG_PWD=p node server.js

You only need to pass BLOG_USER and BLOG_PWD the first time since once the default user has been created these values are not needed anymore. Therefore, after the first time you only need to run something like this:

NODE_ENV=production DB_URL=the_url node server.js

Another way of achieving this is by setting environment variables in your init.d script. For example, I have something similar to this in my production server:

export NODE_ENV=production
export PORT=3000
export DB_URL=[define-value-here]
#export BLOG_USER=[define-value-here]
#export BLOG_PASSWORD=[define-value-here]
export BLOG_SALT=[define-value-here]
node server.js

You can find my complete init.d script under the etc/init folder.

Questions, comments, thoughts?

This is a very rough work in progress as I learn and play with Node.js.

Feel free to contact me with questions or comments about this project.

You can see a running version version of this code here:

Keep in mind that you'll need to host to the site on your own in order to be able to add new topics or edit existing ones.

Something went wrong with that request. Please try again.