pull down to refresh

Do relays have to be running a bitchat app in the background to act as relays?
IIRC relays must have the app running. The code below explains how relalys forward messages through the mesh network:
// From the message handling code:
// Relay broadcast messages
var relayPacket = packet
relayPacket.ttl -= 1
if relayPacket.ttl > 0 {
    // Probabilistic flooding with smart relay decisions
    let relayProb = self.adaptiveRelayProbability
    
    // Always relay if TTL is high (fresh messages need to spread)
    // or if we have few peers (ensure coverage in sparse networks)  
    let shouldRelay = relayPacket.ttl >= 4 || 
                     self.activePeers.count <= 3 ||
                     Double.random(in: 0...1) < relayProb
    
    if shouldRelay {
        // Add random delay to prevent collision storms
        let delay = Double.random(in: minMessageDelay...maxMessageDelay)
        DispatchQueue.main.asyncAfter(deadline: .now() + delay) { [weak self] in
            self?.broadcastPacket(relayPacket)
        }
    }
}
If so, this relies upon network effect of people joining the network to help it expand
Yes, but I think it's a different kind of network effect. Traditional messaging apps need millions of users everywhere. BitChat just needs the people around you to have it when you actually need it (protests, disasters, events, conferences, ...)