Amateur radio has many activities—DX chasing, POTA/SOTA activations, contesting, satellite work, meteor scatter, and more. Each has conditions that make it an optimal time to engage. NextSkip aggregates real-time data, scores current conditions, and surfaces the best opportunities so you know where to spend your time on the air.
- How It Works
- Activity Coverage
- Features
- Tech Stack
- Quick Start
- API Endpoints
- Future Enhancements
- Data Attribution
- Data Aggregation: Backend modules poll feeds for each activity (NOAA for propagation, POTA API for park activations, contest calendars, etc.)
- Condition Scoring: Each module calculates a score (0-100) based on current conditions
- Score Ranking: Cards are arranged in an activity grid with highest-scored activities in the top-left position
- Hotness Indicators: Cards display "hot," "warm," "neutral," or "cool" styling based on their scores
Glossary
| Term | Definition |
|---|---|
| Activity | A category of amateur radio pursuit that NextSkip tracks (DX, POTA, contesting, etc.) |
| Conditions | The current state of an activity - whether it's a good time to engage |
| Score | A numerical rating (0-100) representing how favorable conditions are |
| Hotness | The visual tier derived from score: hot (70+), warm (45-69), neutral (20-44), cool (0-19) |
| Card | A UI component displaying one activity's current conditions |
| Module | A backend package that fetches and scores one activity's data |
| Feed | An external data source that provides activity information |
| FeedClient | A component that fetches data from a Feed with circuit breaker and retry resilience |
| LoadingCache | A Caffeine cache backed by database queries for fast read access |
| RefreshTask | A db-scheduler recurring task that coordinates: Feed fetch → DB persist → cache refresh |
NextSkip focuses on activities with machine-readable, computable, or predictable conditions:
| Activity | Data Sources | Status |
|---|---|---|
| HF Propagation | NOAA SWPC, HamQSL | Live |
| POTA/SOTA | POTA API, SOTA API | Live |
| Contests | Contest calendars | Live |
| Meteor Showers | Astronomical data | Live |
| Band Activity | PSKReporter (MQTT) | Live |
| Satellites | Orbital prediction APIs | Coming soon |
The platform is actively expanding to cover more activities and data sources.
- Activity Scoring: Each activity gets a 0-100 score based on current conditions
- Hotness Ranking: Cards automatically arrange by score - best opportunities float to top
- Multi-source Feeds: Data from NOAA SWPC, HamQSL, POTA API, and more
- Real-time Conditions: Solar indices (SFI, K-Index, A-Index) and HF band forecasts (160m-6m)
- Resilient Architecture: Circuit breakers, retry logic, and graceful fallbacks
- Activity Grid UI: Score-sorted card layout with hot/warm/neutral/cool visual indicators
- Responsive Design: Mobile-first design with 4-column desktop → 2-column tablet → 1-column mobile layout
- Java 25
- Spring Boot 4.0
- Vaadin Hilla 25.0 (React integration)
- Resilience4j (circuit breakers, retry)
- Caffeine (caching)
- PostgreSQL (persistence) with Liquibase migrations
- db-scheduler (recurring task scheduling)
- Eclipse Paho MQTT (real-time spot streaming)
- React 19
- TypeScript
- Vaadin Hilla (type-safe RPC)
- Vite
- Vitest + React Testing Library
- OpenTelemetry (distributed tracing)
- Pyroscope (continuous profiling)
- PostHog (product analytics)
- Spring Boot Actuator (health & metrics)
- Gradle
- Checkstyle, PMD, SpotBugs
- JaCoCo (75% instruction, 65% branch coverage)
- Java (see
.tool-versionsfor exact version) - Node.js (see
.tool-versionsfor exact version) - Docker (for local PostgreSQL, see docs/DATABASE.md)
# Start PostgreSQL (first time)
docker-compose up -d
# Build the project
./gradlew build
# Start the application
./gradlew bootRunThe application will start on http://localhost:8080
Vaadin's development mode is enabled by default and provides:
- Hot reload for frontend changes
- Development tools overlay
- Source maps for debugging
Hilla auto-generates type-safe TypeScript clients from Java @BrowserCallable endpoints.
Available Endpoints:
| Endpoint | Purpose |
|---|---|
PropagationEndpoint |
Solar indices and band conditions |
ActivationsEndpoint |
POTA/SOTA activations |
ContestEndpoint |
Contest calendar |
MeteorEndpoint |
Meteor shower predictions |
SpotsEndpoint |
Real-time band activity (FT8/FT4/FT2) |
AdminEndpoint |
Admin and user info |
Generated clients: src/main/frontend/generated/
| Endpoint | Purpose |
|---|---|
http://localhost:8080/actuator/health |
Health check |
http://localhost:8080/actuator/info |
Application info |
- Grid square-based propagation predictions
- Custom alerts and notifications
- Historical data analysis
- Additional data sources integration
See GitHub issues for planned features.
| Source | Data Provided | Link |
|---|---|---|
| NOAA SWPC | Solar indices (SFI, K-Index, A-Index, Sunspot Number) | swpc.noaa.gov |
| HamQSL | Band conditions and solar data | hamqsl.com |
| POTA API | Parks on the Air activations | pota.app |
| SOTA API | Summits on the Air activations | sota.org.uk |
| WA7BNM | Contest calendar | contestcalendar.com |
| IMO | Meteor shower data | imo.net |
| PSKReporter | Real-time FT8/FT4/FT2 spots via MQTT | pskreporter.info |