#summary Ideas List for GSoC 2014
#labels Importance-Useful,Featured

*Melange* is the software that powers Google Summer of Code. If improving the way that Google Summer of Code is run as your Google Summer of Code project sounds attractively recursive, please read on!

= Ideas! =

We welcome your ideas, whatever they might be for Melange - but here are a few of our own for what we think might be good student summer projects:

== Parameterized Layout ==

Isn't it a bummer that the homepage for Google Summer of Code 2014 looks almost exactly the same as the homepage for GSoC 2013? And 2012, and 2011? We'd like to afford programs greater freedom in their graphic presentation on Melange. To do that, we'll need to support multiple program presentations, and support programs choosing one presentation over another. We'll also need to make decisions about how much a program's graphic presentation can be made customizable versus how much must be programmatically fixed.

*Captured Issues: <a href="https://code.google.com/p/soc/issues/detail?id=1615">1615</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1616">1616</a>.

*Relevant Skills:* Python, App Engine, HTML, CSS, Javascript, LESS

*Probable Mentor:* Nathaniel Manista, Mario Ferraro (Merio on #melange)

== Responsive Layout  ==

Isn't it a bummer that Melange's pages don't fit on your phone's screen? Modern web sites are written with the entire ecosystem of web-enabled devices in mind and cooperate with the user's device toward the goal of best displaying themselves on the screen available to them. Melange should too.

*Captured Issues: <a href="https://code.google.com/p/soc/issues/detail?id=1516">1516</a>.

*Relevant Skills:* HTML, CSS, Javascript, LESS

*Probable Mentor:* Nathaniel Manista, Mario Ferraro (Merio on #melange)

== Resource Hosting ==

Running a program on Melange involves distributing a lot of documents and serving a lot of content - from user images to translated contest rules and everything in between. Melange doesn't yet have a subsystem that makes resource ingestion, hosting, and distribution easy for both users and feature developers. It should.

*Captured Issues: <a href="https://code.google.com/p/soc/issues/detail?id=1672">1672</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1874">1874</a>.

*Relevant Skills:* App Engine, Python

*Probable Mentor:* Nathaniel Manista, Daniel Hans

== Student Flow ==

On Melange, signing up as a student and applying for summer projects is harder than it should be. We would love to see a student project focused on making the whole process easier.

*Captured Issues: <a href="https://code.google.com/p/soc/issues/detail?id=1530">1530</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1759">1759</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1816">1816</a>.

*Relevant Skills:* Javascript, Python, HTML and CSS

*Probable Mentor:* Nathaniel Manista, Madhusudan C.S., Daniel Hans

== Mentor Flow ==

On Melange, participating as a mentor is harder than it should be. We would love to see a student project focused on making the mentor experience better.

*Captured Issues: <a href="https://code.google.com/p/soc/issues/detail?id=515">515</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1216">1216</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1240">1240</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1306">1306</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1496">1496</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1524">1524</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1525">1525</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1541">1541</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1701">1701</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1788">1788</a>, <a href="https://code.google.com/p/soc/issues/detail?id=1850">1850</a>.

*Relevant Skills:* Python, HTML, Javascript, CSS

*Probable Mentor:* Nathaniel Manista, Daniel Hans, Madhusudan C.S.

== Renovate Our Test Data Seeder ==

Melange uses a test data seeder to generate fake program data for both its test suite and for use during development. Our old test data seeder has proven somewhat hard to work with and has broken several times during recent changes because it itself is not covered by our tests. Our long-term goal is to run several Melange programs inside our test suite, and we would be excited to receive student proposals that would move us toward that objective by affording us an updated, more usable, and more maintainable data seeder.

*Relevant Skills:* Python, App Engine

*Probable Mentor:* Nathaniel Manista, Daniel Hans, Chong Liu (Leo), Madhusudan C.S.

= Orientation =

We would like our prospective students to propose new project ideas and discuss with Melange developers either here (in comments), #melange on freenode.net, or via our mailing list melange-soc-dev@googlegroups.com.

Every student is encouraged to clone our <a href="http://code.google.com/p/soc/source/checkout>git repository</a> and work through our GettingStarted guide. We've created a special <a href="https://code.google.com/p/soc/issues/list?q=label:Bienvenue">"Bienvenue" label in our issue tracker</a> for issues that we think are particularly good places for new contributors to Melange to make a small, independent change as a first contribution.
