Cedar Rapids Online

a web application by Trevis Rothwell


Quick Links

Background Information

Much of what I know about building web applications I learned from Philip Greenspun's instructional materials. To execute on what I learned, I decided to build an online learning community website for residents of Cedar Rapids, Iowa. I originally built it using Python and PostgreSQL, running directly on top of the mod_python Apache module. Unfortunately, either there was very little interest on the web for a Cedar Rapids online learning community, or I did a woeful job of marketing my project. Maybe a little of both. In any event, after it became clear that the vast majority of registered users were Russian spammers, I shut the site down.

However, even if the site was not a commercial success, it was still an example of the kind of work I can do, so I eventually decided to dust it off, polish it up, and unleash it as part of my project portfolio. I spent about a week of evenings recoding the application to run in the CherryPy web framework, and released the source code under the GNU Affero GPL. It could still stand some code refactoring and other miscellaneous improvements, but I'm not really interested in running it as a real user-facing website right now, and have mostly moved on to other projects for the time being.

The remainder of this document explains the software architecture and some design decisions from the point of view of getting ready for real users.

Design Goals

This project is a traditional online learning community website, with the target audience of residents and potential future residents of Cedar Rapids, Iowa. The key features are:

Apart from building the software, this project also requires magnet content in the form of articles (ideally with some pertinent photography).

Implementation

The Big Picture

The User Interface

Data Model

There are five tables in the data model:

Article replies are stored as articles with a non-null "refers_to" field pointing to the parent article. Discussion replies are stored with a non-null "refers_to" field pointing to the parent discussion. The discussion categories table is currently unused; when an online community is young, it's better to not segregate users into discussion categories, but rather keep all discussions together so people can find each other. As the community grows, discussion categories may be implemented.

The SQL tables are written in PostgreSQL format, and are viewable (and documented in more detail) in the code repository.

Future Directions

The existing design should be a fairly robust online learning community system. This is not a research project; online communities have existed since the mid-1990's, and much has been tried and either proven successful or failed. Any changes that need to be made in this particular online community will have to be determined based on usage.

License

The software is licensed under the GNU Affero GPL.

References


tjr@acm.org