Client Work·2026·Developer & operator tooling
NashGUI
Thai documentation, a script builder and a simulator for Nash — the language that drives TNRT’s automatic observations

- Role
- Full-stack Developer
- Client
- NARIT — National Astronomical Research Institute of Thailand (TNRT)
- Team
- Built for the TNRT/TNRO team
- Duration
- Aug – Sep 2026
- Year
- 2026
Key figures
- 159
- commits (29 Aug – 22 Sep 2026)
- 31 + 57
- parameter classes + live-control methods
- 105
- Thai documentation pages
- 12
- supported scan types
- 141
- test cases
Nash is the scripting language used to run automatic observations on the TNRT radio telescope. NashGUI combines three things: 105 pages of Thai documentation generated from the real TCS source, a script builder that validates values against the real class rules and exports Python, and a timeline simulator that checks the antenna interlock — all without ever sending a command to TCS.
The problem
- 01Writing a scan script means referencing dozens of TCS class parameters; a wrong type or range is typically discovered only when the command runs for real.
- 02Hand-written documentation drifts from the source and does not exist in Thai.
The approach
- 01Extract the parameter structure from the TCS source with Python’s ast (never executing the file) into schema.json, then generate reference pages for all 31 classes automatically.
- 02A Scan Recipe Builder with six groups that validates values and constraints against the schema, previews the scan pattern and generates the Python code.
- 03A simulator that replays the timeline and checks interlock and Az/El limits, labelling each segment REAL, APPROX or MOCK.
- 04Import an observation plan from AstroTrack3D as a SHA-256-verified manifest and compile it into scan scripts.
The result
- 01Operators can validate a script before it reaches the system instead of finding out at run time.
- 02Docs follow the source with a single command (npm run sync-all).
- 03Every reference page traces back to the originating TCS commit.
Deliverables
- 105-page Thai documentation site (Fumadocs)
- Scan Recipe Builder with Python export and CSV import
- Simulator Timeline
- AstroTrack3D plan importer
- Scripts to sync the docs from the TCS source
Gallery
Main
16:9 / LG
Scan Recipe Builder — assemble six parameter groups, validate values, preview the scan pattern and export Python

Simulator Timeline — replay a scan and check the antenna interlock
Retrospective
Challenges
- Docstrings and code sometimes disagree (for example priority documented as float but actually int), so the code wins and the conflict is called out.
- Safe by design: a browser-only tool that keeps files in localStorage and never connects to TCS.
- Never overstating reality: the simulator is explicit about what is real, approximate or mocked.
Learnings
- Static analysis keeps documentation aligned with code without hand-writing it.
- Design UIs so operators can verify before acting, not afterwards.
- Working with NARIT’s open-source TCS code (LGPL-2.1) and respecting the provenance of the data.
Interested in work like this?
Tell me about your brief — I reply within 24 hours.