Panel: an architecture diagram, store costs, and Spanish that reads as Spanish

The right-hand panel now answers the question the stack list provoked — what
does a client actually install? Capacitor, iOS and Android lead "Built with",
and a new SVG diagram shows the two ways in: customers through the installed
app, staff through the admin dashboard behind Cloudflare Access.

Costs were half-quoted. The stack named Mapbox, Twilio, Resend and Sentry and
priced none of them, so each now states the shape of its bill rather than a
figure that would be wrong at every scale. App store accounts are listed too,
in the client's own name for the same reason the hosting is.

Currency was the serious one. Every figure is US dollars and the panel wrote
them as "$59", but this launches in Mexico, where "$" is the peso — the Spanish
column understated the running cost roughly seventeenfold to the only reader
who matters. money() now prints "$59" in English and "59 USD" in Spanish.

The rest of the Spanish was a literal translation of dense English: peninsular
vocabulary in a Mexican market, two stray vosotros forms among the tuteo, and
calques that were not grammatical — "aplicada en ninguna parte", "todo lo
discontinuo" for dashed lines. Reviewed all 126 strings. The architecture note
was 120 words in one block covering five topics; it is now two paragraphs, one
idea each, and the PostGIS sentence went because "What it does" already makes
that promise in language a client can act on.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
serfa
2026-08-23 14:57:05 -04:00
co-authored by Claude Opus 5
parent 0192585727
commit cb148c3dc8
17 changed files with 894 additions and 73 deletions
+2 -2
View File
@@ -66,12 +66,12 @@ describe('getShowcaseDeck', () => {
});
it('honours the searcher own range, not just the pro one', async () => {
// Marta Villanueva is seeded 9.1 km out with a 30 km radius: she would travel
// Mario Villanueva is seeded 9.1 km out with a 30 km radius: they would travel
// here happily, but someone who said "within 3 km" did not ask for her.
const near = await getShowcaseDeck(db, { ...CENTRE, maxDistanceM: 3_000, limit: 100 });
const nearNames = near.map((c) => c.name);
expect(nearNames).not.toContain('Marta Villanueva');
expect(nearNames).not.toContain('Mario Villanueva');
expect(nearNames).toContain('Sergio Fabela'); // 1.1 km away
expect(near.every((c) => c.distanceM <= 3_000)).toBe(true);
});