Eric Harris Back to portfolio

Native Android application · Complete v1.0.0

ApplyWindow

An Android execution cockpit for staging and completing time-sensitive workflows from a phone, with its first use case focused on competitive, time-boxed application windows.

Platform: Android 8.0+ Language: Kotlin License: MIT Status: Shipped v1.0.0
Kotlin Jetpack Compose Material 3 Room AlarmManager WebView

Overview

Calm execution under a closing window

ApplyWindow turns high-pressure, time-boxed submission workflows into a calm, staged routine. The first implementation targets competitive hiring windows, but the underlying pattern is broader: prepare the inputs, schedule the window, keep the operator oriented, and preserve evidence of the action taken.

Built with Jetpack Compose and Material 3 on a local-first Room database, it schedules exact-alarm reminders, then presents a one-handed execution cockpit that pairs a live portal WebView with instant access to prepared responses, reference details, supporting attachments, and a readiness checklist.

An optional Gemini screenshot import extracts posting details for review. It is deliberately not a bot: no auto-submission, no autofill, no CAPTCHA handling, no password storage - the human reads, decides, and presses the real submit button.

What it does

Highlights

Local-first, no backend

Room plus Kotlin Flow - no account, no server, no analytics. Every piece of data stays on the device.

Exact-alarm reliability

Schedules T‑15 / T‑5 / T‑0 alerts, detects when Android downgrades alarm precision, and surfaces an exact/fallback indicator with a reboot-aware rescheduler.

Split-screen execution mode

A live target-portal WebView over an always-visible cockpit - responses, documents, and checklist - built for one-handed execution under time pressure.

Human-in-the-loop by design

Explicit safety boundaries: no auto-submit, no autofill, no CAPTCHA bypass, no password storage, no scraping.

Optional AI import

Gemini Vision extracts job-posting fields from a screenshot into a reviewable draft (never auto-applied). The user supplies their own API key, stored encrypted on device.

Spec-driven, reproducible

Developed from a detailed written specification through a sequenced, multi-model process, with GitHub Actions building and publishing the release.

Where the line is drawn

Deliberately not a bot

The hard part of a time-boxed workflow isn’t clicking - it’s being ready, oriented, and on time. ApplyWindow removes the scramble without ever removing the human. It stages, reminds, and organizes; the person still reads, decides, and submits. By design, it does not:

  • auto-submit
  • autofill forms
  • bypass CAPTCHAs
  • store passwords
  • scrape portals

How it was built

Specification-first, multi-model

ApplyWindow was built spec-first: a detailed written specification defined the behavior, acceptance criteria, and test checklist up front, and the app was implemented through a sequenced, multi-model process with that checklist as the definition of done. It exercises the harder edges of Android on purpose - the exact-alarm permission model, the Storage Access Framework with persistable URI permissions, edge-to-edge insets, and orientation-lock to protect an in-progress WebView session.

Every push runs GitHub Actions CI, and tagging a version builds and publishes a downloadable release - so the build is reproducible rather than a one-off on my machine.

Under the hood

Build facts

Platform
Android 8.0+ (API 26+)
Language
Kotlin - 23 source files, single-activity Compose architecture
Toolchain
AGP 8.6.1 · Gradle 8.7 · Kotlin 2.0.20 · Compose BOM 2024.09.01 · Room 2.6.1
SDK
minSdk 26 · target SDK 35
Network
WebView (application portals) and the optional screenshot-import call only - no backend, no analytics
Distribution
v1.0.0 release · debug APK (~18 MB), SHA-256 published in the repo’s build-verification doc
License
MIT

Take a look

The full source, docs, and a downloadable build are public.