[ Case ]Development / UX/UI

Then & Now Studio: an editor for seamless Instagram carousels

← All work
Then & Now Studio case overview: the editor with a polaroid on the first slide, and the four exported slides with a timeline running across them

Summary

A desktop editor for seamless Instagram carousels, built for a class reunion account: an old photo, the story in between and a new one. Electron, React and TypeScript.

Then & Now Studio is a small desktop app I built for one job: making Instagram carousel posts for a "20 years later" account for my old school class. Each post is about one former classmate. The first slide is their photo from 2007 in a polaroid frame, the middle slides tell who they were and what they do now, and the last slide is a photo from 2027 in the same frame. The people and portraits in the screenshots are made up.

The challenge

I wanted the posts to be seamless carousels. That means the slides are really one long image, so a line or a photo can cross the edge between two slides and swiping feels like scrolling one picture.

That's fiddly to do by hand. You design one wide image, cut it into pieces at exactly the right pixels, and hope nothing important ends up where Instagram crops it. Then you do it again for the next classmate, and the one after that. With a whole class to get through, I wanted a tool where the layout is made once and each new person is mostly two photos and a few sentences.

Our approach

One strip, sliced on export

A post is a single canvas, 1080 pixels wide per slide. Everything is placed on that strip instead of on separate slides, so anything can cross a seam. On export the app renders the strip once and cuts it into numbered PNG files. Rendering once is what guarantees that things line up.

The editor showing a whole post as one strip of four slides, with an answer bubble selected and its text settings in the left panel.

The editor is deliberately simple. Drag to move, pull a corner to resize, drop a photo straight onto a frame. Elements snap to seams, centres and safe zones, and the guides show where each slide ends.

The four exported slides side by side. The timeline continues from the first slide to the last.

What you see is what you post

The editor, the Instagram preview and the export all use the same piece of code to draw the strip. The editor shows it scaled down, the preview shows one slide at a time and lets you swipe, and the export uses a full-size copy. There is only one place where a post is drawn, so the preview can't drift away from the files you end up posting.

The Instagram preview halfway through a swipe from slide one to slide two, with the timeline running across the seam.

The right size for the profile grid

Posts are 3:4 (1080 × 1440) by default. It's the only size the Instagram profile grid shows uncropped. A post can be switched to 4:5 if it's going to be published through the API or boosted as an ad, since both reject 3:4. In that mode the editor shades the part of the first slide that the grid will crop away.

Photos as backgrounds

The first and last slide show the polaroid's own photo behind the frame, in black and white with a colour laid over it. Upload the photo once and the background follows. Colour, strength and blend mode can be changed per slide, so each person gets their own look while the layout stays the same.

The background photo of the first slide selected, with the colour overlay settings: colour, strength, blend mode and black and white.

Consent is part of the data

These are real people and their childhood photos, and we're in Norway, so GDPR applies. Every post records whether the person has agreed to be posted, when, and how they said it. If consent isn't recorded, the export stops and asks first. It's a small thing in the interface, but it means the question can't be forgotten.

The people overview in Then & Now Studio: the account card on top and four people below, each with a then and now photo, a status and a consent badge.

A library, a template and a profile photo

  • People. The start screen lists everyone with their then and now photo, a status (draft, ready or posted) and a consent badge. Everything is saved automatically as one file per person.
  • Template. Any post can be saved as the template for new people. Photos, name, consent and status are stripped out, so a template never carries someone's pictures.
  • Profile photo. The account's profile photo is made in the same editor, with a dashed ring showing how Instagram crops it to a circle. Text can be set as cut-out magazine letters or letter tiles.

Technical choices

  • Electron, not Tauri. The export depends on the browser engine turning HTML into an image reliably, with fonts, filters and blend modes intact. Electron ships Chromium, where this works well. Tauri on macOS uses WebKit, where it's flakier.
  • React, TypeScript and Tailwind. With Zustand for state and html-to-image for the export.
  • Files stay on the machine. Posts are plain JSON files with the images inside, kept out of git, and deleting one moves it to the Trash.

The same editor also runs in a normal browser without Electron, which is how the screenshots here were made.

The result

A working first version: I can add a person, drop in two photos, write the story, check it in the preview and export slides that line up across every seam. Undo and redo are next on the list, followed by saved themes and a preview of the whole profile grid.

Gallery

01 / 08