Blog of Raivo Laanemets

Stories about web development, freelancing and personal computers.



I offer the following services. They are usually part of the whole project but can also be bought separatedly. Everything is billed hourly.


I develop web sites and applications. The specification or the project plan for the application is coordinated and discussed on-the-fly using email, phone, project tracker, IRC, Skype, IRL meetings or other communication channels (in addition to the initial written project plan or vision). A test environment is provided during development so that the running site or application can be seen after each change and feedback be provided as soon as possible. Development activities and time spent on them is recorded in a project tracker (see Project management).

Server-side technology

Server-side programming is done on one of the 2 platforms:

  • Node.js
  • SWI-Prolog

It depends on the project's nature and client's wishes which one is more preferrable. If the project involves complex algorithms then SWI-Prolog is preferrable. When the project involves lots of integration with 3rd party services then Node.js is preferrable. Both have excellent support for writing web applications and APIs.

If the project or a part of it can be built using a pre-made solution (high performance search, video serving, a blog, online shop, a crm etc.) then existing components, frameworks, libraries, or services will be considered even if they are not based on one of these 2 platforms.

Client-side development (browser)

Browser-side technology depends on the following factors:

  • Forms complexity (dynamic fields?)
  • Output complexity (dynamic graphs/tables?)
  • Required browser support (IE8 vs modern)

Relatively static web sites will be made using built-in JavaScript APIs only, partially dynamic sites will use jQuery+plugins and fully dynamic sites/applications (Single Page Applications) will use the KnockoutJS library.


The site or application design is preferrably implemented on top of the Bootstrap framework unless there are specific requirements that do not fit well into Bootstrap. The design or template (as a set of image/PDF files) should be provided by the client or by contracting a 3rd party designer. The site responsiveness/optimization for different device sizes depends on the type of the site and the available budget. Same goes for eye-candy like smooth animations and transitions.


Tests are written using CasperJS. CasperJS mimicks the behavior of actual web site users. The tests will either just walk through the application, looking for errors or checking specific functionality. Testing guarantees (at least) basic site usability and saves huge amount of development time and budget as automatic tests can be run after each code change without requiring the developer to manually click through the application. Test scripts are written at the same time when the site/application features are developed. Critical algorithms will have separate tests that check the algorithm behavior for multiple input values.


I deploy into Debian/RedHat/Docker-based systems. This includes:

  • Hosting setup
  • Documentation
  • Monitoring
  • Backups

Deployment includes hosting setup but does not include the actual hosting. Hosting is done by a 3rd party, such as Linode, Amazon Web Services, Digital Ocean, or others. Setup also includes:

  • Domain configuration
  • Mail setup
  • SSL setup

Documentation will contain the following information:

  • Remote access (hostnames, passwords, key files)
  • List of external repositories and installed packages
  • List of important directories and files

Monitoring will be provided by using a 3rd party real-time logging service. Mail alerts on error logs will be configured. Incidents will be dealt as soon as possible since receiving the first alert. No guarantees or SLA-s are offered.

Backups are configured either by using the hosting provider services or by using a 3rd party file storage service, such as Amazon S3. The concrete setup depends on the type of data (database files, images, etc.) and the volume of data. I offer up to 10GB of backups for free for a project that is developed by me.

Project management

Project management will be done through an online project tracker. During development I provide free access to a Redmine project tracker installation. This will be used to store the list of tasks and other project-related activities, as well as recording hours spent on the tasks. Instead of Redmine, one of the external services, such as GitHub, Bitbucket, Jira, etc, can be used. Most trackers include Wiki and file uploads section which will be used for storing important project-related information and documents.

Project cost/time estimation

The estimation is done by using experience and checklists from previous projects and some Internet research for similar projects. My approach gives mix/max and average hour-based time estimate. The cost estimate can then be derived from this by multiplying it with the hourly rate and adding fixed costs.


In the need for a designer or another freelancer, I will compile a list of technical requirements and write a proper job posting that guarantees quick replies from suitable candidates. I will help to select a good person and get the communication going.

Web scraping

Sometimes there is a web site or an application that contains the data that you need but the data is not in the suitable format and is spread around multiple (possibly thousands) pages. Web scaping will then download all the data and store it in a suitable format, being it an Excel spreadsheet, a database accessed through SQL, or an API, consumable by other systems. The scraper will be built onto the PhantomJS platform which is a scriptable web browser. I have experience from building several web scrapers for now.