# Packages
# README
Amalgam
Tech demo of a modern web application stack.
Prerequisites
- docker
- tilt.dev
Run
tilt up
curl -v http://localhost:3000/ # or open in browser
Architecture
Architecture contains an overview of how to convert a project from a monolith to a microservices architecture.
Services
Monolith REST API
A classic "monolith" REST api built with gin-gonic. This service would be available to the public. It will be replaced with GraphQL as the project progresses.
One of the major points of this project is the OpenAPI specification. It is generated from the gin endpoint code and is used to generate API clients in various languages.
Graph (GraphQL)
GraphQL API. The goal is to show how to quickly build out public facing features. GraphQL would be available to public.
Resources:
User Interface (UI)
A Next.JS app user interface for interacting with the project. At first it uses the REST API, but will be updated to use the GraphQL API.
TODO:
Command Line Interface (CLI)
A way to interact with the project using the command line. This project aims to be low-code as it uses a pre-generated REST API client. A stretch goal will be to add a Text User Interface (TUI).
RPC (gRPC)
A simple gRPC service that can be used to show how to convert a monolith into microservices architecture. This service would only be available on the internal VPC.
Data Pipeline
Temporal
The first pipeline that I have built is a rudimentary batch process for ingesting RSS feeds.
Supporting Services
LGTM Observability Stack
Observability is the heart of quality software. This project uses a demonstration LGTM stack to show how various pieces of the system can be monitored.
TODO:
Minio
Minio is a drop in object storage similar to AWS S3. I mainly will be using it as a data storage mechanism for data pipelines, but also as a fake CDN.
Nats
Nats is a cloud native event messaging system. It will be used to show how event driven architecture can be implemented. Jetstream offers a persistent message store enabling GCP Pubsub like functionality.
K6 (testing)
K6 tests have been generated from the OpenAPI spec. They are a high level way of verifying the API is working as expected. This is a wonderful way to have end-to-end tests that are easy to write and maintain. Next steps might be adding load testing.
Domain Logic
A simplified version of domain driven design.
TODO:
Code generation
One of the major goals of this project is to show how to quickly build integrations. Part of that is utilizing code generation to lower the amount of code that needs to be written and maintained.
- OpenAPI spec with swaggo/swag
- REST client from OpenAPI spec
- TypeScript client from OpenAPI spec
- k6 tests from OpenAPI spec
Code Quality
Be sure to install the pre-commit hooks which run various linters, formatters, and tests.
just setup
Linters:
CI/CD
Github Actions can be found in the .github/workflows directory. You can run them locally using act.
TODO
- helm chart
- values file for configuration
- service account
- ingress
- deployment + service
- base chart to share otel conf
- just
graphql- fake feed data generation
- ci gate: coverage