# Shift73k Calendaring app for shift-worker shift tracking, with support for CSV export and sharing work schedule with others. Written in Elixir & Phoenix LiveView, with Bootstrap v5. ## Production To run in production, you'll need to provide several environment variable values: ```bash MIX_ENV=prod \ PHX_SERVER=true \ DB_SOCK=[postgres unix socket path] \ DB_NAME=[postgres db name] \ DB_USER=[postgres db user] \ DB_PASS=[postgres db user password] \ SECRET_KEY_BASE=[phoenix secret key base] \ PHX_HOST=[server fqdn (e.g., shift.73k.us)] \ SMTP_RELAY=[smtp server] \ SMTP_PORT=[smtp port] \ SMTP_USER=[smtp username] \ SMTP_PASS=[smtp user password] \ MAIL_REPLY_TO=reply@73k.us \ MAIL_FROM_FRIENDLY=Shift73k \ MAIL_FROM_ADDR=shift73k@73k.us \ ALLOW_REG=[open for registration? true/false] \ iex -S mix phx.server ``` ## TODO - [X] ~~*Proper modal to delete shifts?*~~ [2022-08-14] - [ ] move runtime config out of compile-time config files, to move towards supporting releases - [ ] probably need to use `def get_app_config` style functions instead of `@module_var` module variables, ([see this](https://stephenbussey.com/2019/01/03/understanding-compile-time-dependencies-in-elixir-a-bug-hunt.html)) - [ ] Update tests, which are probably all way out of date. But I also don't care that much for this project... ## Deploying I'm using a dumb & simple docker approach to deploying this now. Nothing automated, the basic steps are: 1. ensure latest assets are built, digested, and committed to the repo ```shell # rebuild static assets: MIX_ENV=prod mix phx.digest.clean --all rm -rf ./priv/static/* npm --prefix assets run build MIX_ENV=prod mix phx.digest # then do a new commit and push... ``` 2. on server, build a new container, and run it