Skip to content

Demo app applying clean architecture, automation and IaC principles to a TypeScript application

Notifications You must be signed in to change notification settings

jbrunton/chat-demo

Repository files navigation

Chat Demo

build Mutation testing badge

This project is an exercise in developing good clean architecture and CI/CD practices. It includes (or will include):

  • Infrastructure as Code with Pulumi, including staging and ephemeral dev environments (with automatic dev environment cleanup).
  • CI including linting, unit, integration and mutation tests, and automated end to end tests with Playwright.
  • Docker image built using Cloud Native Buildpacks.
  • A clean architecture, including dependency inversion enforced through linting rules with eslint-plugin-boundaries.
  • Separate domain, data and application boundaries in the application. Domain logic is completely separated from data access layers using verified fake implementations.
  • Continuous deployment pipelines to staging and production environments.
  • Automatic documentation of code with TypeDoc deployed using GitHub Pages to jbrunton.github.io/chat-demo, and Open API docs deployed along with the api (chat-demo-api.jbrunton-aws.com/docs).
  • Automatic dependency updates (including automerging) with Renovate.

The demo application

The project implements a very basic realtime chat app at chat-demo.jbrunton-aws.com.

  • From the home screen or navigation menu you can create "rooms". Each room has a unique URL. Anyone who joins a room can chat using server-sent events.
  • The app responds to commands prefixed with /. Type /help into the chat window to get assistance.

Screenshot of Chat Demo app

Local dev

Clone the repository, and then:

docker compose up -d
pnpm install
pnpm dev:setup
pnpm dev

The web client will then be running locally at http://localhost:5173/.

To configure environment variables for the Playwright e2e tests:

pnpm test:e2e:setup

About

Demo app applying clean architecture, automation and IaC principles to a TypeScript application

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published