479 karma · joined March 20, 2012
Based on this alone, you need to get your own merchant account and gateway. I highly recommend Beanstream in Canada for the gateway. A proper merchant account (interchange plus pricing, either Chase Paymentech or TD are good) will boost your margins. For example, processing a debit card has a much lower interchange rate than a credit card (I don't think the rate is as good as the USA, but its still 1%+ difference).
Beanstream will also give you the option of Interac Online - which is a flat transaction fee between 20-50c.
For short term, post-it notes and legal pads. There's something for me about having those TODO's constantly in my face. I always get them done. And it feels so good to crumple that ball of paper and throw it into the bin. Each sticky is 5-30 minutes of work.
For longer term/planning: Trello. When I'm ready to tackle something, I convert the Trello card into a sticky note, archive the card, and get to work!
Sometimes when I am feeling super unproductive/lazy, and have a buildup of sticky notes, I'll convert all those sticky notes into a neat 1 page legal pad page - handwritten, with checkboxes. By the time I'm done doing converting (and crumpling up all those sticky notes!) I feel rejuvenated enough to work on that second pass.
I love throwing stuff away. When I am SUPER unproductive, I'll tear away the blank part of the sticky note and throw that away.
Simple example:
$(document).on 'ajax:success', '.guest-form', ->
notify 'success', 'Guest updated.'
$(@).parents('.modal').modal 'hide'
$(document).ajaxError (event, jqxhr, settings, thrownError) ->
handle_ajax_error(event, jqxhr)
@handle_ajax_error = (error, xhr) ->
if xhr.status is 422
error = JSON.parse(xhr.responseText)['errors']
notify 'error', error
else if xhr.status is 500
notify 'error', 'Error communicating with the server. We have been notified.'
if xhr.status is 401
notify 'warning', 'Session has expired. Redirecting to login...'
window.location = '/login'
if xhr.status is 403
window.location = '/access-denied'
So if you load in content via AJAX (I do this a lot for table views of data and the user wants to see a single record), rather than go to a separate page, I do an ajax call, put the result into a Twitter bootstrap modal, show the modal, and when the bs.modal.shown event fires, that "single javascript function" with the modal as the parameter is called, and it initializes all the javascript needed for that particular DOM container.Example:
$(document).on 'shown.bs.modal', 'a[data-toggle="tab"]', (e) ->
$modal_body = $( $(e.target).attr('href') )
general_init $modal_body
The general_init function will initialize all my selectize elements (among other things) as such: general_init = ($container) ->
add_selectize $container.find('input.membership-plan-select'), $.extend(true, {}, Selects.MembershipPlanOptions)
So when writing forms, lets say to create a new "Event Ticket" I simply plop in a text field with a class of "guest-select" and I instantly have an AJAX powered search field to find/create a guest to assign that ticket to.I'm the sole developer on a "rails monolith" (254 tables, 540 models/classes, 4 years old), with enterprise-like architecture (ecommerce, event ticket sales, booking engine, access control, etc) and I'm positive the only way I'm able handle it all is because I stick to basic jquery.
My secrets:
- The rails-ujs adapter
- $(document).on('event', '.element', ..) is fantastic. Never debug events ever again
- selectize select's for "find or create" relationships
- cocoon gem for nested form relationships
- parsley for form validation (hooks into html5 validators)
- bootstrap 3
- datatables.net + following the pattern of ajax-datatables-rails (gem - separate classes for each table)
- a single javascript function that accepts a DOM element (body, a modal, section) and initializes all the elements the app knows of (selectize elements, date/time pickers, etc) inside that container
- above function is hooked into by bootstrap's 'bs.modal.shown, bs.modal.hide, tab's, cocoon's 'cocoon:after-insert', etc.
rake stats says: 33k LOC models, 8k LOC controllers, 23k Javascript (though this must be all plugins. I'd guess 3-6k lines of javascript, max)
Needless to say, I don't believe in the frontend javascript hype.
- 5% 6 month rolling reserve //
- 2 week + 5 day lag settlements //
- 2.8% blended + monthly fees.
Am I crazy to not switch, or should I present this to Beanstream and get better terms? Other than my terms, I have nothing but ecstatically positive things to say about BS.
Note: my terms are like so because of the nature of my business model. It is high risk, like a TPPA (third party payment aggregator). Think: Eventbrite. Appreciate the feedback.
Also, reading the Fountainhead was a game changer for me.