Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions packages/website/src/components/sections/metingen.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { Section } from "@/components/section";
import { Badge } from "@/components/ui/badge";
import { Card, CardContent, CardTitle } from "@/components/ui/card";
import { useLocale } from "@/i18n/context";

/**
* De metingen-sectie.
*
* Elke regel draagt een DATUM en een methode, want een cijfer zonder die twee is een
* bewering. En de regels die tegen ons pleiten staan er met opzet tussen: nul betalende
* klanten, en honderd mensen die keken zonder te installeren. Een pagina die alleen de
* goede cijfers toont, is precies de pagina die niemand gelooft.
*/
export function Metingen() {
const { t } = useLocale();

return (
<Section id="metingen" index="09" eyebrow={t.metingen.eyebrow}>
<h2 className="font-display text-3xl font-semibold tracking-tight sm:text-4xl">{t.metingen.h2}</h2>
<p className="mt-4 max-w-2xl text-base leading-relaxed text-muted-foreground">{t.metingen.body}</p>

<div className="mt-10 grid gap-4 sm:grid-cols-2">
{t.metingen.rows.map((row) => (
<Card key={row.title}>
<Badge variant="neutral" className="w-fit">
{row.date}
</Badge>
<CardTitle>{row.title}</CardTitle>
<CardContent className="text-muted-foreground">{row.body}</CardContent>
</Card>
))}
</div>

<p className="mt-8 max-w-2xl text-sm leading-relaxed text-muted-foreground">{t.metingen.footer}</p>
</Section>
);
}
28 changes: 28 additions & 0 deletions packages/website/src/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,34 @@ export const en: Dictionary = {
"copyLabel": "Copy",
"copiedLabel": "Copied"
},
"metingen": {
"eyebrow": "What we measured",
"h2": "Our own check turned out to be wrong. We tracked it down, fixed it, and wrote it down here.",
"body": "A program that buys something on its own wants to know up front whether the seller asks for money properly. We built a free checking program for that. In October we ran it against sixty real sellers, and it turned out to be telling most of them they were doing it wrong. The fault was ours: our program was knocking on the wrong door. It is fixed now. It is here because a number without a method is worth nothing, and because anyone who hides their own mistake is not worth believing on their next number either.",
"rows": [
{
"date": "18 October 2026",
"title": "From sixty four percent wrong to zero",
"body": "We took sixty sellers from the public Coinbase list and asked each of them once for a price. Fifty nine really do ask for money. Of those fifty nine, thirty eight were wrongly failed by us. After the fix: none. The method and the raw output are in the code, so you can redo it yourself."
},
{
"date": "October 2026",
"title": "Four builders now use our way of counting",
"body": "In the public discussions about these agreements, four people adopted our breakdown. The one that matters most is the difference between this is wrong and I could not check this. That sounds small and it is not: anyone who merges those two blames an honest seller for a failure at the checker end."
},
{
"date": "as of today",
"title": "No paying customer yet",
"body": "Zero. Nobody outside this project pays for this yet. We would rather write that down ourselves than have someone find it out."
},
{
"date": "last fourteen days",
"title": "A hundred people looked, nobody installed",
"body": "A hundred and two people pulled the code to look at it. The install count is zero. That means we are being found and not convincing anyone, which is a different problem from being unknown."
}
],
"footer": "Every line above carries a date and a way of measuring. If a number changes, the line changes and the date stays visible. That way you can see whether something is still true instead of having to assume it. The code and the raw output are at github.com/holistis/agent-receipt-verify, so you can recheck every line above yourself."
},
"status": {
"eyebrow": "Status, honestly",
"h2": "No paying customers. Three outside parties building on the format, and work others checked themselves.",
Expand Down
51 changes: 51 additions & 0 deletions packages/website/src/i18n/nl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,57 @@ export const nl: Dictionary = {
copyLabel: "Kopieer",
copiedLabel: "Gekopieerd",
},
metingen: {
eyebrow: "Wat we gemeten hebben",
h2: "Onze eigen controle bleek fout. We hebben het uitgezocht, gerepareerd en hier opgeschreven.",
body:
"Een computerprogramma dat zelf iets koopt, wil vooraf weten of de verkoper netjes om geld vraagt. " +
"Daar maakten wij een gratis controleprogramma voor. In oktober lieten we het los op zestig echte " +
"verkopers, en toen bleek dat het bij de meesten onterecht zei dat zij het fout deden. De fout zat " +
"bij ons: ons programma klopte op de verkeerde deur. Dat is nu gerepareerd. Het staat hier omdat een " +
"cijfer zonder methode niets waard is, en omdat wie zijn eigen fout verzwijgt zijn cijfers later ook " +
"niet meer waard is.",
rows: [
{
date: "18 oktober 2026",
title: "Van vierenzestig procent fout naar nul",
body:
"We namen zestig verkopers uit de openbare lijst van Coinbase en vroegen elk van hen een keer om " +
"een prijs. Negenenvijftig vragen echt geld. Van die negenenvijftig gaven wij er achtendertig " +
"onterecht een onvoldoende. Na de reparatie: geen een. De methode en de ruwe uitkomst staan in de " +
"code, dus je kunt het zelf overdoen.",
},
{
date: "oktober 2026",
title: "Vier bouwers gebruiken onze manier van tellen",
body:
"In de openbare gesprekken over deze afspraken namen vier mensen onze indeling over. De " +
"belangrijkste is het verschil tussen \"dit is fout\" en \"dit kon ik niet nakijken\". Dat klinkt " +
"klein en is het niet: wie die twee op een hoop gooit, geeft een eerlijke verkoper de schuld van " +
"een storing bij de controleur.",
},
{
date: "stand van nu",
title: "Nog geen betalende klant",
body:
"Nul. Er is buiten dit project nog niemand die hiervoor betaalt. Dat schrijven we liever zelf op " +
"dan dat iemand het ontdekt.",
},
{
date: "laatste veertien dagen",
title: "Honderd mensen keken, niemand installeerde",
body:
"Honderdtwee mensen haalden de code binnen om te kijken. Het aantal installaties staat op nul. " +
"Dat betekent dat we gevonden worden en niet overtuigen, en dat is een ander probleem dan " +
"onbekend zijn.",
},
],
footer:
"Elke regel hierboven heeft een datum en een manier van meten. Verandert een cijfer, dan verandert de " +
"regel en blijft de datum zichtbaar. Zo kun je zien of iets nog waar is in plaats van het te moeten " +
"aannemen. De code en de ruwe uitkomsten staan op github.com/holistis/agent-receipt-verify, dus je " +
"kunt elke regel hierboven zelf narekenen.",
},
status: {
eyebrow: "Status, eerlijk",
h2: "Geen betalende klanten. Wel drie externe partijen die op het formaat bouwen, en werk dat anderen zelf hebben nagerekend.",
Expand Down
7 changes: 7 additions & 0 deletions packages/website/src/i18n/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,13 @@ export interface Dictionary {
copyLabel: string;
copiedLabel: string;
};
metingen: {
eyebrow: string;
h2: string;
body: string;
rows: { date: string; title: string; body: string }[];
footer: string;
};
status: {
eyebrow: string;
h2: string;
Expand Down
Loading