The first developer-oriented translation tool
True asynchronous flow between translators and your team.
Accent provides a powerful abstraction around the process maintaining translations in a web/native app.
Easiest way to run an instance of Accent is by using the offical docker image: https://hub.docker.com/r/mirego/accent
$ docker run --env-file .env -p 4000:4000 mirego/accent
This will start the webserver on port 4000, migrate the database to have an up and running Accent instance!
erlang ~> 21.2
elixir ~> 1.9
postgres >= 9.4
node.js >= 10.16.0
libyaml >= 0.1.7
The app is modeled with the Twelve-Factor App architecture, all configurations are stored in the environment.
mix commands, you should always make sure that the required environment variables are present. You can
source, use nv or a custom l33t bash script.
Every following steps assume you have this kind of system.
But Accent can be run with default environment variables if you have a PostgreSQL user named
postgres listening on port
nv you inject the environment keys in the context with:
$ nv .env mix <mix command>
This is the full development setup. To simply run the app, see the Getting started instructions
brew install nodejs
brew install elixir
brew install libyaml
brew install postgresor the Docker setup as described below.
npm run start --prefix webapp
The Makefile should be the main entry for common tasks such as tests, linting, Docker, etc. This simplify the development process since you don’t have to search for which service provides which command.
stylelint, etc are all used in the Makefile.
For the production setup, we use Docker to build an OTP release of the app. With docker-compose, you can run the image locally. Here are the steps to have a working app running locally with Docker:
When running the production env, you need to provide a valid GOOGLE_API_CLIENT_ID in the
make buildto build the OTP release with Docker
make dev-start-postgresqlto start an instance of Postgresql. The instance will run on port 5432 with the
postgresuser. You can change those values in the
make dev-start-applicationto start the app! The release hook of the release will execute migrations and seeds before starting the webserver on port 4000 (again you can change the settings in
That’s it! You now have a working Accent instance without installing Elixir or Node!
Accent provides a default value for every required environment variable. This means that with the right PostgreSQL setup, you can just run
API_HOSTnone The API host, if the API is hosted by the same host as the webapp (like in a production setup) it should not be included in env var. It is required for the webapp in dev.
API_WS_HOSTnone The API Websocket host, same requirements and defaults as
postgres://localhost/accent_developmentA valid database URL
4000A port to run the API on
4200A port to run the Webapp on (only used in
http://localhost:4000The Web client’s endpoint. Used in the authentication process and in the sent emails.
RESTRICTED_DOMAINnone If specified, only authenticated users from this domain name will be able to create new projects.
FORCE_SSLfalse If the app should always be served by https (and wss for websocket)
SENTRY_DSNnone The secret Sentry DSN used to collect API runtime errors
WEBAPP_SENTRY_DSNnone The public Sentry DSN used to collect Webapp runtime errors
Various login providers are included in Accent using Ueberauth to abstract services.Variable Default Description
DUMMY_LOGIN_ENABLEDnone If specified, the password-less authentication (with only the email) will be available.
If you want to send emails, you’ll have to configure the following environment variables:Variable Default Description
MAILER_FROMnone The email address used to send emails.
SENDGRID_API_KEYnone Use SendGrid to send emails
MANDRILL_API_KEYnone Use Mandrill to send emails
MAILGUN_API_KEYnone Use Mailgun to send emails
SMTP_ADDRESSnone Use an SMTP server to send your emails.
SMTP_API_HEADERnone An optional API header that will be added to sent emails.
SMTP_PORTnone The port ex: (25, 465, 587).
SMTP_PASSWORDnone The password for authentification.
SMTP_USERNAMEnone The username for authentification.
You can setup the project with a helm chart like this one. This project uses a fork by andreymaznyak and not this canonical repository. The specs and values may need to be updated if you use this repo.
Accent provides a default value for every required environment variable. This means that with the right PostgreSQL setup (and a few setup commands), you can just run
$ npm --prefix webapp run build $ mix run ./priv/repo/seeds.exs $ mix test
The full check that runs in the CI environment can be executed with
app.json makes it easy to deploy the application on Heroku.
Based on this guide
$> heroku create Creating app... done, ⬢ peaceful-badlands-85887 https://peaceful-badlands-85887.herokuapp.com/ | https://git.heroku.com/peaceful-badlands-85887.git $> heroku addons:create heroku-postgresql:hobby-dev --app peaceful-badlands-85887 Creating heroku-postgresql:hobby-dev on ⬢ peaceful-badlands-85887... free Database has been created and is available $> heroku config:set FORCE_SSL=true DUMMY_LOGIN_ENABLED=true WEBAPP_URL=https://peaceful-badlands-85887.herokuapp.com --app peaceful-badlands-85887 Setting FORCE_SSL, DUMMY_LOGIN_ENABLED, WEBAPP_URL and restarting ⬢ peaceful-badlands-85887... done $> heroku container:push web --app peaceful-badlands-85887 === Building web Your image has been successfully pushed. You can now release it with the 'container:release' command. $> heroku container:release web --app peaceful-badlands-85887 Releasing images web to peaceful-badlands-85887... done
Before opening a pull request, please open an issue first.
Once you’ve made your additions and the test suite passes, go ahead and open a PR!
Don’t forget to run the
./priv/scripts/ci-check.sh script to make sure that the CI build will pass :)
Mirego is a team of passionate people who believe that work is a place where you can innovate and have fun. We’re a team of talented people who imagine and build beautiful Web and mobile applications. We come together to share ideas and change the world.
We also love open-source software and we try to give back to the community as much as we can.