Tuesday, June 16, 2009

Designing The Site

It's time to take a step back, now that we've gotten a set of tools in place to allow a user to log in and to allow us to write templates for dynamic web pages.

We need to decide what features we want on the site. What pages will there be, what links will be on the pages, etc. Doing a rough design now will make things move much faster in the next steps.

A web designer might work through this by actually designing web pages. I'm not a web designer, so I'm going to do it by thinking about the different ways people might use the site, and then just listing out the functionality that each page should have.

If you remember, the project I'm doing will be a community events site. I've generalized it a bit since that post, into more of a community portal. That allows me to add lists of recommended restaurants, etc, not just events.

People will be able to use the site either as a guest, or logged in. Some features will only be available to logged in users. I'll mark those features with (*) in the lists below.

Now keep in mind that this is an initial design of the site. I reserve the right to change this around at any point during future development, if it seems like a good idea. Designs are absolutely necessary for organizing your thoughts...but don't let them become straitjackets.

Front Page

First time visitors to the site need a brief explanation of what it is, while returning visitors probably want to see a list of upcoming events (or other recent activity on the site).

The features I'd want on the front page include: list of recent activity (this will be generated dynamically), a Sign In link, a Sign Out link (*), an Edit Profile link (*), a Create Event link (*), a Create Recommendation link (*), a Create Group link (*), an Events link, a Recommendations link, a Groups link, and a Members link.

There will be more eventually, but right now those are the main ones. Groups will represent organization in the community...churches, schools, businesses, government offices, etc.

The Members link will go to a list of members and the ability to view their profiles.

Edit Profile Page

This allows the logged in users to edit their profile information. I don't really know yet what all profile information I'll have, so for now this will just be the user's Name.

Create Event Page

This page will allow a logged in user to create a new event. Some of the info that will be needed: event name, description, time, date, location, and group affiliations. Maybe more later, but that's enough for now.

The location will allow us to generate maps to the event, and the location and date/time will allow us to pick up weather forecasts for the event.

Eventually we might want to categorize events based on age range, cost, etc, to allow users to search on those fields. But we'll save that for later.

Events Page

This page will list the most recent events, and allow browsing/searching events. A logged in user will be able to mark themselves as attending an event.

Recommendations Page

This page will list the most recent recommendations, and allow browsing/searching recommendations.

Groups Page

Allows the user to browse groups and join them.

Members Page

Allows the user to browse member profiles. Might need to be logged in for this, for privacy reasons.

Create Recommendation Page

Allows the logged in user to create a new recommendation. We need a good search algorithm to make sure we don't get duplicate recommendations (e.g. one for "Johnsons" and one for "Johnson's".

Create Group Page

Allows the logged in user to create a new group. Need the group name, description, address, etc.

That's enough to get started. The next several posts will deal with creating FreeMarker templates for those pages and designing the data model needed for each. By the time we're done with this we'll have a much better idea of what entities we'll need in the datastore.

9 comments:

  1. One area your course might want to cover is Grails Services. Yes, GWT has RPC services, but my preference is for business logic to be separate from the controllers, and Grails Services should help that. They also provide transactional support for multi-record changes.

    ReplyDelete
  2. Do you have sample code for this GWT+RPX project?

    ReplyDelete
  3. Tom, thanks for the suggestion! I don't know if we'll get to it or not. The course is an experiment, so we'll see how quickly or slowly the students get through the material.

    Mike, I have code hosted at XP-Dev.com, but don't have public checkouts (I want the students to struggle with implementing the code so they'll learn). But if you have or get an account there, let me know your login id and I'll give you read access.

    ReplyDelete
  4. I asked for sample code before I realized that this entire blog walks you through the development process! I have a working system, but I wouldn't mind seeing your solution as well. I have also added in Amazon S3 support for storing (large) files, as an exercise. My xp-dev.com username is "mstringham". Thanks!

    ReplyDelete
  5. You should see the project now, probably under "Permissions Projects" on the right after you log in.

    ReplyDelete
  6. Hello Jay, Do you have sample code for this GWT, GAW, RPX project? It would be very helpful for me to see your solution.
    My xp-dev.com username is "fouadomri". Thanks a lot!

    ReplyDelete
  7. Hi Fouad, it probably won't happen immediately, but I'll get you access sometime this week. Keep in mind the code started out as a working project, but then morphed into showing specific techniques. So consider it to be just a starting point, nothing more.

    ReplyDelete
  8. Hi Jay, that would be very helful for me. Thanks a lot. I'm new to xp-dev.com, will i find a notification on my Dashboard?

    ReplyDelete
  9. You should see it in your list of projects now.

    ReplyDelete