Project Info
🌱
Inspiration
Stepli started with my mother. I saw how easily everyday phone tasks can become frustrating when an app feels unfamiliar. My mother, like many older adults, sometimes needs help ordering food, booking a ride via Uber, sending a WhatsApp message, posting on Instagram, or finding a video on YouTube. The problem isn't intelligence. It's digital confidence. I wanted to build something that feels like a patient person sitting beside her. Something calm, clear, bilingual, and never in a hurry. Stepli explains one step at a time so people can learn how to complete tasks on their own instead of relying on someone else for every small thing. Why this matters in Pakistan Stepli is especially meaningful to me because digital access, literacy, language, and confidence are not the same for everyone in Pakistan. Pakistan's 2024 to 2025 Household Integrated Economic Survey reports a 63% literacy rate for people aged 10 and above. The gap is still significant. Literacy is 73% for men and 54% for women, while urban literacy is 74% compared with 55% in rural areas. Provincial rates also vary, ranging from 68% in Punjab to 49% in Balochistan. Source: Pakistan Bureau of Statistics, HIES 2024–25 Digital access is also uneven. The same survey reports that only 50% of people own a mobile phone. Ownership is 69% for men and 39% for women, with another gap between urban (58%) and rural (44%) communities. Internet usage is also lower in rural areas at 49%, compared with 69% in urban areas. Source: Pakistan Bureau of Statistics, HIES Not everyone is comfortable using English language apps, unfamiliar icons, or complicated digital flows. Stepli is my attempt to make everyday technology easier to understand with simple Urdu and English guidance, voice support, and calm step by step instructions. ✨
What it does
Stepli is a bilingual Android accessibility companion that helps people complete unfamiliar tasks in other apps, one calm step at a time. It is not limited to Foodpanda. Ordering food is just one guide. Stepli is built to support as many guides as needed across different apps and everyday tasks. Stepli also lets users create their own guides for other apps and tasks. They can record step by step instructions, add descriptions, then publish those guides so other Stepli users can discover and use them. The current built in guides include: Ordering food with Foodpanda Posting a photo on Instagram Sharing an Instagram Story Sending a WhatsApp message Searching for a video on YouTube When a guide starts, Stepli opens the selected app and shows a soft, movable instruction card on top of it. It explains the current step and highlights the next likely button or field whenever it finds it. The user always stays in control. Stepli never taps, types, scrolls, sends messages, chooses payment methods, or places orders. If voice guidance is enabled, users can press Read this step to hear the instruction again. The instruction card can be moved, minimized into a small floating bubble, or closed whenever the user wants. Every step can be confirmed manually if an app screen looks different. Users can choose either English or Urdu. I intentionally kept the interface gentle and easy to understand, with large readable text, friendly colors, clear buttons, and a small Stepli mascot so it feels supportive instead of technical. 🛠️ How I built it I built Stepli using React Native, TypeScript, Kotlin, and Android accessibility tools. React Native powers the main app experience, including onboarding, language selection, permission education, settings, guide browsing, voice tours, guide creation, and completion screens. I designed the interface to feel calm and beginner friendly, with separate English and Urdu content throughout the app. The guide system is completely data driven. Every guide contains an ordered list of steps with: Instruction text Confirmation text Optional voice narration Lightweight matchers for visible labels, content descriptions, or resource IDs The Android package name of the selected app Because of this structure, I can add new guides without changing or rebuilding the core application. On the Android side, I built a Kotlin AccessibilityService that watches only the app selected by the active guide. When it finds the expected control, it draws a visual highlight around it. I also created a native floating overlay using Android's WindowManager, allowing Stepli to stay visible while users interact with another app. I added English and Urdu text to speech support, including guidance for devices where Urdu voice data is not installed. I also built the foundation for user created guides so Stepli can continue growing into a larger library of helpful walkthroughs. Codex helped me throughout development by refining the user flow, connecting React Native with Kotlin, structuring the guide system, and improving the accessibility and privacy experience. I worked with Codex across multiple chats, using it like a team of specialists to solve different parts of the project instead of keeping everything in a single conversation. ⚡ Challenges I ran into One of the biggest challenges was creating guidance without taking control away from the user. For sensitive tasks involving payments, addresses, messages, and orders, I never wanted Stepli to perform actions on someone's behalf. Instead, I designed it as a teaching and support tool rather than an automation tool. Another challenge was building an overlay that stays above another app without blocking user interaction. I solved this by separating the instruction card from the highlight layer. The highlight layer does not receive touch events, so users can continue interacting naturally with the app underneath. Apps also change depending on the country, app version, promotions, and individual user accounts. For example, Foodpanda may display different location or promotion screens. To handle this, I added multiple possible UI matchers along with manual confirmation buttons for every step. Supporting Urdu involved much more than translating text. I had to think about readability, natural wording, right to left layouts, and Android text to speech support. Some devices, especially those using Samsung Text to Speech, do not include an Urdu voice by default, so I added guidance for switching to Google Text to Speech. My original vision was an LLM powered screen analyzer and assistant that could understand any app screen dynamically. Unfortunately, I could not continue with the LLM or agent based approach because I did not have access to the required OpenAI API keys and runtime support. Instead of giving up on the idea, I built the current manual, data driven guide system. It already provides reliable bilingual step by step guidance for real everyday tasks. The GPT 5.6 powered version is still something I want to build in the future, but it is not part of this submission. The submitted app does not use GPT 5.6 or any other runtime LLM. 🏆 Accomplishments I'm proud of I'm proud that Stepli became more than just an idea. It is a working Android accessibility experience built to help people with real everyday tasks. Some of the things I'm most proud of are: Building a complete bilingual English and Urdu experience. Creating guides for multiple apps instead of only Foodpanda. Designing a data driven system that can easily grow with new apps and workflows. Building a native Android overlay that stays visible above other apps. Creating a visual highlighting system without blocking user interaction. Adding voice guidance along with a Read this step replay feature. Keeping Stepli privacy conscious and read only. Designing a gentle interface for people with low digital confidence. Making sure users stay in control of every important decision. More than anything else, I'm proud that I built something that could genuinely help my mother, and people like her, feel more confident and independent while using technology. How Codex helped I was already familiar with React Native, but Kotlin and Android Accessibility Services were new to me. Codex helped me understand and work with these areas while building Stepli, including the accessibility service, floating overlay, permission flow, and touch-through visual highlights. It also supported me with the bilingual English and Urdu experience, Supabase community-guide flow, Android troubleshooting, and making the app easier for beginners to use. 📚 What I learned This project taught me that accessibility is about much more than making a feature work. It is also about confidence, trust, dignity, language, and giving people enough time to understand what they are doing. I learned how to connect a React Native app with Kotlin based Android code, build an AccessibilityService, manage Android overlays with WindowManager, create non blocking visual highlights, and send native accessibility events back to the React Native interface. I also learned that multilingual accessibility requires thoughtful design. Simply translating text is not enough. Instructions need to sound natural, reassuring, short, and easy to understand in the user's preferred language. Most importantly, I learned that helping someone does not always mean doing the task for them. Sometimes the best support is simply giving them the confidence and guidance to do it themselves. 🚀
What's next
Stepli is designed to keep growing. I plan to add more guides for everyday tasks, including: Booking rides Paying utility bills Shopping online Booking hospital appointments Using government service apps Learning more social media actions I also want to improve Urdu voice support, add more languages, test the app with more older adults, and make the interface even more accessible for people with low vision or limited digital confidence. In the future, once I have the right API access, privacy safeguards, and clear user consent, I want to revisit my original idea of building an LLM-powered screen understanding agent that can understand what's on a user's screen and provide contextual assistance. That would allow Stepli to adapt to changing app screens and guide users through an even wider range of apps while always keeping the user in control.
Stepli
A gentle, bilingual Android guide that helps people complete a task in an unfamiliar app—one tap at a time, while they remain in control.
Suggested submission category: Accessibility & Inclusion (or the closest matching category in the challenge form).
Stepli is an Android accessibility companion designed for people who feel less confident using everyday digital services. It includes bilingual guides for Foodpanda, Instagram, WhatsApp, and YouTube, and its data-driven guide model can support many more apps and tasks. Rather than taking over a task, Stepli opens the chosen app, displays a small movable instruction card over it, highlights the next relevant control when it can find it, and lets the person confirm each step themselves. People can also create reusable guides for other installed apps.
Built with Codex and GPT-5.6
I used Codex and GPT-5.6 as development collaborators while building Stepli. They helped me move from my React Native experience into unfamiliar Kotlin and Android Accessibility Service work, refine the permission and overlay flow, connect native Android features to the TypeScript app, structure the guide and Supabase flows, and troubleshoot the real-device build.
Codex and GPT-5.6 supported the development process; they are not runtime features of the submitted app. Stepli's current guidance remains curated and data-driven, with no runtime LLM or API calls.
The idea
Many apps assume that everyone is comfortable with search, checkout, addresses, delivery options, and payment screens. Stepli turns a potentially intimidating flow into calm, plain-language guidance. The user chooses a language, grants only the permissions required for visual guidance, then follows a short sequence of instructions at their own pace.
Foodpanda ordering is one practical use case: its guide covers location setup, search, selecting a restaurant and dish, cart review, address, delivery, payment, and final order review. The current guide library also includes Instagram posting and Stories, WhatsApp messaging, and YouTube search.
Setup and run
git clone <your-repository-url>
cd Stepli
npm ci
Start Metro in one terminal:
npm start
In a second terminal, with an Android device connected or an emulator running:
npm run android
First-run permissions
- In Stepli, tap Allow overlay and enable Display over other apps for Stepli.
- Tap Open accessibility settings. If Android blocks Stepli screen guidance because the APK was installed outside Google Play, open Settings → Apps → Stepli → three dots → Allow restricted settings, then return to Accessibility settings.
- Choose Stepli screen guidance and enable it.
- Return to Stepli; both permission indicators should show a check mark.
- Select a language, finish onboarding, and tap Order food with Foodpanda.
The accessibility service is read-only: Stepli does not tap, type, scroll, or submit anything on the user's behalf.
When a guide is active, drag the guidance card using its ⠿ handle if it covers the screen. Tap × to hide the card while keeping the Stepli bubble available; tap the bubble again to reopen it.
Debug APK security check
When installing a locally built debug APK on a physical phone, Google Play Protect may ask to scan the app or show a warning because it was not installed from the Play Store. Prefer scanning the app first. If it blocks your own test build, temporarily turn off scanning on that test device:
- Open the Google Play Store.
- Tap your profile picture, then Play Protect → Settings.
- Turn off Scan apps with Play Protect.
- Install the debug APK, then turn scanning back on immediately afterwards.
This is only for local development testing. Keep Play Protect enabled for normal use and for any app you did not build yourself. Google's Play Protect instructions explain the same setting.
Debug APK versus release APK
An app-release.apk runs on its own after installation. An app-debug.apk is for development and needs Metro running on the development computer. If a debug APK shows Unable to load script, connect the phone by USB and run:
npm start
adb reverse tcp:8081 tcp:8081
Then reopen Stepli on the phone.
The story behind Stepli
I built Stepli after seeing my mother, and other older family members, ask younger relatives to order food, book a ride, send a message, or complete other everyday phone tasks. The need is not about intelligence; it is about digital confidence. Stepli is intended to make those moments less dependent on a nearby family member and help people complete the next task independently.
Version 1: the original LLM idea - planned for the future
The first version of the idea was an LLM-powered screen analyser and assistant. It would understand the current app screen and generate context-aware, conversational guidance instead of relying on a fixed sequence of instructions.
I could not continue with the LLM-powered or agent-based version because I did not have access to the required OpenAI API keys. Rather than give up on Stepli, I built the current manual, data-driven guide system instead. The GPT-5.6-powered idea is still in progress, but it is not included in this submission: the submitted app does not call GPT-5.6 or any other runtime LLM. I plan to return to it later with suitable API access, privacy safeguards, and user consent.
The submitted build
The master branch contains the submitted implementation: curated, data-driven bilingual guides, supported by Android accessibility hints and a floating guidance card. It currently includes Foodpanda, Instagram, WhatsApp, and YouTube workflows, and it can be extended with as many additional guides as needed.
The current version gives people calm, one-step-at-a-time guidance, optional highlights, and manual control for real tasks today. Its guide model is data-driven, so I can add more apps and workflows without changing the core guidance experience.
Future direction
With appropriate production API access, privacy safeguards, and user consent, Stepli can return to its original dynamic screen-understanding approach. That would make it possible to guide people through more services - including booking rides, shopping and paying bills, government services, and hospital appointments - without writing a completely separate fixed flow for every screen. Future expansion also includes more languages, trusted family/community-created guides, and support for additional everyday apps.
What Stepli does—and does not do
- Guides the user in English or Urdu.
- Opens a tutorial's selected app and shows a movable, non-blocking instruction card above it.
- Reads only the selected app's accessibility tree while a guide is active, to locate the next suggested UI element and draw a highlight ring around it.
- Narrates each instruction on Android when Voice guidance is enabled, with a replay button.
- Lets a person close the navigator completely at any time; this removes the card, bubble, highlight, active guide, and speech.
- Lets the user manually confirm a step when Foodpanda's interface differs from the expected screen.
- Never taps, types, selects a payment method, or places an order for the user.
- Does not store screenshots, typed text, coordinates, or accessibility-tree dumps.
How it works
- The user selects English or Urdu and completes Stepli's short onboarding.
- The app asks for Android's Display over other apps permission so its guidance card can appear above another app.
- The user enables the Stepli screen guidance accessibility service. The service observes only the package selected by the currently active tutorial.
- Selecting Order food with Foodpanda launches Foodpanda and starts the built-in, data-driven tutorial.
- Stepli observes the allowed accessibility events, looks for lightweight text, content-description, or resource-ID hints, and highlights a likely next control. The user makes every actual interaction.
- When a step is clicked or manually confirmed, Stepli shows the next instruction. A completion screen celebrates the user's independent success.
Technology used
| Area | Technology |
|---|---|
| Mobile UI | React Native 0.86, React 19, TypeScript |
| Navigation | React Navigation native stack |
| Android integration | Kotlin, Android AccessibilityService, WindowManager overlay, React Native native module bridge |
| Data and localization | TypeScript tutorial data, English and Urdu string files, Android SharedPreferences for language/onboarding/voice state; optional Supabase/Postgres for shared user guides |
| AI direction | A GPT-5.6 screen-analysis concept is future work only. It is still in progress and is not included in this submitted build; the app makes no runtime LLM calls. |
| Build tooling | Node.js, npm, Metro, Gradle, Android Studio / Android SDK |
| Testing and quality | Jest and ESLint |
The product experience lives in App.tsx. The built-in guides are intentionally data-driven in src/data/, and user-created guide data uses the same model. The Android overlay and accessibility implementation is in android/app/src/main/java/com/stepli/app/.
Requirements
This demo is supported on Android only. The repository contains the standard React Native iOS project files, but there is no iOS equivalent of Android's overlay/accessibility implementation.
- Node.js 22.11 or newer (
package.jsonrequirement) - Java Development Kit (JDK) 17
- Android Studio with Android SDK Platform/API 36, Build Tools 36, and an Android emulator or physical Android device (Android 7.0/API 24 or later)
- A connected device/emulator with the Foodpanda app installed and an active Foodpanda account for the full end-to-end demo
- Internet access for npm dependencies, Android build dependencies, and Foodpanda
For the most representative test, use a physical Android device. An emulator can run Stepli, but may not provide a usable Foodpanda experience in every region.
Demo data
No external seed data or backend is required for the submitted demo. The built-in guides are bundled in src/data/, including Foodpanda, Instagram, WhatsApp, and YouTube guides, with English and Urdu copy in src/strings/.
Foodpanda may change labels, screen order, or availability by country and app version. Each card has a manual confirmation button so the guide remains usable when an optional location or promotional screen is skipped or a matching UI label changes.
Optional: user-authored guides with Supabase Postgres
The built-in Foodpanda guide works without a backend. To let signed-in people create, save, and share guides for other apps:
- Create a Supabase project and enable Email/Password authentication. To use Google too, enable the Google provider in Supabase Auth and add its Google OAuth Web client ID and client secret there.
- Apply the SQL files in
supabase/migrations/in timestamp order through its SQL editor or migration workflow. - In Google Cloud, create an Android OAuth client for package
com.stepli.appand add the SHA-1 certificate fingerprints for every signing key you use (debug, release, and Play App Signing where applicable). Create or use a separate OAuth client of type Web application for Supabase. - Copy
.env.exampleto a local ignored.env, and setSTEPLI_SUPABASE_URLplusSTEPLI_SUPABASE_ANON_KEYto the project URL and publishable/anon key. SetSTEPLI_GOOGLE_WEB_CLIENT_IDto the Web application client ID to show the Continue with Google button. Never include the Google client secret in the app or.env. - Rebuild the Android app. Open Add more on Home, create an account or sign in, then create a guide and its ordered steps.
The app never connects directly to PostgreSQL. Supabase Auth plus Row Level Security lets owners manage and read their private guides, and lets signed-in users read intentionally published guides from other people. Visitors without an account cannot read community guides. Do not put a Postgres password or a Supabase service-role key in .env or the mobile app. For a public production community, add an approval/moderation workflow before exposing newly submitted guides.
Verify the project
npm test
npm run lint
cd android && ./gradlew :app:compileDebugKotlin
For a functional check, run the Android app, grant both permissions, and step through the Foodpanda tutorial. Verify that the guidance card remains visible above Foodpanda, the highlight does not block tapping, and the user can complete or manually advance each step.
Privacy and safety design
Stepli is deliberately designed as assistance, not automation:
- The accessibility service checks each event against the target package of the active tutorial, rather than reading every installed app continuously.
- The overlay renderer uses a non-touchable highlight layer, so the user—not Stepli—interacts with the guided app.
- It uses window, content, click, and scroll events only while a guide is active, so highlights can keep up with dynamic screens.
- It relies on lightweight matchers rather than storing a screen recording, screenshots, keyboard input, or a full accessibility-tree history.
- The final decision to place an order and any payment action always remains with the user.
Project structure
App.tsx React Native product flow
src/data/foodpandaSteps.ts Built-in Foodpanda tutorial data
src/models/tutorial.ts Shared built-in/community tutorial model
src/services/TutorialRepository.ts Supabase REST/Auth client for user-authored guides
src/strings/en.ts / src/strings/ur.ts Localized guidance copy
src/native/StepliOverlay.ts TypeScript native-module interface
android/app/src/main/java/com/stepli/app/ Kotlin overlay and accessibility code
android/app/src/main/AndroidManifest.xml Android permissions and service scope
supabase/migrations/ Secure Postgres schema and RLS policies
Analysis
View
Metric
- 14
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- JavaScriptIn code
- KotlinIn code
- ReactIn code
- SQLIn code
- SwiftIn code
- TypeScriptIn code
6 of 6 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
221 KB
Source files
64
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
rababzahra8/Stepli
108 files · 1.1 MB · @ 11dd49f
Structure
Interface
38 files · 35%Screens, components and styles rendered to the user.
Application logic
35 files · 32%Domain rules, services and shared utilities.
+9 moreData & schema
3 files · 3%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript68%
- Kotlin19%
- Markdown6%
- SQL3%
- XML3%
- Swift1%
- Other (1)0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 28- @react-native-google-signin/google-signin
- @react-native/new-app-screen
- @react-navigation/native
- @react-navigation/native-stack
- react
- react-native
- react-native-gesture-handler
- react-native-safe-area-context
- react-native-screens
- +19 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.