Skip to content
forked from echobind/bisonapp

A Full Stack Jamstack in-a-box brought to you by Echobind

License

Notifications You must be signed in to change notification settings

JstnEdr/bisonapp

 
 

Repository files navigation

Bison Logo

The Full Stack Jamstack in-a-box.

Bison is a starter repository created out of real-world apps at Echobind. It represents our team's "Greenfield Web Stack" that we use when creating web apps for clients.

We're always improving on this, and we welcome suggestions from the community!

Technology

Features

  • Preconfigured for CI using GitHub Actions
  • Customizable Hygen Templates to generate new files
  • Fully wired up login/signup pages with client and server-side validation.
  • Eslint pre-configured with Echobind best practices
  • Pre-configured for deployment on Vercel with customizable branch workflow.

Conventions

  • Don't copy/paste files, use generators and Hygen templates. Need to update the generator as your project evolves? they are all in the _templates folder.
  • Use a single command to run Next, generate Nexus types, and GraphQL types for the frontend. By doing this you can ensure your types are always up-to-date.
  • Don't manually write types for GraphQL responses... use the generated query hooks from GraphQL Codegen.
  • All frontend pages are static by default. If you need something server rendered, just add getServerSideProps like you would in any Next app.

Tradeoffs

  • To reduce complexity, Bison avoids yarn workspaces and separate top-level folders. Think of your app like a traditional monolith, but with a separate frontend and API. This means that folders may be a little more intermingled than you're used to.
  • Currently, Bison only works on Vercel. We plan to add support for Netlify soon.

Alternatives

A few other projects that are rapidly maturing in the Full Stack Jamstack space.

RedwoodJS Redwood is a very promising framework that we're watching. We took the concept of "Cells" directly from Redwood (though admittedly our version takes a bit more code!)

Blitz.js Blitz is also very promising. Blitz is built on Next.js (which we love!) and takes a very different approach by attempting to remove the API layer using conventions provided by Next.js.

We may borrow concepts from Redwood and Blitz over time or even switch to one as they continue to mature.

Think of Bison as a bit closer to the metal and preconfigured for maximum DX and efficiency. The good news is, if you disagree with any of the choices that we've made, nothing is hidden from you. You're welcome to adapt the "framework" to fit your needs.


Getting Started

Create a new repo from the Bison template.

Using yarn:

yarn create bison-app MyApp

Using npx:

npx create-bison-app MyApp

Setup the database

  1. Setup a database locally (Postgres is the only type fully supported right now)
  2. Make sure your database user has permission to create schemas and databases. We recommend using a superuser account locally to keep things easy.
  3. Setup your local database with yarn db:setup. You'll be prompted to create it if it doesn't already exist:

Prisma DB Create Prompt

Run the app locally

From the root, run yarn dev. This:

  • runs next dev to run the frontend and serverless functions locally
  • starts a watcher to generate the Prisma client on schema changes
  • starts a watcher to generate TypeScript types for GraphQL files

Next Steps

After the app is running locally, you'll want to set up deployment and CI

Docs

Have an idea to improve Bison? Let us know!


About Echobind

Echobind is a full-service digital agency that creates web and mobile apps for clients across a variety of industries.

We're experts in React, React Native, Node, GraphQL, and Rails.

If you're building a new app, your team is tackling a hard problem, or you just need help getting over the finish line, we'd love to work with you. Say hello and tell us what you're working on!

Echobind Logo

About

A Full Stack Jamstack in-a-box brought to you by Echobind

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 52.5%
  • JavaScript 27.7%
  • HTML 19.8%