Skip to content
/ seed Public

Full-stack startup monorepo template. Build your next startup idea with best practices from day 1!

Notifications You must be signed in to change notification settings

spy4x/seed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Seed

Full-stack startup monorepo template. Build your next startup idea with best practices from day 1!

πŸ€” Motivation. Why Seed?

πŸ’‘ After working on dozens of startup projects, I realised a pattern of applications/code/infrastructure that every startup needs.
πŸ‘¨β€πŸ’» Instead of repeating myself from project to project I decided to extract a project template into this seed.
πŸ† Now anyone can clone this repo and get all it's benefits for their startup.
🌟 More about benefits in the Roadmap section.

πŸ“— Table of Contents

  1. Prerequisites
  2. Run it locally
  3. Tools used
  4. Roadmap
  5. Contribution
  6. Credits

☝️ Prerequisites

You need to have next things:

  1. Docker (tip: brew install --cask docker)
  2. Node.js (tip: brew install nvm && nvm install 18)
  3. Yarn (tip: npm i -g yarn)
  4. Clone this repo (tip: git clone git@github.com:spy4x/seed.git)
  5. Install dependencies yarn and build essential docker images yarn docker:init. On first run it will download all dependencies, so grab your favourite coffee or tea while initialization magic happens β˜•

▢️ Run it locally

  1. Start all apps and local infrastructure with yarn start.
  2. Open in your browser:

⚑ Tools used

Angular TailwindCSS Nest.js PostgreSQL Docker
Prisma Swagger Google Cloud Firebase Nrwl Nx
Cypress Jest ESLint Prettier TypeScript

🎯 Roadmap

What is implemented and what is planned.

Environment and code organisation

βœ… Manage monorepo with multiple frontend and backend projects
βœ… Running everything locally with a single command - $ yarn start
βœ… Deploying apps to the cloud
βœ… TypeScript config (strict rules)
βœ… ESLint config (strict rules)
βœ… Prettier config
βœ… Pre-commit hook for code quality control
βœ… Deploy to production with a single command - $ yarn deploy:all
πŸ•‘ CI/CD
πŸ•‘ Manage environments on local machine
πŸ•‘ Follows "12 Factor App"
πŸ•‘ Calculate affected apps based on latest release tag
πŸ•‘ Staging environment
πŸ•‘ Manage commits
πŸ•‘ Update versions

Backend

βœ… Backend infrastructure diagram
βœ… Cloud Run
βœ… Nest.js
βœ… Prisma
βœ… Configure Swagger integration with Nest.js
βœ… CQRS architecture
βœ… Verify user JWT authentication
πŸ•‘ Unit-testing controller
βœ… Unit-testing command handler
βœ… Unit-testing query handler
πŸ•‘ Unit-testing event handler
πŸ•‘ Load-testing
βœ… Logging
βœ… Schedule tasks
βœ… Users management
βœ… REST API
βœ… Send Push notifications
πŸ•‘ Http and Redis caching
πŸ•‘ Stripe subscriptions and payments

Database

βœ… Automatic backups
βœ… Restore backup
βœ… Read replicas
πŸ•‘ Automatic database migrations

Files upload

πŸ•‘ Cloud Storage security rules
πŸ•‘ Handle upload
πŸ•‘ Keep track of files
πŸ•‘ Resize uploaded file

Frontend

Shared

βœ… Authentication
βœ… NgRx
βœ… E2E-testing
βœ… Unit-testing UI components
βœ… Unit-testing NgRx State
βœ… Unit-testing Container component
πŸ•‘ File upload
πŸ•‘ Logging
πŸ•‘ Build once, use bundle for every environment

Styles

βœ… TailwindCSS + Mobile-first responsive design
βœ… Styles shared between frontend apps

PWA

πŸ•‘ Offline work
πŸ•‘ Push Notifications
πŸ•‘ Auto-update
πŸ•‘ Installable

Admin Panel

πŸ•‘ Users management
πŸ•‘ Groups management
πŸ•‘ Reset user's password

Web Client

πŸ•‘ Realtime update of data from backend
πŸ•‘ Group access to data
πŸ•‘ Manage your personal account - avatar, email, oAuth providers, groups memberships
πŸ•‘ Manage group account - avatar, members, accesses
πŸ•‘ Invite person to your group by email
πŸ•‘ Transfer ownership of a group

βž• Contribution

Contributions are welcome, either it is a typo fix, bug fix, feature proposal, a pull request or anything else!
For more info follow contributing guidelines.

Credits

πŸ‘» Created by Anton Shubin

❀️ Special thanks to contributors:

Mehdi Artem Ischenko Irina Sorokina