SharkScopers SharkScopers is a Drupal 6 site that allows online poker instructors to sell screencast tutorial videos. The first two minutes can be viewed by anyone. Users can purchase credits that unlock whole videos. Instructors then receive a cut of the profit.

Jonathan Brown from Blue Droplet Media in Edinburgh, Scotland, has been helping Mike Jonas from SharkScope in New York develop the site for more than a year. It uses Jonathan's Blue Droplet Video module extensively.

Mike had done a lot of research into what system should be used to build the site. His primary motivation for choosing Drupal was so that Blue Droplet Video could be used. He was blown away by how BDV integrates with CCK and Views, allowing the fundamentals of the site to be created with great ease.

Jonathan and Mike have very well defined roles within the project. For each task, they consult via email and Skype to construct robust specifications. Jonathan then implements the required functionality. A release early, release often methodology is used, allowing the site to innovate rapidly.

The fantastic theme was created entirely by Mike as a Zen sub-theme.

Credit bundles

Userpoints is used to maintain how many credits each user has.

A custom module was written so that credits could be purchased in bundles. An admin interface allows bundles to be created, specifiying name, credits and price. Additionally, private bundles can be defined that can only be accessed via a promotional URL.

Payment can be via Moneybookers or PayPal. This is handled by Jonathan's Simple payments module.


The video functionality was implemented with Jonathan's Blue Droplet Video module.

Instructors can upload video in any format and it will be transcoded to H.264 for viewing in-browser using Rob Loach's (superb!) Flowplayer module.

Transcoding is performed by a local installation of FFmpeg. As these are screencasts, transcoding parameters are set to have very high resolution and low frame rate. This produces really great results when the video is viewed fullscreen. One of the features of BDV is that it will never upscale a video. It is much better to encode it at its native resolution because you get more quality for your bitrate and upscaling reduces image quality.

The video content type created has two Blue Droplet Video CCK fields - one for the full video and one for the sample. The sample field was configured to only transcode the first 2 minutes. Some additional code was placed in a hook_nodeapi() so that if the instructor did not provide a sample video it would inherit the full video.

A video's price (in credits) is a simple integer CCK field. If the user has not unlocked the video, an unlock link is placed at the top and the sample video is rendered instead of the full length. If the user unlocks the video, the price is deducted from their userpoints balance.

BDV uses Storage API to handle file storage and serving. For SharkScopers, it was configured to use Amazon S3. Files are only stored locally temporarily, e.g. when they are first uploaded / created or when they need to be transcoded. This allows the VM that SharkScopers runs on to be significantly smaller than the 20+ GB of files it stores on S3.

While it is not possible to eliminate piracy completely, it is possible to mitigate it, especially in a niche area such as online poker. SharkScopers uses S3's signed URLs for full length videos. These URLs cease to work after a defined time (a few minutes in this case), meaning that posting them on forums would be fruitless. Storage API can generate these URLs with a simple configuration option.

Here is an example of a signed URL:


Blue Droplet Video has excellent integration with Views - the thumbnail grid was created with no programming whatsoever. Thumbnails are generated in their own request and then cached, so the whole page isn't delayed. Their size is defined in the Views field configuration.

Storage API's S3 service uses aggressive client side caching. The following HTTP header is served: "Cache-control: max-age=31536000". This means files can be kept fresh in the browser's cache for up to a year. This is possible because the service will never reuse a URL.

The video ratings were implemented with Fivestar.

Navigation bar

Mike had a great idea for a site-wide navigation bar and created mock ups and some logic rules.

It was implemented as a module that exposed a block. It simply examines the current path and renders HTML based on the logic that Mike provided. Mike themed it with CSS.

The avatars were rendered very easily with ImageCache.

Blog graphs

Users that blog on SharkScopers can insert a SharkScope graph of their poker playing performance at the bottom of each post.

This was implemented as a custom module that exposes a CCK field. The rendered graphs are cached in Amazon S3 using Storage API.

Migration to Drupal 6

The site was migrated to Drupal 6 in October.

In order to have the live site running alongside the dev site, it was necessary to duplicate the Amazon S3 containers. Storage API can do this very easily, but it would take a long time as there was 20 GB of files, each of which would have to be downloaded from the old container then uploaded to the new container.

However, S3 has a copy command, where it can copy a file directly between containers (much faster and free). Storage API was upgraded to detect when this is possible and perform a copy automatically. This greatly eased development and migration.


Something new being tried out is measuring how much videos are being viewed. Not just how often videos are played, but how much time is spent actually viewing the videos.

This required some new functionality in Blue Droplet Video: the playlog. This can be enabled for any BDV field. It makes AJAX calls back to the site when the user scrubs to a new position, reaches the end of the video or leaves the page. BDV then records the timing info in the database.

SharkScopers' admin backend uses this information to determine how much time has been spent viewing each instructor's videos.


Drupal and Blue Droplet Video proved to be an excellent platform for SharkScopers.

Any time a security update is required, the developers are notified by email. The module is then updated very easily with Drush.

Only a few years ago a site like SharkScopers would have cost many millions of dollars to produce. Development was greatly eased by Drupal's rich ecosystem of open source modules and vibrant community. By collaborating with those who had similar functionality requirements, the site was developed in a very economically efficient manner.


adrianmak’s picture

the rendered blog graph is rendered by a custom module or existing contributed module ?

jbrown’s picture

They are rendered by the parent site, SharkScope (not a Drupal site).

Jonathan Brown

sadist’s picture

is the site also having the same problem as what i am having?

there's the blogger's details through out their blog pages (top, right corner). e.g. is here: and here:

but on it's own blog archive page, it doesn't show up. e.g.

jbrown’s picture

This is now fixed.

Jonathan Brown

spelzmane’s picture

It's a good looking site but that "recent activity" thing needs to go down further because as it is right now it leaves a pretty large blank space.

dbirider’s picture

Thanks for the advice. I have plans to fill that space up with something, but haven't gotten around to it yet. I added some more entries to the recent activity, so the void isn't quite as large.

thomjjames’s picture

Nice write up & nice site!

Great to see my profile_setup module ( being used too ;)


______________________________________________ - Premium Drupal & Web Themes

dbirider’s picture

Yep, profile setup is a key module for my site. SharkScope has a bunch of users who don't have have usernames . We put all these users into our sharkscopers database and have it so when they log-in to sharkscopers for the first time, they're brought through a profile setup process where they can pick a username and then fill out the rest of their profile.

Tom helped me get this working :)

Sree’s picture

nice site!

-- Sree --
IRC Nick: sreeveturi

jamescopper’s picture

nice but not best ;)

DrupalCuckoo’s picture


wow … i really like your page! :-)

Could you provide us with information about how you created the user profile?

I'm trying to create a user profile where every user manages his own Blog (right now I'm using the core blog module). I've installed the content_profile module and assigned the content-type of the blog module to the user profile. Now I have a Tab inside my profile (named "Blog") but when I click on this tab I all I see is the entry form to create a new blog post. I also can't create multiple blog posts?!

How can I create a profile page such as those on SharkScopers?

Did you also use content_profile to build user profiles?

Anyway, thanks for the sharing of your information about SharkScopers! :-)

dbirider’s picture

Thanks for the complement!

The profiles are simply the stock profiles that are styled up with Michelle's advanced profile module and panels. I looked into node based profile solutions, but I found the core profile to suit our needs best.

krymp’s picture

I really enjoyed the site, espcially the user blocks on the home page.

Would you mind sharing what modules when into creating the users sections...thanks!!!

dbirider’s picture

You mean the Scopers members block? That's simply a view with the 'user: Picture field', themed with css. I to was surprised when I discovered how easy this was. In drupal 5 I had to use a module for this.

krymp’s picture

Wow, I never knew it could be that easy. I am also curious about the user profile page you have, is that a view also or some module that helps build it.

I am wanting to add some similar on a site I am developing. , A user page where after they sign up they can have resumes, blogs, etc, posted on there.

Right now if you visit the site its on the bottom right, it just list the user names (using user_list module) . If you click on it (only with admin privileges right now) the user name it goes to the default user page with nothing on it.

dbirider’s picture

Check a few posts up. I mentioned that I'm using advanced profiles for user profiles.

Nice site :)

krymskyievg’s picture

Call me a bore, but layout is broken in Opera

dbirider’s picture

Thanks for the heads-up. I'll save that css fix for a rainy day :). I'm afraid that if I change it the slightest bit, it's going to fall apart in ie6, 7, and/or 8.

krymskyievg’s picture

Btw, I'm using Views "Style: Grid" for such cases.

dbirider’s picture

I actually went out of the way to avoid the grid style, with the goal of making it table free. It's one of my OCD web development things.

duvien’s picture

Or you could have used this:

I build engaging websites and intuitive designs that will benefit your business

vsr’s picture

How did you connect userpoints with payments? Will there be a module release for connecting paymentsand points?

jbrown’s picture

Originally we were intending to release userpoints_purchase, but it ended up being too tightly integrated with SharkScopers' other modules.

Jonathan Brown

drupal_Pupil-dupe’s picture

I have a couple questions because I'm very new
I see how you show the website and what it does and what modules you added but I'm not sure how you set this up can you show us how?

Are the two minute videos the original long videos?
Or did you have to re-edit it to make two separate videos as an example you make a two-minute video to make it clickable
then made your original video or is there a some kind of timer that these videos will stop?

I do see the unlock text do you think it would be better to have a clickable button off to the side
do the credits go by how long the person is on the page or how long the video has processed through just in case he had to Pause it and walk away for a while
do you show some kind of timer on the page or does the credit go by how many minutes are played in the player timeline

Do you put up some kind of warning that the user has five minutes left or less,
do you offer a full download like in a zip file when the person's credit has completed a video

dbirider’s picture

All poker videos are available forever after a user unlocks them. Users can't download them onto their computer at the moment. You're right, we probably can make this a bit clearer. -- We're also looking to incorperate a optional monthly plan for users in the future.

Michelle’s picture

The site sure has come a long ways since I first saw it. :)

The shark "folders" in the forum are cute.


dbirider’s picture

Thanks Michelle! Advanced forum has been absolutely amazing. I see so many sites that tack on some 3rd party forum software, and it's just overly complicated and doesn't fit in correctly. With your advanced forum module, I'm able to set up a professional looking forum into SharkScopers and have it fit in perfectly with the look, feel, and features of the site.

I actually sent jonathan a paragraph devoted to my experiences with advanced forums to put into the writeup, but he was away for a week and didn't get it in time :-/

Michelle’s picture

Aw, too bad. I'd be curious to see it if you still have it. :) Glad you like the module.


janklaza’s picture

Wow, site is looking nice! How do you feel about the poker niche? There seems to be so much competition in the gaming/poker niche, have you found it difficult to find and attract users against all the competition out there?

dbirider’s picture

Thanks for you comments! Yes, online poker is extremely competitive. You either have to do something unique or pick a very specific niche that you know a lot about and pound away at it. If you have a unique and valuable poker tool or are posting unique / quality content, the word will usually spread. If you're starting a general how-to poker , a 'top 10 poker rooms' site, or a 'poker news' website it's destined to fail.

Also, a prerequisite would definitely be having a lot of poker experience. I played online poker for a living, read countless books, and posted on all the big poker forums before I started making websites.

vijaythummar’s picture

Site is looking cool.

You can also add some nice banners/advertisement in left or right section because in the inner pages there are lots of wastage of space. you should use it.

Vijay Thummar

dbirider’s picture

Thanks for the feedback. You're right, the site could be monetized much better. We actually ran sharkscopers for the first 9 months without any ads at all, apart from our credit bundles. Since the site is primarily user generated, I don't want to detract from users content with a bunch of flashy ads to different poker sites.

Later this month or next month I plan to work on a few more promotable sections that will be valuable to users and can bring in some revenue at the same time.

eric.chenchao’s picture

Very nice website, and thanks for sharing experience of drupal :)

I have a question about hosting: which type of hosting do you use? vps or dedicated server?

Can you recommend me a hosting for a small video news website?

Thanks a lot:)

jamesialford’s picture

Hi jbrown, I am creating a site like this with very different content. I was wondering if you can share the module you created for the credit bundles. I have most of the site working and think it would be great if my users can do this. I was thinking of "trying" something with Ubercart. But I see of your site it works just how I would like mine.


unitec’s picture

Very cool!
I'll implement the "Blue Droplet Video" to my site.