Subsystem 02.3 · 2020 — present
Shkrimori
The Albanian language as software
Albanian written well, everywhere people write: a national dictionary of 120,000+ unique words, an editor that checks spelling, grammar and style, AI rewriting, a voice that reads Albanian aloud, and a keyboard that types ë and ç anywhere.
01What it is
Shkrimori — formerly Kulla e shqipes — is a suite for writing Albanian well: the Great Dictionary of the Albanian Language, a writing editor that marks spelling, grammar and style, AI rewriting, text-to-speech, a system-wide keyboard for ë and ç, and literacy games for children learning the 36-letter alphabet.
It lives wherever people write: on the web; as desktop apps for macOS, Windows and Linux; on iPhone and Android; inside Chrome, Safari and Firefox; and inside Word and Outlook — one account and one subscription across all of them.
Behind the product are the internal systems I built for the language team — Leksikografia, Morfologjia, Fjalësi, Korrektori, Faqosësi and more — where linguists work together to enrich the dictionaries and teach the spell checker, and a pipeline that turns their work into the public dictionary, the spell checker, synonyms and grammar data.
02The problem
Standard keyboards have no ë or ç, so people write without them. General-purpose spell checkers handle Albanian grammar poorly. The national dictionary needed a fast, searchable home. Children needed playable material for an alphabet with nine two-letter letters.
And all of it had to work wherever people actually write — in a browser tab, in Word, on a phone, on a desktop — with one account, and with a language team constantly improving what the software knows.
03What I built
- The foundations (2020–2024): the internal systems the language team works in — Leksikografia (lexicography), Morfologjia (morphology), Fjalësi (the lexicon), Korrektori (proofing), Faqosësi (typesetting) and more.
- Every client, myself: the web app and its desktop builds for macOS, Windows and Linux, the iOS and Android app, the browser extension for Chrome, Safari and Firefox, and the Word and Outlook add-ins.
- The 2.0 platform: single sign-on on OpenIddict (PKCE for web, desktop, extensions and Office; custom grants for mobile with device limits and two-factor), seven .NET services with their own databases, and live collaboration over SignalR.
- The path from those internal systems to the product: an idempotent exporter that reconciles the dictionary with the lexicographers’ work and feeds the spell checker, synonyms and grammar data.
- The editor’s proofing pipeline and canvas-painted error marks — one engine inside the editor, the extension and the Office add-ins.
- AI rewriting with a grammar-engine safety net, and Albanian text-to-speech with caching and cost controls.
- The system-wide ë/ç keyboard, and the migration that moved every first-generation account, subscription and document into Shkrimori with passwords intact.
04Architecture
05Technology
- Clients
- Angular 22 (zoneless, signals)ElectronExpo · React NativeWebExtensionsOffice.jsNext.js
- Services
- .NET 10EF Core 10OpenIddict 7.5SignalRHangfirePlaywrightOpenXml
- Data
- SQL Server 2022MinIO
- AI & speech
- OpenAIAzure Speech (sq-AL)
- Infrastructure
- KubernetesGitLab CICloudflare
06Engineering notes
- 01
Offsets in two alphabets
The grammar engine counts Unicode code points; JavaScript counts UTF-16 units. Every mark is converted between the two, word boundaries use ë/ç-aware patterns because the standard \b breaks on them, and results for a paragraph that changed in the meantime are discarded by revision guards.
- 02
Marks painted, not injected
Error marks are drawn on two canvases behind and in front of the text instead of wrapping words in markup. It is the only approach that survives both live collaboration in the editor and arbitrary third-party pages in the browser extension.
- 03
Check once, broadcast to everyone
In a shared document each paragraph is checked once: simultaneous requests are merged, results are cached briefly and every verdict is broadcast to all participants over SignalR.
- 04
AI that can’t misspell
The model returns three rewrites of a sentence — professional, formal, friendly. Each one is run back through the Albanian grammar engine and its corrections are applied automatically, so a model’s slip with diacritics never reaches the reader.
- 05
Teaching a voice Albanian
Two speech providers sit behind one usage allowance. Pronunciation is generated once per word and voice and cached, and the pronunciation instructions are themselves written in Albanian — voice the final ë, keep ç apart from q — so editors can tune them.
- 06
ë and ç, everywhere
The desktop helper types Albanian characters system-wide. The rewrite dropped native modules for tiny per-OS helpers — macOS scripting, Windows SendInput, Linux xdotool — and validates every key setting that comes from the interface.
07Results
- 120k+
- unique words in the dictionary
- 11
- platforms, one account
- 7
- services
- 292
- API endpoints
- 3,100+
- automated tests
- 740+
- commits
- Kulla e shqipes has become Shkrimori — every client and every service rebuilt.
- One account across eleven platforms: the web, three desktop systems, two phones, three browsers and Office.
- Existing users moved across with their documents, subscriptions and passwords intact.