The name "Fáfnir" is inspired from Norse mythology, and refers to a dwarf who transformed into a mythical Germanic dragon, so he can guard his treasure hoard of gold and such.
This is a purely educational project that serves as a hands-on demonstration of building a modern codebase that explores microservices architecture, asynchronous event-driven design, and best practices for creating a scalable, distributed application. I do not intend to use this project for other purposes and is mostly a playground for my learning, experimentation, and exploration.
Now for the application: It is designed to function as the backend for a stock trading simulator/platform, including services for user management, authentication, stock data retrieval, buy/sell operations, and security/permissions.
For more detailed information, please refer to the documentation in the docs/ directory, or visit the following links:
| Guide | Description |
|---|---|
| Architecture | Project structure, service overview |
| Development | Setup, local dev, make commands |
| Database | Migrations, Goose, DB details |
| GraphQL | API schema, queries, mutations |
| Designs | Excalidraw designs and images |
In no particular order:
- Design and implement additional microservices.
- Integrate NATS for asynchronous events and messaging (issue #11).
- Swapped from Pub/Sub to Worker Queues for message persistence with NATS JetStream (issue #20).
- Implement more events across services than just user creation.
- Create system architecture, network and data diagrams (upkeep as much as possible).
- Build a simulation/orchestration engine for app events.
- Add unit, integration, end-to-end and load/stress tests.
- Perform load testing using Locust to simulate concurrent users (issue #8).
- Explore Kubernetes local implementation (issue #5).
- Explore centralized logging CLI with Elasticsearch for Minikube (issue #6).
- Implement a CI/CD pipeline for automated testing and Docker builds.