<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>app/models/tell_friend.rb</filename>
    </added>
    <added>
      <filename>app/views/layouts/_social_media.html.erb</filename>
    </added>
    <added>
      <filename>app/views/pages/_tell_friend_form.html.haml</filename>
    </added>
    <added>
      <filename>app/views/pages/_tell_friend_preview.html.haml</filename>
    </added>
    <added>
      <filename>app/views/projects/upcoming.atom.builder</filename>
    </added>
    <added>
      <filename>app/views/user_mailer/tell_friend.erb</filename>
    </added>
    <added>
      <filename>db/migrate/20080826081134_add_requirements_to_project.rb</filename>
    </added>
    <added>
      <filename>db/migrate/20080826114524_add_user_fields.rb</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/1__#$!@%!#__Pasted Graphic.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 1.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 10.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 11.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 12.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 13.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 14.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 15.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 16.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 17.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 18.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 19.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 2.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 3.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 4.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 5.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 6.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 7.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 8.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic 9.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/Pasted Graphic.pict</filename>
    </added>
    <added>
      <filename>doc/Gallery.rtfd/TXT.rtf</filename>
    </added>
    <added>
      <filename>doc/Slogan.psd</filename>
    </added>
    <added>
      <filename>doc/logo.psd</filename>
    </added>
    <added>
      <filename>doc/search_box.psd</filename>
    </added>
    <added>
      <filename>doc/top.psd</filename>
    </added>
    <added>
      <filename>public/images/right_tab_bg.gif</filename>
    </added>
    <added>
      <filename>public/images/right_tab_bg.png</filename>
    </added>
    <added>
      <filename>public/images/slogan.png</filename>
    </added>
    <added>
      <filename>public/images/tab-blank-bg.png</filename>
    </added>
    <added>
      <filename>public/images/template/search_box_bg.png</filename>
    </added>
    <added>
      <filename>public/stylesheets/sass/v2/components/about.sass</filename>
    </added>
    <added>
      <filename>script/merge_assets</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -27,4 +27,8 @@ class ApplicationController &lt; ActionController::Base
       return false
     end
   end
+  
+  def helpers
+    self.class.helpers
+  end
 end</diff>
      <filename>app/controllers/application.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,20 @@
 class PagesController &lt; ApplicationController
 
   def about
+    if request.post?
+      @tell_friend = TellFriend.new(params[:tell_friend])
+      @tell_friend.valid?
+      if button_pressed?(:send)
+        if @tell_friend.send_msg(current_or_anon_user)
+          flash[:success] = &quot;Sent Message. Thanks for helping to promote #{AppConfig.site_name}!&quot;
+          redirect_to about_url
+        end
+      elsif button_pressed?(:preview)
+        @preview = true
+      end
+    else
+      @tell_friend = TellFriend.new(:from =&gt; current_or_anon_user.email)
+    end
   end
   
   def blog
@@ -11,4 +25,9 @@ class PagesController &lt; ApplicationController
       redirect_to root_url
     end
   end
+  
+  protected
+  def button_pressed?(id)
+    !params[id].blank?
+  end
 end</diff>
      <filename>app/controllers/pages_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,32 +1,39 @@
 class ProjectsController &lt; ApplicationController
   def index  
-    @projects = find_projects
+    build_gallery(gallery_projects)
     @upcoming = Project.upcoming
-    @my_projects = current_or_anon_user.projects
-    
-    @latest_activities = Activity.latest
-    
-    @top_downloaded = Project.top_downloaded
-    @top_bookmarked = Project.top_bookmarked
-    
-    if AppConfig.enable_throttler and throttled?
-      @tags = []
-    else
-      @tags = Project.tag_counts(:conditions =&gt; Project.in_gallery_conditions, :order =&gt; &quot;name&quot;)
-    end  
-    
-    if params[:ajax]
-      render :partial =&gt; &quot;projects/parts/grid&quot;, :locals =&gt; {:projects =&gt; @projects}, :layout =&gt; false
-    else
-      render
+    respond_to do |format|
+      format.html do
+        if params[:ajax]
+          render :partial =&gt; &quot;projects/parts/grid&quot;, :locals =&gt; {:projects =&gt; @projects}, :layout =&gt; false
+        else
+          render
+        end
+      end
+      format.atom
+    end
+  end
+  
+  def upcoming
+    build_gallery(upcoming_projects)    
+    respond_to do |format|
+      format.html do
+        @grid_title = &quot;Upcoming Projects&quot;
+        @grid_rss = formatted_upcoming_projects_url(:atom)
+
+        @hide_upcoming = true
+        if params[:ajax]
+          render :partial =&gt; &quot;projects/parts/grid&quot;, :locals =&gt; {:projects =&gt; @projects}, :layout =&gt; false
+        else
+          render :action =&gt; &quot;index&quot;
+        end
+      end
+      format.atom
     end
-    
-    session[:page] = params[:page]
   end
   
   def feed
     @projects = Project.latest
-    
     respond_to do |format|
       format.atom do
         render :action =&gt; &quot;index.atom.builder&quot;
@@ -226,6 +233,26 @@ class ProjectsController &lt; ApplicationController
   end
   
   protected
+  def build_gallery(projects)
+    @projects = projects
+    @my_projects = current_or_anon_user.projects
+    
+    @latest_activities = Activity.latest
+    
+    @top_downloaded = Project.top_downloaded
+    @top_bookmarked = Project.top_bookmarked
+    
+    if throttled?
+      @tags = []
+    else
+      @tags = Project.tag_counts(:conditions =&gt; Project.in_gallery_conditions, :order =&gt; &quot;name&quot;)
+    end  
+    
+    if params[:q].blank? and params[:tag].blank?
+      session[:page] = params[:page]
+    end
+  end
+  
   # retrieves the current project from params[:id]
   def get_project
     @current_project ||= Project.find(params[:id])
@@ -237,7 +264,7 @@ class ProjectsController &lt; ApplicationController
   end
   
   # find the projects to display based on the querystring
-  def find_projects
+  def gallery_projects
     # try to find an associated tag
     @tag = get_tag  
     @search_term = params[:q].strip unless params[:q].blank?
@@ -249,7 +276,11 @@ class ProjectsController &lt; ApplicationController
     else
       @projects = Project.paginate(:conditions =&gt; Project.in_gallery_conditions, :order =&gt; &quot;promoted_at DESC&quot;, :page =&gt; params[:page], :per_page =&gt; AppConfig.projects_per_page)
     end
+  end
     
+  # list the upcoming projects
+  def upcoming_projects
+    @projects = Project.paginate(:conditions =&gt; Project.upcoming_conditions, :order =&gt; &quot;updated_at DESC&quot;, :page =&gt; params[:page], :per_page =&gt; AppConfig.projects_per_page)
   end
 
   # verify that the current user owns a project</diff>
      <filename>app/controllers/projects_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -35,13 +35,20 @@ class UsersController &lt; ApplicationController
 
   def show
     @user = find_user
-    @bookmarked_projects = @user.projects
+    @bookmarked_projects = @user.projects.paginate(:page =&gt; params[:page], :per_page =&gt; AppConfig.bookmarks_per_page)
     @submitted_projects = @user.submitted
     @activities = @user.activities.all(:limit =&gt; 101, :order =&gt; &quot;created_at DESC&quot;)
     @rated_projects = @user.rated_projects
     
     respond_to do |format|
-      format.html
+      format.html do
+        @grid_title = helpers.pluralize(@user.projects.count, &quot;Bookmarked Project&quot;)
+        if params[:ajax]
+          render :partial =&gt; &quot;projects/parts/grid&quot;, :locals =&gt; {:projects =&gt; @bookmarked_projects}, :layout =&gt; false
+        else
+          render
+        end
+      end
       format.js do
         render :partial =&gt; &quot;users/parts/about_user&quot;, :locals =&gt; {:user =&gt; @user}, :layout =&gt; false
       end
@@ -154,7 +161,7 @@ class UsersController &lt; ApplicationController
   def forgot_password
     if request.post?
       User.forgot_password(params[:email])
-      flash[:notice] = &quot;An email has been sent to you that will allow you to reset your password. If you have any problems email us at opensourcerails@gmail.com&quot;
+      flash[:notice] = &quot;An email has been sent to you that will allow you to reset your password. If you have any problems email us at #{AppConfig.admin_email_address}&quot;
     end
     redirect_to new_session_url
   end
@@ -165,7 +172,7 @@ class UsersController &lt; ApplicationController
     # find user from auth code
     @user = User.find_by_forgot_password_hash(params[:auth])
     unless @user
-      flash[:error] = &quot;Reset Password URL was invalid. It may have expired. Please email us at opensourcerails@gmail.com if you are still unable to log in.&quot;
+      flash[:error] = &quot;Reset Password URL was invalid. It may have expired. Please email us at #{AppConfig.admin_email_address} if you are still unable to log in.&quot;
       redirect_to new_session_url
       return
     end
@@ -189,7 +196,12 @@ class UsersController &lt; ApplicationController
 
 protected
   def find_user
-    @user = User.find(params[:id])
+    if(params[:id].to_s.include? &quot;anon_&quot;)
+      user_id = params[:id].gsub(&quot;anon_&quot;,&quot;&quot;).to_i
+      @user = User.find_by_id(user_id)
+    else
+      @user = User.find_by_login(params[:id])
+    end
   end
   
   # verify that the current user can edit this profile</diff>
      <filename>app/controllers/users_controller.rb</filename>
    </modified>
    <modified>
      <diff>@@ -114,7 +114,7 @@ module ApplicationHelper
   
   def paging(page_data, style = :sabros)
     return unless page_data.class == WillPaginate::Collection    
-    will_paginate(page_data, :class =&gt; &quot;pagination #{style}&quot;, :inner_window =&gt; 3)
+    will_paginate(page_data, :class =&gt; &quot;pagination #{style}&quot;, :outer_window =&gt; 1, :inner_window =&gt; 1)
   end
   
   def error_messages_for(name, options = {})
@@ -132,12 +132,36 @@ module ApplicationHelper
   def name_display(user)
     if current_or_anon_user == user
       return &quot;Your&quot;
-    elsif user
+    elsif !user.name.blank?
       return &quot;#{user.name}'s&quot;
+    elsif !user.login.blank?
+      return &quot;#{user.login}'s&quot;
+    else
+      return &quot;User's&quot;
     end
   end
   
   def paging?(list)
     list.is_a? WillPaginate::Collection
   end
+  
+  def hide_login_panel?
+    @hide_login_panel
+  end
+  
+  def hide_login_panel
+    @hide_login_panel = true
+  end
+
+  def projects_rss
+    AppConfig.rss_url || formatted_projects_url(:atom)
+  end
+
+  def upcoming_rss
+    AppConfig.upcoming_rss_url || formatted_upcoming_projects_url(:atom)
+  end
+
+  def activity_rss
+    AppConfig.upcoming_activity_url || formatted_activity_projects_url(:atom)
+  end
 end</diff>
      <filename>app/helpers/application_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,13 @@
 module ProjectsHelper
 
+  def gallery_url
+    if session[:page].blank?
+      root_url
+    else
+      root_url :page =&gt; session[:page]
+    end
+  end
+  
   def activity_display(activity, options = {})
     partial &quot;activities/activity&quot;, options.merge(:activity =&gt; activity)
   end
@@ -121,6 +129,19 @@ module ProjectsHelper
     end
   end
 
+  # Display an approve button for a project (if permissions allow)
+  def delete_button(project)
+    if admin?
+      haml_tag :div, :class =&gt; &quot;actions text-center&quot; do
+        puts br
+        puts link_to(&quot;Delete Project&quot;,
+                        project_url(@project), 
+                        :method =&gt; :delete,
+                        :confirm =&gt; &quot;This delete this project and all related information. There is no UNDO. Continue?&quot;)
+      end
+    end
+  end
+
 
   def deploy_now(project)
     content_tag(:div, :class =&gt; &quot;deploy-now&quot;) do</diff>
      <filename>app/helpers/projects_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -33,7 +33,7 @@ module TabsHelper
   # Give the tab a name and unique id
   def tab(name, tab_id , options={}, &amp;block)
     # append an element to our nav_html
-    @__tabs_navhtml &lt;&lt; content_tag(:li, link_to(name, &quot;##{tab_id}&quot;, :title =&gt; name))
+    @__tabs_navhtml &lt;&lt; content_tag(:li, link_to(name, &quot;##{tab_id}&quot;, :title =&gt; name), :class =&gt; options[:tab_class])
     
     # build our tab
     haml_tag :div, options.merge(:id =&gt; tab_id) do
@@ -41,4 +41,9 @@ module TabsHelper
       puts content_tag(:div, &quot;&quot;, :style =&gt; &quot;clear: both&quot;)
     end
   end
+  
+  def blank_tab
+    @__tabs_navhtml &lt;&lt; content_tag(:li, &quot;&amp;nbsp;&quot;, :class =&gt; &quot;blank&quot;)
+    return &quot;&quot;
+  end
 end
\ No newline at end of file</diff>
      <filename>app/helpers/tabs_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,6 +5,9 @@ class Comment &lt; ActiveRecord::Base
   validates_presence_of :author_name, :author_email
   validates_as_email_address :author_email, :allow_blank =&gt; true
   
+  
+  belongs_to :user, :class_name =&gt; &quot;User&quot;, :foreign_key =&gt; &quot;owner_id&quot;
+  
   def self.initialize_from_user(user)
     comment = Comment.new
     if user.is_a? User</diff>
      <filename>app/models/comment.rb</filename>
    </modified>
    <modified>
      <diff>@@ -12,10 +12,11 @@ class Project &lt; ActiveRecord::Base
   has_many :instructions, :order =&gt; &quot;updated_at DESC&quot;, :dependent =&gt; :delete_all
   
   has_many :bookmarks, :dependent =&gt; :destroy
+  has_many :activities, :order =&gt; &quot;updated_at DESC&quot;, :dependent =&gt; :delete_all
   
   validates_uniqueness_of :title, :on =&gt; :create, :message =&gt; &quot;must be unique&quot;
 
-  attr_accessible :title, :description, :author_name, :author_contact,
+  attr_accessible :title, :description, :author_name, :author_contact, :requirements,
                   :homepage_url, :source_url, :license, :short_description, :tag_list
 
   # checkbox used to auto assign author from current_user
@@ -102,6 +103,10 @@ class Project &lt; ActiveRecord::Base
     find(:all, :conditions =&gt; {:in_gallery =&gt; false, :is_submitted =&gt; true}, :limit =&gt; limit, :order =&gt; &quot;last_changed DESC&quot;)
   end
     
+  def self.gallery(limit = 25)
+    find(:all, :conditions =&gt; {:in_gallery =&gt; true, :is_submitted =&gt; true}, :limit =&gt; limit, :order =&gt; &quot;last_changed DESC&quot;)
+  end
+    
   # Search projects with a given search string
   def self.search(search_term, options = {})
     
@@ -134,6 +139,11 @@ class Project &lt; ActiveRecord::Base
     {:in_gallery =&gt; true, :is_submitted =&gt; true}
   end
 
+  # I'll convert this to named_scope when Rails 2.1 comes out
+  def self.upcoming_conditions
+    {:in_gallery =&gt; false, :is_submitted =&gt; true}
+  end
+
   # Top Downloaded
   def self.top_downloaded(limit = 5)
     find(:all, :limit =&gt; limit, :conditions =&gt; {:is_submitted =&gt; true}, :order =&gt; &quot;downloads DESC&quot;)</diff>
      <filename>app/models/project.rb</filename>
    </modified>
    <modified>
      <diff>@@ -18,7 +18,7 @@ class User &lt; ActiveRecord::Base
   has_many :rated, :class_name =&gt; &quot;ProjectRating&quot;, :foreign_key =&gt; &quot;rater_id&quot;
   def rated_projects
     project_list = []
-    rated.all(:include =&gt; [:project]).each do |r|
+    rated.all(:order =&gt; &quot;created_at DESC&quot;, :include =&gt; [:project]).each do |r|
       p = r.project
       p.user_rating = r
       project_list &lt;&lt; p
@@ -51,7 +51,7 @@ class User &lt; ActiveRecord::Base
 
   # prevents a user from submitting a crafted form that bypasses activation
   # anything else you want your user to change should be added here.
-  attr_accessible :login, :email, :password, :password_confirmation, :signup
+  attr_accessible :login, :email, :password, :password_confirmation, :signup, :homepage, :name, :about
 
   acts_as_state_machine :initial =&gt; :anonymous
   state :anonymous
@@ -122,6 +122,14 @@ class User &lt; ActiveRecord::Base
     UserMailer.deliver_send_password_reset(self)
   end
   
+  def login
+    if self[:login].blank?
+      &quot;anon_#{self.id}&quot;
+    else
+      self[:login]
+    end
+  end
+    
   
   # finds an email and initiate the forgot password flow
   def self.forgot_password(email)
@@ -181,6 +189,10 @@ class User &lt; ActiveRecord::Base
     return &quot;Anonymous&quot;
   end
   
+  def to_param
+    return self.login
+  end
+  
   def update_from_comment(comment)
     unless self.signed_up?
       self.name = comment.author_name if self.name.blank?</diff>
      <filename>app/models/user.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 class UserMailer &lt; ActionMailer::Base
   def signup_notification(user)
-    setup_email(user)
+    setup_email(user.email)
 
     subject &quot;#{AppConfig.site_name} - Please activate your new account&quot;  
     body  :user =&gt; user,
@@ -8,23 +8,32 @@ class UserMailer &lt; ActionMailer::Base
   end
   
   def activation_success(user)
-    setup_email(user)
+    setup_email(user.email)
     subject &quot;#{AppConfig.site_name} - Your account has been activated!&quot;
     body :user =&gt; user,
          :url =&gt; &quot;#{AppConfig.site_url}&quot;
   end
   
   def send_password_reset(user)
-    setup_email(user)
+    setup_email(user.email)
     
     subject &quot;#{AppConfig.site_name} Password Recovery&quot;
     body :user =&gt; user
   end
   
+  def tell_friend(user, friend)
+    setup_email(friend.to)
+    reply_to friend.from
+    
+    subject AppConfig.tellafriend_subject
+    body :tell_friend =&gt; friend, :current_user =&gt; user
+    
+  end
+  
   protected
-    def setup_email(user)
-      recipients  &quot;#{user.email}&quot;
-      from  &quot;Admin&quot;
+    def setup_email(to)
+      recipients  &quot;#{to}&quot;
+      from  &quot;#{AppConfig.admin_email_name} &lt;#{AppConfig.admin_email_address}&gt;&quot;
       sent_on Time.now
     end
 end</diff>
      <filename>app/models/user_mailer.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 - if local_assigns[:activity]
-  %span.activity{:class =&gt; activity.target_type.downcase}
+  %span.activity{:class =&gt; activity.target_type.to_s.downcase}
   
     = activity.user_name
     = activity.action_name
@@ -8,7 +8,8 @@
     = activity.endconnector
 
     - if activity.project_id
-      = activity.endconnector+link_to(activity.project_name.to_s+&quot;.&quot;, project_url(:id =&gt; activity.project_id))
+      = activity.endconnector
+      = link_to(&quot;#{activity.project_name}.&quot;, project_url(:id =&gt; activity.project_id))
     - else
       == #{activity.endconnector}.
     </diff>
      <filename>app/views/activities/_activity.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -4,5 +4,5 @@
   %p You haven't bookmarked any applications.
 - else
   -# list my projects
-  = partial &quot;projects/parts/list&quot;, :projects =&gt; @my_projects
+  = partial &quot;projects/parts/list&quot;, :projects =&gt; @my_projects, :action =&gt; local_assigns[:action]
   
\ No newline at end of file</diff>
      <filename>app/views/bookmarks/_bookmark_list.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,10 @@
           %p.comment-meta
             %span.comment-num
               = link_to &quot;##{index+1}&quot;, project_comment_url(comment.project, comment)
-            %strong= comment.author_name
+            - if comment.user and comment.user.active?
+              %strong= link_to comment.author_name, comment.user
+            - else
+              %strong= comment.author_name
             %span.comment-time{:title =&gt; comment.created_at.to_s(:comment)}
               == posted #{time_ago_in_words(comment.created_at)}
               ago.</diff>
      <filename>app/views/comments/_comments.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -28,7 +28,8 @@
             = f.text_field :author_email, :label =&gt; &quot;Email (not displayed)&quot;
         
         %li= f.text_area :body, :label =&gt; &quot;Comment&quot;
-        %li= f.text_field :antispam, :label =&gt; AppConfig.spam_question, :separator =&gt; &quot;&quot;
+        - if comment.new_record?
+          %li= f.text_field :antispam, :label =&gt; AppConfig.spam_question, :separator =&gt; &quot;&quot;
         %li.app_form_sub
           - if is_edit?
             .right</diff>
      <filename>app/views/comments/_form.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,8 @@
   = f.text_field :title, :label =&gt; &quot;Link Name&quot;
   = f.text_field :url, :label =&gt; &quot;Link URL&quot;
   = f.text_area :description, :label =&gt; &quot;Notes, demo logins, etc.. (optional)&quot;, :separator =&gt; &quot;&quot;
-  = f.text_field :antispam, :label =&gt; AppConfig.spam_question, :separator =&gt; &quot;&quot;
+  - if hosted_instance.new_record?
+    = f.text_field :antispam, :label =&gt; AppConfig.spam_question, :separator =&gt; &quot;&quot;
   
   .actions
     - if hosted_instance.new_record?</diff>
      <filename>app/views/hosted_instances/_form.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -1,13 +1,11 @@
 - force_show = false unless local_assigns[:force_show]
 #about_us{hide_unless(current_or_anon_user.show_welcome! || force_show)}
   - right_box &quot;about&quot; do
-    %h3.about About Open Source Rails
+    %h3.about== About #{AppConfig.site_name}
     %p
-      Open Source Rails is a community site dedicated to tracking the best open source Ruby on Rails applications. 
+      = AppConfig.site_description
 
     - unless force_show
       = link_to &quot;Read More...&quot;, about_url, :class =&gt; &quot;readmore&quot;
       |
-      = link_to &quot;Close&quot;, &quot;#&quot;, :class =&gt; &quot;hide-click&quot;, :rel =&gt; &quot;.right-box-top.about&quot;
-  
-  
\ No newline at end of file
+      = link_to &quot;Hide About&quot;, &quot;#&quot;, :class =&gt; &quot;hide-click&quot;, :rel =&gt; &quot;.right-box-top.about&quot;
\ No newline at end of file</diff>
      <filename>app/views/layouts/_about_us.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -2,29 +2,26 @@
   .links
     %strong LINKS:
     = link_to &quot;Gallery&quot;, root_url
-    - if logged_in?
-      |
-      = link_to &quot;Profile&quot;, user_url(current_user)
+    |
+    = link_to &quot;Profile&quot;, user_url(current_or_anon_user)
     |
     = link_to &quot;About&quot;, about_url
     |
     = link_to &quot;Blog&quot;, blog_url
+    - if AppConfig.feedback_link
+      |
+      = link_to &quot;Feedback&quot;, AppConfig.feedback_link
     - unless logged_in?
       |
       = link_to &quot;Login&quot;, new_session_url
       |
       = link_to &quot;Sign Up&quot;, new_user_url
   
-  .about
     .credits
-      &amp;copy; Open Source Rails
-      |
-      Developed by
-      = link_to &quot;RailsJedi&quot;, &quot;http://www.railsjedi.com&quot;
-    .credits
-      Logo by
-      = link_to(&quot;VivaLogo&quot;, &quot;http://www.vivalogo.com&quot;)+&quot;,&quot;
-      Source Code 
-      = link_to &quot;Available&quot;, &quot;http://www.github.com/jcnetdev/opensourcerails&quot;
+      == &amp;copy; #{AppConfig.site_name}
+
+  .about
+    = partial(&quot;layouts/social_media&quot;) if AppConfig.show_social_media
       
-  = clear
\ No newline at end of file
+  = clear  
+  </diff>
      <filename>app/views/layouts/_footer.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -1,18 +1,21 @@
 #header
-  = partial &quot;sessions/login_panel&quot;
   %h1
     %a.replace#logo{:href =&gt; root_url, :name =&gt; &quot;logo&quot;, :title =&gt; AppConfig.site_name}
       %span &amp;nbsp;
       = AppConfig.site_name
 
+  .address
+    = link_to image_tag(&quot;slogan.png&quot;), AppConfig.site_url
+    
   #menu
     %ul
       - if active_tab.is_a? String
         %li= menu_item(active_tab, url_for, true)
-      %li= menu_item(&quot;Gallery&quot;, root_url, active_tab == :gallery)
+      %li= menu_item(&quot;Gallery&quot;, gallery_url, active_tab == :gallery)
       %li= menu_item(&quot;About&quot;, about_url, active_tab == :about)
       %li= menu_item(&quot;Blog&quot;, blog_url, active_tab == :blog)
       - if logged_in?
         %li= link_to menu_tag(&quot;Log Out&quot;), session_url, :method =&gt; :delete, :confirm =&gt; &quot;Are you sure you want to log out?&quot;
       
     = clear
+  = partial &quot;sessions/login_panel&quot;</diff>
      <filename>app/views/layouts/_header.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -8,9 +8,10 @@
     = stylesheets
     = javascripts
 
-    = yield :head
-        
-    = auto_discovery_link_tag(:atom, AppConfig.rss_url || formatted_projects_url(:atom), :title =&gt; &quot;Latest Projects&quot;)
+    = auto_discovery_link_tag(:atom, projects_rss, :title =&gt; &quot;Latest Apps&quot;)
+    = auto_discovery_link_tag(:atom, upcoming_rss, :title =&gt; &quot;Upcoming Apps&quot;)
+    - if AppConfig.blog_rss
+      = auto_discovery_link_tag(:atom, AppConfig.blog_rss, :title =&gt; &quot;Latest Blog Posts&quot;)
     
   %body
     .body-main</diff>
      <filename>app/views/layouts/application.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -1,28 +1,49 @@
 - active_tab :about
 
-#body
+#body.about
   #body_left
     #left_pad
-      .details.main
-        %h2.right== Latest #{AppConfig.version}
-        %h2.left About OpenSourceRails.com
-        = clear
-        .entry{:style =&gt; &quot;font-size: 20px;color:#666&quot;}
-          %p Open Source Rails is dedicated to keeping track of the latest and greatest Ruby on Rails open source applications.
-          %p 
-            If you are the author of one of the projects listed on the site and want admin access over your project, 
-            register a user and then email us 
-            = mail_to &quot;opensourcerails@gmail.com&quot;, &quot;here&quot;, :encode =&gt; &quot;javascript&quot;
-            and we'll grant you project ownership access.    
-          %p 
-            Feature request and bug can be 
-            sent
-            = mail_to &quot;opensourcerails@gmail.com&quot;, &quot;here.&quot;, :encode =&gt; &quot;javascript&quot;
+      - if @preview
+        = partial &quot;pages/tell_friend_preview&quot;
+      - else
+        .details.main
+          %h2.right== Latest #{AppConfig.version}
+          %h2.left== About #{AppConfig.site_name}
+          = clear
+          .entry{:style =&gt; &quot;color:#666&quot;}
+            %p
+              = br
+              Open Source Rails features an easy to browse gallery of the best open source / freely available rails projects.
+              
+            %p
+              Each project features screenshots plus community driven comments, ratings, and bookmarking. 
+            
+            %p
+              If you have a Rails project that you're considering to release to the community, please let us know
+              and we'll help you get featured, and hopefully build up a community to help build and extend your project.
+          
+            %p{:style =&gt; &quot;margin-bottom: 0&quot;}
+              Keep up to date with OpenSourceRails.com:
+          
+            %ul{:style =&gt; &quot;margin-bottom: 20px&quot;}
+              %li= link_to &quot;Featured Projects RSS Feed&quot;, projects_rss
+              %li= link_to &quot;Upcoming Projects RSS Feed&quot;, upcoming_rss
+              - if AppConfig.blog_rss
+                %li= link_to &quot;Latest Blog RSS Feed&quot;, AppConfig.blog_rss
+          
+            %p 
+              Got a feature idea? Find a bug? 
+              = mail_to AppConfig.admin_email_address, &quot;Email&quot;, :encode =&gt; &quot;javascript&quot;
+              us.
           
   #body_right
     = partial &quot;layouts/about_us&quot;, :force_show =&gt; true
     #about_tabs
-      - tabs do
+      - tabs(:class =&gt; &quot;size-3&quot;) do
+        - tab &quot;Promote&quot;, &quot;spread_tab&quot; do
+          %p{:style =&gt; &quot;margin-top: 0px;margin-bottom: 10px&quot;} Let a friend know about Open Source Rails!
+          = partial &quot;pages/tell_friend_form&quot;
+          
         - tab &quot;Credits&quot;, &quot;credits_tab&quot; do
           %p{:style =&gt; &quot;margin-bottom: 0px&quot;} Open Source Rails uses the following freely available design components.
           %ul
@@ -33,10 +54,6 @@
               Crystal Icons by
               = link_to &quot;Everaldo&quot;, &quot;http://www.everaldo.com/crystal/&quot;
             %li
-              Initial Theme Template
-              = br+&quot;by&quot;
-              = link_to &quot;Shabu Anower&quot;, &quot;http://www.osdesigner.net/about/&quot;          
-            %li
               Javascript Lightbox Effect 
               = br+&quot;by&quot;
               = link_to &quot;Nick Stakenburg&quot;, &quot;http://www.nickstakenburg.com&quot;</diff>
      <filename>app/views/pages/about.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 - if local_assigns[:project]  
   - div_for(project, :class =&gt; cycle(&quot;start-row&quot;, &quot;&quot;)) do
     %h2= link_to h(project.title), project_url(project), :rel =&gt; &quot;bookmark&quot;, :title =&gt; h(project.short_description)
-    %p= project.short_description
+    %p.tagline= project.short_description
     
     -# show default screenshot
     .screen= link_to image_tag(project.screenshot_url), project_url(project)</diff>
      <filename>app/views/projects/_project.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 atom_feed do |feed|
-  feed.title &quot;Open Source Rails&quot;
+  feed.title AppConfig.site_name
   
   feed.updated((@projects.first.promoted_at)) unless @projects.empty?
 </diff>
      <filename>app/views/projects/index.atom.builder</filename>
    </modified>
    <modified>
      <diff>@@ -7,17 +7,16 @@
       = partial &quot;projects/parts/grid&quot;, :projects =&gt; @projects
       
   #body_right
-    = partial &quot;layouts/searchbox&quot;
+    = partial &quot;layouts/about_us&quot;
     #submit_app
       = link_to_image &quot;template/submit_app.gif&quot;, &quot;#&quot;, |
                       :label =&gt; &quot;Submit a New Application&quot;, |
                       :class =&gt; &quot;submit toggle&quot;, :rel =&gt; &quot;#new_project_tab_form&quot; |
     
     = render :partial =&gt; &quot;projects/parts/mini_form&quot;
+    = partial &quot;layouts/searchbox&quot;
 
-    = partial &quot;layouts/about_us&quot;
     = partial &quot;projects/parts/tabs&quot;
     
-    
   = clear
 </diff>
      <filename>app/views/projects/index.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -16,6 +16,7 @@
       
         %p
           - unless project.license.blank?
+            = br
             %strong License: 
             =h project.license
 </diff>
      <filename>app/views/projects/parts/_about_project.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -1,8 +1,11 @@
 #project_grid
   - if local_assigns[:projects]
 
-    - unless local_assigns[:grid_title].blank?
-      %h3= local_assigns[:grid_title]
+    - if !@grid_title.blank?
+      %h3
+        - if @grid_rss
+          .rss= link_to image_tag(&quot;rss-reflection-sm.png&quot;, :size =&gt; &quot;20x20&quot;), @grid_rss
+        = @grid_title
     - else
       = search_or_tag_title
     </diff>
      <filename>app/views/projects/parts/_grid.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -19,4 +19,7 @@
           = time_ago_in_words(project.last_changed) 
           ago.
 
-        = clear
\ No newline at end of file
+        = clear
+  - if local_assigns[:action]
+    %li.action
+      = link_to action.first, action.last
\ No newline at end of file</diff>
      <filename>app/views/projects/parts/_list.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -1,14 +1,23 @@
-- if @upcoming and @my_projects
-  - tabs(:class =&gt; &quot;size-2&quot;) do
+- tabs(:class =&gt; &quot;size-2&quot;) do
+  - if @hide_upcoming
+    - tab &quot;Gallery&quot;, &quot;gallery_apps&quot;, :class =&gt; &quot;scroll-250&quot; do
+      - if Project.gallery.size &gt; 0
+        = partial &quot;projects/parts/list&quot;, :projects =&gt; Project.gallery, :action =&gt; [&quot;View All Gallery Projects&quot;, projects_url]
+      - else
+        %p No gallery applications. Submit one now!
+
+  - else
     - tab &quot;Upcoming&quot;, &quot;upcoming_apps&quot;, :class =&gt; &quot;scroll-250&quot; do
-      - if @upcoming.size &gt; 0
-        = partial &quot;projects/parts/list&quot;, :projects =&gt; @upcoming
+      - if Project.upcoming.size &gt; 0
+        = partial &quot;projects/parts/list&quot;, :projects =&gt; Project.upcoming, :action =&gt; [&quot;View All Upcoming Projects&quot;, upcoming_projects_url]
       - else
         %p No upcoming applications. Submit one now!
 
+  - if @my_projects
     - tab &quot;Bookmarked&quot;, &quot;projects_add&quot;, :class =&gt; &quot;scroll-250&quot; do
-      #my_bookmarks= partial &quot;bookmarks/bookmark_list&quot;, :projects =&gt; @my_projects
-
+      #my_bookmarks= partial &quot;bookmarks/bookmark_list&quot;, :projects =&gt; @my_projects, :action =&gt; [&quot;View All Bookmarks&quot;, user_url(current_or_anon_user)]
+  - else
+    - blank_tab
 
 - if @latest_activities and @tags and @top_downloaded
   - tabs(:class =&gt; &quot;size-3&quot;) do</diff>
      <filename>app/views/projects/parts/_tabs.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -21,7 +21,7 @@
         
   #body_right
     #go_back
-      = link_to_image &quot;back-arrow-sm.png&quot;, projects_url(:page =&gt; session[:page]), :label =&gt; &quot;Back to Gallery...&quot;
+      = link_to_image &quot;back-arrow-sm.png&quot;, gallery_url, :label =&gt; &quot;Back to Gallery...&quot;
     #project_info
       - right_box do
         = partial &quot;projects/parts/about_project&quot;, :project =&gt; @project
@@ -32,5 +32,6 @@
       - if @project.is_submitted?
         = partial &quot;projects/tabs/project_activity&quot;, :activities =&gt; @latest_activities
       = approve_button(@project)
+      = delete_button(@project)
 
   = clear
\ No newline at end of file</diff>
      <filename>app/views/projects/show.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -1,9 +1,11 @@
-.login
+- unless @hide_login_panel
   - if logged_in?
-    Logged in as:
-    %strong= link_to current_user.login, user_url(current_user)
+    .login.current
+      Logged in as:
+      %strong= link_to current_user.login, user_url(current_user)
   - else
-    .links
-      = link_to &quot;Login&quot;, new_session_url
-      | 
-      = link_to &quot;Sign Up&quot;, new_user_url
+    .login
+      .links
+        = link_to &quot;Login&quot;, new_session_url
+        | 
+        = link_to &quot;Sign Up&quot;, new_user_url</diff>
      <filename>app/views/sessions/_login_panel.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -3,6 +3,8 @@
 
 - @login ||= Login.new
 
+- hide_login_panel
+
 #body
   #body_left
     #left_pad</diff>
      <filename>app/views/sessions/new.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,8 @@
 - title &quot;Sign Up&quot;
 - active_tab &quot;Sign Up&quot;
 
+- hide_login_panel
+
 #body
   #body_left
     #left_pad</diff>
      <filename>app/views/users/new.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -12,8 +12,29 @@
       
   #body_right
     - if current_or_anon_user == @user
+      - if @user.active?
+        - right_box do
+          = partial &quot;users/parts/about_user&quot;, :user =&gt; @user
+      - else
+        - right_box do
+          = br
+          %h2= link_to &quot;Make an Account!&quot;, new_user_url
+    - else
       - right_box do
-        = partial &quot;users/parts/about_user&quot;, :user =&gt; @user
+        %h3== #{name_display(@user)} Profile
+        .display      
+          %p
+            %strong Name:
+            =h default(@user.name, &quot;[Not Entered]&quot;)
+            - unless @user.homepage.blank?
+              = br
+              %strong Homepage:
+              = link_to h(@user.homepage), h(@user.homepage)
+
+            - unless @user.profile.blank?
+              = br
+              %strong About:
+              =h(@user.profile)
     
     - right_box do
       %h3== #{name_display(@user)} Activities (#{@activities.size})</diff>
      <filename>app/views/users/show.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -2,16 +2,18 @@
 
 - build_form_for [@project, version], :html =&gt; {:multipart =&gt; true} do |f|
   
-  .attach-download
-    - f.file_field :download, :label =&gt; &quot;Upload Tarball&quot;, :size =&gt; &quot;25&quot; do
-      .text-right= link_to &quot;Set Download Link&quot;, &quot;#&quot;, :class =&gt; &quot;set-link&quot;
-  .attach-link{hidden}
+  .attach-link
     - f.text_field :link, :label =&gt; &quot;Download Link&quot; do
       .text-right= link_to &quot;Upload Version&quot;, &quot;#&quot;, :class =&gt; &quot;set-upload&quot;
+  
+  .attach-download{hidden}
+    - f.file_field :download, :label =&gt; &quot;Upload Tarball&quot;, :size =&gt; &quot;25&quot; do
+      .text-right= link_to &quot;Set Download Link&quot;, &quot;#&quot;, :class =&gt; &quot;set-link&quot;
 
   = f.text_field :title, :label =&gt; &quot;Version Name&quot;
   = f.text_area :notes, :label =&gt; &quot;Update Notes (optional)&quot;
-  = f.text_field :antispam, :label =&gt; AppConfig.spam_question, :separator =&gt; &quot;&quot;
+  - if version.new_record?
+    = f.text_field :antispam, :label =&gt; AppConfig.spam_question, :separator =&gt; &quot;&quot;
   
   .actions
     - if version.new_record?</diff>
      <filename>app/views/versions/_form.html.haml</filename>
    </modified>
    <modified>
      <diff>@@ -1,20 +1,32 @@
 # Set Site Details
 site_name: &quot;Open Source Rails&quot;
 site_url: &quot;http://www.opensourcerails.com&quot;
+blog_url: &quot;http://blog.opensourcerails.com&quot;
+admin_email_name: &quot;OpenSourceRails&quot;
+admin_email_address: &quot;opensourcerails@gmail.com&quot;
 version: &quot;v1.0&quot;
+
+# Options
+show_social_media: true
 require_email_activation: true
 enable_throttler: false
+show_morph: true
 
-blog_url: http://blog.opensourcerails.com
-
-file_storage: s3
+# About Page
+site_description: &quot;Open Source Rails is a community site dedicated to tracking the best open source Ruby on Rails applications.&quot;
 
 # SEO Stuff
 default_meta_keywords: &quot;open source ruby on rails&quot;
 default_meta_description: &quot;Open Source Rails is a community site dedicated to tracking the best open source Ruby on Rails applications.&quot;
 
+# Tell a Friend
+tellafriend_subject: &quot;Check out OpenSourceRails.com&quot;
+tellafriend_body_intro: &quot;OpenSourceRails.com is features the latest and greatest open source Ruby on Rails projects. Check it out: http://www.opensourcerails.com&quot;
+tellafriend_body_message: &quot;It features an easy to use browse gallery with screenshots plus community driven comments, ratings, and bookmarking.&quot;
+
 # Paging Sizes
 projects_per_page: 6
+bookmarks_per_page: 8
 
 # Set Avatar Sizes
 screenshot_sizes: 
@@ -24,9 +36,9 @@ screenshot_sizes:
 # Set default avatar
 screenshot_default: &quot;/images/default_screenshots/:style.png&quot;
 
+# Retarded Spam Question
 spam_question: What is 3 plus 2?
 spam_answer: 
   - &quot;5&quot;
   - &quot;five&quot;
 
-show_morph: false
\ No newline at end of file</diff>
      <filename>config/app_config.yml</filename>
    </modified>
    <modified>
      <diff>@@ -9,6 +9,12 @@ set :scm, &quot;git&quot;
 set :checkout, &quot;export&quot; 
 set :deploy_via, :remote_cache
 
+# set the list of config files to symlink on deployment
+set :config_files, %w[database.yml app_config.yml environments/production.yml]
+
+# set the list of folders to symlink on deployment
+set :upload_folders, %w[screenshots downloads]
+
 set :base_path, &quot;/var/www&quot;
 set :deploy_to, &quot;/var/www/production/#{application}&quot;
 set :apache_site_folder, &quot;/etc/apache2/sites-enabled&quot;
@@ -83,6 +89,7 @@ after &quot;deploy:setup&quot;, &quot;init:set_permissions&quot;
 after &quot;deploy:setup&quot;, &quot;init:database_yml&quot;
 after &quot;deploy:setup&quot;, &quot;init:create_database&quot;
 after &quot;deploy:setup&quot;, &quot;init:create_vhost&quot;
+after &quot;deploy:setup&quot;, &quot;init:create_app_config&quot;
 after &quot;deploy:setup&quot;, &quot;init:enable_site&quot;
 namespace :init do
   
@@ -140,34 +147,59 @@ production:
     
   end
   
+  desc &quot;create app config&quot;
+  task :create_app_config do
+    app_config_yml = File.open(File.join(File.dirname(__FILE__), &quot;app_config.yml&quot;), &quot;r&quot;).read
+    put app_config_yml, &quot;#{shared_path}/config/app_config.yml&quot;
+    
+    run &quot;mkdir -p #{shared_path}/config/environments/&quot;
+    
+    production_yml = File.open(File.join(File.dirname(__FILE__), &quot;environments&quot;, &quot;production.yml&quot;), &quot;r&quot;).read
+    put production_yml, &quot;#{shared_path}/config/environments/production.yml&quot;
+  end
+  
 end
 
 after &quot;deploy:update_code&quot;, &quot;localize:install_gems&quot;
 after &quot;deploy:update_code&quot;, &quot;localize:copy_shared_configurations&quot;
-after &quot;deploy:update_code&quot;, &quot;localize:upload_folders&quot;
+after &quot;deploy:update_code&quot;, &quot;localize:link_upload_folders&quot;
+after &quot;deploy:update_code&quot;, &quot;localize:merge_assets&quot;
 
 namespace :localize do
   desc &quot;copy shared configurations to current&quot;
   task :copy_shared_configurations, :roles =&gt; [:app] do
-    %w[database.yml].each do |f|
-      run &quot;ln -nsf #{shared_path}/config/#{f} #{release_path}/config/#{f}&quot;
+    if defined? :config_files
+      config_files.each do |f|
+        run &quot;ln -nsf #{shared_path}/config/#{f} #{release_path}/config/#{f}&quot;
+      end
     end
   end
   
   desc &quot;installs / upgrades gem dependencies &quot;
   task :install_gems, :roles =&gt; [:app] do
-    sudo &quot;date&quot; # fuck you capistrano
+    sudo &quot;date&quot;
     run &quot;cd #{release_path} &amp;&amp; sudo rake RAILS_ENV=production gems:install&quot;
   end
   
-  task :upload_folders, :roles =&gt; [:app] do
-    # create symlink for screenshots
-    run &quot;mkdir -p #{deploy_to}/shared/screenshots&quot;
-    run &quot;ln -s #{deploy_to}/shared/screenshots #{release_path}/public/screenshots&quot;
-    
-    # create symlink for downloads
-    run &quot;mkdir -p #{deploy_to}/shared/downloads&quot;
-    run &quot;ln -s #{deploy_to}/shared/downloads #{release_path}/public/downloads&quot;
+  desc &quot;linking upload folders&quot;
+  task :link_upload_folders, :roles =&gt; [:app] do
+    if defined? :upload_folders
+      upload_folders.each do |f|
+        run &quot;mkdir -p #{shared_path}/uploads/#{f}&quot;
+        run &quot;ln -nsf #{shared_path}/uploads/#{f} #{release_path}/public/#{f}&quot;
+      end
+    end
+  end
+  
+  desc &quot;merge asset files&quot;
+  task :merge_assets, :roles =&gt; [:app] do
+    sudo &quot;date&quot; 
+    run &quot;cd #{release_path} &amp;&amp; sudo script/merge_assets&quot;
+  end
+
+  task :merge_current_assets, :roles =&gt; [:app] do
+    sudo &quot;date&quot; 
+    run &quot;cd #{current_path} &amp;&amp; sudo script/merge_assets&quot;
   end
   
 end</diff>
      <filename>config/deploy.rb</filename>
    </modified>
    <modified>
      <diff>@@ -10,6 +10,10 @@ ActionController::Routing::Routes.draw do |map|
                     :details =&gt; :get, 
                     :rate =&gt; :post,
                     :download =&gt; :get
+                  },
+                  :collection =&gt; {
+                    :upcoming =&gt; :get,
+                    :activity =&gt; :get
                   } do |project|    
 
     project.resources :comments</diff>
      <filename>config/routes.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,24 +9,24 @@
 #
 # It's strongly recommended to check this file into your version control system.
 
-ActiveRecord::Schema.define(:version =&gt; 20080728120230) do
+ActiveRecord::Schema.define(:version =&gt; 20080826114524) do
 
   create_table &quot;activities&quot;, :force =&gt; true do |t|
-    t.datetime &quot;created_at&quot;
-    t.datetime &quot;updated_at&quot;
-    t.integer  &quot;project_id&quot;,    :limit =&gt; 11
-    t.integer  &quot;target_id&quot;,     :limit =&gt; 11
+    t.string   &quot;user_name&quot;
+    t.integer  &quot;user_id&quot;,       :limit =&gt; 11
     t.string   &quot;action_name&quot;
-    t.string   &quot;target_name&quot;
     t.string   &quot;midsentence&quot;
-    t.string   &quot;project_name&quot;
-    t.string   &quot;endconnector&quot;
-    t.string   &quot;source_action&quot;
+    t.string   &quot;target_name&quot;
+    t.integer  &quot;target_id&quot;,     :limit =&gt; 11
     t.string   &quot;target_type&quot;
-    t.integer  &quot;user_id&quot;,       :limit =&gt; 11
-    t.string   &quot;source_model&quot;
-    t.string   &quot;user_name&quot;
+    t.string   &quot;endconnector&quot;
+    t.string   &quot;project_name&quot;
+    t.integer  &quot;project_id&quot;,    :limit =&gt; 11
     t.datetime &quot;happened_at&quot;
+    t.string   &quot;source_model&quot;
+    t.string   &quot;source_action&quot;
+    t.datetime &quot;created_at&quot;
+    t.datetime &quot;updated_at&quot;
   end
 
   create_table &quot;bookmarks&quot;, :force =&gt; true do |t|
@@ -74,9 +74,9 @@ ActiveRecord::Schema.define(:version =&gt; 20080728120230) do
     t.string   &quot;license&quot;
     t.datetime &quot;created_at&quot;
     t.datetime &quot;updated_at&quot;
-    t.string   &quot;thumb_url&quot;,                                                           :default =&gt; &quot;/images/default_screenshots/thumb.png&quot;
-    t.string   &quot;preview_url&quot;,                                                         :default =&gt; &quot;/images/default_screenshots/medium.png&quot;
-    t.string   &quot;screenshot_url&quot;,                                                      :default =&gt; &quot;/images/default_screenshots/original.png&quot;
+    t.string   &quot;thumb_url&quot;,                                                           :default =&gt; &quot;/images/default_thumb.png&quot;
+    t.string   &quot;preview_url&quot;,                                                         :default =&gt; &quot;/images/default_preview.png&quot;
+    t.string   &quot;screenshot_url&quot;,                                                      :default =&gt; &quot;/images/default_screenshot.png&quot;
     t.string   &quot;download_url&quot;
     t.boolean  &quot;in_gallery&quot;,                                                          :default =&gt; false
     t.boolean  &quot;is_submitted&quot;,                                                        :default =&gt; false
@@ -85,7 +85,7 @@ ActiveRecord::Schema.define(:version =&gt; 20080728120230) do
     t.integer  &quot;author_id&quot;,              :limit =&gt; 11
     t.string   &quot;short_description&quot;
     t.integer  &quot;rating_count&quot;,           :limit =&gt; 11
-    t.integer  &quot;rating_total&quot;,           :limit =&gt; 10
+    t.integer  &quot;rating_total&quot;,           :limit =&gt; 10, :precision =&gt; 10, :scale =&gt; 0
     t.decimal  &quot;rating_avg&quot;,                           :precision =&gt; 10, :scale =&gt; 2
     t.text     &quot;cached_tag_list&quot;
     t.integer  &quot;downloads&quot;,              :limit =&gt; 11,                                :default =&gt; 0
@@ -96,30 +96,35 @@ ActiveRecord::Schema.define(:version =&gt; 20080728120230) do
     t.integer  &quot;screenshots_count&quot;,      :limit =&gt; 11,                                :default =&gt; 0
     t.integer  &quot;instructions_count&quot;,     :limit =&gt; 11,                                :default =&gt; 0
     t.datetime &quot;last_changed&quot;
+    t.string   &quot;requirements&quot;
   end
 
   create_table &quot;ratings&quot;, :force =&gt; true do |t|
     t.integer  &quot;rater_id&quot;,   :limit =&gt; 11
     t.integer  &quot;rated_id&quot;,   :limit =&gt; 11
     t.string   &quot;rated_type&quot;
-    t.integer  &quot;rating&quot;,     :limit =&gt; 10
+    t.integer  &quot;rating&quot;,     :limit =&gt; 10, :precision =&gt; 10, :scale =&gt; 0
     t.datetime &quot;created_at&quot;
   end
 
   add_index &quot;ratings&quot;, [&quot;rater_id&quot;], :name =&gt; &quot;index_ratings_on_rater_id&quot;
   add_index &quot;ratings&quot;, [&quot;rated_type&quot;, &quot;rated_id&quot;], :name =&gt; &quot;index_ratings_on_rated_type_and_rated_id&quot;
 
+  create_table &quot;schema_info&quot;, :id =&gt; false, :force =&gt; true do |t|
+    t.integer &quot;version&quot;, :limit =&gt; 11
+  end
+
   create_table &quot;screenshots&quot;, :force =&gt; true do |t|
     t.integer  &quot;project_id&quot;,              :limit =&gt; 11
-    t.integer  &quot;owner_id&quot;,                :limit =&gt; 11
-    t.string   &quot;screenshot_file_name&quot;
-    t.string   &quot;screenshot_content_type&quot;
-    t.integer  &quot;screenshot_file_size&quot;,    :limit =&gt; 11
-    t.string   &quot;filename&quot;
     t.string   &quot;content_type&quot;
+    t.string   &quot;filename&quot;
     t.integer  &quot;size&quot;,                    :limit =&gt; 11
     t.datetime &quot;created_at&quot;
     t.datetime &quot;updated_at&quot;
+    t.integer  &quot;owner_id&quot;,                :limit =&gt; 11
+    t.string   &quot;screenshot_content_type&quot;
+    t.string   &quot;screenshot_file_name&quot;
+    t.integer  &quot;screenshot_file_size&quot;,    :limit =&gt; 11
   end
 
   create_table &quot;taggings&quot;, :force =&gt; true do |t|
@@ -152,15 +157,17 @@ ActiveRecord::Schema.define(:version =&gt; 20080728120230) do
     t.boolean  &quot;admin&quot;,                                   :default =&gt; false
     t.string   &quot;ip_address&quot;
     t.string   &quot;name&quot;
-    t.string   &quot;homepage&quot;
     t.text     &quot;profile&quot;
     t.boolean  &quot;signed_up&quot;,                               :default =&gt; false
     t.text     &quot;bookmark_blob&quot;
     t.boolean  &quot;show_alert&quot;,                              :default =&gt; false
     t.boolean  &quot;show_welcome&quot;,                            :default =&gt; true
     t.boolean  &quot;spammer&quot;,                                 :default =&gt; false
-    t.string   &quot;forgot_password_hash&quot;
     t.datetime &quot;forgot_password_expire&quot;
+    t.string   &quot;forgot_password_hash&quot;
+    t.string   &quot;homepage&quot;
+    t.integer  &quot;tell_friend_count&quot;,         :limit =&gt; 11, :default =&gt; 0
+    t.datetime &quot;tell_friend_last_sent&quot;
   end
 
   add_index &quot;users&quot;, [&quot;ip_address&quot;], :name =&gt; &quot;index_users_on_ip_address&quot;
@@ -169,18 +176,18 @@ ActiveRecord::Schema.define(:version =&gt; 20080728120230) do
   create_table &quot;versions&quot;, :force =&gt; true do |t|
     t.integer  &quot;project_id&quot;,            :limit =&gt; 11
     t.integer  &quot;uploader_id&quot;,           :limit =&gt; 11
-    t.string   &quot;title&quot;
     t.text     &quot;notes&quot;
-    t.string   &quot;link&quot;
-    t.string   &quot;download_file_name&quot;
-    t.string   &quot;download_content_type&quot;
-    t.integer  &quot;download_file_size&quot;,    :limit =&gt; 11
-    t.string   &quot;filename&quot;
     t.string   &quot;content_type&quot;
+    t.string   &quot;filename&quot;
     t.integer  &quot;size&quot;,                  :limit =&gt; 11
     t.datetime &quot;created_at&quot;
     t.datetime &quot;updated_at&quot;
+    t.string   &quot;title&quot;
     t.integer  &quot;owner_id&quot;,              :limit =&gt; 11
+    t.string   &quot;download_content_type&quot;
+    t.string   &quot;download_file_name&quot;
+    t.integer  &quot;download_file_size&quot;,    :limit =&gt; 11
+    t.string   &quot;link&quot;
   end
 
 end</diff>
      <filename>db/schema.rb</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>public/images/right-box/bg.png</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>public/images/right-box/end_bg.png</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>public/images/right-box/top.png</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>public/images/right-box/top_about.png</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>public/images/right-box/top_add.png</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>public/images/tab-bottom.png</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>public/images/tab-half-highlighted.png</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>public/images/tab-half.png</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>public/images/tab-third-highlighted.png</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>public/images/tab-third.png</filename>
    </modified>
    <modified>
      <diff>@@ -5,7 +5,7 @@ $j(document).ready(function() {
   shortcut.add(&quot;ESC&quot;,function() {
     $j(&quot;.container.debug&quot;).toggleClass(&quot;showgrid&quot;);
     $j(&quot;.debug-info.container&quot;).toggle();
-  }, {disable_in_input: true});
+  });
   
 
 });
\ No newline at end of file</diff>
      <filename>public/javascripts/common/shortcuts.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,6 @@
 $j(document).ready(function() {
   if($j(&quot;#project_grid&quot;).notOnPage()){return;}
+  if($j(&quot;#disable_ajax_paging&quot;).onPage()){return;}
   
   // hook up ajax paging
   $j(&quot;#project_grid .pagination a&quot;).livequery('click', function() {</diff>
      <filename>public/javascripts/components/project_grid.js</filename>
    </modified>
    <modified>
      <diff>@@ -2,8 +2,8 @@
 // Returns whether or not a result set has results in it
 jQuery.fn.onPage = function() { 
   return this.size() &gt; 0;
-} 
+};
 
 jQuery.fn.notOnPage = function() { 
   return !this.onPage();
-} 
+};</diff>
      <filename>public/javascripts/jquery.ext/jquery.onPage.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 // App item
 #app_item
   width: 538px
-  border: 1px solid #E9E9E9
+  border: 1px solid #b3c4ed
   padding: 1px
 
   #app_item_top</diff>
      <filename>public/stylesheets/sass/v2/components/app_item.sass</filename>
    </modified>
    <modified>
      <diff>@@ -49,6 +49,8 @@
   padding-left: 20px
   padding-bottom: 10px
   
+  min-height: 500px
+  
   h2 
     color: #474848
     .image-loading
@@ -60,6 +62,11 @@
       vertical-align: middle
       margin: 0
       
+      
+  a
+    font-weight: bold
+    text-decoration: underline
+  
   h2.form
     color: #0066cb
     margin-bottom: 10px</diff>
      <filename>public/stylesheets/sass/v2/components/details.sass</filename>
    </modified>
    <modified>
      <diff>@@ -20,7 +20,7 @@
       margin-left: 10px
       padding-top: 3px
       color: #fff
-  p
+  p.tagline
     margin: 0
     padding: 3px
     text-align: center
@@ -28,6 +28,7 @@
     overflow: hidden
     background: #f6f6f6
     color: #595959
+    text-transform: lowercase
     
   .screen
     padding: 3px 0</diff>
      <filename>public/stylesheets/sass/v2/components/project.sass</filename>
    </modified>
    <modified>
      <diff>@@ -9,6 +9,11 @@
       padding-top: 2px
       font-size: .7em
       color: #00AEEF
+    .rss
+      float: right
+      a
+        padding: 0
+        margin: 0
   
   .grid-paging
     position: relative</diff>
      <filename>public/stylesheets/sass/v2/components/project_grid.sass</filename>
    </modified>
    <modified>
      <diff>@@ -14,7 +14,7 @@
       padding-bottom: 10px
       label
         font-size: 12px
-        color: #919191
+        color: #555
         display: block
         padding-bottom: 0px
     li.app_form_left
@@ -34,7 +34,7 @@
       color: #666
       font-size: 12px
       font-family: Verdana, Arial, Helvetica, sans-serif
-      border: 1px solid #d9d9d9
+      border: 1px solid #aaa
       padding: 6px 8px 6px 8px
 
   
@@ -45,7 +45,7 @@
       color: #666
       font-size: 12px
       font-family: Verdana, Arial, Helvetica, sans-serif
-      border: 1px solid #d9d9d9
+      border: 1px solid #aaa
       padding: 6px 8px 6px 8px
 
   </diff>
      <filename>public/stylesheets/sass/v2/forms/app_form.sass</filename>
    </modified>
    <modified>
      <diff>@@ -6,7 +6,7 @@
   a 
     padding: 4px 8px 4px 8px
     background: #fff
-    border: 1px solid #e5e5e5
+    border: 1px solid #aaa
     color: #838383
     font-size: 10px
     margin: 0 5px 0 0
@@ -28,6 +28,6 @@
  
   span 
     padding: 4px 8px 4px 8px
-    border: 1px solid #e5e5e5
+    border: 1px solid #aaa
     font-size: 10px
     margin: 0 5px 0 0
\ No newline at end of file</diff>
      <filename>public/stylesheets/sass/v2/paging.sass</filename>
    </modified>
    <modified>
      <diff>@@ -28,4 +28,13 @@ ul.project-list
   li.first
     padding-top: 0px
     background: none !important
-    
\ No newline at end of file
+  
+  li.action
+    padding-top: 10px !important
+    text-align: center
+    text-decoration: underline
+    a
+      color: #313062 !important
+      font-size: 12px !important
+      text-transform: uppercase
+      
\ No newline at end of file</diff>
      <filename>public/stylesheets/sass/v2/panels/project-list.sass</filename>
    </modified>
    <modified>
      <diff>@@ -22,18 +22,35 @@
     a
       color: #00aeef
 
+  .credits
+    padding-top: 5px
+    color: #aaa
+    font-size: 12px
+
   .about
     float: right
-    padding-right: 24px
-    padding-top: 10px
+    padding-right: 17px
+    padding-top: 17px
     text-align: right
+    
+    iframe
+      margin-right: -19px
+    
     .copyrights
       a
         font-weight: bold
         color: #00aeef
         font-size: .6em
-    .credits
-      a
-        color: #00aeef
-  
+    
+    .empty-message
+      display: none
+    
+    .delicious-blogbadge-line .url-link
+      padding-right: 0px
+
+    .delicious-blogbadge-line .top-tags-container
+      display: none
+    
+    .delicious-blogbadge-line .save-to-link
+      background-color: #fff
 </diff>
      <filename>public/stylesheets/sass/v2/parts/footer.sass</filename>
    </modified>
    <modified>
      <diff>@@ -3,8 +3,11 @@
   width: : 100%
   height: 105px
   position: relative
+  overflow: hidden
   h1
-    float: left
+    position: absolute
+    left: 0
+    top: 0
     
   #logo
     width: 235px
@@ -24,11 +27,20 @@
       height: 100%
       cursor: pointer
   
-  .login
+  .address
     position: absolute
-    right: -5px
+    right: 0px
+    text-align: right
+    top: 23px
+  
+  .login.current
+    padding-right: 10px
+    
+  .login
+    padding-top: 79px
+    padding-right: 8px
     text-align: right
-    top: 10px
+    float: right
     font-size: 1.2em
     a
       color: #eee</diff>
      <filename>public/stylesheets/sass/v2/parts/header.sass</filename>
    </modified>
    <modified>
      <diff>@@ -74,7 +74,8 @@ body
 #search_box
   width: 303px
   height: 34px
-  background: url(/images/template/search_box_bg.gif) no-repeat
+  margin-bottom: 10px
+  background: url(/images/template/search_box_bg.png) no-repeat
 
   fieldset
     padding-left: 8px
@@ -88,7 +89,7 @@ body
     width: 262px
     float: left
     position: relative
-    top: 6px
+    top: 5px
     margin-right: 5px
   .search_input.hint
     color: #666 !important
@@ -104,7 +105,7 @@ body
   position: relative
   overflow: hidden
   display: block
-  margin: 8px 0 7px 0
+  margin: 0px 0 8px 0
   span
     background: url(/images/template/submit_app.gif) no-repeat
     position: absolute</diff>
      <filename>public/stylesheets/sass/v2/styles.sass</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@
   padding: 0
   width: 303px
   margin-bottom: 10px
-  background: url(/images/template/right_tab_bg.gif) repeat-y
+  background: url(/images/right_tab_bg.png) repeat-y
  
   .ui-tabs-hide 
     display: none
@@ -96,6 +96,14 @@
       a:focus, a:active
         outline: none
   
+    li.ui-tabs-selected.last
+      background-position: right
+
+    li.blank
+      background:
+        image: url(/images/tab-blank-bg.png) !important
+        repeat: repeat-x !important
+  
 // tab navigation overrides
 .tabs.size-2
   ul.ui-tabs-nav </diff>
      <filename>public/stylesheets/sass/v2/tabs.sass</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,29 @@
-.pagination { margin: 0 0 20px 0; padding: 10px 0 0 0; color: #838383; }
-.pagination a { padding: 4px 8px 4px 8px; background: #fff; border: 1px solid #e5e5e5; color: #838383; font-size: 10px; margin: 0 5px 0 0; }
-.pagination a:hover { padding: 4px 8px 4px 8px; border: 1px solid #0066cb; color: #0066cb; text-decoration: none; font-size: 10px; margin: 0 5px 0 0; }
-.pagination .current { padding: 4px 8px 4px 8px; border: 1px solid #0066cb; color: #0066cb; font-size: 10px; margin: 0 5px 0 0; }
-.pagination span { padding: 4px 8px 4px 8px; border: 1px solid #e5e5e5; font-size: 10px; margin: 0 5px 0 0; }
+.pagination {
+  margin: 0 0 20px 0;
+  padding: 10px 0 0 0;
+  color: #838383; }
+.pagination a {
+  padding: 4px 8px 4px 8px;
+  background: #fff;
+  border: 1px solid #aaa;
+  color: #838383;
+  font-size: 10px;
+  margin: 0 5px 0 0; }
+.pagination a:hover {
+  padding: 4px 8px 4px 8px;
+  border: 1px solid #0066cb;
+  color: #0066cb;
+  text-decoration: none;
+  font-size: 10px;
+  margin: 0 5px 0 0; }
+.pagination .current {
+  padding: 4px 8px 4px 8px;
+  border: 1px solid #0066cb;
+  color: #0066cb;
+  font-size: 10px;
+  margin: 0 5px 0 0; }
+.pagination span {
+  padding: 4px 8px 4px 8px;
+  border: 1px solid #aaa;
+  font-size: 10px;
+  margin: 0 5px 0 0; }</diff>
      <filename>public/stylesheets/v2/paging.css</filename>
    </modified>
    <modified>
      <diff>@@ -1,41 +1,114 @@
-ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, body, html, p, blockquote, fieldset, input { margin: 0; padding: 0; }
-
-ul { list-style: none; }
-
-h1, h2, h3, h4, h5, h6 { font-family: &quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif; }
-
-a { color: #626262; text-decoration: none; }
-
-a:hover { text-decoration: underline; }
-
-a img, fieldset { border: 0; }
-
-.clear { clear: both; }
-
-.replace { position: relative; margin: 0; padding: 0; overflow: hidden; }
-
-.replace span { display: block; position: absolute; top: 0; left: 0; z-index: 1; }
-
-body { margin: 0; padding: 0; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; background-color: #131313; color: #626262; }
-
-.body-main { background: #ffffff url(/images/template/bg.png) repeat-x; min-height: 500px; }
-
-.body-bottom { background: url(/images/body-bottom-bg.png) repeat-x; padding-top: 51px; }
-
-.page-content { width: 900px; margin: 0 auto; }
-
-#body #body_left { width: 584px; float: left; }
-#body #body_left #left_pad { width: 541px; margin-left: 21px; padding-top: 17px; }
-#body #body_left.swap { float: right; }
-#body #body_right { width: 316px; padding-top: 17px; float: right; }
-
-#search_box { width: 303px; height: 34px; background: url(/images/template/search_box_bg.gif) no-repeat; }
-#search_box fieldset { padding-left: 8px; padding-top: 5px; }
-#search_box .search_input { font-size: 11px; font-family: Verdana, Arial, Helvetica, sans-serif; border: 0; background: none; width: 262px; float: left; position: relative; top: 6px; margin-right: 5px; }
-#search_box .search_input.hint { color: #666 !important; }
-#search_box .search_sub { float: left; margin-top: 3px; }
-
-#submit_app { width: 303px; height: 54px; font-size: 0.2em; position: relative; overflow: hidden; display: block; margin: 8px 0 7px 0; }
-#submit_app span { background: url(/images/template/submit_app.gif) no-repeat; position: absolute; width: 100%; height: 100%; cursor: pointer; }
-
-#go_back { width: 303px; margin: 0px 0px 10px 0px; vertical-align: middle; font-size: 1.5em; }
+ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, body, html, p, blockquote, fieldset, input {
+  margin: 0;
+  padding: 0; }
+
+ul {
+  list-style: none; }
+
+h1, h2, h3, h4, h5, h6 {
+  font-family: &quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif; }
+
+a {
+  color: #626262;
+  text-decoration: none; }
+
+a:hover {
+  text-decoration: underline; }
+
+a img, fieldset {
+  border: 0; }
+
+.clear {
+  clear: both; }
+
+.replace {
+  position: relative;
+  margin: 0;
+  padding: 0;
+  overflow: hidden; }
+
+.replace span {
+  display: block;
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 1; }
+
+body {
+  margin: 0;
+  padding: 0;
+  font-family: Verdana, Arial, Helvetica, sans-serif;
+  font-size: 11px;
+  background-color: #131313;
+  color: #626262; }
+
+.body-main {
+  background: #ffffff url(/images/template/bg.png) repeat-x;
+  min-height: 500px; }
+
+.body-bottom {
+  background: url(/images/body-bottom-bg.png) repeat-x;
+  padding-top: 51px; }
+
+.page-content {
+  width: 900px;
+  margin: 0 auto; }
+
+#body #body_left {
+  width: 584px;
+  float: left; }
+#body #body_left #left_pad {
+  width: 541px;
+  margin-left: 21px;
+  padding-top: 17px; }
+#body #body_left.swap {
+  float: right; }
+#body #body_right {
+  width: 316px;
+  padding-top: 17px;
+  float: right; }
+
+#search_box {
+  width: 303px;
+  height: 34px;
+  margin-bottom: 10px;
+  background: url(/images/template/search_box_bg.png) no-repeat; }
+#search_box fieldset {
+  padding-left: 8px;
+  padding-top: 5px; }
+#search_box .search_input {
+  font-size: 11px;
+  font-family: Verdana, Arial, Helvetica, sans-serif;
+  border: 0;
+  background: none;
+  width: 262px;
+  float: left;
+  position: relative;
+  top: 5px;
+  margin-right: 5px; }
+#search_box .search_input.hint {
+  color: #666 !important; }
+#search_box .search_sub {
+  float: left;
+  margin-top: 3px; }
+
+#submit_app {
+  width: 303px;
+  height: 54px;
+  font-size: 0.2em;
+  position: relative;
+  overflow: hidden;
+  display: block;
+  margin: 0px 0 8px 0; }
+#submit_app span {
+  background: url(/images/template/submit_app.gif) no-repeat;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  cursor: pointer; }
+
+#go_back {
+  width: 303px;
+  margin: 0px 0px 10px 0px;
+  vertical-align: middle;
+  font-size: 1.5em; }</diff>
      <filename>public/stylesheets/v2/styles.css</filename>
    </modified>
    <modified>
      <diff>@@ -8,8 +8,8 @@ module ExceptionNotifiable
     ActionController::UnknownAction,
     ActionController::RoutingError,
     ActionController::MethodNotAllowed,
-    WillPaginate::InvalidPage
-  ]
+    defined?(WillPaginate) ? WillPaginate::InvalidPage : nil
+  ].compact
 
   def self.included(base)
     base.extend ClassMethods</diff>
      <filename>vendor/plugins/exception_notification/lib/exception_notifiable.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>app/controllers/comps_controller.rb</filename>
    </removed>
    <removed>
      <filename>app/views/comps/detail.html.erb</filename>
    </removed>
    <removed>
      <filename>app/views/comps/form.html.erb</filename>
    </removed>
    <removed>
      <filename>app/views/comps/index.html.haml</filename>
    </removed>
    <removed>
      <filename>app/views/comps/list.html.erb</filename>
    </removed>
    <removed>
      <filename>script/merge_javascript_css</filename>
    </removed>
    <removed>
      <filename>test/functional/blog_controller_test.rb</filename>
    </removed>
    <removed>
      <filename>test/functional/pages_controller_test.rb</filename>
    </removed>
    <removed>
      <filename>vendor/plugins/use_db</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>014376228643a97f830eda2b47a2f40288f91795</id>
    </parent>
  </parents>
  <author>
    <name>Jacques Crocker</name>
    <email>jcnetdev@gmail.com</email>
  </author>
  <url>http://github.com/jcnetdev/opensourcerails/commit/1c619ea838a194341fba78aa2593c8c431b4994e</url>
  <id>1c619ea838a194341fba78aa2593c8c431b4994e</id>
  <committed-date>2008-08-30T07:34:31-07:00</committed-date>
  <authored-date>2008-08-30T07:34:31-07:00</authored-date>
  <message>Localizing site for different technologies. Updating design elements</message>
  <tree>6ae66c8d116ac9b8125c4379e79cd076e66c99f2</tree>
  <committer>
    <name>Jacques Crocker</name>
    <email>jcnetdev@gmail.com</email>
  </committer>
</commit>
