Calendaring app for shift-workers to enter their uneven work schedule more easily
Find a file
2022-08-14 09:14:42 -04:00
assets implemented optional 'allow_registration' config, with first registered user being pre-confirmed Admin, registration unavailable after that point if allow_registration: :false 2022-08-14 09:14:42 -04:00
assets_old progress on migrating to heex templates and font-icons 2022-08-13 07:32:36 -04:00
config implemented optional 'allow_registration' config, with first registered user being pre-confirmed Admin, registration unavailable after that point if allow_registration: :false 2022-08-14 09:14:42 -04:00
lib implemented optional 'allow_registration' config, with first registered user being pre-confirmed Admin, registration unavailable after that point if allow_registration: :false 2022-08-14 09:14:42 -04:00
priv implemented optional 'allow_registration' config, with first registered user being pre-confirmed Admin, registration unavailable after that point if allow_registration: :false 2022-08-14 09:14:42 -04:00
test updated Bamboo references to Swoosh; added runtime.exs config file 2022-08-13 06:39:14 -04:00
.formatter.exs Create phoenix project 2020-09-12 19:47:24 -03:00
.gitignore updated gitignore & readme 2021-03-16 11:39:53 -04:00
.iex.exs month & shift navigation progress 2021-03-15 15:46:59 -04:00
mix.exs updated deps & switched from Mix.Config to Config 2022-08-13 06:19:56 -04:00
mix.lock updated deps & switched from Mix.Config to Config 2022-08-13 06:19:56 -04:00
README.md modifications to fix basic tests, many still need implementing 2021-04-10 12:23:11 -04:00

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.

TODO

  • Ability to edit shifts?
  • Proper modal to delete shifts?
  • Allow all-day items for notes, or require hours even for sick days?
  • Implement proper shift/template/assign tests (views etc)

Deploying

New versions

When improvements are made, we can update the deployed version like so:

cd /opt/shift73k
# update from master
/usr/bin/git pull 73k master
# fetch prod deps & compile
/usr/bin/mix deps.get --only prod
MIX_ENV=prod /usr/bin/mix compile
# perform any migrations
MIX_ENV=prod /usr/bin/mix ecto.migrate
# update node packages via package-lock.json
/usr/bin/npm --prefix /opt/shift73k/assets/ ci
# rebuild static assets:
rm -rf /opt/shift73k/priv/static/*
/usr/bin/npm --prefix /opt/shift73k/assets/ run deploy
MIX_ENV=prod /usr/bin/mix phx.digest
# rebuild release
MIX_ENV=prod /usr/bin/mix release --overwrite
# restart service
sudo /bin/systemctl restart shift73k.service

systemd unit:

[Unit]
Description=Shift73k service
After=local-fs.target network.target

[Service]
Type=simple
User=runuser
Group=runuser
WorkingDirectory=/opt/shift73k/_build/prod/rel/shift73k
ExecStart=/opt/shift73k/_build/prod/rel/shift73k/bin/shift73k start
ExecStop=/opt/shift73k/_build/prod/rel/shift73k/bin/shift73k stop
#EnvironmentFile=/etc/default/myApp.env
Environment=LANG=en_US.utf8
Environment=MIX_ENV=prod
#Environment=PORT=4000
LimitNOFILE=65535
UMask=0027
SyslogIdentifier=shift73k
Restart=always

[Install]
WantedBy=multi-user.target

nginx config:

upstream phoenix {
  server 127.0.0.1:4000 max_fails=5 fail_timeout=60s;
}
server {
  location / {
    allow all;
    # Proxy Headers
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Cluster-Client-Ip $remote_addr;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_redirect off;
    # WebSockets
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_pass http://phoenix;
  }
}