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:
@@ -108,7 +108,7 @@ describe('searchPros', () => {
|
||||
it("honours the searcher's own distance limit", async () => {
|
||||
const near = await searchPros(db, { ...CENTRE, maxDistanceM: 3_000, limit: 50 });
|
||||
expect(near.every((p) => p.distanceM <= 3_000)).toBe(true);
|
||||
expect(near.map((p) => p.name)).not.toContain('Marta Villanueva'); // 9.1 km out
|
||||
expect(near.map((p) => p.name)).not.toContain('Mario Villanueva'); // 9.1 km out
|
||||
});
|
||||
|
||||
it('sorts by distance, price and rating', async () => {
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user