> ## Content Index
> Fetch the complete content index at: https://buxmann.dev/llms.txt
> Use this file to discover other available public pages before exploring further.

# Weather-Based Activity Rankings
- URL: https://buxmann.dev/weather-activity-rankings/
- Published: 2026-04-28T15:28:22.000Z
- Updated: 2026-08-16T05:28:41.000Z
- Description: A TypeScript take-home built for a Lead/Senior Engineer test: rank how good the next seven days are for skiing, surfing and sightseeing in any town.
- Author: Martin Buxmann
- Tags: #project

## About

A TypeScript take-home project built for a Lead and Senior Engineer technical test. The app accepts a city or town and ranks how good the next seven days are for skiing, surfing, outdoor sightseeing and indoor sightseeing.

The goal was not a fully featured travel product. The implementation prioritises clear boundaries, maintainable domain logic, typed contracts, and explicit trade-offs.

## Key Features

- **Explainable scoring.** Every activity gets a 0 to 100 score per forecast day alongside a reason the user can read, rather than an opaque number.
- **Skiing.** Favours colder days, snowfall and lower wind.
- **Surfing.** Favours rideable wave height, longer wave period and milder weather, using marine forecast data.
- **Outdoor sightseeing.** Favours comfortable, dry, low-wind days.
- **Indoor sightseeing.** Scores higher when conditions outside are rainy, windy, too cold or too hot.
- **Schema-first GraphQL.** A shared SDL contract is the source of truth, with generated types across frontend and backend.
- **Provider resilience.** One isolated weather client owns validation, retries, timeouts and caching, instead of scattering them through resolvers.

## Tech Stack

- TypeScript
- Bun workspaces + Turborepo
- Node.js
- Hono
- GraphQL Yoga
- React
- Vite
- urql
- Open-Meteo APIs
- Zod
- Pino
- Vitest
- Docker

## Source Code

- [GitHub](https://github.com/mbuxmann/weather-activity-ranking?ref=buxmann.dev)
- [Live demo](https://weatherapp.buxmann.dev/?ref=buxmann.dev)
- [GraphQL API](https://weather-api.buxmann.dev/graphql?ref=buxmann.dev)

## Screenshots

![](https://buxmann.dev/content/images/2026/08/weather-lisbon-search.png)

![](https://buxmann.dev/content/images/2026/08/weather-lisbon-outlook.png)