AIM Housingour work

Appoly partnered with AIM Housing to design and build a purpose-built digital platform for documenting construction sites using 360-degree photography. The system enables field workers to capture immersive imagery at housing developments, organise it by site and room, and feed it into a cloud-based pipeline that generates 3D models automatically.

Aim housing logo.

The Challenge What AIM Housing Needed

Seamless 360° Camera Integration

Field workers needed to connect Insta360 cameras to their mobile devices and capture imagery without friction.

Offline-First Reliability

Construction sites often have poor or no connectivity, so the apps had to work without a network and sync when available.

Automated 3D Processing

Raw 360° footage needed to be processed into 3D models without manual intervention, using AI-powered photogrammetry.

Cross-Platform Availability

The workforce uses a mix of iOS and Android devices, so both platforms needed full feature parity with native performance.

Structured Capture Workflows

Captures needed to be organised by site, room, and checklist, giving teams a structured approach to documentation.

Real-Time Processing Visibility

Teams needed full transparency over the status of every capture. From upload through to 3D model delivery, without chasing updates manually.

Overview A Digital Platform for 360° Site Documentation

AIM Housing needed a reliable, field-ready tool for capturing and managing 360-degree site documentation across their housing developments. The existing process was manual, fragmented, and didn’t scale.

The Solution Building a Complete Ecosystem

Native Mobile Applications

Rather than opting for a cross-platform framework, we built fully native applications for both iOS and Android. This gave us direct, low-level access to the Insta360 camera SDK — critical for reliable Bluetooth/Wi-Fi camera pairing, real-time preview, and high-resolution file transfer.

iOS was built with SwiftUI, while Android used Jetpack Compose with Material 3 design. Both apps follow modern architectural patterns — the Android app uses Voyager for navigation with Koin dependency injection, while the iOS app leverages SwiftUI’s native state management.

The core capture workflow guides field workers through a structured process: select a site, start a capture session, take 360° and standard photos, tag each image to a specific room, and work through a site checklist. The apps track every capture locally, so nothing is lost if the network drops mid-session.

Offline-First Architecture

Connectivity on construction sites is unpredictable, so we designed the entire mobile experience around offline-first principles.

On Android, Room database serves as the local cache with a RemoteMediator pattern handling pagination and sync. On iOS, CoreData provides the persistent layer. Both platforms queue uploads in the background and resume automatically when connectivity returns — the Android app uses WorkManager for this, while iOS leverages background URLSession transfers.

Uploads use pre-signed S3 URLs with configurable time-to-live, meaning large 360° image files go directly to cloud storage without routing through the backend. If a URL expires before the upload completes, the app refreshes it and picks up where it left off.

Cloud Processing Pipeline

The backend is a Laravel 12 application that orchestrates the entire processing workflow. When raw 360° footage lands in S3, the pipeline kicks off a multi-stage process:

  1. Insta360 stage — extracts individual frames from the 360° footage.
  2. Metashape stage — runs AI-powered photogrammetry to generate 3D models from the extracted frames.

Each processing job is tracked as an immutable record with one or more pipeline runs. The system uses an event-driven architecture — Python workers send structured callbacks to the Laravel backend as they progress through each stage, and every event is stored with a fingerprint hash for idempotent deduplication.

The pipeline includes intelligent failure handling. It distinguishes between retryable failures (such as cloud capacity exhaustion, where it waits and retries after 15 minutes) and non-retryable failures (such as processing errors in the source imagery).

A Vue 3 dashboard built with Inertia.js gives the team real-time visibility into every job — with status tracking, event timelines grouped by pipeline stage, downloadable output artifacts via signed URLs, and the ability to manually retry failed runs.

Infrastructure & Security

The cloud infrastructure runs on AWS, with S3 for storage, STS for dynamic credential generation, and Redis-backed queues managed through Laravel Horizon. Pre-signed URLs ensure that mobile devices never need long-lived AWS credentials — each upload gets a scoped, time-limited token.

The processing pipeline runs in containerised workers, with CloudWatch providing log aggregation and Sentry handling error tracking across all three codebases.

Technical Highlights What Sets This Platform Apart

Aim Housing mobile application with text above it that says