I'll even lay out the goal requirements for the chess program (non-JGO members of course would be welcome to play in tournaments, as far as I'm concerned):
0) Completely server-verfied movement to prevent cheating
1) In-client tournament registration, as well as server-monitored non-tournament play
2) Integrated clock with choice of timings (e.g. minutes per game, moves per minute, minutes per move, Fischer Time), which also plays an "It's your turn" sound.
3) "Skinnable" 2D chess set interface
4) "Last move" indicators - some kind of marking showing the last move played
5) Display list of moves, with choice of chess notation on client side
6) Avatar support - including the ability to link directly to your JGO avatar, or at least to a URL image (automatically scaled to a certain size)
7) Chat support
8 ) Save/replay game option.
9) FIDE/USCF/CXR optional rating tracking (stored on server)
10) Easy resizing/rotation of board
11) Display of captured pieces by showing icons of captured pieces, or material lost/remaining material
12) Storage of replays of final and semi-final tournament games with date/time and player notes
13) Allow spectators to watch games, and chat in their own channel - always giving priority to game-related messages
14) Automatically kill/ban any connection from an IP address trying to flood the server for the duration of the game - if it's coming from a player's IP address, they automatically forfeit the game, for example (probably overkill)
15) Customizable tournament play options
16) Anything else people want to add. Support for 3D is kinda cool, but it's anti-productive as 2D would be extremely easy to code, and much easier for people to develop skins for.
You might ask, "How can #14 be implemented? Can't a person just keep attempting to connect to the server to flood it's connection?" Well, first of all, this is a very low bandwidth project in the first place, and I don't really think anyone will be attempting a DOS attack on a chess game server. But, for example, the actual game could be run on a player-to-player peer network, each client validating each other's moves, with the game results uploaded to the statistics server. Meanwhile the spectators see the game from a "display" server - which collects movement messages from the game, and spits them out to the spectators, so the spectators are actually watching the game "second hand", and are not direct members of the peer network.