Forust is a website fostering web page creation and development through simplistic input controls, strong URL permanence, and clean XHTML output.
Anyone can go to forust.com, type stuff in a box, upload some file, and click a button to publish it for everyone to see and append to.
Firstly we need to be able to create, add to, and view pages. A couple of details here: creating S3 direct-upload form, handling S3 upload-success-redirect to create the page object, base code structure for accepting a command (treating website as a service) and rendering output, downloading attachments from S3 and proxying them via a simple command (foo.html?a=number/name). Text is limited to whatever can fit in the “f0″ meta tag and attachments can only be images up to 5mb in size.
What would content be these days without recourse to compliment or denounce it? Comments will be the first leaf feature, so this exercises not only another form of input and page data, but also underlying structure.
How do you login and keep session data? My plan is to rely initially on either Gdata (Google) or Open ID and track with standard PHP sessions. Anonymous users, with cookies enabled, will get a long-lived session for temporary authorship. On the site-front this means a form for logging in/out and a “public terminal” / “remember me” checkbox.
Gotta put a stop to anon-power-users at this point with the introduction of moderator status, a tool for managing who is a moderator (for admins), and also admins themselves. Moderators are stored in a PHP-writable data file whereas Administrators are specified in the site configuration (a private PHP file). Tools available to moderators: flagging/hiding pages or comments (reason must be given, from an enum), categorizing new pages, and listing uncategorized pages. Administrators can do all that as well as permanently remove content (but not the URL) give a page a new URL anytime. Note that neither have permission to change content, which brings us to …
If you wrote it, then it’s yours and your responsibility. Even anonymous users (assuming they have cookies enabled) retain authorship of their articles for a time. This stage adds an “author” leaf to pages which gives that person the ability to control follow-up contributions, lock out SE’s (so they can display it on their own site without competing), specify a forward link which is displayed but not automatically used, mark a page as public/private (latter is never categorized, not shown in unmoderated pages list), and remove/edit content (change text, re-upload attachment). Edits are not allowed after comments are made against the current segments, otherwise they lose their context.
Sure there’s a lot of content, but is it good content? I have a hard time with ratings, because I feel in general they are done poorly and end up skewing the perception of quality. Amazon is one of the few sites which does ratings “ok”, but I just don’t believe in star ratings. The idea here will be more about customization: you can up vote / star / favorite items you really like. Alternatively you can “delete” (down vote) ones you don’t. The data will be collated later into something more useful, but in the interim it will help you ignore things you don’t want to see/read. Also, I want the ability for visitors to suggest a page’s category (especially on new pages).
You may recall from the first stage that only images are supported, but video is a huge reason for me to put this site together. In this stage I’ll increase the upload limit, the supported formats, write the player scripts (WMP, QuickTime, Flash), and come up with a way to specify embedded videos (a la YouTube).
I’ll have to pull out my rusty MySQL at this point to store every tiny action that occurs. The logs provide some information for general page views, but I’d like to track more navigation to determine “human views”, popularity, and quality (do the vistors scroll through the entire page, etc.). This stage is very ethereal, and I might end up replacing it with something more concrete… it seemed like a good idea, but now I’m wondering if better site structure / design should take precedence.
Things are bound to get out of sync, so I’ll need to write a CRON job for scanning the pile of objects: site map, list orphans, invalid objects, corrupt page object, find errors in web server logs, and generate report(s) for these things.
All this hippy shit is fine and dandy, but the world isn’t as clean as that. At this final stage in initial development, I’ll explore methods of turning the tide on bots, scammers, phishermen, etc. The primary idea behind this is to allow the flow, but not to give it as much credit or consideration. Out of site, out of mind!