Andre Oleari
Open to work

Software Engineer — MobileCork, Ireland

I ship mobile apps end to end.

React Native and Expo, but rarely only that. My last project needed a data pipeline, a serverless backend, iOS widgets and a native Apple Watch app — so I built those too. Three of my own apps are live on the App Store.

03
Apps published on my own account
11
Languages shipped in a single app
2022
Building mobile since
01

Selected work

Three apps I designed, built and published on my own developer account.

Each one solves a different technical problem — that is why these three.

  • Nearby stops with live departure times
  • Map showing stops and live vehicle positions
  • Home Screen widgets showing the next departures
012026

Bus Times: Dublin & Ireland

Live public transport departures for Ireland

An unofficial companion for Irish bus, tram and rail. It answers one question — do I run or do I have time? — and it has to be right, so it distinguishes clearly between real-time and scheduled departures.

  • Expo
  • React Native
  • TypeScript
  • Cloudflare Workers
  • R2
  • SwiftUI
  • WidgetKit
  • GitHub Actions
  • The whole stack, not just the app

    A Node pipeline turns the 250 MB national GTFS feed into roughly 10,200 per-stop JSON files in Cloudflare R2. A Worker serves them, polls the GTFS-Realtime feed on a cron, and holds LRU caches, kill switches and a per-IP rate limit.

  • A 503 rate of 26–33%, measured and fixed

    Batch requests for ~20 Cork stops blew the Worker's 10 ms CPU budget on a cold isolate. Splitting into chunks of eight gave each its own budget, and Promise.allSettled meant one bad chunk cost eight stops instead of the whole list. Failure rate went to zero.

  • A widget that updates itself while the app is closed

    Scheduled departure times are deterministic — only the live delay drifts. So instead of trying to wake the widget, it pushes a 12-entry timeline covering an hour and lets iOS walk it, each entry recomputing from the absolute due time.

  • Native Apple Watch app in SwiftUI

    The watch mirrors data the phone already fetched over WatchConnectivity, so it costs nothing extra on the backend. Payloads are deduplicated before transfer because the complication quota is about fifty pushes a day.

  • CI that repairs itself

    The national feed rotates trip IDs periodically, which silently broke real-time matching. A scheduled workflow fingerprints trips.txt and rebuilds only when it actually changes.

  • Landscape scoreboard during a match
  • Tournament setup with sport, format and timing options
  • Automatically generated group standings
022025—2026

Scoreboard – Tournament Track

Scorekeeper, bracket maker and tournament manager

A digital scoreboard for amateur sport that grew into a tournament manager. Phone flat on the table in landscape, big readable numbers — and behind that, a full competition engine.

  • Expo
  • React Native
  • TypeScript
  • Firebase Remote Config
  • RevenueCat
  • expo-print
  • Tournament engine driven by data, not branches

    Group stages, round-robin and knockout brackets, with standings and tiebreak ordering defined per sport as data. Those rules can be overridden through Firebase Remote Config, so a scoring rule changes without shipping a build. I later pulled the core out into a standalone, dependency-free TypeScript library, covered by 100 tests.

  • A match state machine that has to survive edge cases

    One timer loop resolves the cascade: period ends, is it the last, is it a draw, is there extra time, are there penalties, is it sudden death. Overtime and shootout carry their own parallel state.

  • Offline-first with self-healing storage

    Everything lives in AsyncStorage — no backend for data. Loading a saved match validates it: if it claims to belong to a tournament but has no tournament ID, it is demoted to a casual match instead of crashing.

  • Entitlement logic that respects the user

    Subscription plus two one-time purchases. A cancelled trial loses access immediately, but someone who paid and then cancelled keeps it until the period actually ends. The gate is fail-closed, so a missing config flag never hides the paywall.

  • Guest list with live attendance counters
  • Live check-in marking guests as present
  • Receptionist team management
032024—2026

Lista Virtual — Guest List

Guest list, RSVP and live check-in for events

Event organisers still run the door off a printed spreadsheet. This replaces it: import the guest list, send RSVP invitations, and have receptionists check people in at the door — including when the venue has no signal.

  • Expo
  • React Native
  • TypeScript
  • Firebase
  • Cloud Functions
  • Firestore
  • RevenueCat
  • QR check-in that works with no connection

    A compact custom payload encodes event and guest, and the scanner resolves it against the list already in memory. No network round-trip, which is the entire point in a function room with no coverage.

  • Three session modes, one codebase

    Local with no account at all, signed-in with Firestore realtime sync, and a receptionist mode that logs in with an access code and never touches the owner's account. Creating an account migrates local data up in batched writes.

  • Reports the client can hand over

    PDF and Excel exports generated on device, with optional white-label branding for the organiser's own client. The logo stays local by design and never leaves the phone.

  • Invitations with single-use tokens

    Cloud Functions issue opaque, single-use RSVP tokens with rate limiting and an audit trail, so a forwarded invite link cannot be replayed.

02

Experience

From IT support in Brazil to shipping mobile products from Ireland.

  1. Software Engineer — Mobile · Pixel Logic Apps

    Nov 2024 — Jul 2026 / Remote

    • Shipped cross-platform apps in React Native, Expo and TypeScript on a shared architecture, from first commit through to App Store and Google Play release.
    • Contributed to more than thirty apps across the studio catalogue, as lead developer on over a dozen of them.
    • Worked across Firebase integrations, REST flows, real-time sync, ad placement and subscription billing with RevenueCat.
    • Helped shape the studio's shared Expo library — proposing features and diagnosing bugs that only surfaced from running it across the whole catalogue.
    • Localised apps and their store listings into as many as eleven languages.

    Apps I worked on there

    • Bobbie Goodscolouring app built on Skia
    • We Are Not Really Strangersconversation card game
    • Versículo do Diadaily scripture with scheduled notifications
    • LoteriasBrazilian lottery results from public data
    • Omnia ModelAI video generation
    • Glassify WidgetsiOS home screen widgets
  2. Mobile Engineer · Freelance

    Jan 2022 — Present / Brazil / Remote

    • Designed, built and published my own apps across event management, sport, public data and public transport.
    • Built the lightweight backends they needed — Node.js, PHP and Firebase Cloud Functions against Firestore and third-party APIs.
  3. Mobile Application Developer · Starta Solutions

    Nov 2022 — Jan 2023 / Brazil

    • Built offline-first authentication and data synchronisation modules in React Native against REST APIs backed by Node.js and MySQL.

Before moving into development full time, I spent two years in IT support in Brazil — corporate networks, workstations, permissions and remote assistance at Carajás Ambientes Planejados and Tecsil. It is where I learned to debug something I did not build.

03

About

Short version

I am a mobile software engineer based in Cork. I work mainly in React Native and Expo, and I like the parts of the job that sit either side of the app — where the data comes from, and how it gets to the store.

That tends to show up in what I build. Bus Times needed a GTFS pipeline and a Cloudflare Worker before it needed a screen. Scoreboard needed a tournament engine before it needed a scoreboard. I would rather understand the problem properly than reach for a library.

I read and write code in English and Portuguese, and I have shipped apps localised into up to eleven languages.

Tools I reach for

Mobile

  • React Native
  • Expo
  • expo-router
  • TypeScript
  • SwiftUI
  • WidgetKit

Backend & data

  • Cloudflare Workers
  • R2
  • Firebase
  • Firestore
  • Cloud Functions
  • Node.js
  • REST

Release & ops

  • EAS Build
  • Fastlane
  • GitHub Actions
  • RevenueCat
  • AdMob
  • Remote Config
04

Get in touch

Open to mobile engineering roles in Ireland and remote.

The fastest way to reach me is email. I read everything, and I reply.

Email me
LinkedIn
andre-oleari