The popular open-source contract for web designers and developers by Stuff & Nonsense
- Originally published: 23/12/2008
- Revised date: 15/12/2013
- Original post
This is the latest version of an email which I send periodically, offering customers the opportunity to pre-pay for SaaS in return for a discount. The benefits to the SaaS company are better cash flow and reduced churn rate. The benefits to the customer are, well, in the email. This genre of email has produced hundreds of thousands of dollars in pre-pays for some companies I work with, and it rarely requires any more work than this example.
I've put $79 is as a placeholder for the cost of the user's plan. We calculate that for each account, naturally, along with the billing contact's name.
Subject: Save $79 on Appointment Reminder (and get a tax write-off) Formatting: 100% plain text. Gmail automatically links up the central link. From: Patrick McKenzie (Appointment Reminder) patrick@appointmentreminder.org
| <? | |
| // Tide class fetches, caches and returns tide data from waterlevels.gc.ca | |
| // Kenzie Campbell <kenzie@route19.com> | |
| // Feb. 9, 2010 | |
| class Tide | |
| { | |
| // instance variables (w/ defaults) |
| require 'rubygems' | |
| require 'net/ssh' | |
| # VERSION 0.2 | |
| # 0.2 – 2010/05/26 : added cleanup (rm deploy) | |
| # 0.1 – 2010/05/21 : initial setup | |
| HOST = "domain.com" | |
| USER = "username" | |
| PASSWORD = nil |
| class String | |
| # adds tabs to the beginning of each line | |
| def indent(tabs=4) | |
| self.gsub(/^/, "\t"*tabs) | |
| end | |
| end |
| # wrap errors in span | |
| config.action_view.field_error_proc = Proc.new { |html_tag, instance| "<span class=\"field_with_errors\">#{html_tag}</span>".html_safe } |
| source 'http://rubygems.org' | |
| gem 'rails', '3.1.0' | |
| gem 'jquery-rails' | |
| group :assets do | |
| gem 'sass-rails', " ~> 3.1.0" | |
| gem 'coffee-rails', "~> 3.1.0" | |
| gem 'uglifier' | |
| end |
| <% if target.errors.any? %> | |
| <div class="error_explanation"> | |
| <h2><%= pluralize(target.errors.count, "error") %> prevented this record from being saved:</h2> | |
| <ul> | |
| <% target.errors.full_messages.each do |msg| %> | |
| <li><%= msg %></li> | |
| <% end %> | |
| </ul> | |
| </div> | |
| <% end %> |
| # add these aliases to your BASH profile ~/.profile | |
| alias mongodb-start="mongod run --config /usr/local/etc/mongod.conf" | |
| alias redis-start="redis-server /usr/local/etc/redis.conf" | |
| # TODO add stop commands |