ZAT Functional Specification

Draft: 18 May 2006

Introduction

ZAT (Z to A Travel) is a Website for travel planning and sharing. Zat makes it easy to find and organize travel-related information on the Web, to create new information, and share it with others.

Entities

User

There are three kinds of users: unregistered, registered, and admin.

Anyone can go to Zat and use it to look up information. This kind of user is unregistered. It is expected that the vast majority of users will be unregistered.

In order to enter information into Zat, including voting, the user must register and sign-in. The goal is to make registration as simple and quick as possible, and to delay sign-in as long as possible. For example, a registered user might often use Zat as an unregistered user, but if they try to enter or change any information, Zat will ask them to sign in.

An admin user is a trusted user that has extra powers, which let them make administrative changes to Zat. No one can sign up to be an admin user – they must be created especially by us. For example, “wm” will be an admin user. In the future, we may have different kinds of admin users with different authorizations and powers.

A registered user can allow Zat to “remember them”. This sets a cookie on their browser so the site knows who they are the next time they visit Zat.

At its simplest, a registered user is just an email address that identifies the user. A user can optionally add additional information into a “profile” associated with their email address. This profile can contain a “handle” (name used to identify the user on the site), a small photo (say 50 by 50 pixels), and some preferences. The user can also have friends and groups associated with them.

If a user creates any Lists, Routes, or Trips, these are associated with their email address.

Place

A place can be a specific location, or tied to an area. For example, a place can be a restaurant, or a park, or any location. Or a Place can be a country (USA), a state (Oregon), a region (Pacific Northwest, Columbia Gorge) or a continent (North America).

A Place has a rating of zero to five stars. The stars have meanings as follows: Zero = unrated, one = terrible, two = poor, three = ok, four = good, five = excellent.

A Place can have comments.

A Place can have multiple Entries.

Entry

An Entry is a link to a website. Any registered user can submit an Entry to Zat. The following design uses a similar method to del.icio.us for creating new entries (a JavaScript bookmarklet), but it must be possible to create an entry manually.

An Entry has the following required fields:

  1. URL. The URL of the website for this entry. Filled in automatically if you use the JavaScript bookmarklet.

  2. Name. The name of the site. Filled in automatically from the Web page title if you use the JavaScript bookmarklet.

  3. Location. The physically location associated with the website. A location can be either a specific location (latitude and longitude), or it can be an area (a country, city, region, continent, etc.). Initially, the allowable Areas will be predefined by us, although in the future we should allow users to create areas. A specific location should be able to be specified by pointing to a map or by entering a street address.

  4. Category. The kind of site. For example: restaurant, lodging, walk/hike, sight, attraction, etc. Initially, the set of categories will be predefined by us, although we might want to allow user defined categories in the future. An entry can have more than one category.

  5. Date. The date the entry was made (or updated). Filled in automatically.

  6. User. The user who created the entry. Filled in automatically.

An Entry can also have the following optional fields:

  1. Description. A short, one line description of the site.

  2. Site Rating of zero to five stars. The stars have meanings as follows: Zero = unrated, one = terrible, two = poor, three = ok, four = good, five = excellent. This is the rating of the website, not of the Place described by the website.

  3. Tags. A set of user defined tags. Would be nice to use a tagging scheme like del.icio.us or Flickr. Would also be good to support “ratags” (see blog).

We might want to store the following optional information with an Entry:

  1. Cost of the thing described by the site (e.g., free, budget, moderate, top-end).

  2. Email address of the thing described by the site.

  3. Phone number of the thing described by the site.

  4. Flags. A flag has three states: unflagged, flagged positive and flagged negative. Flags can be associated with Groups.

An Entry can have a number of comments added to it. Comments are usually added to an Entry later on, however, it should be easy to add a comment when the Entry is created. A comment can have a single link (URL) associated with it. This link can be used to point to a photo, or to an arbitrary website. A comment also stores its creation date, and the user who created the comment. In the future, we should store ratings for comments (“did you find this comment helpful?”).

In addition to leaving comments on an entry, a (registered) user can report problems on an existing entry::

  1. inappropriate, spam, lame

  2. closed, gone, old information

  3. moved to new location

  4. bad link

  5. needs update

  6. duplicate entry

  7. other mistake or problem

The user who originally creates an Entry can add a comment to the Entry and give it a Rating. Other users can later add additional comments, or assign their own ratings to the Entry. Zat keeps track of each user's ratings. If a user has not given a rating, then they see the average rating given by all the other users.

Lists, Routes, and Trips

A user can create Lists, Routes, and Trips. Each user can define as many Lists, Routes, and Trips as they want. Each one can be private (accessible only to the user), shared (accessible to a set of Friends or Groups specified by the user) or public (accessible by anyone). The default is public.

Lists are sets of Places. Each Place knows what lists it is a part of. When a Place is added to a List, the user who is defining the List can create a comment for that Place. This comment (if the list is public) is treated as a normal comment for the Place, but it is marked as being part of a List.

A list can be ordered or unordered.

A List has a Name, a Description, and a set of tags.

For example: User cindy could have a list of her favorite knitting stores in New Zealand, or wm could have a list of his favorite art museums in Europe, or favorite scuba diving sites in the world.

Lists can also be used similarly to the way del.icio.us is used to organize bookmarks. For example, if I am planning on a trip to England, I can create a List that acts like a set of bookmarks for me. Then, as I am searching websites on the web, I can add these to my list. As I add websites, they also get added to Zat as Entries for others to use (if they are not already in Zat).

A Route is a path in space. For example, a scenic drive, a train ride, a hike, or a combination of them. A user can display a map with one or more Routes displayed on it. A Route can also be created from an ordered List (as long as the Entries have specific locations).

An Trip is a combination of a Route and a List, with (optionally) dates (and times) assigned to each Entry in the List. Dates can be absolute (4 July 2006) or relative (noon, day 5). A user can use a Trip to plan a trip, keep track of a trip already taken, or let friends watch your progress during a trip. It should be easy to create a Trip from an existing Favorites List.

A travel agent can also create a Trip to describe a package tour, or a trip for an individual client. This will let a client see photos and websites for the sights they will be seeing, the hotels where they will be staying, etc.

Common Actions

Spatial Searching

Using a map to locate Entries. Each Entry is indicated by a small “flag” on the map. When the user clicks on the flag, a summary of information about that Entry is displayed. The summary includes the Name of the Entry, which is also a link to the URL for the Entry; an icon indicating the Category of the Entry, the Description, Rating and Tags. The summary also contains a link to display all information about an Entry, including its creation/update date, user, comments, what Lists to which it belongs, etc.

The user can choose which categories of Entries to display on the map. The user can also set a maximum number of Entries to be displayed, based on the ratings of each Entry. If we store Tags, Cost, and Flags, then the user can use these to choose which Entries to display.

For example, “display the top 50 kid-friendly hotels”

Regular Searching

Search based on keywords, tags, etc.

Area Searching

Finding Entries associated with an area, such as a country, city, or region. This may be combined with Regular searching.

Registering

Should be as easy as possible. Initially, just defined by their email address and a password. Eventually, we will need to have a validation scheme which sends them an email containing a link for them to click on to validate their registration (to make sure they are using a real email address).

Editing your Profile

Defining Friends

Send an invitation to someone to become your friend. Can only be done if you already know their email address, or if they have specified that anyone can send them a message. The friend relationship is reflexive (if I am your friend, then you are also my friend).

Creating an Entry

Should utilize a capcha to make sure they are a real human (a capcha is a typically distorted image containing a set of letters and numbers which the user types in).

Voting (assigning a rating to an Entry)



Adding a comment to an Entry

Use a capcha for this, too.

Reporting a problem with an Entry



Creating a List



Editing a List

Creating a Route

Can be done by drawing on a map, or from a List

Editing a Route

Creating a Trip

Editing a Trip

Sending Messages

A user can specify in their profile whether or not they want to be able to receive messages. Possible settings are: from nobody, only from Zat, only from Friends, or from anyone.

When you see an Entry or a comment, you can send a message to the user who created that Entry or comment: if they accept messages from friends, and you are their friend, or if they accept messages from anyone.

You type the message into a web page, and the system forwards it to their email address. Email addresses are never displayed to anyone on the site.

If the person you are sending the message to is not already your friend, you can invite them to become your friend when you send the message. The message then will also contain a link they can click on to accept the invitation.

Viewing Lists, Routes, and Trips

Should be able to search for them.