Teach For Armenia recruits university graduates into two years of teaching in under-resourced Armenian schools. I built their public website in English and Armenian: 16 pages across 2 locales, with 61 Sanity content schemas behind them (KB §3). Armenian display text carries its own scale, 0.93 against the Latin setting, measured in the project stylesheet as of 2026-03-25.
The link above points to tfa.netarmenia.com. The contract ended on April 7, 2026, and I have not verified since then what runs on the client's own domain.
One contract ran from March 2025 to April 7, 2026 (KB §3). It opened with SEO and GEO work on the sites Teach For Armenia already had. GEO is generative-engine optimization: writing and marking up pages so answer engines quote them correctly instead of paraphrasing them wrong. Those pages sat on Squarespace, so the work went in through code injection, the hook Squarespace gives you for adding your own markup and scripts.
From January 23, 2026 the contract turned into a build. Four things were named in it: the new Teach For Armenia website, the Armenia Education Initiative website, a donation platform, and web marketing. It was invoiced in three tranches and ended on April 7, 2026 (KB §3). This page covers the two websites.
Two scripts in one layout. Armenian sits on a larger x-height than the Latin face beside it. X-height is the height of a lowercase letter without an ascender, and it is what the eye reads as size, so the same font size looks bigger in Armenian. A headline that fits its container in English runs past it in Armenian.
Two content systems inside one contract. The Teach For Armenia site runs on Sanity v5. The Armenia Education Initiative site runs on Payload CMS v3 (KB §3). Both had to serve English and Armenian, and neither could reuse the other's schema work.
One build window for four deliverables. Between January 23 and April 7, 2026 the same contract carried both websites, the donation platform and the web marketing (KB §3).
The site runs on Next.js 16, at 16.1.6 in package.json on main as of 2026-03-25 (KB §3). Sanity v5 holds the content. Routing and text selection go through next-intl, the library that resolves a page's copy for the language in the URL, with English and Armenian as the two locales (KB §3).
Content is modeled rather than typed into templates. 61 Sanity schemas define the shapes an editor fills in, which is what lets staff change a headline, a statistic or a person's bio in both languages without a developer (KB §3). Forms hand off to Resend, the service that sends the confirmation mail after a submission. Every page emits JSON-LD, the machine-readable summary search and answer engines read before they decide what a page is about (KB §3).
The bilingual typography is handled in CSS rather than at runtime. One stylesheet, app/globals-v2.css, holds 4,474 lines with 406 custom-property declarations across 12 labelled token layers, counted in the repository as of 2026-03-25 (KB §3). A custom property is a named CSS value the rest of the sheet reads instead of repeating a literal. When the page language is Armenian, display text takes a 0.93 multiplier and body text takes 0.96, so both scripts land on the same optical size without JavaScript measuring anything in the browser.
The second site in the same contract was the Armenia Education Initiative, built between January 23 and March 3, 2026 on tranches one and two. Next.js with Payload CMS v3, a custom i18n layer, 12 pages in English and Armenian, and a five-step application wizard with anti-spam on the submit path. The third tranche was not worked and not invoiced (KB §3).
12 pages in English and Armenian, five-step application wizard
KB §3, Armenia Education Initiative row
No traffic, recruitment or donation figures appear on this page. The contract ended on April 7, 2026, and I hold no measurement of what the site did after handover that I can point a reader at.
Next.js 16.1.6, Sanity v5, next-intl for English and Armenian, Resend for transactional mail, JSON-LD for structured data, TypeScript throughout. The Armenia Education Initiative site: Next.js with Payload CMS v3 and a custom i18n layer.
Teach For Armenia recruits university graduates into two years of teaching in under-resourced Armenian schools. I built their public website in English and Armenian: 16 pages across 2 locales, with 61 Sanity content schemas behind them (KB §3). Armenian display text carries its own scale, 0.93 against the Latin setting, measured in the project stylesheet as of 2026-03-25.
The link above points to
tfa.netarmenia.com. The contract ended on April 7, 2026, and I have not verified since then what runs on the client's own domain.What the contract asked for
One contract ran from March 2025 to April 7, 2026 (KB §3). It opened with SEO and GEO work on the sites Teach For Armenia already had. GEO is generative-engine optimization: writing and marking up pages so answer engines quote them correctly instead of paraphrasing them wrong. Those pages sat on Squarespace, so the work went in through code injection, the hook Squarespace gives you for adding your own markup and scripts.
From January 23, 2026 the contract turned into a build. Four things were named in it: the new Teach For Armenia website, the Armenia Education Initiative website, a donation platform, and web marketing. It was invoiced in three tranches and ended on April 7, 2026 (KB §3). This page covers the two websites.
What the work had to fit around
Two scripts in one layout. Armenian sits on a larger x-height than the Latin face beside it. X-height is the height of a lowercase letter without an ascender, and it is what the eye reads as size, so the same font size looks bigger in Armenian. A headline that fits its container in English runs past it in Armenian.
Two content systems inside one contract. The Teach For Armenia site runs on Sanity v5. The Armenia Education Initiative site runs on Payload CMS v3 (KB §3). Both had to serve English and Armenian, and neither could reuse the other's schema work.
One build window for four deliverables. Between January 23 and April 7, 2026 the same contract carried both websites, the donation platform and the web marketing (KB §3).
What I built
The site runs on Next.js 16, at 16.1.6 in
package.jsonon main as of 2026-03-25 (KB §3). Sanity v5 holds the content. Routing and text selection go through next-intl, the library that resolves a page's copy for the language in the URL, with English and Armenian as the two locales (KB §3).Content is modeled rather than typed into templates. 61 Sanity schemas define the shapes an editor fills in, which is what lets staff change a headline, a statistic or a person's bio in both languages without a developer (KB §3). Forms hand off to Resend, the service that sends the confirmation mail after a submission. Every page emits JSON-LD, the machine-readable summary search and answer engines read before they decide what a page is about (KB §3).
The bilingual typography is handled in CSS rather than at runtime. One stylesheet,
app/globals-v2.css, holds 4,474 lines with 406 custom-property declarations across 12 labelled token layers, counted in the repository as of 2026-03-25 (KB §3). A custom property is a named CSS value the rest of the sheet reads instead of repeating a literal. When the page language is Armenian, display text takes a 0.93 multiplier and body text takes 0.96, so both scripts land on the same optical size without JavaScript measuring anything in the browser.The second site in the same contract was the Armenia Education Initiative, built between January 23 and March 3, 2026 on tranches one and two. Next.js with Payload CMS v3, a custom i18n layer, 12 pages in English and Armenian, and a five-step application wizard with anti-spam on the submit path. The third tranche was not worked and not invoiced (KB §3).
What is measurable
.ts/.tsxfiles, 83,391 linesapp/globals-v2.css, as of 2026-03-25app/globals-v2.css, as of 2026-03-25package.jsonon main, as of 2026-03-25No traffic, recruitment or donation figures appear on this page. The contract ended on April 7, 2026, and I hold no measurement of what the site did after handover that I can point a reader at.
Stack
Next.js 16.1.6, Sanity v5, next-intl for English and Armenian, Resend for transactional mail, JSON-LD for structured data, TypeScript throughout. The Armenia Education Initiative site: Next.js with Payload CMS v3 and a custom i18n layer.
Discuss a bilingual build