Niall Eccles
Back to projects

foco

Active

A fast, keyboard-driven desktop app for photo triage and light editing. Open a folder, cull your shots, crop and resize, and review EXIF metadata without leaving your machine.

Tech Stack

Electron
React
TypeScript
Sharp

Overview

When travelling, I take a lot of photos. Those photos are large in size and finding which photos to keep is a challenge. I can’t always rely on cloud-based tools without an internet connection so I built Foco, a native desktop app focused entirely on the triage workflow.

The core loop is simple: open a folder, move through images with arrow keys, delete the ones you don’t want (soft-deleted to a _deleted/ folder so nothing is lost), and apply basic edits before exporting. The filmstrip along the side gives you a scrollable overview of the whole set at once.

Under the hood, Sharp handles all image processing, thumbnail generation, cropping, and resizing, via Electron’s IPC layer. Thumbnails are cached to disk with mtime validation so re-opening a folder is instant even for large collections. The filmstrip is virtualised with @tanstack/react-virtual so scrolling stays smooth regardless of how many images are in the folder.

The EXIF panel pulls camera body, lens, exposure settings, and GPS coordinates for each image. GPS locations are plotted on an embedded OpenStreetMap via React Leaflet, and a live RGB histogram gives a quick read of exposure without opening a separate tool.

The pan and zoom system uses ref-based transforms rather than React state to avoid re-renders on every wheel or drag event — cursor-anchored scaling and a double-click 1:1 toggle make it feel native. Keyboard shortcuts cover the full workflow, keeping hands off the mouse wherever possible.

Foco is still in development and more features are planned.

Screenshots

The main interface of Foco, showing the filmstrip on the bottom, the selected image in the center, and the EXIF panel on the right.
The main interface of Foco, showing the filmstrip on the bottom, the selected image in the center, and the EXIF panel on the right.

Key Features

Technical Challenges