Inspiration

Making ambient artwork using both sounds and visuals is my long time dream. Using ChatGPT daily on my college life as a pharmacy student , I met Codex and think this good new face will make my dreams come true. I wanted to make something that feels more like a personal ambient work than a typical utility app.

The image behind Faint Colors was simple: placing stones into a quiet river at night. A tap leaves a resonant stone in the scene, and over time those stones return while smaller drifting particles collide around them. I wanted the result to feel calm, tactile, and slowly alive, especially for focus, rest, and sleepless nights.

What it does

Faint Colors is a mobile-first interactive ambient artwork.

When the user taps the screen, a stone is placed into the field and assigned a pitch from a pentatonic range. That stone reawakens over time, while smaller drifting particles trigger higher tones as they collide. As more stones are added, the piece gradually becomes a layered ambient sound space.

Visually, the work is built from soft particles, ripples, glow, and slow movement. Musically, it is designed to stay gentle and coherent while still changing over time.

In this app, music theory and visual movement are organically linked through programming.

How I built it

I built Faint Colors with Next.js, React, TypeScript, HTML Canvas, Web Audio API, and an Expo / React Native shell for iPhone-oriented presentation.

The visual side uses a canvas-based particle field, placed stones, ripple animations, and layered glow. The audio side uses retriggered stone voices, collision tones, reverb-heavy processing, and a pentatonic pitch structure to keep the harmony soft over longer listening.

How I used Codex and GPT-5.6

Codex helped most on the implementation side. I used it while building features, revising interaction behavior, debugging issues, and adjusting the mobile presentation. It was especially useful when I needed to move quickly between code changes and testing.

GPT-5.6 helped more on the concept and presentation side. I used it to clarify feature direction, explain the musical idea more clearly, and improve how I described the project for submission.

I did not use them as a replacement for the artistic direction of the piece. I used them as tools to help me iterate faster on something I already wanted to make.

Challenges I ran into

One of the most difficult parts was recognizing when something Codex said it had implemented was not actually working as intended. Fortunately, because this app is centered on sound, I was able to notice changes in the audio behavior, point out what was wrong, and keep improving it. In particular, the tones produced by placed stones often differed from what I had intended, and I spent a lot of time identifying those problems and refining them.

Second biggest challenge was balancing softness with clarity. I wanted each touch to feel clearly audible, but I also wanted the whole piece to stay calm instead of becoming noisy. I also had to keep tuning performance, because too many active stones and particles could make the system heavy over time, especially on mobile.

Third challenge was keeping the harmony feeling musical while still allowing generative variation.

What I learned

Because this was my first time developing an iPhone app, I learned a wide range of things throughout the process, from setting up the simulator-based workflow to understanding how to enroll in the Apple Developer Program. Looking back on the project as a whole, I feel that this development process gave me a broad foundation as an app developer.

I also learned that Codex and GPT-5.6 were most useful in different ways: Codex helped me inside the actual implementation, while GPT-5.6 helped me shape the concept and communicate it more clearly.

What's next for Faint Colors

My next goal is to turn this into a more polished standalone iPhone release.

That means improving long-session stability, refining the audio balance, simplifying the settings flow, polishing the visual identity, and preparing the project for release.

I see Faint Colors as the beginning of a larger series of interactive ambient works.

Built With

Share this project:

Updates