Get your Rails app off the ground, fast

Limestone

Limestone is a boilerplate SaaS app built with Rails 5 and allows for an opinionated integration with NPM using webpacker. The opinions of this boilerplate stop short of choosing a front-end framework like React or Vue, so you can use what you like. This is a work in progress.

The Stack

The gemset has been chosen to be modern, performant, and take care of a number of business concerns common to SaaS.

  • Administrate
  • Bootstrap 4
  • CoffeeScript
  • Devise
  • Discard
  • Flipper
  • HAML
  • jQuery
  • Postgres
  • Pretender
  • Pundit
  • Rspec (w/ shouldamatchers, databasecleaner)
  • Searchkick
  • Shrine
  • Sidekiq
  • Simple Form
  • Stripe (w/ stripe-ruby-mock, stripe_event)
  • Turbolinks 5

Features

  • Trial begins upon registration without credit card.
  • Subscription management. Card update form and cancel account button.
  • Emails for welcome, billing updated, invoice paid, invoice failed and trial expiring. All except welcome are controlled by Stripe webhooks.
  • Invoice PDF attached to invoice paid email.
  • Mail sends through Sidekiq with deliver_later. Devise mailing also configured for Sidekiq dispatch.
  • Direct uploading to S3 with ActiveStorage. Lazy transform for resizing. Demonstrated with user avatars.
  • Icon helper for user avatars with fallback to circle with user initials. Icon helper for font awesome icons.
  • Administrate dashboard lets you CRUD records (ex: users). Easy to add more and customize as you like. Visit /admin/.
  • Impersonate users through administrate dashboard.
  • Pretty modals using bootstrap integrated into rails_ujs data-confirm. Demonstrated with cancel account button.
  • Banner with a link to billing page users that are past due.
  • Opinionated search integration using Elasticsearch via Searchkick. Gem is in place but integration is up to you.
  • Feature control using the flipper gem. Demonstrated with public_registration.
  • 86% RSpec test coverage.

Roadmap

  • In-browser image cropping using jcrop or the likes.
  • Custom error pages.

Notes

  • RSpec controller tests have been omitted in favour of requests tests.
  • You can run tests locally with docker-compose run website rspec

Getting Started

  • Install Docker
  • Customize .env from .env-example
  • run docker-compose run webpacker yarn install --pure-lockfile to install all node modules. See issue #3 about this.
  • run docker-compose up --build to create and run the various images, volumes, containers and a network
  • run docker-compose exec website rails db:setup to create DB, load schema and seed. Seeding will also create your plan(s) in Stripe.
  • Visit localhost:3000 and rejoice

Bonus points

  • Login as the admin user that was created (from .env)
  • Visit /admin/flipper
  • Create the feature public_registration as a boolean and enable it. Now anyone can register :clap:

Setting up production

A wiki will be written about this.