Repository: gratipay/gratipay.com

Issue:
Woodgrain backgrounds look dumb and skeumorphic
: ) 

Sorry, but I think the site design would come off a lot cleaner if the layer with the wood/pennies background was removed or altered. The pennies might be okay, but the wood-grain comes off all wrong.



Discussion:
Do you have any specific alteration suggestions?  I like the idea of the penny personally - mainly because it represents a monetary denomination.  The heart cut-out also works well for me - it makes even more sense after reading our (http://inside.gratipay.com/big-picture/mission) [Mission Statement](http://inside.gratipay.com/big-picture/mission).  

Other than that I'm not sure where the inspiration came from for the wood-grain.  It could be re-vitalized I suppose 

Yeah I think the wood-grain just happened to the context for the photo of the pennies that was taken.

I suggest either:
- a digital animation of the heart-coins with no background
- a new photo background that isn't set on top of wood

My biggest complain about background is the huge 200kB jpeg.

This may be considered completely off the wall, but if there is a push for a website re-design (whenever 2.0 releases) - I would like to see the color scheme stay the same, but using the heart-coin as a centerpiece.  

Before pushing for the new design, I would enjoy exploring the archive of previous art. But.. we don't have any.

No previous art has existed, or is it just not archived?  

Everything that ever existed is archived, that's why we use version control. I guess what @techtonik is saying is that it's not in a readily viewable format (like a bunch of images). 

@rohitpaulk yes. =)

Ah thanks for the clarification @rohitpaulk 

@timothyfcook I suppose the wood grain was chosen since Ambridge used to be called Logstown - but that's a long-shot, and a lot of speculation :laughing: 

Ideally the image archive should be clickable, like in InVision #3270 

Web archive, unfortunately, was unable to get pages after user authorization https://web.archive.org/web/20140906122043/https://gratipay.com/

Dig through the blog, we have some posts there with old screenshots.

Just for fun, here's an ancient attempt at an un-used design sketch:

![gittip mockup](https://cloud.githubusercontent.com/assets/1823300/8259692/7069129e-168c-11e5-8449-a3d46a95d2ed.png)

!m @timothyfcook :dancer: 


Resolving patch:
diff --git a/gratipay/main.py b/gratipay/main.py
--- a/gratipay/main.py
+++ b/gratipay/main.py
@@ -34,7 +34,7 @@
     'b64encode': base64.b64encode,
     'enumerate': enumerate,
     'filter': filter,
-    'filter_profile_subnav': utils.filter_profile_subnav,
+    'filter_profile_nav': utils.filter_profile_nav,
     'float': float,
     'len': len,
     'map': map,
diff --git a/gratipay/utils/__init__.py b/gratipay/utils/__init__.py
--- a/gratipay/utils/__init__.py
+++ b/gratipay/utils/__init__.py
@@ -214,7 +214,7 @@ def erase_cookie(cookies, key, **kw):
     set_cookie(cookies, key, '', BEGINNING_OF_EPOCH, **kw)
 
 
-def filter_profile_subnav(user, participant, pages):
+def filter_profile_nav(user, participant, pages):
     out = []
     for foo, bar, show_them, show_others in pages:
         if (user.participant == participant and show_them) \
diff --git a/gratipay/utils/notifications.py b/gratipay/utils/notifications.py
--- a/gratipay/utils/notifications.py
+++ b/gratipay/utils/notifications.py
@@ -1,5 +1,5 @@
 def paypal_withdrawal_failed(_, user):
-    href = '/~%s/routes/paypal.html' % user.participant.username
+    href = '/~%s/routes/paypal' % user.participant.username
     return ('error',
         ['a',
             {'href': href}, _("Your last PayPal payout failed!"),
@@ -8,7 +8,7 @@ def paypal_withdrawal_failed(_, user):
 
 
 def credit_card_failed(_, user):
-    href = '/~%s/routes/credit-card.html' % user.participant.username
+    href = '/~%s/routes/credit-card' % user.participant.username
     return ('error',
         ['span', _("Your credit card has failed!") + " ",
             ['a', {'href': href}, _("Fix your card")]
@@ -17,7 +17,7 @@ def credit_card_failed(_, user):
 
 
 def credit_card_expires(_, user):
-    href = '/~%s/routes/credit-card.html' % user.participant.username
+    href = '/~%s/routes/credit-card' % user.participant.username
     return ('error',
         ['span', _("Your credit card is about to expire!") + " ",
             ['a', {'href': href}, _("Update card")]
@@ -26,7 +26,7 @@ def credit_card_expires(_, user):
 
 
 def email_missing(_, user):
-    href = '/~%s/settings/#emails' % user.participant.username
+    href = '/~%s/emails/' % user.participant.username
     return ('notice',
         ['span', _('Your account does not have an associated email address.') + " ",
             ['a', {'href': href}, _('Add an email address')],


Test patch:
diff --git a/tests/py/test_email.py b/tests/py/test_email.py
--- a/tests/py/test_email.py
+++ b/tests/py/test_email.py
@@ -167,9 +167,9 @@ def test_cannot_add_too_many_emails(self):
         with self.assertRaises(TooManyEmailAddresses):
             self.alice.add_email('alice@gratipay.coop')
 
-    def test_account_page_shows_emails(self):
+    def test_emails_page_shows_emails(self):
         self.verify_and_change_email('alice@example.com', 'alice@example.net')
-        body = self.client.GET("/~alice/settings/", auth_as="alice").body
+        body = self.client.GET("/~alice/emails/", auth_as="alice").body
         assert 'alice@example.com' in body
         assert 'alice@example.net' in body
 
diff --git a/tests/py/test_routes.py b/tests/py/test_routes.py
--- a/tests/py/test_routes.py
+++ b/tests/py/test_routes.py
@@ -66,23 +66,16 @@ def test_associate_bitcoin_invalid(self):
 
     def test_credit_card_page(self):
         self.make_participant('alice', claimed_time='now')
-        expected = "add or change your credit card"
-        actual = self.client.GET('/~alice/routes/credit-card.html').body
-        assert expected in actual
-
-    def test_credit_card_page_shows_card_missing(self):
-        self.make_participant('alice', claimed_time='now')
-        expected = 'Your credit card is <em id="status">missing'
-        actual = self.client.GET('/~alice/routes/credit-card.html', auth_as='alice').body.decode('utf8')
-        assert expected in actual
+        actual = self.client.GET('/~alice/routes/credit-card', auth_as='alice').body
+        assert "ZIP or Postal Code" in actual
 
     def test_credit_card_page_loads_when_there_is_a_braintree_card(self):
-        expected = 'Your credit card is <em id="status">working'
-        actual = self.client.GET('/~obama/routes/credit-card.html', auth_as='obama').body.decode('utf8')
+        expected = 'Current: '
+        actual = self.client.GET('/~obama/routes/credit-card', auth_as='obama').body.decode('utf8')
         assert expected in actual
 
     def test_credit_card_page_shows_details_for_braintree_cards(self):
-        response = self.client.GET('/~obama/routes/credit-card.html', auth_as='obama').body.decode('utf8')
+        response = self.client.GET('/~obama/routes/credit-card', auth_as='obama').body.decode('utf8')
         assert self.bt_card.masked_number in response
 
     def test_receipt_page_loads_for_braintree_cards(self):