oSMo (oSocial Mojolicious) is a framework writen over Mojolicious, extending Mojolicious with the functionality need to implement simple and fast a social website.
I know, I know - I will get there.
=head2 So Far
So far oSMo is mostly adding functionality to Mojolicious, assuming some basic functionality will be used most of the time. The basic infrastructure for authentication and logging as described in the edeas below is already in place, even if most of the final implementations are not yet final.
At this point oSMo makes it really easy to create sites that use bootstrap as a design framework, but it doesn't need to be used and can be easily replaced by creating a small set of templates in your app that you'ld need to create anyway with Mojolicious.
In theory everything you can do with Mojo should work with oSMo, and you get a few new things.
=head2 Working already
=item Templates and Themes
Mojolicious template system is really nice, and the only change made on it was the support for themes - sometimes you may want to make a website that used different themes for different - the only condition is that when you get to the rendering the themes is already defined, the conditions you use to define your themes are your problem.
oSMo will look for the right template first in the theme directory and then in the main templates directory. The themes may also have their special version of the public files - if your theme only need a different css file, it may only have the new css, with the same name as the file in the main public directory, and that it, you have a new look for your site.
oSMo, with auth activated, adds some helpers, conditions and predefined routes to your Mojo website.
oSMo adds the helpers authed(), anonymous(), user_can('permission') and auth_form() - this can be used in your controlers or templates.
oSMo also adds the conditions authed_user, anonym_user and user_can conditions, that you can use when defining your routes.
=item base routes
But you can also use $app->auth->anonymous_routes or $app->auth->authed_routes as base for your routes for anonymous or authenticated users.
oSMo::Auth is also plugable, and you can define your own authentication plugins for it. Unless you need a register page, you don't even need to create any page to make your authentication work - just a list of fields you need on login and a check_user method to verify the credential.
Some Authentication systems may need some more complex logic - and it's part of the plan to support oAuth, Open ID, Facebook and some others on the framework itself.
=item Menus and Snippets
Most website have menus, and often enough we need to add small snippets of html/js/css to our pages depending on conditions - and that shouldn't mean we need a completly new template to have those. oSMo have support to define both.
=item Form Validation
Validating forms is always needed - this is still a WIP, but the bases for it are already here.
Because it was needed for the Email Registering and Authentication, and most sites like to send emails - if nothing else from the contact us form to the site owner.
Because sessions should be server side - I think, not client side. We just send a session Id to the user, taking advantage of Mojo::Session, and keep everything else server side.
=item Task Queueing
oSMo implements a plugable task queueing and execution mechanism, plugable in a similar way as most parts of Mojolicious are. Execution of tasks on the cleanup phase of the request, using a MySQL table and using a message queue system (RabbitMQ).
=item Message Broadcast
oSocial is a decentralized social protocol, and that means that most of the applications using it will need to broadcast messages to other oSocial nodes.
=item User Authentication
oSMo implements a plugable authentication engine, and some basic authication plugins, including email+password and oSocial.
Mojolicious log system was designed for developement more than for production. It allow for quick debuging, and to automatically disable the logs in the production systems.
But if that is specially good when creating a small system, sometimes a lot more than that is needed. oSMo replaces the Mojolicious log system with its own, in order to add a few more functionalities to it, and make it more pluggable on how the log are saved and what gets logged.
Because if your site gets interesting, it will most likely need it.
=head2 Getting Started