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:
git clone base.operand.online:pain
cd ./pain
Pain
Booking application replacing Acuity Scheduler, for
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:
2025-08-24
21:54:50 | 2e3b0c8
[nix] run on `aarch64`12:37:20 | c646f86
[repair] config issue.2025-08-09
21:02:15 | 131b99b
[surface] break glass, add code gen'd by surface.2025-05-27
23:14:02 | 9ef07df
[yarn] drop `package-lock.json`22:07:34 | a774802
[nix] upgrade flake.2025-05-13
15:32:55 | cdfa0e1
[elixir] upgrade.2025-02-11
23:33:35 | 59be854
[readme] include subdomain anchor.11:45:10 | 33b747d
upgrade `flake.nix`, use .call2025-02-02
12:01:01 | 801d53e
depend on `ex_heroicons`.2024-09-02
18:16:46 | 3199c54
[deploy] replace missing `secret_key_base`.18:06:35 | fc9f4a5
[repair] channel mapping17:56:00 | fea2a16
More channel-binding.17:47:19 | 728fe5c
Ensure channel on deploy.2024-09-01
23:58:32 | 0db6a4d
[doc] Produce documentation pages.23:45:09 | 4b73b90
[employee] base image lookup on schedule keys.23:40:00 | 1b8a26c
Drop inapplicable biographies.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.13:27:49 | 27bd9d7
[nix] upgrade.2024-07-31
12:02:05 | 74dc4c9
Repair mix/node command recipes.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`23:00:41 | 81be8cb
Pin earlier `cowlib`, `cowboy`, `plug_cowboy`21:48:06 | 58b5a1a
`Plug.Cowboy` inside `Pain` module.21:43:36 | 4de46c9
Couple small release changes.21:26:25 | 3facc88
Add `plug_cowboy` back in.21:14:53 | 38a0b67
Repair small error, a missing comma.21:09:21 | 8cf843a
[operand][pain] cross-pollinación.20:15:44 | 9392a6d
Run app inside release command.19:52:15 | fe5bba1
Exclude `phoenix` symbols in esbuild bundle.19:44:28 | 9f6bc4f
Possibly roll back numerous changes.19:23:21 | 84eca14
Roll back `esbuild` a bunch.19:17:16 | 737a258
Use npm as our node package manager.19:12:00 | 7d58b32
Is yarn causing problems?19:00:08 | 58e8f10
Packages and languages, clean up loose ends.18:52:50 | 962a133
Check in on node-compiled bundles.18:29:54 | 0b06bfe
Reduce dependency, `cowboy`, `plug_cowbo`, `cowlib`18:09:22 | 9c96f72
Drop `tzdata`, `swoosh`, and underlying `hackney`17:09:47 | 0ad006d
Replace `HTTPoison` (bad dependencies) using `Req`k16:30:48 | eac47b0
More upgrades.16:20:05 | 5a5f265
Upgrade dependencies, flake and mix.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.19:18:27 | f56849a
Check and repair menu on mobile.19:16:00 | ea1b28f
Relax CSRF rules.2023-10-23
07:34:20 | 5dfa1fc
upgrade dependencies.07:33:58 | 83a799c
Add accommodation remark, use `.sface`2023-10-20
15:57:42 | 6e254fb
Arrange menu on large & small screens15:53:45 | af37970
Repair 'connect' link.15:44:34 | 744043f
Add business links on end of page.2023-10-17
11:52:22 | ebdc4fb
More aligned again.11:49:20 | 9d10c48
Enable random employee seleccion.11:47:37 | 5241a2f
More aligned.11:32:07 | 03a2a8b
More alignment.11:20:05 | 4b7ce3e
Change `priv/*.yml`11:16:04 | d1b68ab
Change padding on `BookLive`.2023-10-15
13:53:27 | 17bd08a
Add combo packages and change color scheme.11:10:11 | 36f9fd7
Use `BookLive` on main `/` address.10:55:23 | ca65e80
Add `book.painawayofphilly.com`04:06:47 | f3c5993
Change cookie options again.03:55:52 | f01ed91
`samesite=none`2023-10-13
20:19:57 | 29760a3
Use `Plug.CSRFProtection` by name.20:15:06 | 64fd3ea
Add `assemble.codes` domain in more places.20:11:34 | 900271f
change csrf domains in router plug.20:03:37 | fcb8197
Add domains back in.20:00:55 | 3b79d3b
include `//assemble.codes` inside `check_origin`.19:56:33 | d1741a0
check all bases.19:52:06 | f0ff7d7
Apply `access-control-allow-origin`.19:46:02 | f69367c
Add permissible origins.19:40:45 | 6d12056
Drop SSL.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.16:44:32 | 7b79105
Drop `cors_plug` dependency.16:35:50 | adbe4b5
Add a couple more employees.16:35:06 | 8fdd5d9
enable emails on bookings.16:29:59 | c65afa6
Disable `same_site` header.15:53:36 | b76e2d9
change `frame-ancestors`.15:43:57 | ade33eb
Add more precise CORS rules as a `plug`.14:30:16 | b665d23
Repair minor body chooser issue.2023-10-08
12:12:48 | 4ff9b2e
Expand CORS rules.12:02:24 | cff1da6
Enable CORS.2023-09-20
09:31:38 | 5f616d9
Handle no add-on booking case.09:23:42 | 23b733b
Book add-ons, display confirmation link08:40:00 | f7dac12
Render addons.08:39:27 | 5aa99a2
Clean up legal phrases.2023-09-19
17:02:07 | 6a06bfe
Add conditions, encourage users to read.15:26:54 | 5589502
Mark required booking fields.14:53:34 | 48ab637
merge possible blocks, per-day as needed.14:27:50 | 7be946e
Book long ahead, see open blocks.13:37:18 | 031c4ac
Upgrade dependencies, use `yarn`.13:36:09 | 93bdbd8
Drop surname, rehash calendar colors.2023-09-05
13:32:16 | 3d0a044
Add sum of service prices.13:17:01 | c10c3c0
Enable more than one, or no, body location choices2023-08-31
02:00:27 | 26a90c6
Body only on massage opciones, calendar only 14d.01:31:56 | e659efe
repair bypass sizing.01:29:31 | cd5ad8e
Display end screen once order is booked.01:18:44 | 4a9df10
Place bookings on calendars.2023-08-30
23:50:34 | d2088be
Ask customer's information so booking can be made.08:04:27 | a436ac3
Rearrange screen on schedule block.07:50:33 | 1fb8363
Use async schedule processing.2023-08-28
14:19:06 | 737d18a
Handle unchosen cases on body locations.13:54:34 | cdb924d
Redescribe nil body location choices.13:50:03 | 4b2643b
Enable choosing position on body.2023-08-25
00:37:11 | 14f4325
Drop `Open Sans`, use Carbon Icons.00:15:45 | 762a7b5
Use `Open Sans`, no missing glyphs.00:05:26 | 8fc05a0
Handle `clear` events as a sequence.2023-08-24
17:29:34 | 044fe74
Prepare `Pain.Order` module, bypass option.16:45:18 | d327542
Clean up.16:42:40 | 3fff783
Yep, in good shape on choosing employees.16:35:27 | f5031a2
Much progress on proper booking logic.15:50:50 | 65e5edd
Round one: sum genders improperly.14:33:21 | 5867e90
Apply some polish, and realign headings.14:13:37 | 2f549bc
More employee booking logic.13:52:11 | 7089953
Properly disable non-bookable employees.12:32:24 | 0ad3993
Prepare to disable unbookable employee choices.12:31:19 | 79cf5f5
Color and braid `<ServiceMap/>` threads.12:06:35 | b4e29fe
Hide and display biographies.11:54:31 | 265f852
Render `ServiceMap` nicely on small screens.11:14:19 | e6ee72e
Add a nice-looking `<ServiceMap/>`.07:51:05 | 353c5a0
One more check on booking options.06:38:38 | 6172149
Clean up `Pain.Schedule.check_blocks`2023-08-23
20:34:40 | 85a3775
Prepare final coding push.20:26:11 | 7662469
Many more scheduling upgrades.18:45:38 | 411ad6e
Relay the schedule and service screens.18:44:56 | 4fed86a
More properly assign `assigns`.18:43:33 | 72b2a3f
Handle edge cases in squarespace schedules.2023-08-21
18:34:47 | e437cce
Drop inspections.18:32:18 | 656ae04
Reduce coloring delay on calendar.18:11:22 | d022c0a
Color upcoming months; basic approach.16:32:01 | 2c5fd01
Handle case once blocks are used up.16:06:31 | 4a482a9
Publish prerelease `socket.assigns` error case.14:15:14 | 78c5900
Display open calendar blocks per day in schedule.01:15:16 | e606d61
Pass chosen day back up so Phoenix can make use.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.22:58:05 | 018887a
Use local time zone.22:33:36 | 83226d8
Upgrade schedule, pull daily blocks.09:55:15 | 4b6ebca
Break, load `daisyui` as a second CSS module.08:23:25 | d06c3f2
Big changes; prepare scheduling experience.2023-08-18
16:05:43 | f961853
Choose more than one service.15:24:41 | 1010328
Rearrange therapist images on mobile.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.23:33:17 | ada4bc6
Mix `<p>` and `<section>`, cleaner spacing.23:30:31 | ce66db2
Make each bookable service clickable.21:58:39 | 0efa622
Rearrange descriptions and Hanyu phrases.21:45:05 | 7595b46
Add booking buttons.21:37:12 | 654452d
Make `Class` and `Service` components.20:57:07 | a250101
Apply number of people on click.19:59:42 | 9393d77
Include services rendered.2023-08-10
18:17:38 | da36d1e
Use CDN on DaisyUI css; repair loading sync.18:09:31 | 5cc6761
Add buildpack config.13:45:08 | 8f2aaf6
Make progress using Surface and DaisyUI.2023-08-09
13:20:11 | 8d848b0
`mix surface.init --demo --catalogue`13:11:40 | ec1813d
[base] `mix phx.new pain`