/core

Baseline Core - Serverless First Framework

Primary LanguageTypeScriptMIT LicenseMIT

1688515420018

BaselineJS

BaselineJS is an open-source, fullstack TypeScript, serverless first framework designed to make building cloud native applications easier. Our framework utilizes a combination of modern technologies, architectures and operational processes to help teams to efficiently build and deploy robust applications

If you like BaselineJS give us a ⭐️

Website | Documentation | Discord | LinkedIn

Major Components

  • πŸš€ API
  • πŸ–₯️ React Admin Website
  • 🌐 React User Website
  • βš™οΈ CI/CD
  • πŸ”§ Developer Tooling
  • πŸ”’ Authentication
  • πŸ”„ Multiple Environments
  • πŸ’» Run Locally
  • πŸ—οΈ Infrastructure as Code (IaC)
  • πŸ“¦ Managed Environment Variables
  • ✨ Baseline Commands

Technology

  • 🎁 Package Management: Pnpm + Monorepo
  • πŸ”¨ Language & Build: TypeScript + ESBuild
  • πŸ–Ό Frontend: React + Vite
  • βš™οΈ Backend: NodeJS + Express
  • 🎨 Linting & Formatting: Prettier + Eslint
  • πŸ— IaC: AWS + Serverless Framework
  • πŸš€ Deploy: Local & Bitbucket CI/CD

AWS Services

  • Cognito
  • S3
  • Lambda
  • DynamoDB
  • CloudFormation
  • Route53
  • Systems Manager
  • CloudFront
  • API Gateway
  • CloudWatch
  • SNS

What can you build with Baseline?

  • 🌐 SaaS Solutions: Build software-as-a-service solutions tailored to your audience.
  • πŸ–₯️ Web Applications: Develop responsive and scalable web applications.
  • πŸ›’ Marketplaces: Launch and manage online marketplaces with ease.
  • πŸ“± Mobile Applications: Create robust mobile apps for iOS and Android platforms.
  • πŸ’ΌπŸ›οΈ B2B/B2C Applications: Seamlessly cater to both business and consumer audiences.
  • πŸ—„οΈ Headless CMS: Manage content efficiently using a headless content management system.

Benefits

  • Serverless First
  • Open source
  • Full control
  • Cost effective implementation
  • Hosted in your own AWS account
  • Uses popular technology
  • Scales on demand
  • Staging and production environments
  • Runs locally

Getting Started

Local Requirements

These must be installed before following the setup instructions.

  • Macos/Linux OS/Windows Subsystem for Linux
    • Node.js v20 (v20 or higher) & npm@10.5.0 or higher (we suggest installing and using nvm) follow instructions in the link to install, you will generally need to create a new terminal session after installing. If you already have nvm update it before proceeding.
      • If nvm is installed you can switch versions with nvm install 20 && nvm use 20 && nvm alias default 20 && nvm install-latest-npm
      • If not using nvm you can manually install node and npm, download from https://nodejs.org/en/download/ alternatively use the operating system package manager or any other appropriate tool to install node
      • Current versions can be checked with node -v, npm -v
    • pnpm version 9, version can be checked with pnpm -v, install with npm install -g pnpm@9 or other methods
    • AWS CLI v2
    • Homebrew, for Mac users only, follow install instructions here
    • jq for extracting Cloudformation outputs
      • Install on mac brew install jq
      • Install on Linux sudo yum install jq or sudo apt-get install jq, or other appropriate methods
    • Java Runtime Environment (JRE) version 8.x or newer, it is only required for DynamoDB local
      • Install on mac brew install java
      • Install on linux sudo yum install java or sudo apt-get install openjdk-8-jdk, or other appropriate methods
      • DynamoDB local will automatically install in the project when the api is started, java needs to installed before this occurs
    • curl which is used in some of the bash scripts, curl install instructions
    • An IDE such as Visual Studio Code
  • Internet connectivity
  • AWS Account https://aws.amazon.com/getting-started/
  • IAM credentials https://docs.aws.amazon.com/cli/latest/userguide/getting-started-prereqs.html#getting-started-prereqs-iam be sure to follow Security best practices in IAM

Experimental Requirements Installation

Alternatively, try the experimental requirements installation script. Use at your own risk.

If you are starting a new Baseline project.

curl -o- https://raw.githubusercontent.com/Baseline-JS/core/main/scripts/experimental-install-requirements.sh | bash

or

wget -qO- https://raw.githubusercontent.com/Baseline-JS/core/main/scripts/experimental-install-requirements.sh | bash

If you are joining an existing Baseline project

pnpm run install:requirements

Setup

  1. Install requirements
  2. npx @baselinejs/create-app my-app-name
  3. pnpm install
  4. pnpm run setup to name your project and set the region
  5. pnpm run aws:profile to setup your AWS credentials profile (if you have issues please update aws cli)
  6. pnpm run deploy:staging to deploy api/web/admin
  7. pnpm run add:user:staging to add an admin user to the application
  8. pnpm run urls:staging To see your project URLs

Run Locally

If the project is already setup and you are trying run the project locally make sure you run pnpm run aws:profile first so that you have the correct credentials for AWS configured locally.

Commands

Start the api, admin and web in their own terminal windows/tabs with the following commands.

  1. pnpm run generate:env:local to generate the env files for the frontend clients
  2. pnpm run start:api
  3. pnpm run start:admin
  4. pnpm run start:web

Running locally Limitations

  • API, Web & Admin: No S3, you will need to rely on AWS staging S3
  • API: No local Cognito Authorizer, the deployed staging cognito can be used (see packages/api/serverless.yml) or the payload set by AUTHORIZER in packages/api/scripts/run-api-local.sh.
  • Admin: Cognito UI relies on an active AWS Cognito user pool, use deployed staging

Deploy a Change

Swap staging to prod to deploy to production. All environment variables will be automatically set in the process.

  1. pnpm run deploy:staging to deploy api/web/admin

Remove Stack

To destroy the deployed cloudformation stacks so it is no longer on AWS run pnpm run remove:staging. This will likely destroy all data associated with the application.

Baseline

If you would like to learn more about what we do please visit Baseline