Learn more at https://rubintv.lsst.io (to follow)
rubintv is developed with FastAPI and Safir.
RubinTV is a small project scaffold intended to collect and display current and historic plots, images and movies from the S3 buckets at the various processing locations (Summit, USDF, BTS and TTS). It also hosts services and web UI components related to Rubin Observatory tooling such as DDV (Direct Data Visualization)
The codebase aims to be modular and easy to extend: a backend built with FastAPI and Safir, and a frontend that uses modern TypeScript and React patterns.
This repository contains the core services and documentation to get started quickly and to follow project conventions.
python/lsst/ts/rubintv- FastAPI application and service codetests/- Unit and integration tests for the backendsrc/- React + TypeScript frontendsrc/js/components/tests- Tests for React components
- Change into the
src/directory. - Install dependencies:
npm installoryarn. - Run the webpack compiler:
npm run build
The project is currently loaded and run via the FastAPI backend
- Do not use an
interfacefor React component props if there is only one prop and it is not reused across multiple components. Prefer atypealias or an inline prop type in that case.- Rationale: using a
typeor inline type keeps the component local and avoids accidental declaration merging and unnecessary exports for a one-off props shape.
- Rationale: using a
Other style notes:
- Favor explicit, narrow types and prefer immutability where reasonable.
- Opt for readability rather than reusability - if inline types are not causing function signatures to spill over a single line then use fully qualified types for clarity.
e.g.
const handleConfirmSubmit = (e: React.FormEvent<HTMLFormElement>) => {}allows the type of the target element to be seen without obfuscation.
Please follow the contribution guidelines in CONTRIBUTING.md (if present). Keep changes small and focused, add tests for behavior, and update docs when adding or changing public APIs.
This project is provided under the terms of the LICENSE file in the repository.