# cmulhollandd/tap-ios architecture

> Architecture diagram of the GitHub repository cmulhollandd/tap-ios, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cmulhollandd/tap-ios
- Repository: https://github.com/cmulhollandd/tap-ios

## Overview

Tap-iOS appears to be a social app centered on discovering and reviewing fountains, with user profiles, posts, and a leaderboard. The visible workflows include signing in, exploring nearby fountains on a map and opening their details, and creating posts or following users. The tree contains only selected view controllers and dependency sources, and the README is empty; several stores and API implementations are not present, so their internal wiring is intentionally left unspecified. The map-to-detail handoff and sampled API calls are shown where supported.

Main entry points: [`Tap-iOS/View Controllers/FountainVCs/MapViewController.swift`](https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/FountainVCs/MapViewController.swift) (Fountain map), [`Tap-iOS/View Controllers/OnboardingVCs/LoginViewController.swift`](https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/OnboardingVCs/LoginViewController.swift) (Login), [`Tap-iOS/View Controllers/LeaderboardViewController.swift`](https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/LeaderboardViewController.swift) (Leaderboard), [`Tap-iOS/View Controllers/ProfileVCs/UserProfileViewController.swift`](https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/ProfileVCs/UserProfileViewController.swift) (User profile)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_account["Accounts"]
  node_login["Login"]
  node_account_api["Accounts API"]
end

subgraph group_fountain["Fountain discovery"]
  node_map["Fountain map"]
  node_fountain_detail["Fountain details"]
  node_user_fountains["User fountains"]
  node_fountain_store["Fountain data"]
end

subgraph group_social["Social features"]
  node_profile["User profile"]
  node_new_post["Compose post"]
  node_leaderboard["Leaderboard"]
  node_social_api["Social API"]
  node_leaderboard_store["Leaderboard data"]
  node_feed_store["Feed data"]
end

subgraph group_dependencies["External dependencies"]
  node_keychain[("Credential keychain")]
  node_location(("Device location"))
  node_floating_panel["Floating panel<br/>[Controller.swift]"]
end

node_user(("App user"))
node_backend[("App backend")]

node_user -->|"enters credentials"| node_login
node_login -->|"authenticates"| node_account_api
node_login -.->|"reads/writes credentials"| node_keychain
node_map -->|"requests location"| node_location
node_map -->|"loads nearby fountains"| node_fountain_store
node_map -->|"sets selected fountain"| node_fountain_detail
node_map -->|"presents details"| node_floating_panel
node_fountain_detail -->|"changes panel state"| node_floating_panel
node_user_fountains -->|"loads user fountains"| node_fountain_store
node_user -->|"composes post"| node_new_post
node_new_post -->|"submits post"| node_feed_store
node_user -->|"views profile"| node_profile
node_profile -->|"loads posts and follows"| node_social_api
node_user -->|"views leaderboard"| node_leaderboard
node_leaderboard -->|"reloads rankings"| node_leaderboard_store
node_leaderboard -->|"opens selected user"| node_profile
node_account_api -->|"sends account requests"| node_backend
node_social_api -->|"sends social requests"| node_backend

click node_login "https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/OnboardingVCs/LoginViewController.swift"
click node_map "https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/FountainVCs/MapViewController.swift"
click node_fountain_detail "https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/FountainVCs/FountainDetailViewController.swift"
click node_user_fountains "https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/ProfileVCs/UserFountainsViewController.swift"
click node_fountain_store "https://github.com/cmulhollandd/tap-ios/tree/main/Tap-iOS"
click node_floating_panel "https://github.com/cmulhollandd/tap-ios/blob/main/Pods/FloatingPanel/Sources/Controller.swift"
click node_profile "https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/ProfileVCs/UserProfileViewController.swift"
click node_new_post "https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/SocialVCs/NewPostViewController.swift"
click node_leaderboard "https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/LeaderboardViewController.swift"
click node_leaderboard_store "https://github.com/cmulhollandd/tap-ios/tree/main/Tap-iOS"
click node_feed_store "https://github.com/cmulhollandd/tap-ios/tree/main/Tap-iOS"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_login,node_account_api,node_user toneBlue
class node_map,node_fountain_detail,node_user_fountains,node_fountain_store,node_backend toneAmber
class node_profile,node_new_post,node_leaderboard,node_social_api,node_leaderboard_store,node_feed_store toneMint
class node_keychain,node_location,node_floating_panel toneRose
```

## Components

### Accounts

- [Login](https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/OnboardingVCs/LoginViewController.swift): `Tap-iOS/View Controllers/OnboardingVCs/LoginViewController.swift`
- **Accounts API**

### Fountain discovery

- [Fountain map](https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/FountainVCs/MapViewController.swift): `Tap-iOS/View Controllers/FountainVCs/MapViewController.swift`
- [Fountain details](https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/FountainVCs/FountainDetailViewController.swift): `Tap-iOS/View Controllers/FountainVCs/FountainDetailViewController.swift`
- [User fountains](https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/ProfileVCs/UserFountainsViewController.swift): `Tap-iOS/View Controllers/ProfileVCs/UserFountainsViewController.swift`
- [Fountain data](https://github.com/cmulhollandd/tap-ios/tree/main/Tap-iOS): `Tap-iOS`

### Social features

- [User profile](https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/ProfileVCs/UserProfileViewController.swift): `Tap-iOS/View Controllers/ProfileVCs/UserProfileViewController.swift`
- [Compose post](https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/SocialVCs/NewPostViewController.swift): `Tap-iOS/View Controllers/SocialVCs/NewPostViewController.swift`
- [Leaderboard](https://github.com/cmulhollandd/tap-ios/blob/main/Tap-iOS/View%20Controllers/LeaderboardViewController.swift): `Tap-iOS/View Controllers/LeaderboardViewController.swift`
- **Social API**
- [Leaderboard data](https://github.com/cmulhollandd/tap-ios/tree/main/Tap-iOS): `Tap-iOS`
- [Feed data](https://github.com/cmulhollandd/tap-ios/tree/main/Tap-iOS): `Tap-iOS`

### External dependencies

- **Credential keychain**
- **Device location**
- [Floating panel](https://github.com/cmulhollandd/tap-ios/blob/main/Pods/FloatingPanel/Sources/Controller.swift): `Pods/FloatingPanel/Sources/Controller.swift`

### Other components

- **App user**
- **App backend**

## Connections

- App user → Login: enters credentials
- Login → Accounts API: authenticates
- Login → Credential keychain: reads/writes credentials
- Fountain map → Device location: requests location
- Fountain map → Fountain data: loads nearby fountains
- Fountain map → Fountain details: sets selected fountain
- Fountain map → Floating panel: presents details
- Fountain details → Floating panel: changes panel state
- User fountains → Fountain data: loads user fountains
- App user → Compose post: composes post
- Compose post → Feed data: submits post
- App user → User profile: views profile
- User profile → Social API: loads posts and follows
- App user → Leaderboard: views leaderboard
- Leaderboard → Leaderboard data: reloads rankings
- Leaderboard → User profile: opens selected user
- Accounts API → App backend: sends account requests
- Social API → App backend: sends social requests
