Loading case study…
Loading case study…
BestHuman
•2026
A mobile Progressive Web App designed as a real-time educational companion for multi-model prompt engineering.
Built for live keynotes, this responsive Progressive Web App (PWA) delivers mobile utility where BestHuman's non-linear desktop platform is unsuited. By replacing raw text fields with toggles, radios, and voice inputs, I enabled business leaders to leverage researched, context-specific prompts in seconds. To offset high-density network interference, I optimized the codebase to load quickly over congested Wi-Fi. Operating on state-of-the-art models, the app generates high-fidelity outputs while showcasing best-in-class prompt structure.
Proof points
Keynote companion
Designed a responsive Progressive Web App enabling room-wide audiences to scan, load, and interact with optimized prompt structures in under 60 seconds.
Zero-text composition
Replaced blank text inputs with intuitive toggles, radios, and voice inputs that dramatically reduce manual typing by activating highly researched, context-specific prompts instantly.
On-device speech parsing
Integrated a local-first speech pipeline backed by OpenAI Whisper and Google Chirp that filters out verbal noise and stutters.
BestHuman's desktop interface used a non-linear, drag-and-drop canvas. Shrinking that workspace to fit mobile viewports was a non-starter. The challenge was finding a way for business leaders to build and run complex prompts in under a minute using only their phone.
As I got into it, I discovered more and more challenges to pull this off well: filtering out crowd noise for voice dictation, keeping multi-step navigation clear on a mobile screen, and optimizing the app to load quickly over congested conference Wi-Fi.
Creating an account is a major drop-off point during live keynote presentations. Participants want to test the tool, not fill out registration forms and verify email addresses.
To bypass this friction, I designed a login system with pre-configured guest accounts. By typing simple codes like SIPP (South Island Prosperity Project) or RRU (Royal Roads University), users bypass registration and sign in with a single click. The interface styles the user avatars and icons using partner brand colors, supporting both light and dark modes. Animated transition states and typewriter prompts add polish to the entry, while standard legal requirements like Terms of Service and Privacy Policies remain accessible but non-intrusive.
A multi-step prompt-building workflow on a mobile screen usually means cluttering the viewport with tabs or locking users into a rigid sequence of "Next" and "Back" buttons.
To solve this, I engineered a swipeable wizard rail that acts as both a progress indicator and a direct navigation bar. The system centers the active step, uses CSS masking gradients to blend overflowing text at the edges, and scales down inactive tabs based on their distance from the center. Users can swipe through sections fluidly or tap a title to jump directly to a step.
Typing long instructions on mobile keyboards is slow and painful. To address this, I built a speech-to-text pipeline that filters out background noise and cleans up pauses, filler words, and repetitions. Key highlights include:
This pipeline delivers a clean dictation loop that handles natural, conversational speech under heavy environmental noise.
To make dictation discoverable, I placed a mic icon inside all text input fields. Tapping it opens a mobile drawer that displays the active speech-to-text status.
The interface shows the system is working by changing states when speech is detected and rendering a live audio waveform preview. When recording stops, the participant taps the send button, which displays feedback while uploading. Once the server processes the data, the drawer automatically closes and inserts the formatted text into the input field.
Like Murphy’s Law, if an audio system can fail in public, it will.
Designing for edge cases and failures is a core part of my work. For this project I mapped out explicit states for when the device or the network crap out:
To help people learn prompt engineering, and to be transparent about what the app is doing, I built a live prompt visualizer. As users toggle presets, select checkboxes, or dictate inputs, the preview updates dynamically. The visualizer structures the payload to follow core prompt design principles:
This visual feedback loop shows the exact payload structure, helping users learn prompting principles through real-time experimentation.
To help participants compare models, I built a dynamic layer on top of OpenRouter. This lets users experiment with multiple chat, image, and voice models in real time.
One goal for the tool was to help users gain familiarity with different models, especially ones they have likely never heard of, like ByteDance Seed Dream, a compelling and affordable image generation model from Q1 2026.
Waiting for a large language model to stream back a response is a UX bottleneck. If a user is left staring at a blank screen or a generic spinner, they have no idea if the app is working or if the connection has died.
To solve this, I intercepted the raw JSON stream from the API as it arrives. This allows the progress panel to display live stream data and telemetry, showing users exactly what the model is doing in real time. The component tracks the macro state of the stream and displays a step-by-step progress list: routing the request, generating the payload, and analyzing the response. To show that the system is active, a live stopwatch ticks in tenths of a second alongside a character counter. If the stream stalls, the panel automatically displays troubleshooting hints, transforming a silent wait into clear, operational feedback.
During live keynotes, hundreds of participants scan a QR code simultaneously over congested conference Wi-Fi. If the app load takes more than a few seconds, users will think the app is crap.
To achieve rapid startup, I audited the bundle, deferred non-critical code into async chunks, and minimized main-thread blocking time. To bypass HTTP network requests on the critical rendering path, I embedded brand assets as inline SVGs and wrote a script to subset our icon fonts down to just the specific ones used. These optimizations reduced the Largest Contentful Paint (LCP) to under one second, yielding near perfect performance audit scores.
In many ways, this mobile version is better than the desktop original. By linearizing the non-linear workflow, I made it more accessible, faster to get results, and drastically reduced the cognitive load on the user.
But pulling it all off was a boatload of work.
If I were to build it again with more time, I would spend more time on the look and feel. The design language is admittedly a bit boring.
Simplifying a complex workflow is a ton of work: but making a tool fast and accessible is always worth the effort.