This monorepo full-stack serverless application uses these frameworks and utilities:
- sst: Making it easy to build full-stack serverless apps
- aws-vault: securely store and access AWS credentials in a development environment
- rush: a scalable monorepo manager for the web
- pnpm: Fast, disk space efficient package manager
- kysely: A type-safe and autocompletion-friendly typescript SQL query builder
- react: A JavaScript library for building user interfaces
- mui: Comprehensive suite of UI tools for React
- vite: Next generation front end tooling
- infrastructure/
- networking: VPC, VPN and DNS Records
- database: Aurora Serverless Postgres Database Cluster and stage specific database
- communication: SES Email
- authentication: Cognito with Google Sign-on
- apps/
- backend: Database migration, Appsync API
- frontend: Vite React Static Site. The implementation is based on the Mantis Free React Admin Template
We use rush and pnpm to manage our Node.js dependencies.
Packages are downloaded once and symlinked into each project's node_modules
directory.
$ rush update
$ rush install
$ rush add -p missing-package
We use aws-vault to deploy and debug this serverless stack project. You can deploy stages into different accounts, e.g.
$ aws-vault exec dev-account -- rushx deploy --stage=dev
$ aws-vault exec qa-account -- rushx deploy --stage=qa
$ aws-vault exec prod-account -- rushx deploy --stage=production
and also create developer specific stacks in the same account.
$ aws-vault exec dev-account -- rushx deploy --stage=barak # Developer specific stack
$ aws-vault exec dev-account -- rushx deploy --stage=guy # Developer specific stack
Our networking and database projects support re-using existing VPCs and database clusters when cost-savings is a concern.
We use seed.run as our CI/CD engine. We take advantage of pnpm workspaces to incrementally deploy only those projects that have changes.