This project is a custom fit full-stack web app for dog training clubs. The eventual goal is to market the clubs, manage membership, sell classes/session, rent rings, and handle communications. This project was bootstrapped with GraphQL API Starter Kit. You can join their Discord channel for assistance trying to setup something similar. You can message me on Discord @Bird#1239 for help with this specific repository.
- Monorepo project structure powered by Yarn with PnP
- GraphQL API using code-first development approach (TypeScript, GraphQL.js, Knex, PostgreSQL)
- Stateless JWT cookie-based authentication (supporting SSR, OAuth 2.0 via Google, Facebook, etc.)
- Database tooling — seed files, migrations, Knex.js REPL shell, etc.
- Front-end boilerplate pre-configured with TypeScript, Webpack v5, React, Relay, and Materia UI
- Serverless deployment —
api
,img
→ Cloud Functions,web
→ Cloudflare Workers - HTML page rendering (SSR) at CDN edge locations, all ~100 points on Lighthouse
- Pre-configured dev, test / QA, production, and review (per PR) environments
- Pre-configured VSCode code snippets and other VSCode settings
- Node.js v16, Yarn package manager
- Local or remote instance of PostgreSQL (see Postgres.app, Google Cloud SQL) I recommend a local for development.
- VS Code editor with recommended extensions
Clone the repo and run yarn install
:
$ git clone https://github.com/njhargis/dog-club-full-stack.git
$ cd dog-club-full-stack # Change current directory to the newly created one
$ yarn install # Install project dependencies
Then, add a .local.override.env file to the env folder. Override any variables that are currently hidden (e.g. 'enc:..') If your local Postgres credentials are different than what is within .local.env, you'll need to override those as well. Finally, setup your database before starting your API and web.
$ yarn db:reset # Create or update PostgreSQL database
$ yarn api:start # Launch GraphQL API and authentication server
$ yarn web:start # Launch React/Relay front-end app
The API server must become available at http://localhost:8080/api.
The web application front-end must become available at http://localhost:3000/.
├──
.github
— GitHub configuration including CI/CD workflows
├──
.vscode
— VSCode settings including code snippets, recommended extensions etc.
├──
env
— environment variables that are used for local development (local
, test
, prod
)
├──
db
— database schema, seeds, and migrations (Cloud SQL, Knex.js)
├──
api
— GraphQL API and authentication (Could SQL, Cloud Functions, GraphQL.js)
├──
img
— dynamic image resizing (Cloud Functions, [Cloud Storage](https://
cloud.google.com/storage))
├──
infra
— cloud infrastructure configuration (Terraform)
├──
web
— React / Relay web application with CDN rendering (Webpack, Cloudflare Workers)
├──
scripts
— Automation scripts shared across the project
└── ...
— add more packages such as worker
, admin
, mobile
, etc.
- GraphQL API and Relay Starter Kit
- Getting Started with Cloud Functions (2nd gen)
- Yarn 2 (Berry) - Plug'n'play, constraints and workspaces by @jherr
- Google Cloud SQL — Tips & Tricks by @koistya
- Database change management with Node.js by @koistya
Anyone and everyone is welcome to contribute. Start by checking out the list of open issues marked help wanted. However, if you decide to get involved, please take a moment to review the guidelines.
Copyright © 2022-present Neil Hargis Solutions. This source code is licensed under the MIT license found in the LICENSE file.
Made with ♥ by Neil Hargis Solutions in conjunction with Nashville Dog Training Club & Murfreesboro Dog Training Club. Generously aided by contributors.