---
title: "HomeFolio"
slug: "homefolio"
url: "https://haakony.no/posts/homefolio"
date: "2026-07-07"
updated: "2026-07-07"
categories: ["development"]
tags: ["app", "development"]
reading_time_minutes: 2
ongoing: true
description: "Yes yes I know another project"
---

# HomeFolio

# Stage - under development

# HomeFolio

HomeFolio is meant to live with the house. Not just during a build or a renovation. For as long as you are there.

The idea is simple. Your home has a lot of small facts that never quite have a home of their own. The toaster manual. The paint color on the living room wall. The warranty for the windows. Which breaker is the kitchen. The number for the plumber who actually showed up. HomeFolio is where all of that goes, tied to the room or the spot where it matters.

You move through the house in a 360° tour or on a floor plan. Open a pin on the oven and the manual is right there. Stand in the hallway and see what is behind the plaster from when the walls were still open. Save something before you know exactly where it belongs and find it later in search.

Build stages are part of it, not the whole story. Framing, rough in, finished. You can flip between layers at the same spot and keep a record of how the house was put together. That is useful during a project. It stays useful years later when you need to remember what is inside a wall.

You can invite family or trades into a home with different roles. Owners run the show. Editors can add captures and details. Viewers can browse without changing anything.

## Under the hood

It is a native mobile app on iOS and Android, built with Capacitor and React. The 360° tour uses Photo Sphere Viewer. The floor plan editor lets you draw rooms over a background image.

A Go API sits behind it. MariaDB stores homes, spots, layers, pins, and metadata. Photos and documents live in object storage. The app talks to the API for everything, including media, so uploads and viewing stay simple on the phone.

## Problems that were not obvious at the start

* Object storage looked straightforward until browser uploads got involved. Presigned URLs and CORS turned into a rabbit hole. We ended up sending files through the API instead. Slightly more load on the server, much less grief in the app.
* iPhone photos arrive as HEIC. The in app web view does not always know what to do with that. We convert on the server when files land so users can just take a picture and move on.
* We originally treated every detail as a pin on the tour. That meant you could not save "exterior paint" without standing in a room and aiming at a wall. We split the model so items can exist without a location, show up in search, get assigned to a spot later, and only appear on the 360° when you explicitly place them.
* 360° navigation arrows need to agree with the floor plan. Each capture stores a north calibration. You stand in the room, face map north, tap set north. Without that the arrows feel wrong even when the photos are fine.
* Regular photos on a panorama are not the same thing as the base 360° for a layer. One panorama per spot per layer. Everything else is an overlay with its own position in the scene. Mixing them in one place made the tour viewer confusing.
* That is the shape of it. A record of the house you can actually walk through, with the dull but important stuff attached to the place it belongs.
