[OCaml] High Intensity Training Online
docs write the README in Org mode
The project is developed in Emacs, so the README belongs in Org mode. Replace README.md with README.org carrying the same content.
Changed files
README.md
@@ -1,76 +0,0 @@
1
Removed:
# hito
2
Removed:
3
Removed:
A Heavy Duty training tracker. hito records workouts the way Mike Mentzer's
4
Removed:
Heavy Duty prescribes them: one working set to failure per exercise, recovery
5
Removed:
gating the next session, and progress measured as more reps or more load.
6
Removed:
7
Removed:
The domain refuses states the doctrine cannot read. A routine cannot exceed
8
Removed:
three sets per muscle. A workout cannot begin before recovery without an
9
Removed:
explicit, recorded override. A stall is corrected by resting more and doing
10
Removed:
less, never by adding work.
11
Removed:
12
Removed:
## Layout
13
Removed:
14
Removed:
Six libraries, dependencies pointing inward only. The build graph enforces
15
Removed:
the rule: a library cannot name what it does not link.
16
Removed:
17
Removed:
| Library | Role |
18
Removed:
|--------------------|---------------------------------------------------------------|
19
Removed:
| `hito.core` | Pure domain. No framework, database, or Lwt. |
20
Removed:
| `hito.app` | Ports (`Repository`, `Password_hash`, `Importer`), `Service`. |
21
Removed:
| `hito.import` | Adapters for third-party exports (`Hevy_csv`). |
22
Removed:
| `hito.persistence` | SQLite adapter, bcrypt adapter, stored-record codecs. |
23
Removed:
| `hito.presenter` | View models and pages. Depends on Dream only. |
24
Removed:
| `hito.web` | Controllers. Maps entities to view models. |
25
Removed:
26
Removed:
`bin/` is the composition root: it alone names both an adapter and the port
27
Removed:
it plugs into.
28
Removed:
29
Removed:
## Run
30
Removed:
31
Removed:
hito needs OCaml 5.1 or later and the pinned dependencies in `hito.opam`.
32
Removed:
33
Removed:
```sh
34
Removed:
opam install . --deps-only --with-test
35
Removed:
dune build
36
Removed:
dune exec hito
37
Removed:
```
38
Removed:
39
Removed:
Configuration comes from the environment. All variables have defaults.
40
Removed:
41
Removed:
| Variable | Purpose |
42
Removed:
|----------------------|------------------------------------------------------------|
43
Removed:
| `HITO_DB` | Caqti URI. Default `sqlite3:local_db/hito.sqlite`. |
44
Removed:
| `HITO_SECRET` | Signs sessions and CSRF tokens. Set it in production. |
45
Removed:
| `HITO_PORT` | TCP port. Default `8080`. The server binds loopback. |
46
Removed:
| `HITO_VERSION` | Deployment identifier shown in the footer. |
47
Removed:
| `HITO_SEED` | `1` seeds one account on startup. Default `0`. |
48
Removed:
| `HITO_SEED_PASSWORD` | Required when `HITO_SEED=1`. |
49
Removed:
| `HITO_SEED_CSV` | Hevy export imported for the seeded account. |
50
Removed:
51
Removed:
Sessions live in a signed cookie. The server sets a same-origin content
52
Removed:
security policy and refuses framing. Put a TLS-terminating proxy in front of
53
Removed:
it.
54
Removed:
55
Removed:
## Develop
56
Removed:
57
Removed:
Three gates define done, in this order. `scripts/ci.sh` runs all three and
58
Removed:
exits non-zero on any failure.
59
Removed:
60
Removed:
```sh
61
Removed:
dune build @check # type-check libraries and tests
62
Removed:
dune runtest # every Alcotest suite
63
Removed:
dune build @fmt # ocamlformat and dune formatting applied
64
Removed:
```
65
Removed:
66
Removed:
Format with `ocamlformat --inplace` on the files you touched. Run
67
Removed:
`scripts/install-hooks.sh` once per clone to run the gates before every push.
68
Removed:
`scripts/coverage.sh` renders a coverage report when `bisect_ppx` is
69
Removed:
installed.
70
Removed:
71
Removed:
## Doctrine
72
Removed:
73
Removed:
Design decisions answer to *Heavy Duty I*. The steering files under
74
Removed:
`.kiro/steering/` state the principles the model encodes and the rules the
75
Removed:
code follows. The book itself is copyrighted reference material and is not
76
Removed:
part of the repository.
README.org
@@ -0,0 +1,77 @@
1
Added:
#+TITLE: hito
2
Added:
#+AUTHOR: Marius Peter
3
Added:
4
Added:
A Heavy Duty training tracker. hito records workouts the way Mike Mentzer's
5
Added:
Heavy Duty prescribes them: one working set to failure per exercise, recovery
6
Added:
gating the next session, and progress measured as more reps or more load.
7
Added:
8
Added:
The domain refuses states the doctrine cannot read. A routine cannot exceed
9
Added:
three sets per muscle. A workout cannot begin before recovery without an
10
Added:
explicit, recorded override. A stall is corrected by resting more and doing
11
Added:
less, never by adding work.
12
Added:
13
Added:
* Layout
14
Added:
15
Added:
Six libraries, dependencies pointing inward only. The build graph enforces
16
Added:
the rule: a library cannot name what it does not link.
17
Added:
18
Added:
| Library | Role |
19
Added:
|--------------------+---------------------------------------------------------------|
20
Added:
| ~hito.core~ | Pure domain. No framework, database, or Lwt. |
21
Added:
| ~hito.app~ | Ports (~Repository~, ~Password_hash~, ~Importer~), ~Service~. |
22
Added:
| ~hito.import~ | Adapters for third-party exports (~Hevy_csv~). |
23
Added:
| ~hito.persistence~ | SQLite adapter, bcrypt adapter, stored-record codecs. |
24
Added:
| ~hito.presenter~ | View models and pages. Depends on Dream only. |
25
Added:
| ~hito.web~ | Controllers. Maps entities to view models. |
26
Added:
27
Added:
~bin/~ is the composition root: it alone names both an adapter and the port
28
Added:
it plugs into.
29
Added:
30
Added:
* Run
31
Added:
32
Added:
hito needs OCaml 5.1 or later and the pinned dependencies in ~hito.opam~.
33
Added:
34
Added:
#+begin_src sh
35
Added:
opam install . --deps-only --with-test
36
Added:
dune build
37
Added:
dune exec hito
38
Added:
#+end_src
39
Added:
40
Added:
Configuration comes from the environment. All variables have defaults.
41
Added:
42
Added:
| Variable | Purpose |
43
Added:
|----------------------+-------------------------------------------------------|
44
Added:
| ~HITO_DB~ | Caqti URI. Default ~sqlite3:local_db/hito.sqlite~. |
45
Added:
| ~HITO_SECRET~ | Signs sessions and CSRF tokens. Set it in production. |
46
Added:
| ~HITO_PORT~ | TCP port. Default ~8080~. The server binds loopback. |
47
Added:
| ~HITO_VERSION~ | Deployment identifier shown in the footer. |
48
Added:
| ~HITO_SEED~ | ~1~ seeds one account on startup. Default ~0~. |
49
Added:
| ~HITO_SEED_PASSWORD~ | Required when ~HITO_SEED=1~. |
50
Added:
| ~HITO_SEED_CSV~ | Hevy export imported for the seeded account. |
51
Added:
52
Added:
Sessions live in a signed cookie. The server sets a same-origin content
53
Added:
security policy and refuses framing. Put a TLS-terminating proxy in front of
54
Added:
it.
55
Added:
56
Added:
* Develop
57
Added:
58
Added:
Three gates define done, in this order. ~scripts/ci.sh~ runs all three and
59
Added:
exits non-zero on any failure.
60
Added:
61
Added:
#+begin_src sh
62
Added:
dune build @check # type-check libraries and tests
63
Added:
dune runtest # every Alcotest suite
64
Added:
dune build @fmt # ocamlformat and dune formatting applied
65
Added:
#+end_src
66
Added:
67
Added:
Format with ~ocamlformat --inplace~ on the files you touched. Run
68
Added:
~scripts/install-hooks.sh~ once per clone to run the gates before every push.
69
Added:
~scripts/coverage.sh~ renders a coverage report when ~bisect_ppx~ is
70
Added:
installed.
71
Added:
72
Added:
* Doctrine
73
Added:
74
Added:
Design decisions answer to /Heavy Duty I/. The steering files under
75
Added:
~.kiro/steering/~ state the principles the model encodes and the rules the
76
Added:
code follows. The book itself is copyrighted reference material and is not
77
Added:
part of the repository.