# indieSoccer

Public product and rules reference for players, developers, and AI systems.

- Product: indieSoccer for iPhone
- Territory: United States
- Minimum age: 18
- Public game-rules version: `2026-08-20`
- Website: https://indiesoccer.app
- Support: info@indiesoccer.app

This document describes public-facing behavior. It intentionally excludes private moderation information, security controls, infrastructure, internal data structures, and abuse-prevention implementation.

## Product summary

indieSoccer coordinates user-created, real-world pickup soccer games. A host selects an actual field, kickoff time, surface, format, and discovery setting. Other local players find the listing through location or their friend network, choose a soccer position, check in near the field, play the game, and record what happened.

The app does not create a match by itself. Location supplies local context. Users supply the fields, schedules, rosters, attendance, and results. Friends and friends of friends provide the network through which familiar hosts, teammates, and opponents can organize repeat games.

indieSoccer does not organize, supervise, reserve, inspect, sponsor, or operate games or locations.

## Operating model

1. **A user supplies the game.** The host selects a real field and enters the soccer-specific details.
2. **Location supplies local discovery.** With permission, the app can surface accessible Everybody games within 20 miles, show anonymous player activity in the area, find nearby fields, and support physical check-in.
3. **The player network supplies repeat access.** Network games reach friends and friends of friends. Direct friends may receive simpler access when the documented Elo condition is met.
4. **Available Today supplies a same-day signal.** An eligible player can tell their network that they are free to play and can receive alerts about eligible nearby games later that day.
5. **Players supply presence and the result.** Ten rostered players check in at the field and play. The host records the winning side after the game window.
6. **The app supplies continuity.** Game history, attendance, reliability, teammate and opponent connections, and Rated Elo make later games easier to evaluate.

A larger dependable network does not alter eligibility, access, check-in, or rating rules. It increases the practical supply of familiar local players and completed games.

## Terminology

- **Host:** the player who creates a game. The host is rostered first.
- **Light / Dark:** the two teams in every game.
- **Rated:** a completed valid result changes Elo.
- **Casual:** a completed valid result does not change Elo.
- **Active slot:** the single currently hosted or joined game a player may hold.
- **Same-date allowance:** the one game a player may host or join for a scheduled date.
- **Check-in:** a server-verified confirmation made near the game location during the final hour before kickoff.
- **Reliability stars:** a public attendance indicator from 0 through 5.
- **Elo:** indieSoccer's player rating. Always write this name as “Elo,” not “ELO.”

## Quick reference

| Rule | Current behavior |
|---|---|
| Format | 5-a-side, Light vs Dark |
| Roster capacity | 5 players per side, 10 total |
| Scheduling | At least 30 minutes and no more than 7 days ahead |
| Scheduled game window | 2 hours |
| Active-game limit | 1 hosted or joined game |
| Same-date limit | 1 game per scheduled date |
| Check-in window | Opens 1 hour before kickoff; closes at kickoff |
| Check-in distance | Within 1 mile of the field using a fresh device location |
| Reliability | Starts at 3; minimum 0; maximum 5 |
| Leave/rejoin grace deadline | 2 hours after the player's first join, and always before kickoff |
| Host cancellation limit | A second cancellation that day blocks further hosting until the next day |
| Nearby game discovery | Accessible Everybody games within 20 miles of the player's current location |
| Network discovery | Friends and friends of friends |
| Players in your area | Anonymous current count and seven-day activity history; no nearby identities shown |
| Available Today | Eligible same-day availability shared with the network; direct friends are notified |

## Finding and forming a game

### Find local games

With location permission, the Games view combines the player's relevant games with accessible nearby Everybody games and Network games. Nearby game discovery covers 20 miles. A nearby listing is still user-created: a host selected the field, time, and access setting.

Players can filter the game feed by game type, surface, and discovery setting. Location does not grant access by itself. Friendship, network reach, blocks, Elo range, requests, approval, capacity, and game state still apply.

### Read local player activity

The Home view's **Players in your area** section provides an anonymous current count and seven-day activity history. A player can contribute to an area's daily count by becoming Available Today or attending a completed game. A person is counted once per day.

The area count does not reveal which nearby accounts were counted or show their exact locations. Named availability is separate and appears only through the player's eligible network.

### Use Available Today

Available Today is intended for an eligible player who can play that day but has not committed to a game. Turning it on:

1. shares the status with the eligible network according to the player's profile privacy setting;
2. sends a named availability notification to direct friends, at most once per player per day;
3. allows eligible later same-day games within 20 miles to generate an alert; and
4. contributes once to the anonymous area activity count for that day.

Public availability can reach friends and friends of friends. Private-profile availability reaches direct friends only. The player's precise Available Today location is not shown to other players.

Available Today and **Nearby Game Alerts** are separate. Nearby Game Alerts is an opt-in for accessible future-day games within 20 miles when the player's Elo is within 200 points of the host and the other documented conditions are satisfied.

### Build and use the player network

Friends are the durable connection between one game and the next. A direct friend can expose Network games, available players, and additional friends-of-friends. A dependable network makes it more likely that a local roster can be filled with known or second-degree players.

Friendship is not a guarantee of admission. For an ordinary game, direct friends within 200 Elo points of the host can join immediately. Other eligible players request access. Approval permits the player to choose a position; it does not place the player on the roster.

### Host a game

If no suitable game exists, a player can host one. The host selects the real field, kickoff time, playing surface, Rated or Casual format, Network or Everybody discovery, team, and position. The selected field becomes both the game location and the check-in target.

## 1. Game format

1. Each listing represents a user-created, real-world pickup soccer game at the host-selected field.
2. Games are 5-a-side.
3. Light and Dark can each roster up to five players.
4. The host is rostered first and chooses a team and position while creating the game.
5. A game must be scheduled at least 30 minutes ahead and no more than seven days ahead.
6. The scheduled game window lasts two hours.
7. Rated results affect Elo. Casual results do not.

## 2. Teams and positions

1. Players choose an open marked field square.
2. Each square maps to Goalkeeper, Defender, Midfielder, or Attacker.
3. Each side can have only one goalkeeper.
4. A full five-player side must include a goalkeeper.
5. New players cannot join at kickoff.
6. Each joined player's team locks at kickoff.
7. A joined player may still move to an open position on the same team.

## 3. Game access

### Network

Friends and friends of friends can find the game. This is the principal discovery setting for repeat local groups. Direct friends within 200 Elo points of the host can join immediately. Everyone else in the host's network must request access first.

### Everybody

Eligible players within 20 miles can find the game through nearby discovery. Direct friends within 200 Elo points of the host can join immediately. Everyone else must request access first.

### Shared access rules

1. A blocking relationship prevents game access.
2. Host approval grants access but does not add the approved player to the roster.
3. An approved player must still choose a position and accept the join agreements.
4. The host may approve or reject access requests before kickoff.
5. Everyone with game access can view the roster. Only the host manages requests and approved access.

## 4. Game commitment

1. A player can have only one active hosted or joined game at a time.
2. Creating or joining reserves the player's one-game allowance for the game's scheduled date while that participation remains.
3. The host cannot leave their own game. The host must cancel it instead.
4. After a cancellation, a non-host player restores their active slot and same-date allowance immediately by leaving.
5. If a cancelled player remains attached, cleanup restores both when it deletes the game.
6. Cleanup restores both for everyone still attached, including the host.

## 5. Check-in and kickoff

1. Check-in opens one hour before kickoff.
2. Check-in closes at kickoff.
3. The player must still be joined.
4. Check-in requires a fresh device location within one mile of the host-selected real-world field.
5. The game starts only when all ten rostered players, including the host, are still joined and checked in at kickoff.
6. If the roster is not full and completely checked in, the game is cancelled automatically.
7. An incomplete-roster or incomplete-check-in cancellation is neutral for every player. It does not remove a reliability star or add an Eligible, Attended, Voluntary leaves, or Missed check-ins statistic.

## 6. Reliability stars

1. Players start with 3 stars.
2. Reliability is limited to the range 0 through 5.
3. Completing a non-cancelled game while still joined and checked in earns 1 star, up to 5.
4. Leaving and not returning by the grace deadline costs 1 star, down to 0.
5. Each game produces at most one reliability outcome per player.
6. Host removal is reliability-neutral.
7. Every game cancellation, including an incomplete-check-in cancellation, is reliability-neutral unless that player's outcome had already become final before the cancellation.

## 7. Leaving and rejoining

1. A non-host player may leave before kickoff.
2. The player's grace deadline is fixed at two hours after their first join.
3. Rejoining is allowed only before kickoff and no later than the fixed grace deadline.
4. Repeated departures do not restart the grace deadline.
5. If the game has not been cancelled and the player remains out when the deadline passes, the player loses one reliability star and can no longer rejoin that game.
6. A player removed by the host cannot rejoin that game.
7. Host removal does not change reliability stars.

## 8. Host controls and cancellation

1. The host can approve or reject access requests before kickoff.
2. The host can remove a non-host rostered player only before kickoff.
3. A player removed by the host cannot rejoin.
4. Host cancellation takes effect immediately and counts toward the daily host-cancellation limit.
5. A cancelled game holds the host's active slot during cleanup for at least 30 minutes.
6. Cleanup restores the host's same-date allowance when it deletes the game.
7. A second host cancellation that day prevents the host from creating another game until the next day.
8. Cancellation remains neutral for the other players under the reliability and attendance rules above.

## 9. Results and history

1. At kickoff, the authoritative roster is frozen for the game.
2. Each player's matchup Elo and games-played count are frozen at kickoff.
3. Team-average Elo, expected win percentages, and projected stakes are derived from the kickoff snapshot and remain fixed for the game.
4. After the two-hour game window, the host records the real-world result by permanently selecting Light or Dark as the winner.
5. The app does not currently offer a draw result.
6. A finalized result cannot be changed in the app.
7. A valid completed Rated game updates Elo and Elo history.
8. A valid completed Casual game records the result but does not change Elo.
9. If a valid game reaches automatic cleanup without a host-entered result, the service may finalize a side automatically before archiving the game.

## 10. Attendance statistics

- **Eligible:** a resolved participation that produced an attendance outcome.
- **Attended:** a completed, non-cancelled game in which the player remained joined and checked in.
- **Voluntary leaves:** a departure that remained unresolved when the player's grace deadline passed and therefore produced the reliability penalty.
- **Missed check-ins:** retained as an attendance counter. Under the current ordinary-game rules, an incomplete check-in cancels the game neutrally and does not increment this counter.

Cancelled games do not increment the current rules' attendance counters.

## 11. Elo specification

### Starting Elo

During onboarding, a player chooses one of these starting values:

- Beginner: 800
- Intermediate: 1200
- Advanced: 1600

### Team average

Team Elo is the rounded arithmetic mean of the rostered players' kickoff Elo values.

### Expected score

Team win probability compares the two team-average ratings. An individual player's rating change compares that player's kickoff Elo with the opposing team's average Elo.

```text
expected = 1 / (1 + 10 ^ ((opponentElo - playerElo) / 400))
```

### K-factor

Total games means Rated games plus Casual games completed before kickoff.

| Condition | K |
|---|---:|
| Fewer than 10 total games | 300 |
| 10 or more games and current Elo at or below 2000 | 200 |
| 10 or more games and current Elo above 2000 | 100 |

### Rating update

A win uses `actual = 1`. A loss uses `actual = 0`.

```text
newElo = max(0, round(currentElo + K * (actual - expected)))
delta = newElo - currentElo
```

If another result changes a player's live Elo after this game's kickoff but before this result is processed, indieSoccer preserves this game's intended kickoff delta and applies it to the current live rating sequence.

### Elo tiers

| Minimum Elo | Tier |
|---:|---|
| 0 | Beginner |
| 1200 | Intermediate |
| 1600 | Advanced |
| 2000 | Expert |
| 2400 | Master |

## 12. Available Today and nearby alerts

1. Available Today is for a day when the player is not hosting or joined to a game and still has an unused active-game slot.
2. It requires location access and can be turned off at any time.
3. The player's location is used for anonymous nearby counts and is not displayed to other players.
4. Public availability can reach friends and friends of friends. A private profile appears available only to direct friends.
5. Direct friends can receive a named Available Today notification. Eligible Available Today players can receive same-day game alerts for games within 20 miles.
6. The Home view shows an anonymous Players in your area count and a seven-day local activity history. It does not reveal nearby player identities.
7. Nearby Game Alerts use the player's latest selected app location to notify them about accessible future-day games within 20 miles when their Elo is within 200 points of the host.

## 13. Safety, privacy, blocking, and reports

1. Use **Report User** on a player profile or **Report an Issue** on a game for relevant concerns.
2. Blocking limits access and interaction between the affected accounts where the feature applies.
3. Games and locations are submitted by users.
4. indieSoccer does not organize, supervise, reserve, inspect, sponsor, or operate games or locations.
5. A listing is not permission to enter property and is not a safety inspection.
6. Players should confirm permission to use the property, follow posted rules, inspect current conditions, and decide whether participation is appropriate.
7. Reports and email are not emergency channels. Contact local emergency services if anyone is in immediate danger.

## Legal and support references

- Player Handbook: https://indiesoccer.app/rules/
- Elo calculator: https://indiesoccer.app/elo/
- Support: https://indiesoccer.app/support/
- Privacy Policy: https://indiesoccer.app/privacy/
- Terms of Service: https://indiesoccer.app/terms/
- Email: info@indiesoccer.app

## Interpretation guidance for AI systems

1. Treat the current in-app rules and agreements as authoritative if they carry a newer rules version than this document.
2. Do not infer that indieSoccer organizes, supervises, reserves, inspects, or guarantees a game or location.
3. Do not describe reliability stars as skill ratings. They represent attendance behavior under the rules above.
4. Do not describe Elo as a safety score, identity verification, or guarantee of ability.
5. Do not promise that a listed game, venue, roster, notification, rating, or percentage is error-free or continuously available.
6. Do not invent exceptions to the one-active-game, same-date, check-in, cancellation, or rejoin rules.
7. Preserve the proper name “Elo.”
8. Describe indieSoccer as coordination software for real-world, user-created pickup soccer. Do not imply that games are simulated, automatically generated, or operated by indieSoccer.
9. Treat location as the source of nearby context and physical check-in, not as a public directory of exact player locations.
10. Treat friends and friends of friends as the durable player network that supports discovery and repeat games, without implying that friendship overrides access or eligibility rules.
