diff --git a/GHOP.md b/GHOP.md
new file mode 100644
index 0000000..1375567
--- /dev/null
+++ b/GHOP.md
@@ -0,0 +1,170 @@
+
+
+# GSoC Project Info
+
+| Madhusudan C.S | [Implementation of Task-based GHOP-like work flow](http://socghop.appspot.com/student_project/show/google/gsoc2009/melange/t124022698486) |
+|:---------------|:------------------------------------------------------------------------------------------------------------------------------------------|
+
+# Introduction
+
+Required **background reading** for GHOP, especially Google documents linked from the archives, is the [GHOP Contest Administrative List](http://groups.google.com/group/sockhoppers).
+
+A few big gotchas:
+  * **Students cannot set tasks to claimed status**. This must be done by mentors. Perhaps this means we need to add a student accessible tag called "claim requested".
+  * Students can only claim **_n_ task at a time**, where n is an option configurable by Program Admin in Program Configuration Page.
+  * We are **not allowed to collect student personal details** like address, etc., until they have completed at least one task.
+  * Once a task is out there and **claimed, it cannot be deleted** unless the contestant does not submit work for it. It is OK to delete created tasks if no one has claimed them.
+
+These things are what make it legally OK to run GHOP as a contest. GHOP has to be a contest since we are dealing with those under the age of majority. I do not understand why the world has decided it is ok to give money to kids through a contest but not in other fashions. I <3 our lawyers since they understand this so I do not have to do so.
+
+Worth noting: tasks have assigned mentors, but **GHOP is more about pooled mentoring** resources. Any mentor should be able to review any task if they'd like to, but an assigned mentor is the person committing to be the go to person for student questions. No reason not to have more than one mentor per task.
+
+It was a big old pain in the past that we did not track **time estimates** for tasks systematically. Organizations need to set a **time limit** for each task, though it is at their option to extend the amount of time a student can work on a given task if good work is in progress.
+
+For example, if an organization says a task should take two days, then a **clock counting down** from 48 hours should begin counting down as soon as a mentor sets the task to claimed status. It would be awesome if we could email mentors about when a task is due, this is detailed in email notifications below.
+
+**Tasks are not scored, they are either done or not done**. The task states below define different states along the not done to done spectrum.
+
+  * There is now a wiki page **[LifeOfaGhopTask](LifeOfaGhopTask.md)**.
+  * List of **[GHOP issues](http://code.google.com/p/soc/issues/list?can=1&q=GHOP&sort=-id&colspec=ID+Summary)**, including stories and closed issues.
+  * List of **[open GHOP issues](http://code.google.com/p/soc/issues/list?can=2&q=GHOP&sort=-id&colspec=ID+Summary)**.
+
+  * Madhu: Can we call a few of the org admins/mentors who participated in previous GHOP for a meeting (IRC?), so we can **get their opinions on how to implement the new GHOP framework**, what was wrong last time and stuff (or e-mail)
+
+
+# Details
+
+## New general capabilities
+
+_Edit hint: New page "New General Capabilities for GHOP" ?_
+
+  * Submitting Your Claim for Prizes Online and Submitting Your Parental Consent Form - instead of faxing or sending this forms via email to Program Administrator, student will have ability to upload **scanned document** to their GHOP profile account
+    * This design decision is much bigger than just accepting prize forms, etc. online. We need to be able to take actual work submissions via Melange, meaning we need folks to be able to upload a document file, or a jpeg file for a logo created, etc.
+    * Action Item: **LH needs to talk to legal** to make sure that it is OK from Google's perspective to upload patches to this system. It was fine when we were using the issue tracker; would it still be OK using the socghop infrastructure.
+    * Related issue: http://code.google.com/p/soc/issues/detail?id=44
+    * Related [roadmap](http://code.google.com/p/soc/wiki/MelangeRoadmap2009) item: file upload support (avatars, patches, tax forms, etc)
+
+  * We can accept files that are **up to 1Mb in Google App Engine**, patches usually are small, documentation too, the only probably we will have is screencast but we will figure it out. Due to GAE limitation we won't be accepting big files.
+
+  * More about claiming prizes: http://groups.google.com/group/ghop-announce/web/how-to-claim-your-ghop-prizes
+
+  * (Nice to Have) Using GHOP calendar and **Calendar API** mentors, admins, students would get **reminders about important dates** in the program, emails can be send to the program group or/and to users emails (same for GSoC, that way LH has less work and life is good)
+    * Related [roadmap](http://code.google.com/p/soc/wiki/MelangeRoadmap2009) item: meetings organizer (integration with Calendar API)
+    * We will prioritize work during our meeting.  Madhu is keen to do calendar support.
+
+  * Mentors and org admins should be able to setup **task update notifications**.  Mentors/OAs should be able to add tags to tasks like needs rework or task closed because work was successfully completed.  If the task is updated (status changed or comment posted) students, mentors get an email. We already have notification system in place for GSoC but this might need some additional work.
+    * If we are going to implement sending emails with these notifications, and it would be great if we could, we should figure out how to let folks set email notification rules, e.g. only email me when a task is updated closed/open. It may not be possible to do this in time for GHOP 2009, e.g. perhaps the best we can do would be either you choose to get emails or not get emails. (If you choose to get emails, you accept that you will get a lot of them.)
+    * Related discussion [UserPreferencesPage](UserPreferencesPage.md) (and also issue 495 (on Google Code))
+
+  * **Task activity info:** It should be possible to determine how many times a task has been reopened, how many students worked on it by anyone. This should also be easily available when generating reports.
+
+  * If a student has requested to claim a task then, the task must be **locked down** so no one else requests it.
+
+  * (NTH) Org Admins/Mentors should be able to **bulk upload** tasks from a CSV file.
+
+  * (NTH) Org Admins/Mentors should be able to **bulk download** tasks into a CSV file.
+
+  * (NTH) **RSS/Atom feeds** for keeping up with the progress of an Organization.
+
+  * Org Admins should be able to **bulk accept** tasks - It can be a check box associated with each task in the list, and there should be a button to accept all checked tasks.
+Also they must have ability to accept all tasks created by a particular mentor by typing in his name.
+
+  * Check boxes for list of filtered tags. User must be able to check all the required tags and subscribe to them.
+
+  * (NTH) [Repeatable Tasks](http://code.google.com/p/google-highly-open-participation-asf/issues/list?can=1&q=present&colspec=ID+Status+Owner+ClaimedBy+Summary&x=status&y=claimedby&cells=tiles)
+
+
+## Task Fields
+
+  * New Tags now in **[TagsInMelange](TagsInMelange.md)**
+
+  * (Nice to Have) **Progress variable** for each task so that GHOP student can update the value of it during the time he works on the particular task (0%-100%), that will also allow mentor to track progress of students tasks, when task is 100% complete mentor can get email notification to take action on particular student task (Close it)
+    * For now: This is a nice to have but really not essential and will create more work. If a mentor wants an update, they can set task state tag to ActionNeeded and request a status update. Given how fast these students work, I don't think they'll have time to update statuses before they are finished.
+    * Madhu: Maybe we can have this field, but not mandatory? But % progress _is_ subjective and varies from student to student....
+
+  * Each GHOP tasks should have _public_ **difficulty level**, which can be later helpful in selecting grand prize winners and runner ups (not only amount of tasks counts but also quality of student work, task difficulty and other factors), organization has quick access to overview of what kind of tasks each student did and what's it's total point sum etc., this might be also available only for admins and mentors just in order to make a Grand Prize winners choosing process easier.  Closely related to the need for **time estimates** and **time limits** in number of hours after the task is assigned for all tasks. This might tie into the overall concept of **tagging**, but more likely it is a numerical measure of how many hours it is expected to take.
+
+  * **Task preparation (privately):** Tasks should have a way to be hidden from the students until an org admin decides they are ready to be published.
+
+## New task related views
+
+  * There should be a view to see all the tasks on a public page. This is also helpful for publicity. Should be publicly viewable, so public page sounds like better option than dashboard. These tasks can be filtered in following ways:
+    1. Organization.
+    1. Difficulty level.
+    1. Type of Task.
+    1. State of Task.
+    1. Time required for completing it.
+    1. Latest Added.
+    1. Students (LH should get permission from legal team).
+> > Sorting of tasks based on tags should be allowed.
+
+  * Program Administrator should have a special view to assign or tune the tasks list **quota per project** at any instant of time when the program is active. Note: An organization administrator should not be able to arbitrarily change their own task quota, as a sponsor is only committing to provide a certain amount of prize money.
+
+  * There is no reason not to **display the overall number of tasks** that an organization can set out for contestants publicly.  Let's do so.
+
+
+## Public Tracking of Students
+
+_All work on these tasks should be public, meaning claiming is public, it is public when review is needed, review comments are public, etc._
+
+  * Selecting grand prize winner should be done via public views in the GHOP Melange project showing **student tasks, tasks amount and difficulty level**
+
+  * (Required) Anyone should be able to track students progress, **completed tasks, open/reopened tasks, claimed tasks**, there will be special views for that with **filter options** (status of the tasks should be open to public)
+
+
+## Dashboards
+### Program Admin dashboard features
+
+  * GHOP Melange should have a special configuration page where you can setup dates like : **dates:** when contest begins , when contest ends, what is the age (range) of the students that can participate for example: thirteen (13) years of age or older on November 27, 2007 (this date would be setup in configuration page and once student fill in profile data you can automagically check whether he can participate in contest
+  * (Drop if time shortage) Program Administrator will have access to special view listing all the GHOP students allowing her to **filter** the ones that didn't send form yet and by selecting them and clicking ‚'Remind' button, Melange would automatically send **reminder email** to all of the selected students.
+  * Program Administrator should be able to setup **tasks limits** for each participating project (similar to slots for GSoC)
+
+**Timeline _logic_** already created for Summer of Code will be used for GHOP too.  However the important dates for a GHOP based program need to be added to the respective TimeLine model. The extra dates are: Contest start, Contest End and "No more Claims" Deadline.
+
+**Q:** Will we register dates with 'timeline', or will we derive a subclass?
+
+**A:**
+
+
+
+### Mentor/Org-Admin dashboard features
+
+  * None for this GHOP?  It's all in public trackers.
+
+  * [For\_GHOP\_20](For_GHOP_20.md) Selecting grand prize (this process should be similar to how proposals are rated in GSoC but public)
+  * [For\_GHOP\_20](For_GHOP_20.md) Additionally using special view org admin can **setup number of runner ups** and select them from participating students (this can be later on used to automatically generate list of both grand prize winners and runner ups)
+  * More explanation of **Automatic Prizes**, which could be part of the dashboard, has been moved to **[For\_GHOP\_20](For_GHOP_20.md)**.
+
+Organization will just pick the grand prize winner student and runners ups in the web ui where they already have access to all the students and their tasks. That way we can easily generate a page which shows selected students.
+
+
+### Student dashboard features (?)
+
+  * If task progress variables are used, student needs a way to view and **set task progress**.
+  * Students must be able to **request to claim a particular task**, **withdraw** and **submit their work** (either as links to their actual work and/or file upload if we get legal consent) and request for review by setting **"NeedsReview"** for the task.
+  * Provide students an option to mark the tasks they like, so organizations can get back to them when they have similar tasks or also helps for generating reports and feedbacks for organizations.
+
+## Custom logic
+
+**Essential**
+  * **Push for registration.   "No-reg no-shirt" :** Claiming first task doesn't require to have full profile (just Google account), however after first completed tasks, students should also not be able to register for a second GHOP task until they have completed registration (we should send an email reminder). Without registration, there can be no shirt, that should be checked when Melange setups prizes for each student
+  * **N tasks in progress:** Student cannot work on more than n tasks at a time, which is specified via program configuration page (this was a problem with first edition of GHOP, since we had to find duplicates using python script) - Melange will not allow GHOP student to claim n+1th task while he is still working on previous ones. There will be no need for any additional duplicates check scripts.
+  * Enforce **task limit** for orgs.
+  * Informing mentor about completed task.  This means that **mentors get a notification (email likely) that a student has submitted work** for a particular task that requires mentor review. Without the task being reviewed and closed (as in, the work for this task meets requirements and you get the prize for completing it), the student cannot go on to the next task. Hence, we want to make sure their work is reviewed quickly to keep them motivated.  Perhaps we make this the only student editable tag. Like a tick box for setting a tag that org admins and mentors can see that adds a tag automatically that says "NeedsReview" See tags section above.
+
+
+**Human not computer logic**
+  * GHOP Grand Prize winners are selected based on completed number of tasks, tasks quality, difficulty, student community activity and things like that, so it is not just number of completed tasks.  **This is mostly a manual process from examining the sorted list of student results**
+
+**Nice to have**
+  * **Count of incomplete tasks for a student:** Mentors/org admins should also get information if student claimed some tasks but didn't complete (task was reopened), with the number of that kind of tasks
+
+## Dependencies on GSoC student work
+  * (Nice to have) Any GHOP **[surveys](SurveysModule.md)** should be done via Melange Survey module that would enable to create/edit/delete questions and build surveys from questions.
+  * (Nice to have) Any additional **[statistics](StatisticsModule.md)** in Melange project should use Google Chart API and Google Visualization API
+  * (Nice to have) Program Administrator should be able to view all participating projects/organization in special view with simple **statistics on the same page**
+
+
+[Surveys](SurveysModule.md) are not required to run GHOP, nor are [statistics](StatisticsModule.md), however, both features are highly desirable.  Each contributes to making GHOP easier to run by giving more information about how GHOP is progressing.  GHOP's requirements may influence some decisions about what order features of these GSoC projects should be tackled in and will help to shape the detailed requirements for these features.
+
+Really, these are all nice to haves for now. **Really nice to have, but NTHs nonetheless**. We need to get core functionality working before we worry about running better reports and asking for feedback, etc. systematically.  We need to focus on getting the core functionality running first. However our GSoC students are going to work Surveys and Statistics modules so we will make sure that they are generic enough to be reused for both GSoC and GHOP program types.
\ No newline at end of file
diff --git a/GHOP.wiki b/GHOP.wiki
deleted file mode 100644
index 74b037a..0000000
--- a/GHOP.wiki
+++ /dev/null
@@ -1,172 +0,0 @@
-#summary Design/discussion for GHOP
-#labels Importance-Useful,Contents-Review,Phase-Requirements
-
-<wiki:toc max_depth="3" />
-
-= GSoC Project Info =
-
-|| Madhusudan C.S || [http://socghop.appspot.com/student_project/show/google/gsoc2009/melange/t124022698486 Implementation of Task-based GHOP-like work flow] ||
-
-= Introduction =
-
-Required *background reading* for GHOP, especially Google documents linked from the archives, is the [http://groups.google.com/group/sockhoppers GHOP Contest Administrative List].
-
-A few big gotchas:
-   * *Students cannot set tasks to claimed status*. This must be done by mentors. Perhaps this means we need to add a student accessible tag called "claim requested". 
-   * Students can only claim *_n_ task at a time*, where n is an option configurable by Program Admin in Program Configuration Page.
-   * We are *not allowed to collect student personal details* like address, etc., until they have completed at least one task.
-   * Once a task is out there and *claimed, it cannot be deleted* unless the contestant does not submit work for it. It is OK to delete created tasks if no one has claimed them.
-
-These things are what make it legally OK to run GHOP as a contest. GHOP has to be a contest since we are dealing with those under the age of majority. I do not understand why the world has decided it is ok to give money to kids through a contest but not in other fashions. I <3 our lawyers since they understand this so I do not have to do so.
-
-Worth noting: tasks have assigned mentors, but *GHOP is more about pooled mentoring* resources. Any mentor should be able to review any task if they'd like to, but an assigned mentor is the person committing to be the go to person for student questions. No reason not to have more than one mentor per task.
-
-It was a big old pain in the past that we did not track *time estimates* for tasks systematically. Organizations need to set a *time limit* for each task, though it is at their option to extend the amount of time a student can work on a given task if good work is in progress.
-
-For example, if an organization says a task should take two days, then a *clock counting down* from 48 hours should begin counting down as soon as a mentor sets the task to claimed status. It would be awesome if we could email mentors about when a task is due, this is detailed in email notifications below.
-
-*Tasks are not scored, they are either done or not done*. The task states below define different states along the not done to done spectrum.
-
-  * There is now a wiki page *[LifeOfaGhopTask]*.
-  * List of *[http://code.google.com/p/soc/issues/list?can=1&q=GHOP&sort=-id&colspec=ID+Summary GHOP issues]*, including stories and closed issues.  
-  * List of *[http://code.google.com/p/soc/issues/list?can=2&q=GHOP&sort=-id&colspec=ID+Summary open GHOP issues]*.
-
-  * Madhu: Can we call a few of the org admins/mentors who participated in previous GHOP for a meeting (IRC?), so we can *get their opinions on how to implement the new GHOP framework*, what was wrong last time and stuff (or e-mail)
-
-
-= Details =
-
-== New general capabilities ==
-
-_Edit hint: New page "New General Capabilities for GHOP" ?_
-
-  * Submitting Your Claim for Prizes Online and Submitting Your Parental Consent Form - instead of faxing or sending this forms via email to Program Administrator, student will have ability to upload *scanned document* to their GHOP profile account
-     * This design decision is much bigger than just accepting prize forms, etc. online. We need to be able to take actual work submissions via Melange, meaning we need folks to be able to upload a document file, or a jpeg file for a logo created, etc. 
-     * Action Item: *LH needs to talk to legal* to make sure that it is OK from Google's perspective to upload patches to this system. It was fine when we were using the issue tracker; would it still be OK using the socghop infrastructure.
-     * Related issue: http://code.google.com/p/soc/issues/detail?id=44
-     * Related [http://code.google.com/p/soc/wiki/MelangeRoadmap2009 roadmap] item: file upload support (avatars, patches, tax forms, etc)
-
-  * We can accept files that are *up to 1Mb in Google App Engine*, patches usually are small, documentation too, the only probably we will have is screencast but we will figure it out. Due to GAE limitation we won't be accepting big files.
-
-  * More about claiming prizes: http://groups.google.com/group/ghop-announce/web/how-to-claim-your-ghop-prizes 
-
-  * (Nice to Have) Using GHOP calendar and *Calendar API* mentors, admins, students would get *reminders about important dates* in the program, emails can be send to the program group or/and to users emails (same for GSoC, that way LH has less work and life is good)
-    * Related [http://code.google.com/p/soc/wiki/MelangeRoadmap2009 roadmap] item: meetings organizer (integration with Calendar API)
-    * We will prioritize work during our meeting.  Madhu is keen to do calendar support.
-
-  * Mentors and org admins should be able to setup *task update notifications*.  Mentors/OAs should be able to add tags to tasks like needs rework or task closed because work was successfully completed.  If the task is updated (status changed or comment posted) students, mentors get an email. We already have notification system in place for GSoC but this might need some additional work.
-    * If we are going to implement sending emails with these notifications, and it would be great if we could, we should figure out how to let folks set email notification rules, e.g. only email me when a task is updated closed/open. It may not be possible to do this in time for GHOP 2009, e.g. perhaps the best we can do would be either you choose to get emails or not get emails. (If you choose to get emails, you accept that you will get a lot of them.)
-    * Related discussion [UserPreferencesPage] (and also issue 495)
-
-  * *Task activity info:* It should be possible to determine how many times a task has been reopened, how many students worked on it by anyone. This should also be easily available when generating reports.
-
-  * If a student has requested to claim a task then, the task must be *locked down* so no one else requests it. 
-
-  * (NTH) Org Admins/Mentors should be able to *bulk upload* tasks from a CSV file.
-
-  * (NTH) Org Admins/Mentors should be able to *bulk download* tasks into a CSV file.
-
-  * (NTH) *RSS/Atom feeds* for keeping up with the progress of an Organization.
-  
-  * Org Admins should be able to *bulk accept* tasks - It can be a check box associated with each task in the list, and there should be a button to accept all checked tasks.
-Also they must have ability to accept all tasks created by a particular mentor by typing in his name.
-
-  * Check boxes for list of filtered tags. User must be able to check all the required tags and subscribe to them.
-
-  * (NTH) [http://code.google.com/p/google-highly-open-participation-asf/issues/list?can=1&q=present&colspec=ID+Status+Owner+ClaimedBy+Summary&x=status&y=claimedby&cells=tiles Repeatable Tasks]
-
-
-== Task Fields ==
-
-  * New Tags now in *[TagsInMelange]*
-
-  * (Nice to Have) *Progress variable* for each task so that GHOP student can update the value of it during the time he works on the particular task (0%-100%), that will also allow mentor to track progress of students tasks, when task is 100% complete mentor can get email notification to take action on particular student task (Close it)
-    ** For now: This is a nice to have but really not essential and will create more work. If a mentor wants an update, they can set task state tag to ActionNeeded and request a status update. Given how fast these students work, I don't think they'll have time to update statuses before they are finished.
-    ** Madhu: Maybe we can have this field, but not mandatory? But % progress _is_ subjective and varies from student to student.... 
-
-  * Each GHOP tasks should have _public_ *difficulty level*, which can be later helpful in selecting grand prize winners and runner ups (not only amount of tasks counts but also quality of student work, task difficulty and other factors), organization has quick access to overview of what kind of tasks each student did and what's it's total point sum etc., this might be also available only for admins and mentors just in order to make a Grand Prize winners choosing process easier.  Closely related to the need for *time estimates* and *time limits* in number of hours after the task is assigned for all tasks. This might tie into the overall concept of *tagging*, but more likely it is a numerical measure of how many hours it is expected to take.
-
-  * *Task preparation (privately):* Tasks should have a way to be hidden from the students until an org admin decides they are ready to be published.
-
-== New task related views ==
-
-  * There should be a view to see all the tasks on a public page. This is also helpful for publicity. Should be publicly viewable, so public page sounds like better option than dashboard. These tasks can be filtered in following ways:
-     # Organization.
-     # Difficulty level.
-     # Type of Task.
-     # State of Task.
-     # Time required for completing it.
-     # Latest Added.
-     # Students (LH should get permission from legal team).
-    Sorting of tasks based on tags should be allowed.
-  
-  * Program Administrator should have a special view to assign or tune the tasks list *quota per project* at any instant of time when the program is active. Note: An organization administrator should not be able to arbitrarily change their own task quota, as a sponsor is only committing to provide a certain amount of prize money.
-
-  * There is no reason not to *display the overall number of tasks* that an organization can set out for contestants publicly.  Let's do so.
-
-
-== Public Tracking of Students==
-
-_All work on these tasks should be public, meaning claiming is public, it is public when review is needed, review comments are public, etc._
-
-  * Selecting grand prize winner should be done via public views in the GHOP Melange project showing *student tasks, tasks amount and difficulty level* 
-
-  * (Required) Anyone should be able to track students progress, *completed tasks, open/reopened tasks, claimed tasks*, there will be special views for that with *filter options* (status of the tasks should be open to public)
-
-
-== Dashboards ==
-=== Program Admin dashboard features ===
-
-  * GHOP Melange should have a special configuration page where you can setup dates like : *dates:* when contest begins , when contest ends, what is the age (range) of the students that can participate for example: thirteen (13) years of age or older on November 27, 2007 (this date would be setup in configuration page and once student fill in profile data you can automagically check whether he can participate in contest
-  * (Drop if time shortage) Program Administrator will have access to special view listing all the GHOP students allowing her to *filter* the ones that didn't send form yet and by selecting them and clicking ‚'Remind' button, Melange would automatically send *reminder email* to all of the selected students. 
-  * Program Administrator should be able to setup *tasks limits* for each participating project (similar to slots for GSoC)
-
-*Timeline _logic_* already created for Summer of Code will be used for GHOP too.  However the important dates for a GHOP based program need to be added to the respective TimeLine model. The extra dates are: Contest start, Contest End and "No more Claims" Deadline.  
-
-*Q:* Will we register dates with 'timeline', or will we derive a subclass?
-
-*A:*
-
-
-
-=== Mentor/Org-Admin dashboard features ===
-
-  * None for this GHOP?  It's all in public trackers.
-
-  * [For_GHOP_20] Selecting grand prize (this process should be similar to how proposals are rated in GSoC but public)
-  * [For_GHOP_20] Additionally using special view org admin can *setup number of runner ups* and select them from participating students (this can be later on used to automatically generate list of both grand prize winners and runner ups)
-  * More explanation of *Automatic Prizes*, which could be part of the dashboard, has been moved to *[For_GHOP_20]*.
-
-Organization will just pick the grand prize winner student and runners ups in the web ui where they already have access to all the students and their tasks. That way we can easily generate a page which shows selected students. 
-
-
-=== Student dashboard features (?) ===
-
-  * If task progress variables are used, student needs a way to view and *set task progress*.
-  * Students must be able to *request to claim a particular task*, *withdraw* and *submit their work* (either as links to their actual work and/or file upload if we get legal consent) and request for review by setting *"!NeedsReview"* for the task.
-  * Provide students an option to mark the tasks they like, so organizations can get back to them when they have similar tasks or also helps for generating reports and feedbacks for organizations.
-
-== Custom logic ==
-
-*Essential*
-  * *Push for registration.   "No-reg no-shirt" :* Claiming first task doesn't require to have full profile (just Google account), however after first completed tasks, students should also not be able to register for a second GHOP task until they have completed registration (we should send an email reminder). Without registration, there can be no shirt, that should be checked when Melange setups prizes for each student 
-  * *N tasks in progress:* Student cannot work on more than n tasks at a time, which is specified via program configuration page (this was a problem with first edition of GHOP, since we had to find duplicates using python script) - Melange will not allow GHOP student to claim n+1th task while he is still working on previous ones. There will be no need for any additional duplicates check scripts. 
-  * Enforce *task limit* for orgs.
-  * Informing mentor about completed task.  This means that *mentors get a notification (email likely) that a student has submitted work* for a particular task that requires mentor review. Without the task being reviewed and closed (as in, the work for this task meets requirements and you get the prize for completing it), the student cannot go on to the next task. Hence, we want to make sure their work is reviewed quickly to keep them motivated.  Perhaps we make this the only student editable tag. Like a tick box for setting a tag that org admins and mentors can see that adds a tag automatically that says "!NeedsReview" See tags section above.
-
-
-*Human not computer logic*
-  * GHOP Grand Prize winners are selected based on completed number of tasks, tasks quality, difficulty, student community activity and things like that, so it is not just number of completed tasks.  *This is mostly a manual process from examining the sorted list of student results*
-
-*Nice to have*
-  * *Count of incomplete tasks for a student:* Mentors/org admins should also get information if student claimed some tasks but didn't complete (task was reopened), with the number of that kind of tasks 
-
-== Dependencies on GSoC student work ==
-  * (Nice to have) Any GHOP *[SurveysModule surveys]* should be done via Melange Survey module that would enable to create/edit/delete questions and build surveys from questions. 
-  * (Nice to have) Any additional *[StatisticsModule statistics]* in Melange project should use Google Chart API and Google Visualization API
-  * (Nice to have) Program Administrator should be able to view all participating projects/organization in special view with simple *statistics on the same page*
-
-
-[SurveysModule Surveys] are not required to run GHOP, nor are [StatisticsModule statistics], however, both features are highly desirable.  Each contributes to making GHOP easier to run by giving more information about how GHOP is progressing.  GHOP's requirements may influence some decisions about what order features of these GSoC projects should be tackled in and will help to shape the detailed requirements for these features.
-
-Really, these are all nice to haves for now. *Really nice to have, but NTHs nonetheless*. We need to get core functionality working before we worry about running better reports and asking for feedback, etc. systematically.  We need to focus on getting the core functionality running first. However our GSoC students are going to work Surveys and Statistics modules so we will make sure that they are generic enough to be reused for both GSoC and GHOP program types.
\ No newline at end of file
