Building a Computer Lab for Blind Children in Vietnam
In April I'm flying to Vietnam to set up a computer lab at an orphanage for blind children. Nineteen laptops, each loaded with a screen reader that speaks Vietnamese, an offline encyclopedia, a typing tutor, audio games, and a full office suite. Everything a kid needs to learn how to use a computer, even if the internet goes out.
This post covers how I'm building the deployment kit: what hardware I picked and why, the software stack, how I'm automating setup for 19 machines, and how I plan to keep them running from 8,000 miles away after I leave.
Why This Project
There are a lot of blind children in Vietnamese orphanages who have never touched a computer. The barrier isn't intelligence or interest. It's access. A screen reader costs nothing, but someone has to set it up, configure the Vietnamese voice, install the right software, and then teach the staff how to maintain it. That "someone" part is the hard part.
I wanted to build something that would actually last after I left. Not just drop off laptops and hope for the best. So I spent a few months building a deployment kit that automates everything, along with remote management tools so I can troubleshoot from the US.
The Hardware
Dell Latitude 5420 ($308/unit)
I bought 19 refurbished Dell Latitude 5420 laptops from Dell's outlet store. Grade A refurbished, i5-1145G7, 8GB RAM, 256GB SSD. Here's why I picked them:
- Enterprise build quality. Carbon fiber chassis, MIL-STD-810G rated. These things survive being dropped. That matters when your users are children who can't see where they're setting the laptop down.
- Keyboard feel. 1.5mm key travel, spill-resistant. For someone learning to type by touch, the keyboard is the most important part of the computer. Consumer laptops with their mushy chiclet keyboards are a bad choice here.
- Serviceability. Replacement keyboards are $15-25, batteries $30-50. The staff at the orphanage can replace parts without special tools. Good luck doing that with a MacBook.
- Windows 11 compatible. 11th gen Intel, TPM 2.0, UEFI. They shipped with Windows 10 Pro but I'm upgrading all of them to 11 before deployment.
- NVDA is Intel-optimized. The NVDA screen reader runs best on Intel. This is one of those things you only learn from the blind community.
I got them at $308 each after a 33% promo code. One of the 19 was lost in transit and Dell is investigating, so I'm working with 18 confirmed units right now.
Audio-Technica ATH-M40x Headphones ($90/unit)
I bought 21 pairs (19 for stations, 2 spares) from Sweetwater. These are trusted by blind professionals and schools for accessibility work. Flat frequency response, comfortable for long sessions, detachable cables so a broken cable doesn't mean a broken headphone. Closed-back so students can focus without hearing each other's screen readers.
USB Drives and Braille Labels
100 EASTBULL 16GB USBs at $2.32 each. Swivel design, no cap to lose. Each one gets a unique identifier (STU-001, STU-002, etc.) with folders for Documents, Audio, and Schoolwork. I'm 3D printing braille identification tags that clip onto the keyring hole, so each student can find their own drive by touch.
Total Budget
| Item | Qty | Unit | Total |
|---|---|---|---|
| Dell Latitude 5420 | 19 | $307.53 | $5,843.07 |
| ATH-M40x headphones | 20 | $90.00 | $1,800.00 |
| Replacement earpads | 4 | $26.99 | $107.96 |
| Sweetwater tax | $147.87 | ||
| 16GB USB drives | 100 | $2.32 | $231.88 |
| Braille labeler + tape | $45.94 | ||
| Total | $8,176.72 | ||
That's $404.51 per station (laptop + headphone). The tax on the laptops and USB drives was refunded under nonprofit exemption.
The Software Stack
Every laptop gets the exact same software image. Everything is free or covered by nonprofit licensing, and almost everything works offline. That last part is critical. Internet at these orphanages is unreliable.
Screen reader (Vietnamese UI)
Vietnamese text-to-speech
Vietnamese typing lessons
E-book reader (sachtiepcan.vn)
Nonprofit license
Accessible web browser
Media playback
Audio recording/editing
IDE built for blind students
Vietnamese Telex input
Offline Vietnamese Wikipedia
EPUB/DAISY ebook reader
Offline VN-EN dictionary
Audio games for blind kids
Lightweight PDF reader
VPN for remote management
NVDA add-ons are installed too: VLC access, Speech History (lets you review what was spoken), NVDA Remote (so I can connect to a student's screen reader session from the US), Focus Highlight, Audacity access enhancements, and MathCAT for math notation.
The Sao Mai Stack
The Sao Mai Center for the Blind in Ho Chi Minh City builds Vietnamese accessibility tools. Their VNVoice gives NVDA a proper Vietnamese text-to-speech voice (you get a choice of "Minh Du" or "Mai Dung"). Their Typing Tutor has audio-guided Vietnamese typing lessons. Their Readmate connects to sachtiepcan.vn, a Vietnamese accessible ebook library. These tools don't have a big international profile, but they're essential. Without Sao Mai, there's no Vietnamese screen reader experience worth using.
Offline-First Design
The Kiwix installation includes the full Vietnamese Wikipedia (about 550MB as a ZIM file), Vietnamese Wiktionary, and Vietnamese Wikisource. GoldenDict ships with StarDict Vietnamese-English and Vietnamese-Vietnamese dictionaries. All of this works without any internet connection. A student can look up a word, read an encyclopedia article, or study literature even when the Wi-Fi is down.
Automating the Setup
Setting up 19 laptops by hand would take days and I'd make mistakes. So I wrote PowerShell scripts that automate the entire process. The whole thing is a single command:
.\Scripts\Bootstrap-Laptop.ps1
It prompts for a PC number (1 through 19), then handles everything:
- Sets the hostname to
PC-01throughPC-19 - Configures Wi-Fi
- Sets Windows to Vietnamese language and SE Asia timezone
- Installs all 16+ applications silently
- Configures NVDA with the Vietnamese voice, sets speech rate, enables auto-start
- Disables Windows Narrator's shortcut (so it doesn't fight with NVDA)
- Creates desktop shortcuts with consistent numbering for screen reader navigation
- Hardens Windows: disables auto-updates (they'd break things), limits volume to 70% (hearing protection), disables hibernate
- Installs Tailscale VPN and joins the fleet
- Sets up scheduled tasks for auto-updates and health reporting
Before Bootstrap runs, a download script fetches all the installers (~800MB) from vendor URLs, GitHub Releases, and Kiwix's download server. Every file gets a SHA256 checksum on download, and a verification script checks them all before deployment.
I test on one laptop first, verify with the audit script, then batch the remaining 18. The audit script (7-Audit.ps1) checks every installed application against manifest.json and reports pass/warn/fail for each component. If something is wrong, I know exactly what before I move to the next machine.
What Actually Went Wrong
A lot of things, honestly. The commit history tells the story. Some highlights:
- NVDA config format. NVDA is picky about its config file format. Invalid keys cause it to silently reset to factory defaults on startup. I went through several rounds of fixing the config template before it stuck.
- UniKey popup dialogs. UniKey (the Vietnamese keyboard input method) pops up a dialog on first launch asking about settings. For a blind user, an unexpected popup they can't dismiss is a showstopper. I had to set a registry key (
ShowDlg) and eventually wrote a launcher wrapper to suppress it. - Desktop shortcut ordering. NVDA reads desktop icons in order. I had to number-prefix all shortcuts so navigation makes sense when you can't see the screen.
- Windows 11 taskbar cleanup. Removing unwanted taskbar icons requires hitting multiple user profiles and registry hives. This broke and was fixed at least three times.
- Spotlight and Recycle Bin. These Windows UI elements are confusing for blind navigation. Finding the right policies to hide them required more trial and error than I expected.
57 commits and counting. Every one of them fixing something I didn't anticipate.
Remote Fleet Management
This is the part I'm most worried about. Once I fly home, I need to be able to monitor 19 laptops from the US and push fixes without anyone on-site doing anything.
Tailscale VPN
Every laptop gets Tailscale installed with a tagged pre-auth key (tag:vietnam-lab). The tag disables node key expiry, so these devices stay connected to my tailnet permanently. As long as a laptop has internet, I can reach it.
From my machine I can ping the entire fleet:
.\Scripts\Check-Fleet.ps1 -UseTailscale
Or run a command across all 19 machines in parallel batches:
.\Scripts\Deploy-All.ps1 -UseTailscale -Phase HealthCheck
The deploy script uses WinRM over Tailscale to run PowerShell remotely. It batches 5 at a time, logs everything, and gives a pass/fail summary at the end.
Pull-Based Auto-Updates
Each laptop runs an update agent as a scheduled task (daily, 2-4 AM, never during school hours). The agent checks a JSON manifest on GitHub:
{
"schema_version": 1,
"update_version": "2026.02.19",
"release_base": "https://github.com/.../releases/download/installers-v1",
"packages": []
}
When I need to push a software update, I upload the new installer to a GitHub Release, add it to the manifest with a SHA256 hash, and push. Within 24 hours, every online laptop downloads, verifies, installs, and reports the result. If a critical install fails, it rolls back automatically.
The agent is careful. It checks for internet before trying anything. It acquires a lock file to prevent concurrent runs. It verifies SHA256 on every download. It skips school hours. It cleans up after itself. I don't want an update process that makes things worse.
Health Reporting via Google Drive
Each laptop also runs a health reporter on schedule. It runs the audit script, collects the results into a JSON heartbeat, and uploads it to Google Drive via rclone:
gdrive:VietnamLabFleet/heartbeats/PC-01.json
From my machine I run Get-FleetStatus.ps1, which syncs the heartbeat folder from Google Drive and displays a dashboard: last seen time, manifest version, Tailscale IP, audit pass/warn/fail counts, uptime, and update status for all 19 machines. Any PC that hasn't reported in 7+ days shows up as STALE.
I chose Google Drive over a custom server because it's free, reliable, and doesn't require me to maintain infrastructure. rclone handles the OAuth and sync. The laptops write, my machine reads.
Student Data Backup
When a student USB drive is plugged in, a background script syncs their Documents, Audio, and Schoolwork folders to Google Drive under VietnamLabBackups/STU-001/. It identifies drives by volume label or hidden .student-id file. So even if a USB drive gets lost or corrupted, the student's work is backed up.
Accessibility Details That Matter
A few things I learned from research and the blind accessibility community:
- Volume limit at 70%. Kids with headphones will crank the volume. Hearing damage is a real risk, especially for children who rely on hearing for everything. Windows enforces the cap.
- NVDA auto-starts on login. If the screen reader doesn't start, a blind student can't do anything. It has to be automatic and reliable.
- Desktop shortcut for NVDA restore. If someone accidentally changes NVDA's settings (wrong voice, wrong language, wrong speech rate), there's a desktop shortcut called "Khoi Phuc NVDA - Restore NVDA" that resets everything to the lab configuration.
- Screen Curtain. NVDA can turn the display completely black. This saves battery and gives blind students privacy, since sighted people can't casually read their screen.
- Low-vision support. Some students have partial vision. Windows Magnifier is pre-configured to launch at 200% zoom with Win+Plus. It runs alongside NVDA so students get both visual magnification and speech output.
- Language switching. Windows is set to Vietnamese by default, but there's a desktop shortcut to switch to English for staff or volunteers. The keyboard input method (UniKey/Telex) works in both languages.
- Input Help Mode. NVDA+1 enters a learning mode where pressing any key tells you what it does. This is the single most important feature for a beginner learning keyboard navigation.
The Deployment Plan
I have 1-3 days on-site in April. The plan:
- Set up all 19 laptops from the deployment USB (Bootstrap script handles each one)
- Verify every machine passes the audit
- Connect everything to the orphanage Wi-Fi and confirm Tailscale connects
- Hand out USB drives, show students the basics (NVDA+1 for Input Help, typing tutor, LEAP games)
- Walk the staff through the handoff document: how to restart NVDA, how to restore settings, who to contact
The handoff document has both a Markdown version and a plain text version. I also made Vietnamese-language student guides. These aren't just README files for me. They're the documentation that stays behind.
What Comes Next
Once I'm back in the US, it's all remote. I'll be watching the fleet dashboard, pushing updates when software releases new versions, and using NVDA Remote to connect directly to a student's screen reader session if someone needs help.
The honest truth is that I don't know how well the remote management will work in practice. Vietnamese internet is inconsistent. Power outages happen. Laptops might sit unused for weeks. The update agent and health reporter are designed to be resilient to all of this, but real-world conditions have a way of finding the edge cases.
Everything is open source. The full deployment kit, including all the scripts, manifests, and documentation, is on GitHub. If you're doing something similar, take whatever is useful.