Giter Site home page Giter Site logo

josevfernandez / fullstack-starterkit Goto Github PK

View Code? Open in Web Editor NEW

This project forked from karanpratapsingh/fullstack-starterkit

0.0 1.0 0.0 597 KB

GraphQL first full-stack starter kit with Node, React. Powered by TypeScript

License: MIT License

JavaScript 12.15% TypeScript 79.53% HTML 6.74% CSS 1.58%

fullstack-starterkit's Introduction

fullstack-starterkit

PRs welcome!

Motivation โญ

Setting up boiler plates when starting new projects is tedious sometimes and I often found myself setting it up from scratch ๐Ÿฅฑ

Hence I made this starterkit following some of the best patterns and practices I learnt from some of the larger codebase and fantastic developers I've had a chance to work with ๐Ÿ™Œ

The main purpose of this repository is to provide a scalable "batteries included" full stack starterkit which follows good architecture patterns (might be opinionated) and code decoupling which becomes significant as the project grows or new developers are onboarded

Features

  • All in Typescript Because TypeScript is awesome, and types are important ๐Ÿ˜ƒ

  • GraphQL First This starterkit is built with graphql first approach using the Apollo platform

  • Includes CI CI is integral part of any project. This starterkit includes Github Actions by default. PR's for integration with any other providers are welcome ๐Ÿ™Œ

  • Testing Focused This project uses Jest for testing framework and comes with sample tests which are easy to extend

  • Prisma Prisma is the ORM being used for PostgreSQL. Feel free to submit a PR for any other ORM or drivers you'd like to see here ๐Ÿ˜

Please leave a โญ as motivation if you liked the idea ๐Ÿ˜„

๐Ÿš€ Technologies Used

technologies

๐Ÿ“– Contents

๐Ÿญ Architecture

Here is the folder structure for backend, it is using yarn workspaces which helps us split our monorepo into packages such as DB, GraphQL. Which if required can be made into their own micro services.

backend
โ”œโ”€โ”€ build
โ”œโ”€โ”€ config
โ”œโ”€โ”€ logs
โ”œโ”€โ”€ packages
โ”‚   โ”œโ”€โ”€ db
โ”‚   โ”‚   โ””โ”€โ”€prisma
โ”‚   โ”œโ”€โ”€ graphql
โ”‚   โ”‚   โ”œโ”€โ”€ api
โ”‚   โ”‚   โ”œโ”€โ”€ schema
โ”‚   โ”‚   โ””โ”€โ”€ types
โ”‚   โ””โ”€โ”€ utils
โ”œโ”€โ”€ tests
โ”‚   โ”œโ”€โ”€ db
โ”‚   โ””โ”€โ”€ graphql
โ”œโ”€โ”€ index.ts
โ””โ”€โ”€ package.json
DB

This workspace package contains the database abstractions. The database stack is PostgreSQL as relational database and Prisma as an ORM, read more about DB package here

GraphQL

The GraphQL package is organized as below:

graphql
โ”œโ”€โ”€ schema
โ”‚   โ””โ”€โ”€ user                <---- some entity
โ”‚       โ”œโ”€โ”€ resolvers 
โ”‚       โ”‚     โ”œโ”€โ”€ types     <---- type resolvers
โ”‚       โ”‚     โ”œโ”€โ”€ queries   <---- query resolvers
โ”‚       โ”‚     โ””โ”€โ”€ mutations <---- mutation resolvers
โ”‚       โ”œโ”€โ”€ queries.graphql
โ”‚       โ”œโ”€โ”€ mutations.graphql
โ”‚       โ””โ”€โ”€ types.graphql
โ”œโ”€โ”€ api
โ”‚   โ”œโ”€โ”€ queries             
โ”‚   โ””โ”€โ”€ mutations
โ”œโ”€โ”€ types                   <---- graphql types
โ”‚   โ”œโ”€โ”€ schema           
โ”‚   โ””โ”€โ”€ resolvers
โ””โ”€โ”€ index.json

The schema splits each entity into it's own set of schema to modularize the codebase. The graphql package uses schema stitching and code generators to construct the whole schema.

It is organized so because if you choose to split graphql into it's own set of microservices later, it should be relatively easier to do so as this should be easy to integrate with Apollo Federation

Read more about GraphQL package here

Here is the folder structure for web, it is a standard create-react-app using react-app-rewired to override configs without ejecting

Web package uses Material UI heavily as it makes theming and customization very easy. PR's for any other UI kit are welcome ๐Ÿ˜ƒ

web
โ”œโ”€โ”€ build
โ”œโ”€โ”€ public
โ”œโ”€โ”€ src
โ”‚   โ”œโ”€โ”€ assets
โ”‚   โ”œโ”€โ”€ config
โ”‚   โ”œโ”€โ”€ constants
โ”‚   โ”œโ”€โ”€ global
โ”‚   โ”œโ”€โ”€ layout     <---- controls, pure components
โ”‚   โ”œโ”€โ”€ tests
โ”‚   โ”œโ”€โ”€ theme      <---- theme config
โ”‚   โ”œโ”€โ”€ pages
โ”‚   โ”‚   โ””โ”€โ”€  Home   <---- page component
โ”‚   โ”‚        โ”œโ”€โ”€ components <---- page specific components
โ”‚   โ”‚        โ””โ”€โ”€ hooks      <---- page specific custom hooks   
โ”‚   โ””โ”€โ”€ utils
โ”œโ”€โ”€ tests
โ”‚   โ”œโ”€โ”€ db
โ”‚   โ””โ”€โ”€ graphql
โ”œโ”€โ”€ index.ts
โ””โ”€โ”€ package.json

๐Ÿƒ Getting Started

Setting up environment variables

Before getting started, create .env files at both backend/.env as well as web/.env following the .env.template files located in those directories.

Install dependencies

I recommend using yarn instead of npm as this project heavily used yarn workspaces

yarn

Running backend

yarn start:backend

Make sure to use your own DATABASE_URL and not the default as provided in .env.template when developing your own project, as the demo database might be changed/deleted anytime

Running web

yarn start:web
Feel free to open a new issue if you're facing any problem ๐Ÿ™‹

Contributions are welcome as always, before submitting a new PR please make sure to open a new issue so community members can discuss.

Additionally you might find existing open issues which can helps with improvements.

This project follows standard code of conduct so that you can understand what actions will and will not be tolerated.

๐Ÿ“„ License

This project is MIT licensed, as found in the LICENSE

Built and maintained with ๐ŸŒฎ by Karan

๐Ÿ’ผ Hire Me | ๐Ÿบ Donate

fullstack-starterkit's People

Contributors

karanpratapsingh avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.