indyvoter.org functional spec

[revision history]
[blog for feedback]
[jump to indyvoter document home]

Welcome to the Functional Spec
This 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 Administration
  • Tentative Platform: FreeBSD, MySql or Postgres, Apache, mod_perl, cvs
  • handle what transaction load? what user load? what server farm architecture?
  • what hardware requirements?
Site Security Model/Policy
  • how can users stay safe
  • how can the system retain integrity
  • public key exchange built in
State of the Network Admin Module
  • 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
Tracking and Stats
  • tracking typical user usage
  • tracking meme introduction and listing activity
Login Module
  • authentication realms
  • reset passwords by email address
  • areas that require login
External Datasource Interfaces
  • voterfiles, etc
  • how to hook into our databases

User FrontEnd

Personal Profile
  • Schema
    User AttributesDescription
    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
Friend of a Friend Relationship Network
  • 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
Search Engine/Directory Listing
  • 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 Module
  • can create arbitrary blogs for personal/community-
  • exportable optional "window" for FOAF's personal/community blogs
Calendar Module
  • Schema:
    Event AttributesDescription
    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
Listing 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
Library Module
  • community and personal
  • media storage
  • librarian system
  • access control to non-community members
Tracking Module
  • user can track most reposted, most interesting issues
  • within degrees of separation or systemwide

Community Specific Tools

Tools Interface
  • architecture for plugging tool modules into community
  • access to non-community members
Email Portal
  • email portal for listings/digests
  • emailing campaign tools
  • maintaining email list for spam blasts
Shift Assignment Module
  • calendar for communities, events
  • community members sign up for shifts
Resource Pooling Module
  • Schema
    Resource AttributesDescription
    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
News Headline Module
  • searchable keywords input
  • approve/authorize publication of headline/url harvested from google
  • manual headline/url entry
Interactive Chat Module
  • hook up with IM chatrooms
Decision Support 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
Map Visualization 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
Walking List, Phone List Module
  • productivity, checkoffs, visualization maps
Fundraising Module
  • current fundraising info
  • email updates
  • link to paypal or other online payment

Feedback BLOG
Name: Email:
Affiliation: Home page URL:
Feedback/Comments:

[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 PST
cool 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 PST
user 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 PST
add 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 PST
Backend/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 History
2004.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