Founder Build • iOS • macOS • Web • Single‑Developer

I design and ship hybrid systems that make web tools feel native on iOS, Mac, and the browser.

My approach: patch what’s broken, intercept at the right layer, and add the missing primitives (offline queue, PDF workflows, secure auth). I work across UIKit/SwiftUI, WKWebView, PDFKit, React, and glue code—end to end.

See iOS Craft Beyond iOS UIKit · SwiftUI · AppKit · WKWebView · SFSafariViewController · PDFKit · React · HTML/CSS

iOS Craft — Web‑to‑Native Rescue

Senior‑level interventions that make legacy systems usable on iOS without rewriting them.

Layout repair via WKUserScript (center dialogs, zoom‑safe)
// Inject CSS at document-start to patch layout issues safely.
let patchCSS = \"\\"\\"
html, body { overscroll-behavior: contain; }
.modal-dialog { position: fixed !important; inset: 50% auto auto 50% !important; transform: translate(-50%, -50%) !important; }
img,canvas { max-width: 100%; height: auto; }
@media (max-width: 1024px){ body { -webkit-text-size-adjust: 100%; } }
\\"\\"\
let src = "var s=document.createElement('style');s.innerHTML=\(patchCSS.debugDescription);document.documentElement.appendChild(s);"
let userScript = WKUserScript(source: src, injectionTime: .atDocumentStart, forMainFrameOnly: true)
webView.configuration.userContentController.addUserScript(userScript)
Network interception (SafariView for auth; stable sessions)
Swift
func webView(_ webView: WKWebView, decidePolicyFor nav: WKNavigationAction,
             decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
  if nav.navigationType == .linkActivated, let url = nav.request.url {
    if url.host?.contains("login") == true || url.scheme == "itms-apps" {
      presentSafari(for: url) // keep main WebView clean
      return decisionHandler(.cancel)
    }
  }
  decisionHandler(.allow)
}
PDF ingest & share (PDFKit, inline preview + export)
Swift
import PDFKit
func presentPDF(data: Data, title: String){
  let pdf = PDFDocument(data: data)
  let vc = UIViewController()
  let view = PDFView(frame: .zero)
  view.document = pdf
  view.autoScales = true
  vc.view = view
  vc.title = title
  navigationController?.pushViewController(vc, animated: true)
}
Offline queue (local JSON, conflict‑aware replay)
Swift
struct PendingJob: Codable {
  enum Kind: String, Codable { case formPost, fileUpload, note }
  var id: UUID = .init()
  var kind: Kind
  var endpoint: URL
  var payload: Data
  var createdAt: Date = .init()
}
final class OfflineQueue {
  private(set) var jobs:[PendingJob] = []
  func enqueue(_ job: PendingJob){ jobs.append(job); persist() }
  func flushIfOnline(){ /* reachability -> replay with backoff; verify 2xx; remove */ }
  private func persist(){ /* write to disk */ }
}

Before / After (Representative)

Before

  • Dialogs off‑screen on iPad; zoom breaks focus.
  • Auth popups hijack session; users lose work.
  • PDFs download to nowhere; no inline preview.
  • No offline path; edits require stable connectivity.

After

  • Dialogs centered & zoom‑safe via injected CSS.
  • Auth flows isolated in SafariView; session preserved.
  • Inline PDF preview with share/export via PDFKit.
  • Offline queue with safe replay on reconnect.

iOS‑first polish: haptics, safe areas, keyboard avoidance, accessible contrast.

Web + macOS

I build the other half too: React micro-UIs, macOS utilities, build tooling, and pipelines.

  • React/HTML: Micro-interfaces that slot into legacy pages without heavy frameworks.
  • macOS (SwiftUI/AppKit): Menu bar tools, PDF ops, file capture, quick-actions.
  • Pipelines: Preconnect & asset hygiene, cost-flags for AI vs deterministic paths.

Selected Demos

These clips highlight the internal app I built for my team. What started as a way to wrap existing web tools on iOS evolved into a fully custom hybrid app: a polished, stable environment that fixed framework-level issues on iPad and added entirely new functionality. From a branded weekly schedule builder to a built-in document editor with signing and export, these demos show it’s more than just a wrapper — it’s a true app experience.

Representative Code (UIKit • SwiftUI • React)

Minimal, focused snippets. Full project available on request.

final class WebController: UIViewController, WKNavigationDelegate {
  private lazy var webView: WKWebView = {
    let conf = WKWebViewConfiguration()
    conf.defaultWebpagePreferences.allowsContentJavaScript = true
    let w = WKWebView(frame: .zero, configuration: conf)
    w.navigationDelegate = self
    return w
  }()
  override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(webView)
    webView.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
      webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
      webView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
      webView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
      webView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
    ])
    loadHome()
  }
  private func loadHome(){
    let req = URLRequest(url: URL(string:"https://example-legacy-app")!)
    webView.load(req)
  }
}

AI Strategy — Practical & Adaptive

My current experience focuses on running smaller local models for experimentation and rapid prototyping. These have been ideal for my hardware and allow me to quickly test and validate workflows. For larger-scale environments or production workloads, I can adapt these approaches to API-driven or hosted LLM solutions as needed.

  • Hands-on with small local LLMs (Ollama, Mistral, OpenHermes) for summarization, templating, and quick testing.
  • Design patterns and pipelines that can scale to enterprise-grade deployments when resources allow.
  • Modular architecture for easy swapping between local and cloud APIs.

Deterministic Systems — When AI Is Overkill

For some workflows, full-blown LLMs are unnecessary. I’ve designed deterministic systems using curated phrase banks and rule-based transforms that produce fast, consistent, and “AI-like” results — without the latency, cost, or unpredictability of machine learning.

  • Phrase banks that generate clean, varied, and cohesive outputs without relying on model inference.
  • Great for structured workflows like progress notes, standardized templates, or repeatable formats.
  • Feature-flagged logic to switch seamlessly between deterministic and LLM modes as needed.
TypeScript (feature flag)
type Mode = "llm" | "deterministic";
const mode: Mode = env.USE_LLM ? "llm" : "deterministic";

export async function formatNote(input: string){
  if(mode === "llm"){
    return await ollamaSummarize(input);
  } else {
    return deterministicTemplate(input); // instant, rule-based output
  }
}

Polish that matters

  • Haptics mapped to state transitions
  • Safe areas & keyboard avoidance
  • Accessible color contrast & roles
  • Copy buttons on every code sample

Security

  • Queue encryption at rest
  • SafariView for sensitive auth
  • Scoped file access

Performance

  • Lean DOM — no heavy shells
  • Preconnect + font-display:swap
  • Exponential backoff on retries

Contact

I’m happy to deliver a sample build or complete a technical challenge to show what I can do.

Email: mo.ali91942@gmail.com · Business: safenetoperations@gmail.com · Location: California · Full‑time or contract.