TypeScript Indic web conformance laboratory
A multilingual browser laboratory for studying accessibility, language metadata, Unicode normalisation, grapheme-safe input, keyboard focus, and zoom behaviour across Indian scripts.

Project definition
Problem statement
A page can look correct in English and still fail when language metadata, combining sequences, shaped scripts, right-to-left text, keyboard focus, or enlarged content are introduced.
The engineering problem is to collect stable browser evidence, convert selected observations into clear finding codes, retain the evidence, and compare every result with an independently declared expected outcome without claiming complete website certification.
Project objectives
- Build eight controlled local fixtures spanning seven languages and seven scripts.
- Collect axe-core, DOM, language, Unicode, focus, zoom, computed-style, and screenshot evidence in Chromium.
- Detect missing language metadata, accessible-name failures, unsafe grapheme limits, invisible focus, zoom overflow, non-NFC text, and missing font fallback.
- Store completed runs in SQLite and present selectors, standards, severity, timing, and exact-match results clearly.
- Measure prepared-corpus precision, recall, exact agreement, median duration, and P95 duration across five trials per fixture.
Project structure
Project components
Fixture catalogue
Restricts every browser destination to one of eight compiled local fixture identifiers with a declared language, script, font token, and expected code set.
Browser collector
Uses a fresh Chromium context to collect axe results, DOM facts, focus evidence, zoom behaviour, computed styles, and a screenshot.
Rule engine
Converts collected evidence into stable language, accessibility, Unicode, grapheme, focus, layout, and font finding codes.
Run store
Persists completed results and evidence JSON in SQLite through static parameterised statements.
Evaluation runner
Executes every fixture five times and calculates exact agreement, false positives, false negatives, precision, recall, median, and P95 duration.
Evidence interface
Vue presents the catalogue, fixture purpose, observed findings, selectors, standards, timing, screenshot reference, and retained history.
Methodology
Project workflow
- 01Select a prepared fixture
The student chooses a documented local page and reviews its language, script, expected findings, and purpose.
- 02Collect browser evidence
Playwright loads the fixture and captures accessibility, language, text-processing, focus, zoom, style, and screenshot evidence.
- 03Evaluate rules
The rule engine maps the evidence to named finding codes with selectors, observed values, severity, and standards.
- 04Store and display
The completed run is retained in SQLite and returned to the interface with its exact-match decision.
- 05Evaluate the corpus
All eight fixtures run five times and the observed code sets are compared with the independent fixture declarations.
Demonstration scenario
The student first runs the compliant Hindi baseline and receives no findings. The Tamil fixture then exposes a UTF-16 maxlength applied to a grapheme-based requirement, the Telugu fixture exposes invisible keyboard focus, the Kannada fixture overflows at 200 percent zoom, and the Urdu fixture exposes invalid language metadata and a missing generic font fallback. Each observed code set is compared with its independent fixture declaration.
Engineering
Tools and method
- Application core
- TypeScript separates fixture declarations, browser collection, rule evaluation, persistence, and HTTP handling.
- HTTP boundary
- Fastify accepts prepared fixture identifiers only, enforces a 16 KiB body limit, and serialises expensive browser work through a single-job gate.
- Browser evidence
- Playwright and axe-core run one recorded Debian Chromium build against local fixtures at a fixed viewport and locale.
- Text processing
- DOM normalisation checks and declared grapheme intent expose selected differences between code units, code points, and user-perceived characters.
- Persistence and interface
- SQLite stores complete run JSON while Vue presents the evidence through a readable three-column laboratory.
- Container isolation
- Only Nginx is exposed on localhost; the API and browser remain internal, non-root, read-only, capability-free, and bounded by tmpfs and dedicated shared memory.
Testing
Evaluation
Evaluation measures
- Five trials for every fixture and forty retained browser runs in total
- Forty exact expected finding-set matches
- Zero false positives and zero false negatives on the prepared corpus
- Prepared-corpus precision of 1.0 and recall of 1.0
- Separate per-fixture timing plus retained median and P95 duration
- Unit, HTTP, persistence, Vue, accessibility, container, dependency, and image-security checks
Project boundaries
- The project evaluates eight prepared local fixtures and never accepts an arbitrary destination URL.
- The selected rules do not certify complete GIGW, WCAG, Unicode, browser, font, translation, or assistive-technology conformance.
- The retained accuracy result applies only to the independently declared prepared corpus.
- No personal information, buyer information, student information, account details, or external website content is collected.
Included
- 01Browser evidence collector and three-column conformance interface
- 02Eight prepared Hindi, Bengali, Tamil, Telugu, Kannada, Malayalam, and Urdu fixtures
- 03Language, accessible-name, Unicode, grapheme, focus, zoom, and font-fallback rules
- 04Forty retained browser runs with exact expected-result comparison
- 05SQLite run history and evidence-linked screenshots
- 06Complete source code in a private GitHub repository
- 0779-page project documentation in PDF and editable Word formats
- 0811-page setup and usage guide in PDF and editable Word formats
Project record
No information is collected on this page.
- Permanent project ID
- GP-CS-0HUE0LS
- Catalogued
- 21 Aug 2026
- Completed
- 23 Aug 2026
- Verified
- 23 Aug 2026
- Demonstration
- Included in repository
Handover
After purchase
- 01Payment is confirmed
The project is marked unavailable and cannot be purchased again.
- 02Repository access is granted
The buyer's submitted GitHub account receives access to the private repository.
- 03The purchase record is delivered
The certification sheet is prepared from the reviewed buyer details and sent privately by email.