← Back to portfolio
N
Case Study5 min read

A feed that
shows you why.

A mood-driven wallpaper feed where the recommendation algorithm is the product, not a secret. It learns what holds your eye and shows you its reasoning in a Tuner you can read and reset. Some frames hide a story you pull up to read. Live on iOS, Android, and the web, no account required.

3
Platforms
300+
Curated frames
0
Accounts to start
100%
On-device algorithm
Scroll to read
00The Problem

Recommendation feeds never show their work.

Every feed learns your taste, then hides what it learned. You can’t see why it picked what it picked, you can’t steer it, and most won’t do anything until you make an account. The algorithm is a black box you are not allowed to read.

Noctiso inverts that. It is a wallpaper feed where the recommendation algorithm is the product, in the open. It tells you what it thinks you like, lets you read and reset its reasoning, and needs no account to work.

01The Feed

A full-screen feed you steer by looking.

The feed is mobile-first and snap-scroll: every frame fills the screen, and swiping up advances. An action rail carries a free download, a save-to-vault heart, and a paywalled hi-res buy. Above it, a small pill shows the algorithm’s read on the current frame, like CALM · COLD or DREAMY · +RECENT MATCH.

You don’t rate anything. The feed learns from what you actually do: how long you hold a frame, what you save, what you skip. Saved frames go to a local vault. None of it requires an account.

Tech Stack
Snap-scroll feedLocal vaultNo accountFree + hi-res tiers
How it works
Snap-scroll full-screen frames; dwell, save and skip are the signals. The ‘why’ pill keeps the algorithm visible on every frame, not buried in a settings screen.
Why it matters
Taste is shown, not declared. You never fill out a preferences form; the feed infers and displays what it sees.
In practice
Free download, save to a local vault, or buy hi-res. No sign-up to start.
02The Tuner

The algorithm you can read and reset.

The Tuner is a drawer that exposes everything the feed has inferred about you: mood-affinity bars for your top moods, palette swatches for the colors you dwell on, and a list of recent signals each annotated with the reason, such as “you held this 8 seconds, cold and neon.” A single RESET clears it all back to cold-start.

The whole thing runs client-side, persisted to localStorage. There is no server profile, no account, no cross-device tracking. Cold-start is honest: the first frames are deliberately diverse, so the feed assumes no taste until you show it some.

Tech Stack
Client-side signalslocalStorageMood + palette affinityRESET
How it works
Signals are collected and weighted in the browser and saved to localStorage; the Tuner renders the same state the ranking uses, so what you see is what it does.
Why it matters
A transparent, resettable, on-device algorithm is the opposite of a black box. You can audit it, correct it, or wipe it.
In practice
Two parallel loops, visual and narrative, learned independently so one Tuner shows both.
03The Story Layer

Some frames hide a story.

Most frames are just images. A few hide a short piece of writing underneath. A brass “↑ READ” hint invites a pull-up; the prose unfolds over the dimmed frame, set in a serif companion typeface so the reading mode feels different from the scrolling mode.

Stories are sparse on purpose, a discovery rather than a guarantee. Each one also gets a static, indexable page at /r/[slug], 500 words of original prose that doubles as a strong SEO surface.

Tech Stack
Pull-up readerSerif companion/r/[slug] SEO pagesSeparate tone signal
How it works
Tapping the hint raises a reading drawer over a dimmed image; reading to the end is a separate narrative-taste signal from the visual one.
Why it matters
The surprise is the point. Sparse stories make the feed feel authored without a by-line, and the SEO pages pull in readers the feed never would.
In practice
Serif body type; the UI stays in the display and mono brand fonts. The font switch itself is the cue you have entered reading mode.
04The Catalog

An AI-generated catalog, ingested clean.

The launch catalog is 300 to 500 frames, AI-generated and multi-genre without apology: anime, dystopia, minimal, dreamy, futuristic, soft. Frames, stories, and optional collections all live in one manifest validated by an ingest CLI before anything ships.

Series are a soft organizing tag, not the headline, and each carries a status: core genres are permanent, while experiments are provisional candidates that serve identically in the feed and either graduate or retire on their engagement numbers. The algorithm, not a curator, is the protagonist.

Tech Stack
AI-generated framesmanifest.json schemaIngest CLISeries as soft tags
How it works
An ingest CLI validates the frame, story and collection schema in manifest.json; AI-generated frames are labelled as such.
Why it matters
One typed catalog, many genres, no aesthetic lock. Experiments let new genres earn their place instead of being decreed.
In practice
300 to 500 frames at launch, with 15 to 30 sparse stories scattered across them.
05Shipped

Live on three platforms.

Noctiso is a real, shipped product: a Next.js 15 web app at noctiso.com and a Flutter app on the iOS App Store and Google Play, over a Supabase backend, with its own brand, accounts, and billing. A subscription plus light display ads on the free tier fund it.

It is a separate brand from Sapplify, run under the same one-person legal entity, and that is the point worth making: the same person who builds the studio’s internal tooling also designs, builds, and ships a polished consumer product to real users on three platforms.

Tech Stack
Next.js 15 (web)Flutter (iOS + Android)SupabaseSubscription + ads
How it works
Next.js 15 web, Flutter native for iOS and Android, Supabase for data and auth, store billing and Stripe for the subscription, ad networks on the free tier.
Why it matters
Consumer polish on a public timeline is a different muscle than internal tooling. Noctiso is the proof I have both.
In practice
One legal entity, two brands. Sapplify and Noctiso ship side by side.
The Bigger Picture

The product
side.

The harness, Lattice, and Basalt are how the studio runs. Noctiso is what it ships: a polished consumer product in real users’ hands, on three platforms. The same person builds the internals and the thing on the App Store.