[revision history]
[blog for feedback]
[jump to indyvoter document home]
Welcome to the Functional SpecThis document describes feature by feature how the software infrastructure behind indyvoter.org will accomplish the goals set out in the Requirements Document, a pre-requisite for understanding this document. This document does not cover:
- How to market indyvoter.org to users to build communities
- How to make stakeholders/activists aware of indyvoter.org's tools
- Increasing awareness through leveraging participation of non-profits and campaigns
Backend
Databases, Web Server, Source Control AdministrationSite Security Model/Policy
- Tentative Platform: FreeBSD, MySql or Postgres, Apache, mod_perl, cvs
- handle what transaction load? what user load? what server farm architecture?
- what hardware requirements?
State of the Network Admin Module
- how can users stay safe
- how can the system retain integrity
- public key exchange built in
Tracking and Stats
- how do we know what the system is doing
- how much are different components being used
- why is the system doing what it's doing- slowing down, speeding up
Login Module
- tracking typical user usage
- tracking meme introduction and listing activity
External Datasource Interfaces
- authentication realms
- reset passwords by email address
- areas that require login
- voterfiles, etc
- how to hook into our databases
User FrontEnd
Personal ProfileFriend of a Friend Relationship Network
- Schema
User Attributes Description First, Last Name Text Email Address Text, Public? Mailing Address Text, Public? Zip Code Number, Public? Contact Info Text, Public? Values, Interests, Movies, Music, Books Text, Public? Photos BLOB urls Anonymity Degree Visibility Degree Separation Degree Personal Details Dropdowns, Text, Public? Professional Details Dropdowns, Text, Public? Historical Details Dropdowns, Text, Public? Languages English, Spanish, Etc- Read/Write/Speak Link into Voterfile? Optional, Requires Name, Address, "other info" - Interfaces to Set Attributes
- Page: First Signup
- Page: Modify Your Profile
- Interfaces to Get Attributes
- Page: View Your Profile
- Page: View User's Profile
Search Engine/Directory Listing
- Develop a method for storing a map of social networks
- Interfaces to Set Maps
- Update map with addition of new friend
- Update map with new user preferences degree of separation, visibility, anonymity
- Interfaces to Get Maps
- Return path between two user ids
- Return a user id's friends network with arbitrary radius
- To Think About:
- Advogato Certification of social networks
- Setting communities as friends
- Develop a caching, indexed raw text search engine
- Interfaces to Set Engine Search Data
- Maintain keyword database
- Rerun indices and update cache
- Interfaces to Get Engine Search Data
- Given name, email address, locale w/ radius, or raw text: return set of matching user ids.
- Given a network of people, raw text, or a category: return set of documents that match.
- Given a community, raw text, or category: return community asset documents that match.
- Given a directory category, return related clusters of communities that match.
Common FrontEnd Modules
Indexable Blog ModuleCalendar Module
- can create arbitrary blogs for personal/community-
- exportable optional "window" for FOAF's personal/community blogs
Listing Module
- Schema:
Event Attributes Description Event Title Text Event Description Text Event Owner User or Community ID When Date & Time Type fundraising, rally, strategy, visibility, etc Event Venue Text Event Location Address Private or Public? Yes/No Media Album Link to media album for event pics, video, documents Resources Needed Resource Pool Event Blog Yes/No, link to Blog Document Maximum Attendence Number Recurring Event Yes/No RSVP Functionality Yes/No RSVP Invitees User Set RSVP Status of Invitees User Set RSVP Invitation Text RSVP Reminders Date & Time RSVP Guest Counts Number RSVP Deadline Date & Time - Interface to Set Calendar Data
- Create Event Page
- Modify Event Page
- Create RSVP Page
- Invite RSVP Page
- Interface to Get Calendar Data
- User, Community Profile Page listings: 3 or 4 entries with: date, title, owner, type, location
- View Event Page
- Big Calendar Page
2 months calendar display 20 or 30 next events listed chronologically date, title, owner, type, location, venue, description, # of confirmed attendees [sort by date, type, location, # of confirmed attendess (popularity)] link to view/modify page
- Things to Think About:
- can create multiple calendars, special purposes for events, colorings
- Meetup-style nationwide coordinated events
Library Module
- common listing areas, ability to make new listing areas within community
- any listing can have user comments added to bottom
- crossposting/propagation of listing to other areas
- track memes with "repost count", color change of listing
- option to only see or color comments from people in your network
Tracking Module
- community and personal
- media storage
- librarian system
- access control to non-community members
- user can track most reposted, most interesting issues
- within degrees of separation or systemwide
Community Specific Tools
Tools InterfaceEmail Portal
- architecture for plugging tool modules into community
- access to non-community members
Shift Assignment Module
- email portal for listings/digests
- emailing campaign tools
- maintaining email list for spam blasts
Resource Pooling Module
- calendar for communities, events
- community members sign up for shifts
News Headline Module
- Schema
Resource Attributes Description Resource Type Skill, Time, Money, Resource Description Text Pre-Requisite Money, Time: (number), Skills, Resource: (text) Location Zip Code - Interface to Set Resource
- Adding a resource
- Setting its type (Skill, Time, Money Resource
- Setting its location if applicable
- Classifying a resource against a category taxonomy
- Adding to and altering the taxonomy itself (in initial stages, later only as an admin function?)
- Attaching a resource to a person
- Offering and attaching a resource to a community
- Adding a need for a resource to a community
- Adding a need for a resource to a person
- Adding a need for a resource to an event
- Adding prerequisites or dependencies (other resources, perhaps tasks having been completed, money) to a resource
- Interface to Get Resource
- Listing the resources provided by a person, a network of people, or a community
- Browsing available resources (in a category, in a location)
- Making a request for a resource
- Being notified about resource requests that have just been fulfilled
- Finding and fulfilling a community's need for a resource
- Suggest matches and solutions based on who-wants, who-has
- Analysing 'dependency paths' for resources in an attempt to suggest priorities
Interactive Chat Module
- searchable keywords input
- approve/authorize publication of headline/url harvested from google
- manual headline/url entry
Decision Support Module
- hook up with IM chatrooms
Map Visualization Module
- Develop a tasks and tactics in a community
- Interface to Get Tasks
- Get outstanding tasks or 'action items' for the community, optionally filtered by status, priority or date
- See 'bottom-lining' of tasks by different people in the network
- Output of spatially-oriented tasks to pipe into mapping module
- Interface to Set Tasks
- Create new tasks for the members of a campaign, annotate them with properties like location
- Allocate status and priority to tasks
- Add 'bottom-lining' person to a task
- Interface to Get Decisions
- Get outstanding decisions needed to be taken to create potential tasks (maybe filtered by status) - dependency reporting
- Suggest decision priorities based either on human input or simple reasoning - e.g. spatial prioritisation, similarity to previous decisions, planner algorithms
- Interface to Set Decisions
- Accept votes on carrying out tasks
- Compute status of different tasks
- Override status or priority of particular tasks
- Setting dependencies on resources
- Setting dependencies on other decisions
- To Think About:
- Connecting decision support to resource pooling/sharing
- Tactical software? - e.g. poll purging, more mapping, suggesting priorities.
- Temporary communication groups like precinct captains + district captains
Walking List, Phone List Module
- Setting Map Parameters
- Fetch points or shapes from community asset libraries or user-uploaded data (GPS tracks, etc)
- Import raster bitmaps, ESRI shape files, CSV, or Excel from government or other sources
- Mapping arbitrary community attributes (resource location, user location, other data)
- Getting Maps and Map Data
- Geocode street addresses with lat/long (census bureau data)
- Plot various kinds of voter/demographic data for different shapes (e.g. zip codes, precinct boundaries)
- Render maps to JPEG, SVG or Flash
- To Think About
- Visual map annotation with Flash
Fundraising Module
- productivity, checkoffs, visualization maps
- current fundraising info
- email updates
- link to paypal or other online payment
Feedback BLOG[67.124.119.123] at Fri Mar 5 12:31:40 2004 PST
[65.54.188.20] at Mon Feb 9 06:49:37 2004 PST
[69.22.154.75] at Fri Jan 16 15:46:42 2004 PST
marc from indyvoter [68.165.173.24] at Thu Jan 8 13:09:18 2004 PSTcool adam thanks for that clarification we'll update spec to say that..
adam from indyvoter [63.187.232.151] at Wed Jan 7 18:51:01 2004 PSTuser front end schema - "link to voterfile?" says requires SSN - by which i assume you mean social security number, but voterfile matching doesn't require this (voterfile info is public info and doesn't include ssn.) if i'm reading this wrong, let me know. you can get a good voterfile match with just name and address, and a less than perfect match with name and some lesser info.
seth walker from indyvoter.org [69.3.26.174] at Sat Jan 3 19:22:18 2004 PSTadd text messaging to cell phone for RSS feeds with Schuyler's Matt Gonzalez code
Eddie from da League [69.17.48.184] at Fri Jan 2 02:36:08 2004 PSTBackend/state of network admin: How are things breaking? Identify/follow up on potential problem areas. Tracking & stats: Geographically how is the system being utilized? What pieces/listings/communities are most active where? GIS/Map snapshopt of activity User frontend/personal profile: Personal resources I can provide (car, venue, printing, free postage, time) Skills I've got (public speaking, fundraising, flyer making, design) Core issues I identify with or am passionate about Search/directory: Search on tactics, campaigns, location Common frontend modules/blog module: Trackback ? Library module: Timelines for history of issues, campaigns ? Tracking module: Track most interesting tactics, campaigns also Blog hits to issues, tactics, campaigns Community specific tools/shift assignment: See what shifts are needed and who has filled shifts Check ivan@420.am code
Revision History2004.01.02.1500 - marc powell - added schema charts to calendar, resource pooling features, clarified arbitrary datafor mapping feature 2004.01.02.0200 - eddie codel - calendar/event feature 2004.01.02.0100 - schuyler erle - map visualization feature 2004.01.02.0100 - jo walsh - resource pooling, decision support features 2004.01.01.1900 - marc powell - dev platform, personal profile, FOAF, search engine features 2003.12.29.0000 - marc powell - skeletal version