24c3d666f911899fd1aa92d64e377f3201194e8d
[oweals/finalsclub.git] / README.md
1
2 # Finals Club (FC)
3
4 This is the source code repository for [finalsclub.org](http://finalsclub.org/).
5
6 FC is a 501(c)(3) non-profit open education project dedicated to
7 helping college students collaborate, learn, and share their knowledge freely online.
8
9
10 # Installing
11
12 Requirements:
13
14 - Linux server (circa 2011)
15 - Node.js (Version 0.4.10 or later)
16 - MongoDB (Version  1.8.2 or later)
17
18
19
20 # Infrastructure
21
22 The FC servers run in the cloud on Linux servers, using Amazon Web Services (AWS).
23 Scaling is accomplished by adding additional servers to a load balancer.
24
25 NOTE: The scaling system is automatic; new servers have to be added manually, but it it's very easy.
26 NOTE: Automatic fail-over of the database is not yet in place.
27
28 NOTE: There are currently 2 running server instances.  One for the live server and one for testing.
29
30 Data is stored in a MongoDB server running on the same AWS instance as the website.
31 Data is backed up daily to the durable AWS S3 system.
32 One backup of the database is kept for the most recent 30 days, one for each of the most
33 recent 12 months, and one for every year.
34
35 AWS Cloudwatch is used to monitor the servers.
36 When the configured conditions warrant attention, notices are sent to "info@finalsclub.org".
37
38 NOTE: There are currently 2 monitors set up:
39
40 - available disk space
41 - CPU utilization
42
43 NOTE: We still have an ongoing issue with the EPL server hanging up.  This is being worked on.
44
45
46 # Database
47
48 The database is MongoDB.
49 MongoDB is not a relational database, but rather a noSQL or "document/object" based database.
50 Data is stored as structured objects versus tables and rows.
51 (More about MongoDB)[http://mongodb.org].
52
53 ## Collections
54
55 - archivedcourses
56         [[ schema needed ]]
57 - archivednotes
58         [[ schema needed ]]
59 - archivedsubjects
60         [[ schema needed ]]
61 - courses
62         [[ schema needed ]]
63 - lectures
64         [[ schema needed ]]
65 - notes
66         [[ schema needed ]]
67 - posts
68         [[ schema needed ]]
69 - schools
70         [[ schema needed ]]
71 - sessions
72         [[ schema needed ]]
73 - users
74         [[ schema needed ]]
75
76
77
78 # Source Code
79
80 The source code for the website itself consists of these main parts:
81
82 - The collaborative, real-time editor
83 - The back channel
84 - The surrounding website
85
86 These 3 pieces are written in Javascript for Node.js.
87
88 ## The Collaborative Real-time Editor 
89
90 The real-time editor is an embedded editor called
91 [Etherpad-Lite](https://github.com/Pita/etherpad-lite) (EPL).
92 It provides the ability for multiple people to simultaneously edit a single document.
93 The documents in FC are the notes for a specific lecture.
94
95
96 ## The Back Channel (BC)
97
98 The back channel portion of FC utilizes ["BC"](https://github.com/FinalsClubDev/BC).
99 BC allows the note takers, or anyone else who is just observing,
100 to suggest questions for the lecturer, and vote on each other's questions.
101 It also allows people to post commentary.
102
103
104 ## The Surrounding Website
105
106 This is the FC website, which brings together the other two elements into
107 a single website that serves it's stated purpose (above).
108 This would be the home page, privacy policy page, the page that lists the participating
109 schools, the sub pages containing lists of lectures and note taking sessions, and the
110 core page where EPL and BC are both found along side each other. 
111
112
113
114
115
116