an Award Certificate Maker for Students and Children

Note: Although I did the development for this site, I don’t carry its maintenance. If you visit it and you see some JavaScript errors, these were not in the delivered final version.

Note: this post was previewed and approved by the customer. Any potentially confidential information was blurred on the screenshots.

Completed: May 2014.

Kidscerts' Logo.
Kidscerts’ Logo.

KidsCerts allows easy creation of certificates for students and children. The niche market is parents and teachers and it features an user-friendly, easy-to-use interface written in HTML5 and jQuery. home page. home page.

In this project I took on a lead developer role. Our designer did the initial design in Photoshop and converted it to clean HTML5 templates. Then I did most of the coding, with occasional help from a a few freelancers we hired through Freelancer for graphics, rewriting, data entry, and other miscellaneous work.

Project coordination.

As we were a small team and the product owner was heavily involved during the process, we choose Trello for project coordination. Trello has a very intuitive user interface which is pretty straightforward even for non-technical users.

The Trello board we used for this project.
The Trello board we used for this project.

This is a screenshot of the project page (board) in Trello. You can see that there are several lists, each one containing several cards. This gives a quick visual overview of the project. Everything can be rearranged by drag and drop.

The timeline is along the right side. It is convenient to keep track of the progress of the project. You can also receive board updates via email.

A Trello board card detail.
A Trello board card detail.

This is the detail of one of the cards, where I discuss an improvement with the product owner. Trello does not have many of the features of other popular project trackers like reporting but we didn’t miss these for this project.

The previous site.

The previous design.
The previous design.

The original site was completly functional but the code and design was done to 90’s standards. It definitely needed a remake. There was little we could reuse from the user interface, so we decided to write it from scratch.

A new design

Here is a screenshot of the initial design made with Photoshop:

The new home page design in Photoshop.
The new home page design in Photoshop.

For the form designer, the tabbed input takes less space while being easy to use and visually attractive.

The new create page design in Photoshop.
The new create page design in Photoshop.

I really liked the way the designer structured the Photoshop project. He used a single PSD file with well-organized layers, which you can show or hide to see each individual feature.

Photoshop layer tree.
Photoshop layer tree.

The designer also delivered clean and table-less HTML5 templates:

Our initial HTML template.
Our initial HTML template.

Certificate creator user interface.

The user interface required highly customized forms and real-time updates. We used jQuery along with a mix of open source and custom plugins. This was a bit complex due to the amount of integration required but we got it working while achieving a fast and simple interface. create certificate page. create certificate page.


We used the EasyTabs jQuery plugin. It was a snap to integrate.


We didn’t find any plugin for this, so we had to develop our own. It’s a jQuery horizontal hierarchical selector with several categories. Each contains several items. We found this very simple to use. It also took up little space.

There are also some frames which require a subscription. When selecting one of these, you will get an interactive tooltip asking you to subscribe. We used Tooltipster for these.

Tooltipster subscribe tooltip.
Tooltipster subscribe tooltip.


For the text inputs only CSS was required. We used msDropdown for customizing the dropdowns.

A jQuery rich text input.
A jQuery rich text input.

For the font chooser we used jQuery.customSelect. At the time of developing this, we couldn’t find a more specific one for this task. We used images instead rendering the fonts in the browser in order to speed up load times.

A jQuery font chooser.
A jQuery font chooser.

A customized version of the FontFace jQuery plugin was used for loading these fonts on demand.

For the color chooser, we used jQuery Simple Color. The original script didn’t allow us to use rounded borders for each color item, but the code was easy to customize.

A jQuery color chooser.
A jQuery color chooser.

Finally, for the multiline quote selector, we used imMultilineList. The possible values are populated automatically as function of the category selector at the left.

A jquery multiline select.
A jquery multiline select.


Custom backgrounds.
Custom backgrounds.

This is very similar to the frames tab. However, here you can also set the transparency level using a slider. We used the jQuery Slider plugin for it.

Registered users can also use custom frames:

Custom backgrounds deletion.
Custom backgrounds deletion.

These are stored on the server and can be reused or deleted:

Custom backgrounds deletion.
Custom backgrounds deletion.

We used the jQuery File Upload plugin for this.

Non-registered users will see the following interactive tooltip:

Custom tooltip for non-subscribers.
Custom tooltip for non-subscribers.

Live preview.

Below the form, there is a live preview of the certificate, which is updated as soon as you change anything in the form. This was custom developed.

In the images above, you can see that the live preview is resized automatically depending on the input area height, so its content is always visible.

PDF generator.

The old site had a functional pdf generator written in functional-style php. While a bit outdated for today’s coding standards, it well for the most part. Instead rewriting it from scratch, we decided to clean and refactor it, adding a few new features like the background transparency. Click here to download a sample PDF output.

We also made sure that the differences between the live preview and the pdf were minimal by comparing several screenshots in GIMP. Here is one of these. We made the browser output transparent, and then we placed it over the PDF one:

Checking the rendering differences between the browser preview and PDF versions.
Checking the rendering differences between the browser preview and PDF versions.

The maximum offset is 4px, due the different font rendering engines. While we could have improved these, we decided to stop here, as most people will not notice such small difference.

Members backend. subscribe page. subscribe page.

We decided to integrate aMember for subscriptions administration and billing. We chose 2Checkout as payment processor as we had positive experiences with it in the past. We skinned the members pages with a cleaned version of the old design. It was working well and looked acceptable so we left it. We will probably integrate it with the new design in a future iteration.

Kidscerts aMember integration.
Kidscerts aMember integration.

I can say that I’m happy to have driven this project to completion. Developing such a a complex jQuery interface was challenging, but also rewarding for the entire team. We will probably be adding more features in the future, and I will update this post accordingly.


Measure Twice, Code Once (or How To Make Your GUI Pixel Perfect with GIMP)

GIMP logo
GIMP logo.

Several of the projects I’m currently managing, like MockupData and MockupScreens, have complex graphical user interfaces. I have noticed that it’s hard to make this kind of program pixel perfect just by trying to measure the sizes and distances by eye, especially if you have an old/bad/small screen, so here is a small tutorial showing why GIMP should be another of your development tools.

1. Download and install GIMP.

GIMP (acronym of GNU Image Manipulation Program) is open source and completely free. It runs on several platforms, including Windows, Mac OS and Linux. Installation is pretty straightforward: just download and run the installer for your platform in Windows and Mac OS. In Linux, it’s probably already installed; if not you should be able to install it using your favorite software package management utility from your distribution.

2. Take a screenshot of your GUI.

Focus the window you want to capture and then press Alt+Print Screen in windows or Control+Command+Shift+3 in Mac OS. For Linux  you can check this site, which also contains more options for Windows and Mac OS. Then, open GIMP and select Edit → Paste as → New Image.

Alternatively, drag and drop an existing screenshot image file into the GIMP title bar, or use the File menu item to open an existing disk file or an image URL.

3. Use the GIMP measuring tool.

Take a look at the following icons. Are these of the same size?

Original buttons
Original buttons.

Let’s use the GIMP measuring tool. First use the zoom so you get a big image on the screen, and then click on the Measure icon in the toolbox, and then make sure the Use Info window checkbox is enabled. Next, left click on the starting point and drag with the mouse to the ending one, then release the mouse button. The distance between the two points will be displayed on the screen:

Measuring the left button with GIMP
Measuring the left button with GIMP. Click to enlarge.

Now let’s measure the second one.

Measuring the right button with GIMP
Measuring the right button with GIMP. Click to enlarge.

There is a 5 pixel difference. We asked our developer to fix this and make some other changes to the buttons:

  • Making  them smaller, as they looked so big compared to other items in our app. We resized them from 35*26px (left) and 30*26px (right), to 28*22px (both).
  • Adding 2 pixels between the icons.
  • Make the font a bit smaller.
  • Place the plus and minus signs just under the shadow line (this is the line where the background color of the icon changes, thus giving a 3D effect).

Here is the result. You can download and zoom it with GIMP if you want to check the changes:

Fixed buttons
Fixed buttons.

4. Use the GIMP color picker.

Now let’s look at the following toolbar:

Original toolbar
Original toolbar.

Are all buttons of the same color? Let’s check it with the color picker tool. Click on the pointed icon in the toolbox, and then check that the Show info window option is enabled. Click on the background of the Go Screen button.

Using the GIMP color picker on one of the correct buttons
Using the GIMP color picker on one of the correct buttons. Click to enlarge.

We get a color value of  eae8ed. Let’s check the Toggle Comments one.

Using the GIMP color picker on the incorrect button
Using the GIMP color picker on the incorrect button. Click to Enlarge.

Now we get f6f6f2, so the colors are actually different. We also fixed it, and here is how it looks now:

Fixed toolbar
Fixed toolbar.

5. Conclusion.

The appearance of your product is as important as its functionality. With similar features and functionality, a user will choose the one with better appearance, and even if you can’t notice them in your old laptop, people with modern monitors will be able to see them. GIMP allows you to make sure that your GUI elements will look homogeneous to every user with little time and effort, while being completely free software.