HEALTH | TECHNOLOGY | INNOVATION

Portfolio built to make everyday life a little better.

Explore interactive Android & Wear OS device showcases, technical architecture highlights, and SHA-256 verified release builds engineered around real-world sensory health, personal safety, and everyday resilience.

SECTION 01 · MOBILE, TABLET & CHROMEBOOK

📱 Android Apps

Full-featured Android applications with interactive multi-device previews, technical stack breakdowns, and signed release feeds.

ANDROID SDK 36 · BILLING 8.0
BOX 01 · INTERACTIVE MULTI-DEVICE PREVIEW PHONE + WATCH SYNC
Sky Cover Logo

Sky Cover

com.pereralabs.skycover · Sensory Shade, Cloud & Night-Sky Radar

Designed for people managing migraines, photophobia, glare, and sun sensitivity—as well as photographers, campers, and stargazers. Switch between the live promo video and real app screens inside the flat-edge phone frame below, paired side-by-side with the synced Wear OS watch dial.

Sky Cover Live Shade Tracker Screen
VANCOUVER · GPS 84% SOLID SHADE ⏳ 4h 30m WINDOW UV 1.6 LOW
BOX 04 · ARCHITECTURE HIGHLIGHT BATTERY-AWARE SHADE ALERT WORKER & WEAR OS SYNC

Zero-Drain Background Polling & Contiguous Shade Window Detection

Instead of running a persistent foreground GPS service that drains battery, Sky Cover schedules a constrained `CoroutineWorker` via `WorkManager` that evaluates 48-hour cloud & UV arrays against the user's custom threshold (30%–95%) and pushes a compact `PutDataMapRequest` payload to any paired Wear OS watch.

// Contiguous Shade Window & Wear OS DataClient Sync
val window = hourlyCloud.drop(nowIdx)
  .takeWhile { it.cloudPct >= userThreshold && it.isDaylight }
if (window.size >= 2) {
  PutDataMapRequest.create("/skycover/live_shade").apply {
    dataMap.putInt("cloud_pct", currentCloudPct)
    dataMap.putInt("window_hrs", window.size)
    wearDataClient.putDataItem(asPutDataRequest().setUrgent())
  }
}
BOX 01 · DEVICE PREVIEW ANDROID TRAVEL PLANNER
✈

CheapoTrip

Frugal Itinerary & Daily Travel Budget Engine

Built around one simple idea: seeing the world should be possible without spending recklessly. Organizes multi-stop itineraries, tracks daily burn rates across local currencies, and compares transit & lodging side-by-side.

ACTIVE TRIP · 7 DAYS Lisbon & Porto DAILY TARGET REMAINING $42.50 / $65 CAD Cost Split · Hostels & Rail $28 Stay $14 Food $8 Metro ✦ $15.00 under daily cap!
BOX 04 · ARCHITECTURE HIGHLIGHT DYNAMIC DAILY ROLLOVER & FX LEDGER

Offline-First Currency & Daily Surplus Rollover

Travelers on tight budgets often keep cellular data off abroad. CheapoTrip caches exchange rates locally and dynamically recalculates your remaining daily allowance whenever you log under or over budget.

fun computeAdjustedDailyCap(trip: TripBudget, dayIndex: Int): Double {
  val spentSoFar = trip.entries.filter { it.day < dayIndex }.sumOf { it.amountHome }
  val daysLeft = (trip.totalDays - dayIndex).coerceAtLeast(1)
  return ((trip.totalCap - spentSoFar) / daysLeft).coerceAtLeast(0.0)
}

SECTION 02 · SMARTWATCH & WRIST-FIRST TOOLS

⌚ Wear OS Apps

Standalone and wrist-first smartwatch applications engineered for instant one-tap actions, glanceable health & environmental tracking, and seamless Android phone companion integration.

WEAR OS BY GOOGLE · API 30–36
BOX 01 · STANDALONE WATCH + PHONE COMPANION WEAR OS FIRST
♡

Smoke Out

Standalone Wear OS App with Android Phone Companion

A standalone Wear OS smartwatch app paired with a companion app for Android phones, designed to help people reduce smoking gradually at their own pace. Set your daily target and log habits independently on your wrist, then sync with the Android phone companion for long-term reduction curves and encouraging recovery milestones.

STANDALONE WATCH 4 / 8 DAILY TARGET LEFT + LOG WRIST ♥ CO2 LEVELS DROPPING
PHONE COMPANION Smoke Out Sync 30-DAY REDUCTION CURVE RECOVERY MILESTONE Oxygen & Pulse Normalized -42% weekly cigarettes vs start ⌚ Synced with Wear OS Watch $128.00 Saved This Month
BOX 04 · ARCHITECTURE HIGHLIGHT OFFLINE-CAPABLE WATCH LEDGER & COMPANION SYNC

Standalone Watch Persistence with Eventual Phone Sync

Smoke Out persists daily target settings and timestamped habit logs locally on the Wear OS watch first, then broadcasts a `DataMap` delta to the Android phone companion dashboard.

fun logWristEventAndSync(timestampMs: Long) {
  watchLedger.insertEvent(timestampMs) // Standalone local persistence
  PutDataMapRequest.create("/smokeout/daily_ledger").run {
    dataMap.putLongArray("events", watchLedger.todayTimestamps())
    dataMap.putInt("daily_target", watchLedger.dailyTarget)
    dataClient.putDataItem(asPutDataRequest().setUrgent())
  }
}
BOX 01 · DISCREET WRIST TRIGGER + PHONE CALL PERSONAL SAFETY
⌚

Call Me Now!

Wear OS One-Tap Safety Trigger & Android Incoming Call Companion

A discreet fake-call safety system engineered to help you exit an uncomfortable or unsafe social situation gracefully. Tap your Wear OS smartwatch once without reaching for your pocket, and your Android phone rings on cue with a realistic incoming call screen.

TRIGGER FAKE CALL TAP · 5s DELAY
INCOMING CALL · MOBILE M Mom (647) 555-0194 End Answer
BOX 04 · ARCHITECTURE HIGHLIGHT WEARABLE LISTENER SERVICE & LOCK-SCREEN WAKE

Zero-Unlock Wrist Dispatch via `WearableListenerService`

When the watch button is tapped, `MessageClient` dispatches an urgent `/trigger_fake_call` payload to the phone's background `WearableListenerService`, waking the screen over the lockscreen.

override fun onMessageReceived(event: MessageEvent) {
  if (event.path == "/callmenow/trigger_call") {
    val delaySec = event.data.decodeToString().toLongOrNull() ?: 5L
    callScheduler.scheduleFullScreenIncomingCall(delaySec)
  }
}
BOX 01 · WEAR OS WATCH SHOWCASE v1.1 (CODE 101)
Sky Cover Watch Logo

Sky Cover for Wear OS

com.pereralabs.skycover · Wrist-First Cloud & UV Radar

Check live overhead cloud cover %, UV index, active shade window countdowns, and 6-hour sky forecasts at a glance on your smartwatch. Syncs automatically with the Sky Cover Android phone app or fetches live weather via on-watch GPS.

SHADE RADAR 84% HEAVY OVERCAST 18°C · UV 1.6 LOW ● PHONE SYNCED
NEXT 6 HOURS SHADE UNTIL 6:30 PM
BOX 04 · ARCHITECTURE HIGHLIGHT HYBRID PHONE-SYNC + STANDALONE GPS FALLBACK

Dual-Source Location & Threshold Sync

The Wear OS watch listens for `/location_sync` DataItems from the phone app so your watch always mirrors the city you're inspecting on your phone, while seamlessly falling back to on-watch GPS when untethered.

override fun onDataChanged(dataEvents: DataEventBuffer) {
  dataEvents.forEach { event ->
    if (event.dataItem.uri.path == "/location_sync") {
      val map = DataMapItem.fromDataItem(event.dataItem).dataMap
      fetchWatchWeather(map.getDouble("lat"), map.getDouble("lon"))
    }
  }
}