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 marked with ✅ should be feature complete. Anything with 🟨 is a planned feature that is not yet complete.
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.
- ✅ CLI scripts written in Elixir
- 🟨 Unique CLI command to start message consuming separately from web server
- ✅ Cockroach DB usage via
ecto
- 🟨 Database multi tenant setup
- ✅ Prefixed primary keys similar to Stripe (
usr_abc123
)
- ✅ HTTP server with
bandit
- ✅ User authentication via
mix phx.gen.auth
- 🟨 User organizationse
- 🟨 User and organization permissions
- 🟨 User notification preferences
- 🟨 Phoenix PubSub setup
- ✅ Internal event bus for cross context communication
- 🟨 Rabbitmq for worker queue message producing
- 🟨 Broadway for worker queue message consuming
- ✅ Document the difference between the three and when to use each
- ✅ Code documentation via
ex_doc
- ✅ Published documentation to GitHub pages
- ✅ Code formatting via
mix format
- ✅ Tailwind class ordering via
tailwind_formatter
- ✅ Code linting via
dialyzer
- ✅ Code linting via
credo
- ✅ Code linting via
boundary
- ✅ Linting for other file types (almost too much linting 🤯)
- ✅ Linting GitHub actions via
actionlint
- ✅ Linting for insensitive and inconsiderate writing via
alex
- ✅ Linting CSS via
stylelint
- ✅ Linting
Dockerfile
s viahadolint
- ✅ Linting Javascript via
eslint
andstandard
- ✅ Linting Markdown via
markdownlint
- ✅ Spell checking via
misspell
- ✅ Linting shell scripts via
shellcheck
- ✅ Linting shell scripts via
shfmt
- ✅ Linting YAML via
yamllint
- ✅ Linting GitHub actions via
- ✅ Code testing via
exunit
- 🟨 Browser testing via
wallaby
- ✅ Property testing via
stream_data
- 🟨 Continuous integration with GitHub actions
- ✅ Releasing via
release-please
- 🟨 Container building on PRs and releases
- 🟨 Continuous deployment with GitHub actions to Fly.io
Documentation for this project is hosted at https://jumar.btkostner.io. It is built and published on every merge to the main
branch.