More group stuff.

Display list of members on group page. Rudimentary (read - hideous) UI
for users to join and leave groups.  Fix redirect on logout (use most
recent URL, not index).
Add & remove photos from a group.

Draw a list of all photos in a group on the group's lading page.  Add
some terrible but functional UI to add & remove photos from a group
you're a member of.  Fix the 'Also in' section on the photo page.
Hook up PM unread status.

Mark new messages as unread in inbox, and as read once read. Show unread
PM count in nav bar.
Don't try adding non-existent photos to a group.
Start migrating from sqlite to mysql & RDS.
Wrong db name in previous commit.
Clean up photo index page. Add user index page.
Add mysql-python requirement.
Add a few more words to the about page.
Temp hack to populate mysql db.
Another attempt to populate mysql db.  PAIN!
Simple, ugly group creation UI.

Simple UI to let users create a group.  Choose a name, url (short name),
description and rules, and you're done.  As usual, it's ugly but
functional.
Some very ugly code to toggle add / remove contact button.
Add list of sent messages to PM index.
Refactor photo upload and storage layout.

Move photo file save & naming into Photo class.  Use uuids for photo
file names.  Use 3 levels of directories, defined by each of the first
three characters in the uuid (so a0f3b9.jpg -> /a/0/f/a0f3b9.jpg).  This
gives a max of 4k directories, each holding < 10k photos, assuming a max
of 40M photos and uniform uuid distribution.   All this in prep for
moving image store to S3.
Add a rudimentary yet easy to use Production / Development config switch.

Now have a spot to store S3 URLs and config info.  Another step.
Small tweaks.

Add 'PRODUCTION' flag to config.  A wild breakpoint appears!  Kill it.
Move group back link.
Add UI and backend for deleting photos.
Add S3 connection info to config.
Ensure log path exists before using it.