From the feel of an interface to the way its data moves. I'm the developer behind STS WORKS. Explore the engineering decisions in the apps I plan, design, and build.
CloudFront and S3 deliver audio; Lambda handles playback API requests. Playback state and cached tracks stay on the device, separating delivery infrastructure from player behavior.
Read the design decisions
CloudFront connects audio delivery and the playback API, separating delivery infrastructure from the app.
Node.js Lambda handles the playback API; the device owns playback state and the audio cache.
Expo AV controls playback and reuses downloaded tracks from the local cache.
Main v2 audio-delivery and device-playback paths at the reviewed source revision. Legacy v1 delivery, scheduled free-track rotation, push notifications, purchases, analytics, and monitoring are omitted. This diagram does not establish parity with live infrastructure or offline availability of every track.
Voice and presentation stay on the device; classification and response assembly run in the cloud. The client verifies quoted evidence against actual utterances, separating provider changes from the app experience.
Read the design decisions
SwiftUI and AVFoundation handle input, voice, and presentation. Sending recent conversation context requires user consent.
Python Lambda prioritizes JeV and switches a complete classification pair to OpenAI on failure, without mixing providers.
The client checks quotes, turn IDs, and response structure. DynamoDB holds usage state; Secrets Manager holds external service configuration.
Cloud integration at the reviewed source revision. The new conversation path includes work in progress; this diagram does not establish App Store parity or classification accuracy. Apple authentication, purchases, and monitoring are omitted.
Cropping and compositing happen on the iPhone; an AWS proxy handles the AI request. Image editing and external service integration have separate roles.
Read the design decisions
UIKit extracts the rotated selection and feathers the generated band into the original photo.
CloudFront and Lambda handle requests to the external AI provider.
Lambda manages quota and job state, with state in DynamoDB and configuration in Secrets Manager.
Main generation flow. Authentication, purchases, and notifications are omitted. The AI provider is outside AWS.
PhotoKit, Vision, and Core Image analyze photos locally. For optional recovery storage, the API manages metadata while photo bytes go to S3, separating file transfer from API processing.
Read the design decisions
Processed photo IDs support resumable batches and avoid repeated analysis. Images are not uploaded for analysis.
Python Lambda handles the recovery API, with usage state and storage records in DynamoDB.
Photo bytes go to S3 and metadata goes through the API, separating file transfer from state management.
Conceptual view of on-device analysis and optional recovery storage. Sharing, invitations, App Clip, purchase verification, expiry cleanup, and monitoring are omitted.
02 / APP & DEVICE
Engineering inside the app.
Native integration, rendering, and local processing. Apps without a custom application backend.
React Native handles controls and Three.js renders the archive. Swift owns OCR, photo files, and persistent data, with a JSON bridge separating interface state from data operations.
Read the design decisions
Bundled Three.js renders in WKWebView. The interface and rendering layer derive their views from state returned by native code.
A Swift ScanPipeline and repository persist progress. OCR results update after every page succeeds, supporting recovery from interrupted processing.
SwiftData stores metadata and ImageStore stores photos. Search generation IDs prevent older asynchronous results from replacing newer input.
React Native integration and device storage at the reviewed source revision. There is no custom application backend. Work in progress is included; this diagram does not establish App Store parity. Capture, purchases, and migration details are omitted.
03 / ABOUT THE DEVELOPER
Connecting the experience to the system.
STS WORKS is the home of my independent app and web development. I work from the user experience inward: deciding where computation belongs, what to store, and how to connect with the operating system.
These selected projects make those decisions visible. Whether a task calls for asynchronous cloud processing or computation on the device, I choose the architecture to fit the problem.