Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/btkostner/jumar
Jumar is a heavily opinionated Elixir boilerplate repository
https://github.com/btkostner/jumar
boilerplate cockroachdb continous-integration continuous-deployment elixir template testing
Last synced: 25 days ago
JSON representation
Jumar is a heavily opinionated Elixir boilerplate repository
- Host: GitHub
- URL: https://github.com/btkostner/jumar
- Owner: btkostner
- Created: 2023-02-27T07:56:11.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-05-22T19:12:46.000Z (6 months ago)
- Last Synced: 2024-05-23T06:45:15.325Z (6 months ago)
- Topics: boilerplate, cockroachdb, continous-integration, continuous-deployment, elixir, template, testing
- Language: Elixir
- Homepage: https://jumar.btkostner.io/
- Size: 291 KB
- Stars: 5
- Watchers: 2
- Forks: 0
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
Jumar
Jumar is Blake's opinionated Elixir bike shedding "I want to write some code" project. It is a boilerplate repository with a _ton_ of useful features and documentation explaining the how and why. It _probably_ has some cool code you could use in your own project. It most definitely has some choices you don't want to use.
One of the goals of this project is to bookmark some good decisions I've learned over the years working in this space. I don't want to say this is "best practices" because truth be told, those change wildly based on the project's context. With that said, this project aims to start on the right foot and document the "why this way" decisions made in the process.
## Features
Features marked with ✅ should be feature complete. Anything with 🟨 is a planned feature that is not yet complete.
Note
Jumar is currently a work in progress. Not all features are complete. If you have an idea or request, please open up a GitHub discussion.
### Command Line Interface
- ✅ CLI scripts written in Elixir
- 🟨 Unique CLI command to start message consuming separately from web server### Database Layer
- ✅ [Cockroach DB](https://www.cockroachlabs.com/) usage via [`ecto`](https://hexdocs.pm/ecto/Ecto.html)
- 🟨 Database multi tenant setup
- ✅ Prefixed primary keys similar to Stripe (`usr_abc123`)### Web Server Layer
- ✅ HTTP server with [`bandit`](https://github.com/mtrudel/bandit)
### User Layer
- ✅ User authentication via [`mix phx.gen.auth`](https://hexdocs.pm/phoenix/mix_phx_gen_auth.html)
- 🟨 User organizationse
- 🟨 User and organization permissions
- 🟨 User notification preferences### Event Layer
- 🟨 Phoenix PubSub setup
- ✅ Internal event bus for cross context communication
- 🟨 [Rabbitmq](https://www.rabbitmq.com/) for worker queue message producing
- 🟨 [Broadway](https://elixir-broadway.org/) for worker queue message consuming
- ✅ Document the difference between the three and when to use each### Documentation Generation
- ✅ Code documentation via [`ex_doc`](https://hexdocs.pm/ex_doc/readme.html)
- ✅ [Published documentation](https://jumar.btkostner.io) to [GitHub pages](https://pages.github.com/)### Continuous Integration
- ✅ Code formatting via [`mix format`](https://hexdocs.pm/mix/main/Mix.Tasks.Format.html)
- ✅ [Tailwind](https://tailwindcss.com/) class ordering via [`tailwind_formatter`](https://github.com/100phlecs/tailwind_formatter)
- ✅ Code linting via [`dialyzer`](https://hexdocs.pm/dialyxir/readme.html)
- ✅ Code linting via [`credo`](https://hexdocs.pm/credo/overview.html)
- ✅ Code linting via `boundary`
- ✅ Linting for other file types (almost too much linting 🤯)
- ✅ Linting GitHub actions via [`actionlint`](https://github.com/rhysd/actionlint)
- ✅ Linting for insensitive and inconsiderate writing via [`alex`](https://github.com/get-alex/alex)
- ✅ Linting CSS via [`stylelint`](https://stylelint.io/)
- ✅ Linting `Dockerfile`s via [`hadolint`](https://github.com/hadolint/hadolint)
- ✅ Linting Javascript via [`eslint`](https://eslint.org/) and [`standard`](https://standardjs.com/)
- ✅ Linting Markdown via [`markdownlint`](https://github.com/DavidAnson/markdownlint)
- ✅ Spell checking via [`misspell`](https://github.com/client9/misspell)
- ✅ Linting shell scripts via [`shellcheck`](https://www.shellcheck.net/)
- ✅ Linting shell scripts via [`shfmt`](https://github.com/mvdan/sh)
- ✅ Linting YAML via [`yamllint`](https://github.com/adrienverge/yamllint)
- ✅ Code testing via [`exunit`](https://hexdocs.pm/ex_unit/ExUnit.html)
- 🟨 Browser testing via [`wallaby`](https://github.com/elixir-wallaby/wallaby)
- ✅ Property testing via [`stream_data`](https://github.com/whatyouhide/stream_data)### Continuous Deployment
- 🟨 Continuous integration with GitHub actions
- ✅ Releasing via [`release-please`](https://github.com/googleapis/release-please)
- 🟨 Container building on PRs and releases
- 🟨 Continuous deployment with GitHub actions to [Fly.io](https://fly.io)## Documentation
Documentation for this project is hosted at . It is built and published on every merge to the `main` branch.