HAAP!

Stockfresh

The anatomy of a stock photo marketplace
Stockfresh - Project hero

Client

Stockfresh.com Ltd. (Self-developed)

Roles

Business, Product design, Visual identity, Full stack development

Technologies

HTML, CSS, JS, jQuery, PHP, MySQL, Sphinx, Smarty

Summary

Originally a part of Inertia, Hungary's first ever web design community, SXC (stock.xchng) was my first venture into stock photography. In the early 2000's, when digital cameras were still rare, it was quite difficult to find high quality free photos for projects, so I built a service where designers could share their photos with each other.

In 2005, due to popular demand by SXC users, I also launched a paid marketplace called Stockxpert, which was a massive success: it has become one of the top 5 affordable stock photo agencies at the time, with over 4 million registered users and 5 million images available. This lead to the acquisition of both platforms in 2009 by Getty Images, the world's leading stock photo agency.

Being full of ideas, I found it difficult to stay idle for long and decided to build Stockfresh, the next evolutionary stage. While the business initially displayed promise, by the mid-2010s the market became excessively saturated with images, making it impossible to replicate the success of earlier websites. Still, it was an enjoyable journey and a valuable learning experience for me.

Stockfresh - Home page

Business model

Stock agencies generally offer multiple different plans for customers. They can often buy so called prepaid credits, monthly or yearly subscriptions and sometimes there are some quite exotic combinations of the two.

With prepaid credits, the agency usually pays a certain percentage of the revenues to the artist after each download. This used to be around 50% in the golden era, but agencies have kept pushing it down as the market got too saturated.

When it comes to subscription downloads, artists usually get a fixed amount. The fixed commission is based on the idea is that customers generally won't use up all their subscription allowance and therefore the agency will make a profit on most customers.

Over the years, these plans have evolved a lot, and it has always been quite a challenge to present them to customers in a way that they don't get lost between all the confusing choices. There's a case study below about one way I tried to solve this challenge.

Stockfresh - Artist gallery page

Features

Account management

User authentication via e-email, Facebook and Google OAuth, and authorization based on user roles.

Digital asset management

Artists can upload, manage and organize photos and vectors, edit metadata and attach releases.

Batch image processing

Multi-channel image processing using queues with IPTC / EXIF metada extraction and content analysis.

Fulltext search engine

Superfast multi-faceted search functionality in 15 languages, powered by Sphinx. Search based on colors and space available for copy. Automatic and manual ranking.

Shopping cart

Customers can purchase and download any number of files together, with plan recommendations.

Subscription management

Customers can purchase different plans such as monthly / yearly subscriptions and prepaid credits.

Payments

Multiple payment integrations such as credit cards, PayPal, Skrill etc. Handling outgoing payments. Automatic invoice generation.

Lightboxes

Customers can organize organize their favorite images into folders and send images to the cart from them.

Affiliate system

Two-level affiliate system with adjustable rates, for those who wish to advertise the service.

Localization and SEO

UI and metadata translated into 15 languages using a self-built dictionary. SEO friendly, responsive design and code.

Customer service

Fully capable customer service, contributor management and content review admin interface.

Marketing tools

Coupon management, newsletter generation, automated social media posts (Instagram, Facebook, Pinterest, etc).

Architecture

Stockfresh - System architecture

Stockfresh, — like all of my stock photo sites — was built using the classic, no nonsense and proven LAMP (Linux, Apache, MySQL, PHP) stack that I really enjoyed working with.

The hardware setup included two co-location servers, one for Apache and PHP, and another one with lots of storage space. To offset the CPU load, we also ran MySQL on the storage server. For backup we also had an exact replica of the above setup, quietly waiting in the background to take over in case there was a major outage. Although these days everything is in the cloud, this old-school setup was a very cost-effective solution for us.

Tech stack

PHP

I built my own custom PHP framework for Stockfresh. Although it was a very enjoyable experience to build the whole application from scratch, I've just recently looked into Laravel's newest version and I was blown away by some of their solutions for the problems I used to have, and I really wish a tool as mature and smart like that was around when I first started building these sites.

MySQL

Unlike many people, I like the "rigidity" of MySQL, and in my experience it is a fantastic database engine for this type of service. It does have its limits of course, like every other tool, and over the years I had to come up with quite a few tricks to keep things under control during times with heavy load — SXC at one point used to generate over 2.5 million pageviews on an average day.

Sphinx

One of the most important features of a stock photo site is a powerful and lightning fast search engine. Regular database engines aren't cut out for this kind of job, so I also set up a full text search engine called Sphinx. It gets the data from MySQL, but indexes it in a way that makes searches incredibly fast. There are many similar tools including Elastic and Solr, I chose this one because I liked the simplicity of it.

CDN

To increase website performance, I set up multiple CDN cache nodes worldwide using a service called CDN77. This ensured that thumbnails were always delivered to the user from the closest location, and it also reduced the load on the storage server significantly.

Stockfresh - Checkout page

User journey

Stock agencies are a bit unique in the way that they have two types of customers. On one hand, we have our regular customers looking for images, and on the other hand we also have our contributing artists who supply those images.

In many cases these roles are separated, but I like the idea that a customer can also sell images with the same account, and if someone likes the site so much they want to make some money advertising it by becoming an affiliate, why should they have a separate account?

On Stockfresh you start out as a regular user, and you can branch out if you like, and your different earnings will be automatically combined. I designed the whole site to reflect this idea.

Branding & UI / UX

I chose the name Stockfresh for the service to communicate a new start and our departure from the conventional, uninspiring stock photo aesthetic to promote more engaging and captivating content.

The logo, featuring a heart composed of green leaves, embodies not only this sense of 'freshness' but also conveys compassion and generosity, reflecting the fair trade aspect of our business. We've always aimed to give back to the community as much as possible by offering some of the highest royalty rates in the market.

For most of my projects, including Stockfresh, I prefer to go with a minimalistic, clean, responsive, grid based design. I find minimal design visually appealing, but its true value lies in prioritizing simplicity and clarity.

By eliminating clutter, user experience is enhanced, enabling users to focus on their tasks, which leads to higher overall customer satisfaction and trust, while responsive design ensures an excellent user experience on mobile devices, and at the same time offers tangible SEO benefits.

Stockfresh - Responsive design (Desktop)
Stockfresh - Responsive design (Tablet)
Stockfresh - Responsive design (Mobile)

Challenges

When you're building an online service, you can never really say that your work is done. It's a living and breathing creature in a constantly changing environment. You need to be in tune with your customers' needs and the overall market, comply with updated regulations, and on top of that, a lot of unexpected issues arise that have to be dealt with, such as technical problems, DDOS attacks and all sorts of fraud attempts.

Over the years working on my stock photo services I encountered all of the above challenges. Some of them required common sense, and some required more creative, out of the box thinking. In the following section, I'll talk about some interesting challenges I had to solve.

Stockfresh - Login page
Stockfresh - My account page

Case study #1
Complicated plans

With all sorts of subscriptions, prepaid credits and sometimes even more exotic products, stock photo plans have historically been complicated. This was tolerated for a long time as these services were used mostly by professionals, but over the years we've seen a shift towards new customers who were either completely unfamiliar with these niche conventions, or just wanted to download a few files (often a single one) without commitment, and they needed a checkout experience they were more accustomed to.

The challenge was to offer instant downloads to this type of customer while keeping the original plans that the core business relies on, and present all these different options during checkout in a non-confusing and non-intrusive way.

Complicated stock photo plans

Implemented changes

  • The store detects new users, and they get a simplified "Buy it now" price by default. This price was determined by A/B testing and analyzing customer behaviour. For upselling purposes, we also display an offer for prepaid and subscription plans, with considerable discounts.
  • For new users, the checkout page is also in "instant download mode" by default, but they can still choose to get the discounted plans if they want to. Existing users can only see the original checkout flow with no instant download option.
  • The customer isn't pressured to create an account during the checkout process. Obviously, to keep track of purchases we create a dummy account in the background, but they don't have to go through the hassle of coming up with a username and password combination.
  • Once the payment is complete, they immediately get a magic link to the file(s) they purchased. This is one aspect of the process that hasn't really changed, but the instant nature of the service is even more important for this type of customer.

Results

Introducing instant downloads resulted in an increase of 15% in overall sales, which outlines the importance of flexibility and proper price points.

Case study #2
Content ingestion

Processing a large amount of incoming images isn't an easy task. Both of my paid stock sites had over 5 million files available for download at some point, and this isn't even a lot these days, when some agencies offer over 200 million files.

As a stock agency, you have to make sure that the content you get is legally safe to use for your customers, the images look great in full size and the supplied metadata is correct. Ensuring this often means that someone has to manually review incoming files.

Original process

  • A regular user can apply to become a contributor by filling out a form with a short bio, a few sample images and a portfolio link.
  • If the provided material is interesting enough and is a good fit for the agency, the application is approved, the contributor gets access to the FTP and can start uploading files.
  • Regular contributors have to import their work manually from the FTP, edit metadata if necessary and submit the images for review.
  • Image reviewers will check the images for legal and other issues, and filter out the ones we don't need. Files that are approved go live within 24 hours, for the rest the artist gets some kind of feedback.

Of course, someone checking every single file is very laborous and expensive, so I decided to do some improvements.

Implemented changes

  • Mass imports — I introduced a new contributor status based on previous performance. If the artist has a track record of great sales and a near 100% approval rate, it doesn't make sense to make them jump through the hoops of the regular inspection queue and check every single file thoroughly, their content can be automatially imported from the FTP, saving a lot of time for both the artist and the agency. This of course depends on having proper metadata (titles, descriptions and keywords) embedded in every single file, but fortunately this has been a standard for most professionals for years now.
  • New tools — To make this work, we still need to glance through incoming images and be able to fix certain issues, so I built a brand new admin screen where hundreds or even thousands of imported files can be checked quickly to see if everything is OK, with handy tools for bulk editing and deletion.
  • Automatic fixes — The updated import script automatically fixes common mistakes, such as missing metadata, and removes files that don't fit certain size criteria or have visible errors.

Results

These changes have not only increased the speed of imports by 80%, but also reduced reviewing costs by roughly the same amount, vastly increasing our efficiency.

More projects this way

Stylehub. - Visual identity, website and more for an ecommerce platform tailored for fashion brands.

Stylehub.

Visual identity, website and more for an ecommerce platform tailored for fashion brands.

Visual identityUI/UXFrontend development

Inertia - A look back at Hungary's very first online community for web designers. You can also play Invaders here.

Inertia

A look back at Hungary's very first online community for web designers. You can also play Invaders here.

Visual identityFull stack development

Store themes - Block based theme builder framework and editor concept with high end store designs.

Store themes

Block based theme builder framework and editor concept with high end store designs.

Visual identityUI/UXFrontend development

Stockfresh - Analyzing the anatomy of a stock photo marketplace through my latest agency.

Stockfresh

Analyzing the anatomy of a stock photo marketplace through my latest agency.

Visual identityUI/UXFull stack development