Technology Stacks and Tools

Modular. Extensible. Adaptable.

React Starter Project

The React starter project provides a template to kickstart React single-page applications utilizing a curated Technology Stack for optimal maintainability, testability, and operability.

Features

JavaScript ES6+ Support
The project supports authoring both the application and tests in ES6+ JavaScript. The Babel transpiler ensures all JavaScript is ES2015 compliant when shipped to the browser.

SASS and CSS Support
The project supports authoring styles in either SASS or CSS. Leveraging Bootstrap 5's SASS support, the project demonstrates how to override Bootstrap SASS variables to update the default Bootstrap look and feel.

Standard Project Structure
The project is organized into a component-based structure that facilitates a logical separation by component type and functional responsibility.

Standard Page Structure
The project's single HTML page, index.html, is automatically injected with Webpack dependencies, eliminating the need for you to manage link and script tags in your HTML.

Routing
The React Router library is included and an example configuration is provided which illustrates how to map routes to your React controllers.

State Management
The Redux state container library is included and examples are provided which illustrate actions, reducers, and selectors on the application state model.

Redux Thunk Middleware
The project includes the Redux Thunk middleware library which allows you to create powerful, asynchronous state mutation functions such as calling remote APIs or invoking Promise-based functions.

Components
The project illustrates the standard React Component classes and stateless functional components. Examples depict components both with and without Redux connect.

Unit Testing with Jest and Enzyme
The project is pre-configured to use Jest and Enzyme for unit testing. Several examples of unit tests are included.

DevOps Automation
Yarn and Webpack provide local application development tools and server environment development operations workflow automation. The Yarn configuration file contains tasks that build application artifacts, and run a local development web server. Webpack ensures that the build artifacts are transpiled, uglified, minified, and mapped into cache-busting bundles.

Docker Support
The project ships with an example Dockerfile which creates a minimal, best practices Docker image for hosting Single-Page Applications with nginx. You can pull the latest Docker image from DockerHub.

Technology Stack

  • React
  • Redux
  • Redux Thunk
  • React Router
  • Axios
  • Lodash
  • Luxon
  • Bootstrap
  • Font Awesome
  • Animate.css
  • Google Fonts
  • Jest
  • Enzyme
  • Redux Mock Store
  • Yarn
  • Webpack
  • Babel

Languages

  • ES6+ JavaScript
  • JSX
  • SASS or CSS

See the Project.

View it on GitHub.

View it on GitHub.

Serverless Samples

The Serverless Samples project contains a multitude of examples of serverless applications. Detailed concepts such as REST APIs, DynamoDB, and security, are explored gradually across multiple samples to focus on one specific concept, technique, or pattern.

Features

REST API
The project contains several samples demonstrating how to create a REST API using Amazon API Gateway and AWS Lambda functions. The Lambda functions provide examples of Create, Read, Update, and Delete resource endpoints. Lambda functions are a fully serverless operational platform, requiring no compute resource provisioning (i.e. servers), allowing you to focus on feature development.

DynamoDB
Amazon DynamoDB is a highly scalable and completely serverless database solution. The project provides a number of sample Lambda functions that persist data in DynamoDB.

Lambda Authorizers
Security is an essential element of any information system. The project contains samples of Lambda Authorizers, formerly called Custom Authorizers. Lambda authorizers are simply Lambda functions which serve solely to authenticate Amazon API Gateway requests. Looking for a Lambda Authorizer leveraging JSON Web Tokens (JWT)? Look no further.

Cognito Authorizers
In addition to Lambda Authorizers, API Gateway endpoints may be secured by AWS Cognito User Pools. The project contains samples of Cognito Authorizers. Cognito authorizers authenticate identity or access tokens sent in Amazon API Gateway requests.

Shared API Gateways
By default, the Serverless Framework creates a distinct API Gateway for each project. Sometimes it is desirable to break apart a large REST API into many smaller, domain-specific service components. Perhaps different teams are responsible for certain domains. Or perhaps the each component has a distinct application lifecycle. Perhaps you are developing a microservices architecture. Whatever the reason, the Serverless Samples project illustrates how to share a single API Gateway across multiple serverless applications.

Custom Domain Names
When they are created, Amazon API Gateways are assigned a large, cryptic, public domain name. You could manually create a DNS alias for this auto-generated domain name. But using the Serverless Framework's plugin system, it is easy to create and manage custom domain names for API Gateway APIs. Project samples show how to configure the Serverless specification and the CLI commands to manage Custom Domain Names.

Step Functions
AWS Step Function State Machines are a great tool in the Serverless toolbox. Step Function State Machines are asynchronous, rule-driven, and fault-tolerant orchestrations of multiple AWS Lambda functions or Step Function activities. This project contains samples illustrating the use of Serverless Framework plugins to define State Machines within the serverless specification and how to invoke the State Machines via events or the AWS SDK.

Environment Variables
Almost every application has some environment-specific configuration. Serverless applications are no exception. The project contains examples of configuring AWS Lambda functions using environment variables sourced from a variety of locations.

Code Structure
One of the most frequent misconceptions of serverless application development is that the code is by default small, simple, or all in one file or method. There are times when this is true, but complexity in information systems is unavoidable and the aforementioned situations are rare. Serverless programming does not inherently remove the need to manage complexity... It removes the need to manage servers. This project contains examples of how to structure serverless projects, organizing code into modules by purpose, maximizing reusability and improving testability.

Unit Tests
The project contains samples illustrating how to configure and author unit tests with the Jest library.

Technology Stack

  • AWS SDK
  • Express
  • Jest
  • Serverless Framework
  • Serverless Framework Plugins
  • Node.js

Languages

  • JavaScript

View it on GitHub.