Skip to content

New Member Overview

Introduction

This document provides information for new members interested in working on either the Groundstation or Telemetry Server components of the Autoboat project. It outlines the necessary skills and knowledge required to effectively contribute to these parts of the codebase, and where to find relevant resources for learning.

The Groundstation lives in the main autoboat-vt/autoboat_vt repository under ground_station/, and the Telemetry Server is its own repository at autoboat-vt/telemetry_server. Both are written primarily in Python. The Groundstation also embeds a small Vite/TypeScript/Leaflet frontend (the map widget), so a little bit of web knowledge goes a long way.

To work on the Groundstation or Telemetry Server, you should have a solid understanding (or be willing to learn) the following:

  • Python Programming: Both the Groundstation and Telemetry Server are written almost entirely in Python. You should be comfortable with Python syntax, data structures, and libraries. The Telemetry Server uses Flask and SQLAlchemy, while the Groundstation uses qtpy (a Qt abstraction layer that lets us run on either PySide6 or PyQt without code changes) for its GUI.
  • Qt / PySide6 (via qtpy): The Groundstation GUI is built on Qt through qtpy. You should never import PyQt5 or PyQt6 directly - always go through qtpy so the backend stays swappable. You don't need to know the whole Qt API, but you should be familiar with creating windows/widgets, signals and slots, and QThread.
  • TypeScript / Vite / Leaflet (Groundstation only): The map widget in ground_station/src/widgets/map_widget/frontend/ is a small Vite + TypeScript app that renders waypoints and buoys on a Leaflet map. You don't need to be a web expert, but basic familiarity with TS, npm/bun, and JS build tooling is useful if you want to touch the map.
  • Networking / HTTP Concepts: The Groundstation and boat talk to the Telemetry Server over HTTPS REST endpoints (Flask). Understanding basic HTTP methods (GET/POST/DELETE), JSON, and request/response cycles will be helpful, especially when working with the Telemetry Server. See Telemetry Server API Routes for the full route surface.
  • Multithreading: Both components use threads. The Groundstation uses QThread (see src/utils/thread_classes.py) for asynchronous work, and the Telemetry Server uses a read/write lock manager (lock_manager.py) to coordinate concurrent requests. A basic understanding of threads and locks in Python will be helpful.
  • Docker / Compose (Telemetry Server only): The Telemetry Server is deployed as a multi-service Docker Compose stack (Gunicorn app, Cloudflare tunnel, cron, optional Tailscale). You don't need Docker to develop locally, but it helps to understand the deployment model.

It's hard to be an expert in all of these areas, so don't worry if you are not. The most important thing is to be willing to learn and ask questions when you need help. You will learn much quicker by doing and asking questions when you get stuck than by trying to learn everything beforehand.

Learning Resources

Here are some resources to help you get started with the necessary skills:

Getting Help

If you have any questions or need help getting started, please reach out on the Discord server if you are having trouble with anything. The Discord server is great place to get help since we can only meet in person so often. It is also a good place to hang out with other members of the team, discuss ideas, and participate in some team bonding!

Next Steps

Once you feel comfortable with the necessary skills and have familiarized yourself with the codebase, you can start contributing to the Groundstation and Telemetry Server components. Here are some suggested next steps:

  • Clone autoboat-vt/autoboat_vt and read through ground_station/src/ to learn how the Groundstation is structured. You can launch it locally with cd ground_station && ./run.sh (after installing Python 3.10+ and Bun).
  • Clone autoboat-vt/telemetry_server and read through src/autoboat_telemetry_server/ to learn how the Telemetry Server is structured. You can run it locally without Docker using pip install -e . then flask run (or gunicorn "autoboat_telemetry_server:create_app()" for a production-like setup).
  • Look for small issues or features that you can work on to get familiar with the codebase and development process.
  • Honestly working on the project in any capacity will help you learn faster than anything else, so don't feel like you need to start with something big right away. Just start small and work your way up!