Bus Times: Dublin & Ireland
Horários de transporte público da Irlanda em tempo real
Um companheiro não-oficial para ônibus, tram e trem na Irlanda. Ele responde a uma única pergunta — corro ou dá tempo? — e precisa acertar, então separa com clareza o que é tempo real do que é horário programado.
- Expo
- React Native
- TypeScript
- Cloudflare Workers
- R2
- SwiftUI
- WidgetKit
- GitHub Actions
A pilha inteira, não só o app
Um pipeline em Node transforma o feed GTFS nacional de 250 MB em cerca de 10.200 arquivos JSON por parada no Cloudflare R2. Um Worker serve esses dados, consulta o feed GTFS-Realtime por cron e mantém caches LRU, kill switches e limite de requisições por IP.
26–33% de erro 503, medido e resolvido
Requisições em lote para ~20 paradas de Cork estouravam o limite de 10 ms de CPU do Worker em isolate frio. Dividir em blocos de oito deu a cada um seu próprio orçamento, e o Promise.allSettled fez um bloco com falha custar oito paradas em vez da lista toda. A taxa de falha foi a zero.
Um widget que se atualiza com o app fechado
Horário programado é determinístico — só o atraso ao vivo varia. Então, em vez de tentar acordar o widget, ele empurra uma timeline de 12 entradas cobrindo uma hora e deixa o iOS percorrer, cada entrada recalculando a partir do horário absoluto.
App nativo de Apple Watch em SwiftUI
O relógio espelha por WatchConnectivity o dado que o telefone já buscou, então não custa nada a mais no backend. Os payloads são deduplicados antes do envio porque a cota da complication é de cerca de cinquenta transferências por dia.
CI que se conserta sozinho
O feed nacional rotaciona os IDs de viagem periodicamente, o que quebrava o tempo real em silêncio. Um workflow agendado tira o fingerprint do trips.txt e só reconstrói quando ele realmente muda.








