Overview of the site: // The point of this site is to make a fully automated site which will serve // as a single place where people will share all of the interesting/funny // pictures online. Basically a "YouTube for pictures"... only better. The // concept is not for photos (like Flickr) or personal art like DeviantArt, // but a global repository of interesting and/or funny pictures. Sort of like // a super-organized 4chan without the chatting. Viral pictures, etc. // After further review, I think linkinn.com is the most similar competitor I've // run into so far. Second try at description: The site will basically be a linkinn.com (user-contributed interesting/funny pics - not boring personal photos) which is FULLY AUTOMATED (peer reviewed to remove pr0nographic content) and which has tight integration with social sharing sites. It is different than a social site which just has its own copy of the content because the entire site is built around finding things by the tags, categories, memes, etc. (eg: a user could filter to find a bunch of pictures which are "sports", "funny", "doing it wrong", and not "sexy", "gorey", "racist", or "nsfw"... if they are in a different mood they can find all picture which are "lolcats", but not "ceiling-cat", "WalkIntoMordor", or "Sparta"). The main trick that I think justifies making this site instead of letting others handle it is the integrated social-sharing which lets users auto-share the content they added and allows the site to automatically submit its best content to social sharing (digg, delicious, stumbleupon, etc.) sites. This could be killer. Here are some concepts on how it will work: User-contributed images Users upload the images... the form lays out the simple uploading rules: - No violent (gorey) images - No nude or pornographic images - Not copyrighted (unless it's fair-use like an advertisement) - TODO: Any other simple rules? How do we cap overly-offensive racist stuff but not harmless funny stuff (Jewjitsu, Jewbacca, etc.) - PS: We can ban anything else we didn't think of if we don't like it or don't want it on our site for any reason or no reason at all. But we generally won't, that's just to cover our asses in case we need to delete something for whatever reason & hadn't thought of that when we made the rules. - TODO: Make these rules configurable by the site admins since they won't be the same for all deployments of the system. No specific user-limits on size, number, etc., but we should keep stats regardless, users will like to look at that stuff & will be proud of high numbers. Kickass uploading tools to make it faster. Possibly use the Pedlr ajax-uploader followed by rapid-captioner. Eventually a way that a user can just enter the URL of an image and we pull the image down. Eventually a FireFox extension that helps them snag images, videos, etc. and add them VERY quickly while browsing. Refer to Linkinn.com's wiki-like WYSIWYG editor for ideas. Peer-moderation Users are asked to review images (that they did not upload) to make sure they are either acceptable or violate a specific one (or more) of the policies. Users doing this classification are possibly allowed to try to look at images which have been flagged with a specific one of the violations (so they can just focus on either copyrights or sexual content, etc.) After the images are moderated, Motive FS will make sure the same images don't resurface later (see below). See "categories" section for info on how categories will be peer-determined. Automatic duplicate detection and copyright banning via Motive FS Plugin Motive FS and warn about duplicates, but allow some duplicates (for different captions basically). Allow multiple deployments of the system to connect to the same Motive FS file-store. This will help decrease duplicates and copyright-violations even more... WARNING: If we do that, then there will have to be a separation of the "banned" tables since each site may have different rules for what is allowed. "Points" for things which help the site These points probably aren't redeemable (at least they don't start that way), but they will be used to give bragging rights rights on the site They can also be used as intel on our most valuable users. For instance, if we decide to print 20 t-shirts we know who to give them. Points to view pages, add content, rate items, invite friends (who actually join... no props for those who don't, otherwise ppl may spam randomly), moderate images, comment, etc. A page which shows a directory of users, by default it should be sorted by points/rank so that the best users get the most attention (this will encourage other users to work hard to get on the list). Tags, categories and memes Categories ( TODO: ) Top-level categories might be configurable by the specific installation, with sub-categories that are user-generated, but there should be a tool which allows people to vote on whether a category is good enough to be a category or not (we want to keep the categories relatively limited so that there can be a one page directory for viewing them). Categories are filterable and have may several turned off by default (such as "Sexy" or "NSFW", maybe "Racial"). Different view types (image per page, paginated multiple images per page) TODO: FIGURE OUT WHETHER THIS SHOULD BE INHERENT TO THE IMAGE OR MORE LIKELY THAT IT'S A USER-SPECIFIC VIEW (which can be initialized for non-logged-in users based on url. Extensive user-profiles At first, get their digital identity info (social bookmarking, sharing, etc.) Allow them to create profiles about themselves and which show some of their activities on the site like their recent comments, what they've seen (and basic stats), Automatic intelligent submission to social bookmarking/sharing sites If a user has their social bookmarking info added, make it an option (enabled by default) to automatically submit their contribution to their social pages. Wait until an image has reached a certain level of prestige to submit it from our account (certain feedback score or number of views, etc.). Some social sites: del.icio.us, digg, stumbleupon, reddit, furl, ma.gnolia, BlinkList, bluedot.us (think it has a new name) NOTE: See the Shareaholic FireFox Extension for possible code to use to make this faster: https://addons.mozilla.org/en-US/firefox/addon/5457 After looking at it, this is an awesome resource on both writing an extension and on plugging into social sites. Targetable advertisement system. Live auction for the adspace based on bids across tags, categories, memes, display-types, users (based on their user-info). Ad-networks should be automatically injected as bidders (even though they can't actually bid, they will have like settings which guess how much they pay. Potentially down the road, either scree-scraped logins or APIs could be used to determine what the actual effective rates of the previous week or two are to give a better guesstimate/bid). NOTE: It might be worth it just to do simple advertising deals to start with since we won't have enough real-estate to sell this feature to the big guys - on the other hand, it does let small-time advertisers easily buy exactly the chunk of our traffic they want. Built in sharing tools Email-to-a-friend Social-share (with advertisement that this would be easier for users). Very visible spot for the URL to directly link to the page (with the current view settings). Cool interface tricks to make consuming the media as rapid and uninterrupted as possible Click on current image to go to next image Slide-show settings J/K for prev-next on long "stream of pictures" pages Memeipedia A (possibly MediaWiki... possibly more like an Urban Dictionary) which contains overviews of each meme and is easily linked to the related meme content on doItLater. This should be able to pwn as a site on it's own, but should say "by doItLater.com" somewhere (probably not the logo because that would make the site seem like we don't care about it). There should be a feed on the main page which is powered by doItLater which tracks which memes are generating the most traffic daily and possibly which are growing/decreasing the most. NOTE: It seems there is now a site that does this fairly successfully: knowyourmeme.com It's partially just a 4chan lovefest like Encyclopedia Dramatica though. SEO Make the meta keywords/description configurable per-deployment. Once this is done, it should be added to the installer (or at least to the feature-list for the installer which is planned but doesn't exist yet). Another jump: figure out how to make videos from various sites easily embeddable into our pages. Multiple-instance interaciton Make it easy for new deployments to be installed. For example: create an installer (see /includes/connect.php for a place where installation-detection already happens). Things installer will have to do: - Check for Image Magick and block until that is installed. - Run the main .sql file. - Run the .sql file for Motive FS in /lib/motive_fs.sql. - Set the printable site name as used by getSite(false) in tools.php. - TODO: KEEP A RUNNING LIST HERE OF OTHER THINGS THE INSTALLER WOULD HAVE TO DO. Track stats across the systems (number of users, pics, tags, etc. - and some metric for activity... like new users, pics, tags this week?). Make a way for many deployments to exist and be linked together (much like Motive Suggest? ...hopefully less confusing). Make different deployments have a feature similar to interwiki which allows easy linking between them. Have "ads" which cross-promote different deployments. Intelligent use of data. TODO: FIGURE OUT A TON OF WAYS TO USE THE DATA API: TODO: SPEC THIS OUT (what it would be used for, etc.) Widgets Facebook Application Should the site have comments? It might help stimulate memes, alternatively, ppl might respond to pictures in the captions. Regardless, there should be a linking format for referring to images/pages. So like [[256]] would link to image with id 256, even though the url should have some info about what it is in it. Other possible deployments of the site (since doItLater is mostly funny/interesting pictures and internet memes): Star Wars fan art WoW fan art & screenshots Halo fan art & screenshots Fan sites for professional sports teams (possibly as sub-sites of a site for that whole sport). Show-your-tatoo site Show-off-your-car site Cosplay Archive WAGs (Wives And Girlfriends of celebrities) site Chicks with Gunes site (for some reason, they were all over those pics of the military girls on dIL already. Case-mods Bodypaint Funny Search-Suggestions (probably primarily google... but still) It seems reasonable to create a site and spend about a month beefing it up before moving on... all the while taking suggestions for more sites. Spend about 2 weeks adding gobs of content before opening up the site. Start linking to the site from everywhere in the OffhandWay network. As soon as it is announced, continue to add content but spend at least as much time just trying to build the community. Try to find an evangelist for each site. Dig them up on other forums, etc. and ask them & give them a fancy title (not sure what a good one would be). Their reward for the work is just the title, some userpage bling, and if it's appropriate, we could sponsor them to go to related conventions, etc. to give out swag. APPROXIMATE DEVELOPMENT ORDER: X Make a page to sign up / login / forgotPass, etc. X Migrate doitlater.com's database schema to use OffhandWay's normal schema so that changes can easily be rolled out live. Make a page to upload content. Make the tracking-code for giving points to users every time an ad is viewed on a page for content they uploaded, etc. -- POSSIBLY START ADDING CONTENT HERE -- Make a basic show-image page (needs to include voting [voting should change from stars to thumbs-up/thumbs-down possibly] & flagging of images as gorey/NSFW(nudity/pornographic/copyright violation)). Make a basic listing-of-images page (by most recent & by highest rank). Make profiles for users and add their names to the images and their profiles should basically just show what they've uploaded so far. Design out the basic parts of the site (about, index, tag-cloud module, random image module, etc.). Make the tags/categories browsing pages. -- START PROMOTING & ADDING CONTENT HERE -- Add the email-to-a-friend button. Make the peer-reviewing tool (during development, make it admin-only). Make the social submitting tool for users & for automatic submissions after a certain set of stats is hit for the item. Add Motive Suggest to prioritize the next features (which should be cool because it will bring ppl back who voted on anything). DESIGN-DECISIONS FOR THE USER-REVENUE-SHARING: NOTE: Think about the strategy behind this. This may not be a good idea. 1) It locks you into a guaranteed decreased margin (because you probably can't change this later) 2) It might distract from the real motivations to contribute 3) It might look scammy 4) It might create accounting problems forever & if we ever messed up, that could be a huge problem. Not saying I'm convinced this needs to be cut... but it should be re-evaluated. - The decision was made to try to compensate users with part (half) of the ad-revenue for their involvement in the site. - One choice would have been to give points for every action (getting friends to sign up, moderating images, tagging images, looking at pages, etc). Another would be to just split based on the percentage of ad-views which come from the images uploaded by a given user. The decision was made to go the second route. The reasoning here is that we'll get a certain number of people who are really interested in trying to earn the money. If we use path-1 then that user will be all over our site generating a ton of page hits and doing interesting work. If we follow the second plan though, that single user will be incentivised to spread links to their images as much as possible and to make their pages well-indexable and just plain more interesting. This is a much more viral approach and will be simpler to start with. The other method should eventually be developed also, but the points assigned to other actions will start at 0. We can then do an A-B test where some users are allowed to opt into the other system (we should still give viral actions much higher weights). Even with page-views being the basis for the sytstem we'll start with, user-referals should have a significant "bonus". - To keep people from spamming, there will have to be some sort of deduction (penalty) for spammy tactics (bigger penalty for changing the age-ratings on a page because that's very bad for the site if we violate user trust). If a picture has to be removed (whether for DMCA violations or inappropriateness), any points they earned from that image are returned to a fund which pays for policing data to prevent future violations) - but this won't result in additional penalties because that would tip the economics to make them paranoid to upload ANYTHING edgy. If they realize that it won't help them if this gets removed then they won't try to upload too many borderline things anyway since it would be a waste of time. - Implementation: To start out with, there will be a table for the stats for every day (this is not a different database for now just because that would be one additional db-connection. If massive-scaling becomes an issue, this could be stored on a completely different server than the other mySQL data though and could be sharded by user-id quite easily (scaling would be a great problem to have!). For now these daily stats will be compiled by a cron-job into another set of tables for monthly stats (possibly weekly also eventually?). This will contain the user-id, photo-id, and a count. That will help users figure out which of their content is the most successful. - Hits will be tracked by JavaScript so that the stats are more accurately counting human ad-revenue-generating hits and not just web-spiders or bots, etc. Since the same percentage of the ad-revenue-pool is going to users, this won't be short changing them in any way, it will just keep them slightly more honest to avoid ppl writing bots, etc. - Make it clear to uploaders that if a user's image has to be taken down for DMCA violations / inappropriateness, all of the points from that image will be sent to the fund which will pay for policing of data. That fund can either be used to pay for internal development-time or internal hired-guns for policing or possibly just sent to a similar system where points get awarded to users who police images for us (when X number of users all agree on a rating, then they would get points for that rating). - Since OffhandWay is an engine, make sure this entire system is configurable. Most sites aren't going to want to do this (it's a huge hassle to pay users if the site doesn't have enough revenue to make it worthwhile & then it comes down to an issue of trying to establish trust for every site that uses the system). Also, might want to make the points for each action configurable?? This might just lead to confusion across multiple OffhandWay sites though. LICENSING: Make part of the licensing agreement that they have to leave a certain ad-block in the skin above-the-fold. That will be how we get payment for writing/maintaining the system. We can allow using-sites the additional option to opt-in for their other ad-placements to go through our network (the ad tool above) which would let them sell the space with little effort, and should help them make revenue more easily. We would take a relatively small cut of these revenues (we need to make sure they're still earning enough $$ to cover their hosting fees & time). This is one of those projects that's hard to justify, but I can require of it that it gives certain returns... ie: that it has a certain growth rate or something. Linear at first and exponential (even if it's a low exponent) after the social tools are beefed up. TODO: (there is a lot to do, but this is just for things I'm afraid I'll forget) Go through and find all instances of "getSite(false)" and replace the appropriate ones with a getSiteName() function (which should be portable). NOTE: I don't really see what I was going for there. Maybe just because it's so slow in its current form to chop up the url every time the function is called? getSiteName() doesn't exist yet. Add a link to the footer for a copyright page & have a DMCA notice there with the DMCA info as a slightly noisy image (to prevent OCR). Add images (or at least thumbnailed versions) to the RSS feed. Make the RSS feature more noticable (link to it in various places with the icon & make sure it auto-detects). The age settings are easy to forget to do. There should be an easy way to manage them and a very visible place that indicates that there are X number of images still needing identification. Easy deployment system: - SVN-up on pushing system. - SVN-export to a /push_to_live_site/ directory (this will remove all of the .svn directories from the push) - SSH the files from /push_to_live_site/ to the deployment server. - Run /SETUP/conversion.sql (if there are any lines which aren't commented out and have non-whitespace characters on them... so if the file content matches /(^|\n)\s*[^#]/s). - Comment out any uncommented lines from conversion.sql and put a line at the end of the file with the timestamp of when the file was just run.