Skip to main content
All projects

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

NashGUI
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

  1. 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.
  2. 02Hand-written documentation drifts from the source and does not exist in Thai.

The approach

  1. 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.
  2. 02A Scan Recipe Builder with six groups that validates values and constraints against the schema, previews the scan pattern and generates the Python code.
  3. 03A simulator that replays the timeline and checks interlock and Az/El limits, labelling each segment REAL, APPROX or MOCK.
  4. 04Import an observation plan from AstroTrack3D as a SHA-256-verified manifest and compile it into scan scripts.

The result

  1. 01Operators can validate a script before it reaches the system instead of finding out at run time.
  2. 02Docs follow the source with a single command (npm run sync-all).
  3. 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

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.

Start a conversation