Cost Sharing Flights & Cargo Capacity Share for General Aviation
Cost sharing flights on pilot.report (/cargo) let a private pilot split only the direct costs of a leisure flight — never a profit — either by sharing seats Wingly-style or by sharing spare cargo capacity per kilogram. One engine, two modes, and a legally capped fair share.
Open the Transport boardInteractive preview — every element opens the live section.
Contents
One board, two modes: seats and cargo on the cost-flight engine
The /cargo section is a single marketplace for shared private (leisure) general aviation flights, built on one cost-flight engine that the client splits into two tabs by mode: People · cost sharing (seat splitting) and Cargo (capacity share by weight). It absorbed the former /cost-sharing, so seat-splitting and freight now live under one roof instead of two disconnected pages.
Technically it is a pair of Strapi 5 content-types — cost-flight for the flight and cost-booking for a seat or cargo request — rendered by Next.js 16 SSR pages: a board with tabs, a flight detail, a create form and a My flights and requests cabinet. The whole interface is bilingual (EN base, RU) with correct plural forms and localised date and currency formats. Money is supported in EUR (default), USD, GBP and CHF and formatted consistently through fmtMoney.
- Two tabs on one engine: People · cost sharing (seats) and Cargo (per-kg share)
- Mode (people / cargo) is fixed at creation and does not change on edit
- Strapi 5 content-types cost-flight (flight) + cost-booking (request)
- SSR + ISR: revalidate every 120s under a cost-flights cache tag
Seat cost sharing, Wingly-style: equal and fixed pricing
Seat splitting follows the Wingly model with two price schemes. In equal, the cost is divided evenly across everyone on board, so the seat price falls dynamically to C/(persons+1) as each new passenger joins — the pilot always pays an equal share, and every extra passenger makes the seat cheaper for all. In fixed, the pilot sets a fixed seat price, but a hard legal ceiling applies: p ≤ C/(seats+1), the pilot's own equal share.
That ceiling is not advisory. The helper maxLegalSeatPrice = C/(S+1) is enforced by server-side validation and shown live in the form, and it is re-checked whenever the pilot edits the money or the number of seats. If a fixed flight sells out, the pilot tops up the shortfall (C − price × seats) themselves, so the split can never turn a profit. A leisure-flight confirmation is mandatory before a flight goes live.
- equal: seat price = C/(persons+1), dropping with each confirmed passenger
- fixed: pilot-set price, capped at p ≤ C/(seats+1) with live warning + server validation
- Pilot always pays an equal share; on a sold-out fixed flight the pilot covers C − price × seats
- Mandatory leisure-flight confirmation; a legal notice (csx-legal) sits in every tab
Cargo capacity share: pay per kilogram, pilot covers the rest
The Cargo mode is a rarer thing for GA platforms: a share of spare payload by weight. The pilot enters the free capacity in kilograms, and the rate per kg is simply the direct costs divided by that capacity (pricePerKg = C / capacity). A shipper books a slice of the capacity and pays only for their share; whatever kilos go unsold are paid by the pilot, so the sum of everyone's shares never exceeds the real cost — never a profit.
The engine tracks the remaining capacity in cargoKgLeft and computes the pilot's current share as C − rate × sold_kg, which the flight detail shows transparently as "pilot's share now". A flight description field (cargoDesc) states what is being carried and its dimensions, and a note covers the route or meeting point. When a request is filed, the price is snapshotted in priceAtRequest, computed for cargo from the raw rate to avoid double rounding.
- Free capacity in kg → pricePerKg = C / capacity
- Shipper pays for their share of capacity; unsold remainder is the pilot's cost
- pilotShare = C − rate × sold_kg, shown as "pilot's share now"
- cargoDesc (what and dimensions) plus a note on route or meeting point
Requests, confirmation and automatic flight status
Every seat or freight request runs the full cost-booking cycle: a passenger or shipper requests (requested), the pilot confirms or declines (confirmed / declined), and the passenger can cancel (cancelled). Each request carries priceAtRequest — the share snapshotted at the moment it was filed — so the figure agreed on cannot silently drift as later passengers change the equal split.
The flight status is recomputed automatically. As requests are confirmed, cancelled or deleted, the engine flips the flight between open and full based on the actual confirmed load — seats for people, kilograms for cargo — and hides flights with no free load (seatsLeft ≤ 0 or cargoKgLeft ≤ 0) from the board. Payment happens off-platform, paid directly to the pilot against the flight's direct costs, keeping the frame "we split costs, we don't sell tickets".
- cost-booking lifecycle: requested → confirmed / declined (pilot) → cancelled (passenger)
- priceAtRequest locks the share at request time; for cargo it is taken from the raw rate
- Auto status: open ↔ full by confirmed load (seats for people, kg for cargo)
- Flights with no free load drop off the board automatically
Finding a flight: search, route map and a transparent share
The board is a server-side rendered feed of open, future flights that still have free load. You can search by route, city, aircraft, cargo or pilot, and sort by earliest or cheapest; the share calculation arrives from the server, not the browser. To avoid N+1 queries the confirmed load for the whole feed is batch-loaded in a single request (confirmedLoadBatch) instead of one call per flight.
The flight detail shows a route map (RouteMap) with the seat layout — pilot plus taken and free seats — or a fill bar for cargo capacity, a step-by-step breakdown of exactly how the share is computed, the legal ceiling and the request-time snapshot, and a stepper to pick seats or kilograms with a live tally of your contribution. The route is set via AirportSearch (ICAO, city or name), storing fromLat/Lng and toLat/Lng for the map and distance (distanceKm), and the aircraft is pulled from your garage (listMyAircraft) with an ownership check or typed by hand (acModel).
- Search by route / city / aircraft / cargo / pilot; sort by earliest or cheapest
- RouteMap with seat layout or a cargo-capacity fill bar
- Live seat/kg stepper with a running tally of your contribution
- Batch-loaded confirmed load (confirmedLoadBatch) — one query, not N
My flights, action gate and privacy
The /cargo/mine cabinet has two sections. My flights (as the pilot) lets you accept or decline incoming requests and delete a flight; My requests (as the shipper or passenger) shows the status of each request and lets you cancel. Both are mode-aware, speaking in seats for people and kilograms for cargo, with icon statuses and human-readable labels in the right plural forms for RU and EN.
Access is gated by design. The public feed and flight detail are built by hand and expose to guests only a short pilot card — name, headline, home base — plus the share calculation, without opening the underlying user content-type. Creating a flight or filing a request requires an account, so the reading, indexable surface stays open while every action is reserved for signed-in users. A legal note in each tab makes it explicit: only direct costs (fuel, fees, aircraft rental) are shared — this is not commercial carriage.
- My flights: accept / decline requests, delete a flight (as pilot)
- My requests: track status and cancel a booking (as shipper / passenger)
- Guests see only a short pilot profile + the share, never the user account
- Create and request are gated to signed-in accounts
How it works
- Create a flight at /cargo: pick a mode (people or cargo), set the route via AirportSearch and attach an aircraft from your garage or type the model
- Enter the direct costs and either seats (equal or fixed price) or free cargo capacity in kg; the form previews the share, per-kg rate and legal ceiling live
- Confirm the leisure flight and publish; it appears on the open board with the share computed server-side
- Passengers or shippers search the feed, read the share breakdown and route map, and request seats or kilograms
- As the pilot, accept or decline requests in /cargo/mine; the flight flips between open and full automatically
- Settle off-platform, paid directly to the pilot against the flight's direct costs
FAQ
How is the cost of a shared flight calculated?
For seats in equal mode the price is C/(persons+1) and falls as passengers join, so the pilot always pays an equal share. In fixed mode the pilot sets a price capped at C/(seats+1). For cargo the rate per kg is direct costs divided by free capacity, and the pilot pays for any unsold kilograms.
Can a pilot make money on cost sharing flights?
No. The design is legally safe by default: for fixed seats a hard server-side ceiling p ≤ C/(seats+1) prevents charging more than the pilot's own equal share, and for cargo the pilot covers the unsold capacity. The sum of shares can never exceed the real direct cost, so earning on passengers or freight is technically impossible.
How do I send cargo on a private flight?
Open the Cargo tab, find a flight in your direction, see its free capacity and per-kg rate, enter the weight to check your contribution, and file a request. The pilot confirms it, your booking is tracked in /cargo/mine, and you pay the pilot directly against their direct costs; delivery details are arranged in the note.
Is this a Wingly alternative for general aviation?
It uses the same Wingly-style seat-splitting model — equal or fixed pricing with the pilot always on an equal share — but adds a second mode rare for GA platforms: sharing spare cargo capacity by weight. Both live on one engine, one board, fully bilingual, with the payment kept off-platform as a genuine cost split rather than a charter.
Fill the empty seats and kilograms
Share direct costs legally — people by seat, cargo by weight.
Open cargo & cost sharing Free for pilots and owners · 35 languages