/seed

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

Primary LanguageTypeScript

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