#summary Tracks progress for the GSoC 2011 project, GUI Overhaul (Fronted and Administration Interfaces)

<wiki:toc max_depth="3" />


= Introduction =

This page will track progress of the GSoC 2011 project, GUI Overhaul (Fronted and Administration Interfaces).
----

= Details =

These details will contain all tasks needed to done for this project, design / mockup for the tasks, etc.
----

= Proposed timeline =

My proposed timline
----

= Meetings and Agendas =

== May 10, 2011 ==

=== My result reported in this meeting: ===
Not yet

=== Meeting notes, copying from Leo's note: ===
 * Set up and run an online GAE instance before Thursday with your "View" from the first week.
 * Write a blog post about it (and other work you've done) before next Monday so it can be reviewed before our conference call.
 * Create a wiki page on Melange wiki for recording the progress of your project.
 * Plan a meeting with your mentor and add notes to your OWN project wiki page.

=== My plan for next week: ===

 * I've set a live instance at http://akeda-melange.appspot.com
 * Started writing wiki page to track my project's progress
 * I'm planning to refactor melange.map.js to be more generic. As Mario has said the current status of melange.map.js functionalities is not supposed to be. It only provides map to organization home page. Other pages, such as profile and read only profile, have their own js files which, basically, have common usage of Google Maps API. The refactored melange.map.js should handle all maps functionalities, including my proposed function for MarkerClusterer.
 * Upload and crop features for org logo.
----

== May 16, 2011 ==

=== My result reported in this meeting: ===
 * I am working to make melange.map.js more generic, so it can be used by profile page as well, or maybe other pages that need to render maps.
 * I am also working to add breadcrumb and highlighted mainmenu in currently visited page

=== Meeting notes: ===
Copying from Lennie's note:
Daniel and Akeda will meet with Carol on Wednesday using Skype to brainstorm about their project.

=== My plan for next week: ===
 * Submit my code for breadcrumb functionalities to get any feedback
 * Prepare talking with Carols about her needs
----

== May 18, 2011 (Requirement gathering) ==

=== My result reported in this meeting: ===
Not yet

=== Meeting notes: ===
 * If we're login as a host and view the dashboard (My Dashboard), we will see the page overloaded by Jqgrid list. Carol wants the list is grouped. Akeda has suggestion to group the list by tabs.
 * When students with project announced, there might be a student consider himself ineligible to participate. If Carol rejects that student, there will be available slot to accept another student that already rejected. Carol needs this feature to withdraw / accept student in her dashboard.
 * Carol needs the Admin dashboard to be enhanced.

=== My plan for next week: ===
 * Create mockups for the Dashbord page with tabs to group the list
 * Create mockups for the withdraw/accept students manually after students announced period
 * I'm planning to give the mockups by Saturday so everyone can give feedbacks
 * I will implement this feature after everyone agree with the mockups.
----

== May 26, 2011 (Requirement gathering) ==

=== My result reported in this meeting: ===
Not yet

=== Meeting notes: ===
 * Akeda is working on redesigning dashboard. Lennie reminded him that there are two dashboards that Carol is faced with. One allows administrative functionality like sending out reminder emails while the other represents not only Carol's role as a Organization Admin for GOSPO but also gives more information than the regular dashboards for other users. The focus should be on improving the usability and functionalities that are exposed to Carol in her daily job as Program Administrator.

=== My plan for next week: ===
 * Contact Carol and Daniel to discuss the requirements briefly
----

== May 30, 2011 (Requirement gathering) ==

=== My result reported in this meeting: ===
Not yet

=== Meeting notes: ===
 * NA
=== My plan for next week: ===