|
6 | 6 | <title>Local-first is not a luxury — RingScript blog</title> |
7 | 7 | <meta name="description" content="The applications behind RingScript run in a bank in Niger, a high school, a restaurant in France. What building for places where the connection is a guest teaches about software."> |
8 | 8 | <link rel="icon" href="favicon.svg" type="image/svg+xml"> |
9 | | -<link rel="stylesheet" href="style.css?v=0.9.25"> |
| 9 | +<link rel="stylesheet" href="style.css?v=0.9.26"> |
10 | 10 | <style> |
11 | 11 | article { max-width: 44rem; } |
12 | 12 | article p { color: var(--ink-soft); } |
|
18 | 18 | margin: 1.6rem 0; padding: .2rem 0 .2rem 1.1rem; |
19 | 19 | border-left: 3px solid var(--accent); font-size: var(--read); color: var(--ink); |
20 | 20 | } |
| 21 | + /* The diagram carries its own caption in the artwork, so there is no |
| 22 | + figcaption to repeat it — the sentence lives in the alt text instead, |
| 23 | + where a reader who cannot see the picture will actually meet it. */ |
21 | 24 | figure { margin: 2rem 0; } |
22 | | - figure svg { width: 100%; height: auto; display: block; } |
23 | | - figcaption { font-size: var(--floor); color: var(--ink-soft); margin-top: .5rem; text-align: center; } |
24 | | - .d-line { stroke: currentColor; stroke-width: 1.5; fill: none; opacity: .75; } |
25 | | - .d-dash { stroke: currentColor; stroke-width: 1.5; fill: none; opacity: .45; stroke-dasharray: 5 5; } |
26 | | - .d-box { fill: none; stroke: currentColor; stroke-width: 1.5; opacity: .8; rx: 8; } |
27 | | - .d-accent { stroke: var(--accent); fill: none; stroke-width: 2; } |
28 | | - .d-t { font: 600 17px -apple-system, "Segoe UI", sans-serif; fill: currentColor; } |
29 | | - .d-s { font: 16px -apple-system, "Segoe UI", sans-serif; fill: currentColor; opacity: .65; } |
30 | 25 | </style> |
31 | 26 | </head> |
32 | 27 | <body> |
@@ -73,25 +68,16 @@ <h2>Software with real users, in real places</h2> |
73 | 68 | breaks at the worst moment.</p> |
74 | 69 |
|
75 | 70 | <figure> |
76 | | -<svg viewBox="0 0 640 190" role="img" aria-label="Diagram: the application and its data live on the device; the connection is used when it is available"> |
77 | | - <rect class="d-box" x="20" y="30" width="270" height="130" rx="10"/> |
78 | | - <text class="d-t" x="40" y="58">The device</text> |
79 | | - <rect class="d-accent" x="40" y="74" width="110" height="34" rx="6"/> |
80 | | - <text class="d-t" x="55" y="96">the app</text> |
81 | | - <rect class="d-accent" x="40" y="116" width="110" height="34" rx="6"/> |
82 | | - <text class="d-t" x="55" y="138">the data</text> |
83 | | - <path class="d-line" d="M150 91 h60 M150 133 h60"/> |
84 | | - <text class="d-s" x="216" y="96">works</text> |
85 | | - <text class="d-s" x="216" y="138">answers</text> |
86 | | - <path class="d-dash" d="M290 95 C 360 95, 380 95, 450 95"/> |
87 | | - <text class="d-s" x="315" y="84">when the connection allows</text> |
88 | | - <rect class="d-box" x="450" y="60" width="170" height="70" rx="10"/> |
89 | | - <text class="d-t" x="478" y="90">the server</text> |
90 | | - <text class="d-s" x="478" y="110">sync, backup, share</text> |
91 | | -</svg> |
92 | | -<figcaption>The local-first shape: the connection is a guest, not a |
93 | | -foundation. When it visits, you synchronise. When it leaves, nothing |
94 | | -stops.</figcaption> |
| 71 | +<img src="local-first-diagram-1.jpg" width="1024" height="420" loading="lazy" |
| 72 | + alt="The local-first shape. A tablet labelled "The device" contains |
| 73 | + two things joined to each other: the app, drawn as a phone screen, and |
| 74 | + the data, drawn as a database cylinder marked "Local Database |
| 75 | + (persistent)". The app works; the data answers. A visitor stands on |
| 76 | + the device. Outside it, across the widest gap in the picture, a cloud |
| 77 | + labelled "The server" offers sync, backup and share — and it is |
| 78 | + reached by a dashed line, the only dashed thing here, labelled "when |
| 79 | + the connection allows". The connection is a guest, not a foundation: |
| 80 | + when it visits, you synchronise; when it leaves, nothing stops."> |
95 | 81 | </figure> |
96 | 82 |
|
97 | 83 | <h2>The tontine test</h2> |
|
0 commit comments