Signal drop!
Relay (operand.online) is unreachable.
Usually, a dropped signal means an upgrade is happening. Hold on!
Sorry, no connección.
Hang in there while we get back on track
gram: pain
Clone using:
mkdir ~/src; cd ~/src
wget -O - 'https://share.operand.online/gram/pain/?download=tar_gz' | tar -xzv
cd ./pain; git checkout main
Pain
Booking application replacing Acuity Scheduler, for <painawayofphilly.com>.
Gram runs on a subdomain, such as: book.painawayofphilly.com
Scheduling Credentials
You'll need a couple environment variables so our app can book inside your acuity calendars.
Locally, these can go inside a file called .env
:
# .env
SCHEDULE_USER="12345678"
SCHEDULE_KEY="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
Launch
Deploy your app:
- Run
mix setup
to install and setup dependencies - Start Phoenix endpoint with
mix phx.server
or inside IEx withiex -S mix phx.server
You should see a booking page on localhost:4000
.
Deploy this app using Dokku.
Learn more
- A more proper-Elixir deployment is described in deployment guides.
- Official website: https://www.phoenixframework.org/
- Guides: https://hexdocs.pm/phoenix/overview.html
- Docs: https://hexdocs.pm/phoenix
- Forum: https://elixirforum.com/c/phoenix-forum
- Source: https://github.com/phoenixframework/phoenix
Logged Changes:
gitGraph BT:
commit id: "ec1813d"
commit id: "8d848b0"
commit id: "8f2aaf6"
commit id: "5cc6761"
commit id: "da36d1e"
commit id: "9393d77"
commit id: "a250101"
commit id: "654452d"
commit id: "7595b46"
commit id: "0efa622"
commit id: "ce66db2"
commit id: "ada4bc6"
commit id: "5403562"
commit id: "2415039"
commit id: "039c147"
commit id: "666a5e7"
commit id: "1010328"
commit id: "f961853"
commit id: "d06c3f2"
commit id: "4b6ebca"
commit id: "83226d8"
commit id: "018887a"
commit id: "6f9e88a"
commit id: "22f6899"
commit id: "e606d61"
commit id: "78c5900"
commit id: "4a482a9"
commit id: "2c5fd01"
commit id: "d022c0a"
commit id: "656ae04"
commit id: "e437cce"
commit id: "72b2a3f"
commit id: "4fed86a"
commit id: "411ad6e"
commit id: "7662469"
commit id: "85a3775"
commit id: "6172149"
commit id: "353c5a0"
commit id: "e6ee72e"
commit id: "265f852"
commit id: "b4e29fe"
commit id: "79cf5f5"
commit id: "0ad3993"
commit id: "7089953"
commit id: "2f549bc"
commit id: "5867e90"
commit id: "65e5edd"
commit id: "f5031a2"
commit id: "3fff783"
commit id: "d327542"
commit id: "044fe74"
commit id: "8fc05a0"
commit id: "762a7b5"
commit id: "14f4325"
commit id: "4b2643b"
commit id: "cdb924d"
commit id: "737d18a"
commit id: "1fb8363"
commit id: "a436ac3"
commit id: "d2088be"
commit id: "4a9df10"
commit id: "cd5ad8e"
commit id: "e659efe"
commit id: "26a90c6"
commit id: "c10c3c0"
commit id: "3d0a044"
commit id: "93bdbd8"
commit id: "031c4ac"
commit id: "7be946e"
commit id: "48ab637"
commit id: "5589502"
commit id: "6a06bfe"
commit id: "5aa99a2"
commit id: "f7dac12"
commit id: "23b733b"
commit id: "5f616d9"
commit id: "cff1da6"
commit id: "4ff9b2e"
commit id: "b665d23"
commit id: "ade33eb"
commit id: "b76e2d9"
commit id: "c65afa6"
commit id: "8fdd5d9"
commit id: "adbe4b5"
commit id: "7b79105"
commit id: "a17b019"
commit id: "ecddf5e"
commit id: "70eed8c"
commit id: "6d12056"
commit id: "f69367c"
commit id: "f0ff7d7"
commit id: "d1741a0"
commit id: "3b79d3b"
commit id: "fcb8197"
commit id: "900271f"
commit id: "64fd3ea"
commit id: "29760a3"
commit id: "f01ed91"
commit id: "f3c5993"
commit id: "ca65e80"
commit id: "36f9fd7"
commit id: "17bd08a"
commit id: "d1b68ab"
commit id: "4b7ce3e"
commit id: "03a2a8b"
commit id: "5241a2f"
commit id: "9d10c48"
commit id: "ebdc4fb"
commit id: "744043f"
commit id: "af37970"
commit id: "6e254fb"
commit id: "83a799c"
commit id: "5dfa1fc"
commit id: "ea1b28f"
commit id: "f56849a"
commit id: "f75f5ed"
commit id: "bbc3b19"
commit id: "43b15d7"
commit id: "f1a1694"
commit id: "59bf6db"
commit id: "5a5f265"
commit id: "eac47b0"
commit id: "0ad006d"
commit id: "9c96f72"
commit id: "0b06bfe"
commit id: "962a133"
commit id: "58e8f10"
commit id: "7d58b32"
commit id: "737a258"
commit id: "84eca14"
commit id: "9f6bc4f"
commit id: "fe5bba1"
commit id: "9392a6d"
commit id: "8cf843a"
commit id: "38a0b67"
commit id: "3facc88"
commit id: "4de46c9"
commit id: "58b5a1a"
commit id: "81be8cb"
commit id: "be723a7"
commit id: "fcf1176"
commit id: "e7e8225"
commit id: "74dc4c9"
commit id: "27bd9d7"
commit id: "9bb2fd3"
commit id: "70be761"
commit id: "40130d0"
commit id: "1b8a26c"
commit id: "4b73b90"
commit id: "0db6a4d"
commit id: "728fe5c"
commit id: "fea2a16"
commit id: "fc9f4a5"
commit id: "3199c54"
commit id: "801d53e"
commit id: "33b747d"
commit id: "59be854" tag: "HEAD -> main"
2025-02-11
23:33:35
# 59be854
[readme] include subdomain anchor.
2025-02-11
11:45:10
# 33b747d
upgrade `flake.nix`, use .call
2025-02-02
12:01:01
# 801d53e
depend on `ex_heroicons`.
2024-09-02
18:16:46
# 3199c54
[deploy] replace missing `secret_key_base`.
2024-09-02
18:06:35
# fc9f4a5
[repair] channel mapping
2024-09-02
17:56:00
# fea2a16
More channel-binding.
2024-09-02
17:47:19
# 728fe5c
Ensure channel on deploy.
2024-09-01
23:58:32
# 0db6a4d
[doc] Produce documentation pages.
2024-09-01
23:45:09
# 4b73b90
[employee] base image lookup on schedule keys.
2024-09-01
23:40:00
# 1b8a26c
Drop inapplicable biographies.
2024-09-01
23:22:54
# 40130d0
Build `Acuity` module, dump bookings.
2024-08-31
14:20:20
# 70be761
Change masseurs and therapy menu.
2024-08-29
13:39:45
# 9bb2fd3
drop old broken `/mailbox` address.
2024-08-29
13:27:49
# 27bd9d7
[nix] upgrade.
2024-07-31
12:02:05
# 74dc4c9
Repair mix/node command recipes.
2024-07-31
11:36:48
# e7e8225
Mark `app.js` module, compile in `assets/build.js`
2024-06-23
14:30:08
# fcf1176
Drop cowboy - again.
2024-06-21
23:17:00
# be723a7
Replace `cowboy` relay engine, using `bandit`
2024-06-21
23:00:41
# 81be8cb
Pin earlier `cowlib`, `cowboy`, `plug_cowboy`
2024-06-21
21:48:06
# 58b5a1a
`Plug.Cowboy` inside `Pain` module.
2024-06-21
21:43:36
# 4de46c9
Couple small release changes.
2024-06-21
21:26:25
# 3facc88
Add `plug_cowboy` back in.
2024-06-21
21:14:53
# 38a0b67
Repair small error, a missing comma.
2024-06-21
21:09:21
# 8cf843a
[operand][pain] cross-pollinación.
2024-06-21
20:15:44
# 9392a6d
Run app inside release command.
2024-06-21
19:52:15
# fe5bba1
Exclude `phoenix` symbols in esbuild bundle.
2024-06-21
19:44:28
# 9f6bc4f
Possibly roll back numerous changes.
2024-06-21
19:23:21
# 84eca14
Roll back `esbuild` a bunch.
2024-06-21
19:17:16
# 737a258
Use npm as our node package manager.
2024-06-21
19:12:00
# 7d58b32
Is yarn causing problems?
2024-06-21
19:00:08
# 58e8f10
Packages and languages, clean up loose ends.
2024-06-21
18:52:50
# 962a133
Check in on node-compiled bundles.
2024-06-21
18:29:54
# 0b06bfe
Reduce dependency, `cowboy`, `plug_cowbo`, `cowlib`
2024-06-21
18:09:22
# 9c96f72
Drop `tzdata`, `swoosh`, and underlying `hackney`
2024-06-21
17:09:47
# 0ad006d
Replace `HTTPoison` (bad dependencies) using `Req`k
2024-06-21
16:30:48
# eac47b0
More upgrades.
2024-06-21
16:20:05
# 5a5f265
Upgrade dependencies, flake and mix.
2024-06-21
15:48:23
# 59bf6db
Upgrade dependencies, flake and mix.
2023-12-14
01:17:02
# f1a1694
Disable `Pain.Repo`.
2023-11-02
13:26:32
# 43b15d7
Clean up body-location descriptions.
2023-11-01
11:22:58
# bbc3b19
Repair employees, mirror squarespace.
2023-10-27
19:25:31
# f75f5ed
Repair calendar css ordering.
2023-10-27
19:18:27
# f56849a
Check and repair menu on mobile.
2023-10-27
19:16:00
# ea1b28f
Relax CSRF rules.
2023-10-23
07:34:20
# 5dfa1fc
upgrade dependencies.
2023-10-23
07:33:58
# 83a799c
Add accommodation remark, use `.sface`
2023-10-20
15:57:42
# 6e254fb
Arrange menu on large & small screens
2023-10-20
15:53:45
# af37970
Repair 'connect' link.
2023-10-20
15:44:34
# 744043f
Add business links on end of page.
2023-10-17
11:52:22
# ebdc4fb
More aligned again.
2023-10-17
11:49:20
# 9d10c48
Enable random employee seleccion.
2023-10-17
11:47:37
# 5241a2f
More aligned.
2023-10-17
11:32:07
# 03a2a8b
More alignment.
2023-10-17
11:20:05
# 4b7ce3e
Change `priv/*.yml`
2023-10-17
11:16:04
# d1b68ab
Change padding on `BookLive`.
2023-10-15
13:53:27
# 17bd08a
Add combo packages and change color scheme.
2023-10-15
11:10:11
# 36f9fd7
Use `BookLive` on main `/` address.
2023-10-15
10:55:23
# ca65e80
Add `book.painawayofphilly.com`
2023-10-15
04:06:47
# f3c5993
Change cookie options again.
2023-10-15
03:55:52
# f01ed91
`samesite=none`
2023-10-13
20:19:57
# 29760a3
Use `Plug.CSRFProtection` by name.
2023-10-13
20:15:06
# 64fd3ea
Add `assemble.codes` domain in more places.
2023-10-13
20:11:34
# 900271f
change csrf domains in router plug.
2023-10-13
20:03:37
# fcb8197
Add domains back in.
2023-10-13
20:00:55
# 3b79d3b
include `//assemble.codes` inside `check_origin`.
2023-10-13
19:56:33
# d1741a0
check all bases.
2023-10-13
19:52:06
# f0ff7d7
Apply `access-control-allow-origin`.
2023-10-13
19:46:02
# f69367c
Add permissible origins.
2023-10-13
19:40:45
# 6d12056
Drop SSL.
2023-10-13
19:34:22
# 70eed8c
spell precisely our produccion subdomains.
2023-10-12
18:08:03
# ecddf5e
Redescribe CORS.
2023-10-09
16:47:30
# a17b019
change CORS domains.
2023-10-09
16:44:32
# 7b79105
Drop `cors_plug` dependency.
2023-10-09
16:35:50
# adbe4b5
Add a couple more employees.
2023-10-09
16:35:06
# 8fdd5d9
enable emails on bookings.
2023-10-09
16:29:59
# c65afa6
Disable `same_site` header.
2023-10-09
15:53:36
# b76e2d9
change `frame-ancestors`.
2023-10-09
15:43:57
# ade33eb
Add more precise CORS rules as a `plug`.
2023-10-09
14:30:16
# b665d23
Repair minor body chooser issue.
2023-10-08
12:12:48
# 4ff9b2e
Expand CORS rules.
2023-10-08
12:02:24
# cff1da6
Enable CORS.
2023-09-20
09:31:38
# 5f616d9
Handle no add-on booking case.
2023-09-20
09:23:42
# 23b733b
Book add-ons, display confirmation link
2023-09-20
08:40:00
# f7dac12
Render addons.
2023-09-20
08:39:27
# 5aa99a2
Clean up legal phrases.
2023-09-19
17:02:07
# 6a06bfe
Add conditions, encourage users to read.
2023-09-19
15:26:54
# 5589502
Mark required booking fields.
2023-09-19
14:53:34
# 48ab637
merge possible blocks, per-day as needed.
2023-09-19
14:27:50
# 7be946e
Book long ahead, see open blocks.
2023-09-19
13:37:18
# 031c4ac
Upgrade dependencies, use `yarn`.
2023-09-19
13:36:09
# 93bdbd8
Drop surname, rehash calendar colors.
2023-09-05
13:32:16
# 3d0a044
Add sum of service prices.
2023-09-05
13:17:01
# c10c3c0
Enable more than one, or no, body location choices
2023-08-31
02:00:27
# 26a90c6
Body only on massage opciones, calendar only 14d.
2023-08-31
01:31:56
# e659efe
repair bypass sizing.
2023-08-31
01:29:31
# cd5ad8e
Display end screen once order is booked.
2023-08-31
01:18:44
# 4a9df10
Place bookings on calendars.
2023-08-30
23:50:34
# d2088be
Ask customer's information so booking can be made.
2023-08-30
08:04:27
# a436ac3
Rearrange screen on schedule block.
2023-08-30
07:50:33
# 1fb8363
Use async schedule processing.
2023-08-28
14:19:06
# 737d18a
Handle unchosen cases on body locations.
2023-08-28
13:54:34
# cdb924d
Redescribe nil body location choices.
2023-08-28
13:50:03
# 4b2643b
Enable choosing position on body.
2023-08-25
00:37:11
# 14f4325
Drop `Open Sans`, use Carbon Icons.
2023-08-25
00:15:45
# 762a7b5
Use `Open Sans`, no missing glyphs.
2023-08-25
00:05:26
# 8fc05a0
Handle `clear` events as a sequence.
2023-08-24
17:29:34
# 044fe74
Prepare `Pain.Order` module, bypass option.
2023-08-24
16:45:18
# d327542
Clean up.
2023-08-24
16:42:40
# 3fff783
Yep, in good shape on choosing employees.
2023-08-24
16:35:27
# f5031a2
Much progress on proper booking logic.
2023-08-24
15:50:50
# 65e5edd
Round one: sum genders improperly.
2023-08-24
14:33:21
# 5867e90
Apply some polish, and realign headings.
2023-08-24
14:13:37
# 2f549bc
More employee booking logic.
2023-08-24
13:52:11
# 7089953
Properly disable non-bookable employees.
2023-08-24
12:32:24
# 0ad3993
Prepare to disable unbookable employee choices.
2023-08-24
12:31:19
# 79cf5f5
Color and braid `<ServiceMap/>` threads.
2023-08-24
12:06:35
# b4e29fe
Hide and display biographies.
2023-08-24
11:54:31
# 265f852
Render `ServiceMap` nicely on small screens.
2023-08-24
11:14:19
# e6ee72e
Add a nice-looking `<ServiceMap/>`.
2023-08-24
07:51:05
# 353c5a0
One more check on booking options.
2023-08-24
06:38:38
# 6172149
Clean up `Pain.Schedule.check_blocks`
2023-08-23
20:34:40
# 85a3775
Prepare final coding push.
2023-08-23
20:26:11
# 7662469
Many more scheduling upgrades.
2023-08-23
18:45:38
# 411ad6e
Relay the schedule and service screens.
2023-08-23
18:44:56
# 4fed86a
More properly assign `assigns`.
2023-08-23
18:43:33
# 72b2a3f
Handle edge cases in squarespace schedules.
2023-08-21
18:34:47
# e437cce
Drop inspections.
2023-08-21
18:32:18
# 656ae04
Reduce coloring delay on calendar.
2023-08-21
18:11:22
# d022c0a
Color upcoming months; basic approach.
2023-08-21
16:32:01
# 2c5fd01
Handle case once blocks are used up.
2023-08-21
16:06:31
# 4a482a9
Publish prerelease `socket.assigns` error case.
2023-08-21
14:15:14
# 78c5900
Display open calendar blocks per day in schedule.
2023-08-21
01:15:16
# e606d61
Pass chosen day back up so Phoenix can make use.
2023-08-21
00:02:23
# 22f6899
Color calendar days by open blocks.
2023-08-20
23:20:09
# 6f9e88a
Speed up schedule checks using a parallel map.
2023-08-20
22:58:05
# 018887a
Use local time zone.
2023-08-20
22:33:36
# 83226d8
Upgrade schedule, pull daily blocks.
2023-08-20
09:55:15
# 4b6ebca
Break, load `daisyui` as a second CSS module.
2023-08-20
08:23:25
# d06c3f2
Big changes; prepare scheduling experience.
2023-08-18
16:05:43
# f961853
Choose more than one service.
2023-08-18
15:24:41
# 1010328
Rearrange therapist images on mobile.
2023-08-18
14:54:40
# 666a5e7
Rearrange therapist selection, per-person.
2023-08-13
06:40:45
# 039c147
Add employee seleccion.
2023-08-12
00:08:31
# 2415039
Keep card width @ 40rem.
2023-08-11
23:36:59
# 5403562
Keep order in page middle.
2023-08-11
23:33:17
# ada4bc6
Mix `<p>` and `<section>`, cleaner spacing.
2023-08-11
23:30:31
# ce66db2
Make each bookable service clickable.
2023-08-11
21:58:39
# 0efa622
Rearrange descriptions and Hanyu phrases.
2023-08-11
21:45:05
# 7595b46
Add booking buttons.
2023-08-11
21:37:12
# 654452d
Make `Class` and `Service` components.
2023-08-11
20:57:07
# a250101
Apply number of people on click.
2023-08-11
19:59:42
# 9393d77
Include services rendered.
2023-08-10
18:17:38
# da36d1e
Use CDN on DaisyUI css; repair loading sync.
2023-08-10
18:09:31
# 5cc6761
Add buildpack config.
2023-08-10
13:45:08
# 8f2aaf6
Make progress using Surface and DaisyUI.
2023-08-09
13:20:11
# 8d848b0
`mix surface.init --demo --catalogue`
2023-08-09
13:11:40
# ec1813d
[base] `mix phx.new pain`
Code Pages:
- .formatter.exs
- .gitignore
- .tool-versions
- README.md
- assets/build.js
- assets/css/app.css
- assets/css/lib.css
- assets/css/main.css
- assets/js/app.js
- assets/package-lock.json
- assets/package.json
- assets/tailwind.config.js
- assets/vendor/topbar.js
- assets/yarn.lock
- config/config.exs
- config/dev.exs
- config/prod.exs
- config/runtime.exs
- config/test.exs
- elixir_buildpack.config
- flake.lock
- flake.nix
- lib/acuity.ex
- lib/pain.ex
- lib/pain/application.ex
- lib/pain/mailer.ex
- lib/pain/order.ex
- lib/pain/release.ex
- lib/pain/repo.ex
- lib/pain/schedule.ex
- lib/pain_web.ex
- lib/pain_web/components/Conditions.ex
- lib/pain_web/components/accion.ex
- lib/pain_web/components/body_map.ex
- lib/pain_web/components/card.ex
- lib/pain_web/components/choices.ex
- lib/pain_web/components/class.ex
- lib/pain_web/components/core_components.ex
- lib/pain_web/components/employee.ex
- lib/pain_web/components/layouts.ex
- lib/pain_web/components/layouts/app.html.heex
- lib/pain_web/components/layouts/root.html.heex
- lib/pain_web/components/page.ex
- lib/pain_web/components/schedule.ex
- lib/pain_web/components/schedule.hooks.js
- lib/pain_web/components/service.ex
- lib/pain_web/components/service_map.ex
- lib/pain_web/controllers/error_html.ex
- lib/pain_web/controllers/error_json.ex
- lib/pain_web/controllers/page_controller.ex
- lib/pain_web/controllers/page_html.ex
- lib/pain_web/controllers/page_html/home.html.heex
- lib/pain_web/endpoint.ex
- lib/pain_web/gettext.ex
- lib/pain_web/live/book_live.ex
- lib/pain_web/live/book_live.sface
- lib/pain_web/router.ex
- lib/pain_web/telemetry.ex
- lib/parallel.ex
- lib/squish.ex
- mix.exs
- mix.lock
- priv/.gitignore
- priv/catalogue/pain_web/components/card_examples.ex
- priv/catalogue/pain_web/components/card_playground.ex
- priv/employees.yml
- priv/gettext/en/LC_MESSAGES/errors.po
- priv/gettext/errors.pot
- priv/repo/migrations/.formatter.exs
- priv/repo/seeds.exs
- priv/services.yml
- priv/static/favicon.ico
- priv/static/images/logo.svg
- priv/static/robots.txt
- test/pain_web/components/card_test.exs
- test/pain_web/controllers/error_html_test.exs
- test/pain_web/controllers/error_json_test.exs
- test/pain_web/controllers/page_controller_test.exs
- test/pain_web/plugs/cors_test.exs
- test/support/conn_case.ex
- test/support/data_case.ex
- test/test_helper.exs