Save weeks of time and build your React & Node.js SaaS app in minutes

Gravity is a Javascript SaaS boilerplate template for React & Node.js that has all the features you need in a single install.
Buy Now View Demo
Gravity Dashboard

218 Startups & Developers Trust Gravity


If it takes you 4+ weeks to write all 10,000 lines of code. At $75 per hour that's a whopping $12,000.
You save $11503

Read the Full Spec

Need a feature that we haven’t listed?

Gravity can be customised to include additional features that fit your project requirements.

Customise Gravity

Products Built With Gravity

Founders and freelancers use Gravity to test new ideas and build fully-loaded market-ready products

How it Works

Download the codebase and run the setup wizard – in less than two minutes, you’ll have a fully-functioning web application.


  • /*
    * account.create()
    * create a new account and stripe customer
    * process the payment and create a new recurring monthly subscription
    exports.create = async function(req, res){
      const signup = req.body;
      let stripeData = {};
      // check if the account already exists
      const exists = await account.get(null,;
      if (exists)
        throw ({ inputError: "email", message: "You're already registered" });
      // create a stripe customer and subscribe them to a plan
      stripeData.customer = await stripe.customer.create(, signup.source);
      stripeData.subscription = await stripe.customer.subscribe(, signup.plan);
      // create the account and user
      const accountId = await account.create(signup, stripeData);
      const userId = await user.create(,, signup.password, accountId, "owner");
      // send welcome email
      mail.send(, "Welcome to Gravity!", "welcome-account", {
        name:, plan: signup.plan, price: stripeData.subscription.price
      // autheticate user
      authController.signin(req, res);
  • /*
    * verify the api token
    exports.verify = function(permission){
      return async function(req, res, next){
        try {
          const token = req.headers['authorization'];
          if (!token) throw new Error();
           // decode the json token
          let bearer = token.split(" ");
          const decode = jwt.verify(bearer[1], settings.token.secret);
          // verify user
          if (decode.accountId && decode.userId && decode.permission){
            // now verify the permission
            const userPermissions = getPermission(req);
            if (userPermissions[permission]){
              req.account = decode.accountId;
              req.user = decode.userId;
              throw new Error();
            throw new Error();
        catch (err){
          res.status(401).send({ message: "You do not have permission to perform this action. Please try logging in again" });

Powered By

Stripe Logo Mailgun Logo

Why Use Gravity?

As a founder and startup mentor, I've watched an endless number of businesses blowing huge budgets and wasting weeks of time creating standard features like login forms and billing.

I created Gravity to help developers and businesses to slash development costs and build products faster, empowering them to focus on building features that truly matter – the ones that generate revenue.

For a small fee, you'll have a market-ready web application that will save you weeks of time and thousands of dollars in in software development.

Get a head start on your Node.js SaaS app today

Buy Now