Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

 

Closeup on Application Platform Liked

The creators of liked.com consist of a team of six Swedish guys - entrepreneurs Marcus...

by Kerstin Schuman

Posted 3 December 2012

Read post

The creators of liked.com consist of a team of six Swedish guys - entrepreneurs Marcus and Robert, developers Tomas, Eskil and Andreas, and a designer, Dawid, all located in Stockholm. They started to build the site one year ago during their spare time. Tomas and Eskil have been working with SilverStripe for about four years now within different companies and projects throughout Sweden. After many late nights of hard coding and design work, the project has become quite the success.

 

 

 

 

 

 

 


Developers Eskil and Tomas (with the beard)

You built the website liked.com. Tell us a bit about the website.

Liked is a search engine for Android and iPhone applications, on top of that we have added facebook connect so that you can create your own profile at Liked where you can add your favorite apps to what we call collections. You can also follow other Liked users, review and rate apps and comment collections.

 

 

 

 

 

 

 

 

 

 

 

Where did you find the inspiration to create Liked?

Marcus and Robert had an idea to build a social app search where you can connect with friends and share your app findings. They talked to Dawid who did a design of all pages that was needed. After this was done Eskil, Andrea and I started to build the first version of the site at nights after work and on the weekends.

How many users do you have and what’s the average number of downloads for a user per month?

The site is still in beta, so we have not started to promote it yet.

How much does it cost to download an app?

Downloading apps from Liked doesn't involve any additional cost, the price is the same as you get in app stores.

Why do you think people like liked.com?

We hope people will like the site because it will be an easier way to find new apps. The app stores of today are pretty hard to search in. We are also planning to give the developers more room to promote their apps. Also right now we are building a new version of the index page to give users a new way to search through all the apps we have stored. This new “inspiration” mode is still under development and we cannot not tell you how it works or looks yet. You will just have to wait until it’s live!

How does your business model work? Can you live off what you make with this business?

As we are still in beta we cannot live off this business at the moment.

How many people do you have working from where and doing what?

All develpment on the site is done in Stocklholm. Mostly me (Tomas) and Eskil working with the backend. Dawid with design. Marcus and Robert with SEO etc.

You built this project with SilverStripe. What parts of the SilverStripe Suite did you use and why?

We are right now using SS 2.4 with the dbsession, news and facebookconnect module. We have created a view of the Applications tables in mysql that we index using Sphinx. We created our own Sphinx wrapper class to run the search queries against this index. Below is a basic example of how that works:

$searchresult = SearchEngine::query();

$appsresult = new DataObjectSet();

/* Populating dataobjectset with applications from sphinx result */
if($searchresult['total'] > 0) {
    foreach ( $searchresult['matches'] as $result ){   
   
        $appsresult->push( DataObject::get_by_id("Application", $result['id']) );
    }

} else {
    $appsresult = false;
}

Since the site is running in a load balanced environment we use dbsessions to keep the session data consistent between the web servers.

We are using the Facebook Connect module by Willr for an easy way to register with facebook connect and get the benefits from the sdk.

How did you customise the tool to make it work for you?

Because of the amount of Application pages (eg. http://www.liked.com/ios/plague-inc/) that the site has, we are using DataObjects as Pages.

We are also using Sphinx to index the data and in this way speed up the search results.

Because of the total amount of screen dumps for all the apps that we list on the site is very large we needed a way to handle this. We didn’t want to download all the images and store them on our servers since this task would be very time cunsuming and it would take up a lot of resources and disk space.

We decided to store the images in an Amazon S3 bucket and connected that bucket to Amazon CloudFront front for faster loading. The first time an image is requested we fetch the image from the original destination e.g. iTunes. Upload it to S3 and update our database to tag this image as stored. Below are some code snippets that illustrates the solution we came up with:

1. Template:

<% control Application %>

<img src="$IconURL" />

<% end_control %>

2. DataObject:

public function getIconURL() {
   
    $icon = DataObject::get_one('Graphic', "Type = 'Icon' AND ApplicationID =" . $this->ID );
   
    if( ! $icon ) {
        return '/themes/liked/images/no-img.png';
    } else if( $icon->onCdn == 'yes' ) {
        return 'http://d30e0voobdlbps.cloudfront.net/' . $icon->ID;
    } else {
        return '/s3/' . $icon->ID;
    }
}

3. htaccess:

RewriteCond %{REQUEST_URI} ^/s3/(.*)$
RewriteRule .* s3.php?file=%1&%{QUERY_STRING} [L]

4. s3.php

$query = sprintf("SELECT MarketURL, onCdn FROM Graphic WHERE ID =%d",$id);
curl_setopt ($ch, CURLOPT_URL, $url);

$img = curl_exec($ch);

$contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$s3 = new AmazonS3();

$response = $s3->create_object($bucket, $id, array(
   'body' => $img,
   'contentType' => $contentType,
   'acl' => AmazonS3::ACL_PUBLIC
));

if( $response->isOK() ) {
    $query = sprintf("UPDATE Graphic SET onCdn = 'yes' WHERE ID =%d", $id);
    $result = mysql_query($query,$link);
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: http://d30e0voobdlbps.cloudfront.net/".$id);
} else {
    header("HTTP/1.0 404 Not Found");
    echo "s3 error";   
}

Would you recommend SilverStripe to others? Why?

We would! It is a great MVC framework that keeps the code clean and easy to work with. The built in “Magic” saves time when coding. Eskil and I have started our own buisness Stök Media AB (haven’t had the time to build our own site yet :-) ) where we develop a lot of sites in SilverStripe, too.

What do you think about SilverStripe 3.0?

We started working with it a while ago and the ModelAdmin enhancements were stunning! GREAT JOB!

Thank you for taking the time to answer my questions and goodluck with your project.