houseaccount 0.8.1 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +36 -0
  3. data/README.md +10 -8
  4. data/app/views/layouts/houseaccount.html.erb +1 -1
  5. data/config/locales/houseaccount.en.yml +4 -1
  6. data/lib/houseaccount/version.rb +1 -1
  7. data/lib/houseaccount.rb +8 -4
  8. data/public/css/houseaccount.css +1 -1
  9. data/public/index.html +2 -2
  10. data/public/js/houseaccount.js +1 -1
  11. data/public/{v0.8.1 → v0.10.0}/css/houseaccount.css +1 -1
  12. data/public/{v0.8.1 → v0.10.0}/js/houseaccount.js +1 -1
  13. metadata +19 -19
  14. /data/public/{v0.8.1 → v0.10.0}/font/bootstrap-icons-6LILWPE2.woff2 +0 -0
  15. /data/public/{v0.8.1 → v0.10.0}/font/quicksand-500-latin-QHYSRFVK.woff2 +0 -0
  16. /data/public/{v0.8.1 → v0.10.0}/font/quicksand-500-latin-ext-QZ4PXVHB.woff2 +0 -0
  17. /data/public/{v0.8.1 → v0.10.0}/font/quicksand-500-latin-ext.woff2 +0 -0
  18. /data/public/{v0.8.1 → v0.10.0}/font/quicksand-500-latin.woff2 +0 -0
  19. /data/public/{v0.8.1 → v0.10.0}/font/quicksand-500-vietnamese-RRA5CUQB.woff2 +0 -0
  20. /data/public/{v0.8.1 → v0.10.0}/font/quicksand-500-vietnamese.woff2 +0 -0
  21. /data/public/{v0.8.1 → v0.10.0}/theme/bootstrap.css +0 -0
  22. /data/public/{v0.8.1 → v0.10.0}/theme/dawn.css +0 -0
  23. /data/public/{v0.8.1 → v0.10.0}/theme/dracula.css +0 -0
  24. /data/public/{v0.8.1 → v0.10.0}/theme/gruvbox.css +0 -0
  25. /data/public/{v0.8.1 → v0.10.0}/theme/monokai.css +0 -0
  26. /data/public/{v0.8.1 → v0.10.0}/theme/nord.css +0 -0
  27. /data/public/{v0.8.1 → v0.10.0}/theme/one_dark.css +0 -0
  28. /data/public/{v0.8.1 → v0.10.0}/theme/solarized.css +0 -0
  29. /data/public/{v0.8.1 → v0.10.0}/theme/tokyo_night.css +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eb93eb6916d764185a9a842424a967a999a604c13f69c4fd1e55520732238a5e
4
- data.tar.gz: 18f86ddd7092b5c594a5384cef3071eead026ac4b3af0ac92d74cd5edb24d4ac
3
+ metadata.gz: 5796d31f6b9a92bf2b042880b51a5f18a05dcaf92c34f85940f5fcd5e528de9f
4
+ data.tar.gz: ef59866ad6471fbbbf4e284c5bec8724c209503364eb7f1da6f81b0ef0329645
5
5
  SHA512:
6
- metadata.gz: b491d90baf039dc87e9cb31acac22b61753c9f669a7c3a497c7f54cc717b4668ee15775cbb7b96f796165ce5fe376a361c503880804377908e962d6ed27bfd89
7
- data.tar.gz: fba487c0cd2d2b2e7982c8c7c0edb2f766ef7e88a36fb3067785a671aa2857253f2a83b67a291f9ecde777a939d6ae8e1e4d60758644c032a479be25c7f2f22d
6
+ metadata.gz: 9b63ad2533d43cc94f78baba186fe0cd1dd07189e7f259e14a580c2bd8026c5039eebf91f489370eac754468711f000fb12a5f2e2e1b813d4abb71aabe24871d
7
+ data.tar.gz: f769721a266ffebeed4ec06467f701ae5a7d630355b37e93b7126061bfafcc2a208d620408b6d488ffbd841c5fcdb3411fc633359961a895ec69a24009bc35ee
data/CHANGELOG.md CHANGED
@@ -7,6 +7,42 @@ For more information about changelogs, check [Keep a Changelog](http://keepachan
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## 0.10.0 - 2026-09-14
11
+
12
+ * [Fix] A page is as tall as the window a phone actually shows
13
+
14
+ The body asked for `100vh`, which on a phone measures the window with the browser's own
15
+ bars hidden — they are not, until somebody scrolls. So every flow page stood taller than
16
+ what could be seen: a scrollbar where the content fit, and a foot resting below the fold
17
+ that cost a scroll to reach. `100svh` is the window with the bars showing, and the body
18
+ wears `house-page` for it rather than Bootstrap's `min-vh-100`.
19
+
20
+ * [Change] A new set of trades on the wall, and the house's mark among them
21
+
22
+ Thirteen drawings rather than fourteen: the roller, ladder, frame, plunger, can, hard hat,
23
+ spray, lock, plug, broom, nut, level and the cube. The four apps' own marks are gone from
24
+ it, and with them the grid that placed each one deliberately — every mark is dealt the
25
+ same way now, the cube included.
26
+
27
+ ## 0.9.0 - 2026-09-14
28
+
29
+ * [Breaking change] A one-time code carries the line for the phone again
30
+
31
+ 0.8.0 took `@host #code` out because it is plainly visible in the message that arrives.
32
+ Visible is what it is for: it is Apple's own format, it tells a reader which site the code
33
+ belongs to, and it binds the code to that domain so no other site can ask for it. Without
34
+ it iOS falls back to guessing at the text, which it does not do reliably — the suggestion
35
+ above the keyboard stopped appearing. `HouseAccount.one_time_code` takes `host:` again,
36
+ defaulting to the application's own.
37
+
38
+ * [Fix] A seventh digit leaves no bar behind in the first slot
39
+
40
+ The real field lies transparently across all six slots, and its hidden text sits crammed
41
+ against the left edge rather than under them. A keystroke iOS cannot place answers by
42
+ selecting inside that field, and the grab handles it draws for a selection are its own to
43
+ paint — so one surfaced over the first slot. The selection is collapsed back to the end
44
+ once the code is whole.
45
+
10
46
  ## 0.8.1 - 2026-09-14
11
47
 
12
48
  * [Fix] The wall is drawn again after a page Turbo morphs
data/README.md CHANGED
@@ -20,10 +20,10 @@ gem install houseaccount
20
20
 
21
21
  ```ruby
22
22
  # Gemfile
23
- gem 'houseaccount', '~> 0.8.1'
23
+ gem 'houseaccount', '~> 0.10.0'
24
24
  ```
25
25
 
26
- `~> 0.8.0` stops short of `0.9`, since below 1.0 a minor release may break whatever it likes.
26
+ `~> 0.10.0` stops short of `0.11`, since below 1.0 a minor release may break whatever it likes.
27
27
  Rails 8.1 and Ruby 3.2 are the minimum.
28
28
 
29
29
  A page takes the gem's layout, and wears the same head:
@@ -60,7 +60,7 @@ which Pages redirects away from.
60
60
 
61
61
  With the gem in the bundle an app serves `/css/houseaccount.css`, `/js/houseaccount.js`,
62
62
  `/theme/*`, `/font/*`, `/logo/*` and `/favicon/*` itself — and its own version's copy under
63
- `/v0.8.1/`, which is what the head helper links, cached for a year — answers a 400, 404, 406, 422 or 500
63
+ `/v0.10.0/`, which is what the head helper links, cached for a year — answers a 400, 404, 406, 422 or 500
64
64
  with the house's own page, and has these helpers in every view:
65
65
 
66
66
  ```erb
@@ -181,13 +181,15 @@ HouseAccount::Message.new side: :left, text: answer.note, sender: 'Claude', at:
181
181
  ```
182
182
 
183
183
  A code sent to a phone is the same words from every app, `HouseAccount.one_time_code`, in
184
- each voice they are said in. `written` is the one sentence a person reads; `spoken` is that
185
- same sentence with its digits one at a time, so a listener can write them down. The words are
184
+ each voice they are said in. `written` is the sentence a person reads and, under it, the
185
+ `@host #code` line that offers the code above the keyboard on the phone it arrived on;
186
+ `spoken` is the sentence alone, its digits one at a time so a listener can write them down.
187
+ The host is the application's default one unless `host:` says otherwise, and the words are
186
188
  the gem's `config/locales` entry.
187
189
 
188
190
  ```ruby
189
191
  HouseAccount.one_time_code(contact.pin).written
190
- # => "Enter this 6-digit code to proceed: 482913"
192
+ # => "Enter this 6-digit code to proceed: 482913\n\n@houseaccount.com #482913"
191
193
  HouseAccount.one_time_code(contact.pin).spoken
192
194
  # => "Enter this 6-digit code to proceed: 4, 8, 2, 9, 1, 3"
193
195
  ```
@@ -203,8 +205,8 @@ Those follow the latest release. Every release is also kept whole under its own
203
205
  forever and cached for a year, for a page that would rather move on its own terms:
204
206
 
205
207
  ```html
206
- <link rel='stylesheet' href='https://design.houseaccount.com/v0.8.1/css/houseaccount.css'>
207
- <script type='module' src='https://design.houseaccount.com/v0.8.1/js/houseaccount.js'></script>
208
+ <link rel='stylesheet' href='https://design.houseaccount.com/v0.10.0/css/houseaccount.css'>
209
+ <script type='module' src='https://design.houseaccount.com/v0.10.0/js/houseaccount.js'></script>
208
210
  ```
209
211
 
210
212
  A host with a Content Security Policy allows that origin for `style-src`, `script-src` and
@@ -15,7 +15,7 @@
15
15
  <%= yield :head %>
16
16
  <%- end -%>
17
17
  </head>
18
- <body class='min-vh-100 d-flex flex-column'>
18
+ <body class='house-page d-flex flex-column'>
19
19
  <main class='container-fluid py-4 flex-grow-1 d-flex flex-column'>
20
20
  <%= content_for?(:content) ? yield(:content) : yield %>
21
21
  </main>
@@ -4,7 +4,10 @@ en:
4
4
  ask: Ask a question
5
5
  close: Close
6
6
  okay: Okay
7
- one_time_code: 'Enter this 6-digit code to proceed: %{pin}'
7
+ one_time_code: |-
8
+ Enter this 6-digit code to proceed: %{pin}
9
+
10
+ @%{host} #%{pin}
8
11
  send: Send
9
12
  spoken_one_time_code: 'Enter this 6-digit code to proceed: %{pin}'
10
13
  typing: Typing
@@ -1,4 +1,4 @@
1
1
  module HouseAccount
2
2
  # Version of the gem, read by the gemspec and by hosts checking compatibility.
3
- VERSION = '0.8.1'
3
+ VERSION = '0.10.0'
4
4
  end
data/lib/houseaccount.rb CHANGED
@@ -29,10 +29,14 @@ module HouseAccount
29
29
  MARKS.key?(name) ? name : :houseaccount
30
30
  end
31
31
 
32
- # The one sentence that carries a 6-digit code to a phone, written as a person reads it and
33
- # spoken a digit at a time so a listener can write it down.
34
- def self.one_time_code(pin)
35
- Copy.new written: I18n.t('houseaccount.one_time_code', pin:),
32
+ # The words that carry a 6-digit code to a phone, in both voices. `written` is the sentence
33
+ # a person reads and, under it, the line Safari matches against the page about to be filled,
34
+ # `@host #code`, which offers the code above the keyboard so nobody leaves for Messages to
35
+ # copy it. `spoken` is the sentence alone, its digits one at a time so a listener can write
36
+ # them down, and without a line meant for a phone rather than a person. Every app of the
37
+ # house that sends a code sends these, from `config/locales`.
38
+ def self.one_time_code(pin, host: Rails.application.default_url_options[:host])
39
+ Copy.new written: I18n.t('houseaccount.one_time_code', pin:, host:),
36
40
  spoken: I18n.t('houseaccount.spoken_one_time_code', pin: pin.chars.join(', '))
37
41
  end
38
42
  end