Making an Almanac App and Learning Swift with Machine-Assisted Coding

I recently designed and built an iOS app from scratch with the development assistance of agentic coding platforms (Claude mainly, with input from ChatGPT). This was as much a process of learning Swift, the native Apple app language, as it was an education and experiment in learning the advantages and limitations of LLMs as programming tools and collaborators. Additionally, this entire process allowed me to reflect and challenge myself on my own ethical boundaries when it comes to using AI tools in the creative process.

I already knew, and still know, some hard lines that I will not cross, essentially: no use of generative AI for visual assets, art, audio/sound design, photography, or generally anything that I consider expressive forms of human craft.

What did I craft myself?

  • The entire app concept (including all features)
  • The visual direction, branding, color scheme, and typographic stack
  • The UX/UI in Figma (at least the first few drafts)
  • The audio and sound design (including some field recordings I captured myself in the wild)
  • The main 3D orb
  • The language, tone, and copy
  • The actual QA testing
  • Promotions / marketing
Process shot from Ambient Almanac: Some original draft UX/UI mockups
Process shot from Ambient Almanac: Some cloud-heavy original draft UX/UI mockups

What did I outsource/license that other humans crafted?

  • Some 3D ecological elements
  • Emoji set
  • Some of the flat UI icons
  • Some of the droning, ambient music
  • Data (all sourced and referenced)

What did the robots craft?

  • Most of the Swift code
  • Some of the backend logic
An endless nighttime loop scene from Ambient Almanac (v1.1)

Some of the features I enjoyed crafting the most

Temporal soundscapes
I split the day and night into 7 or 8 chunks, and depending on where you land, you’ll hear a different aural mood. Even more, there are region and time-dependent field recordings of nature layered on top of those.

Process shot from Ambient Almanac: Seven distinct temporal regions with details
Process shot from Ambient Almanac: Seven distinct temporal regions with details

Contextual, live, animated, procedural atmosphere and weather
Drawing live data from a weather API, the app does its best to recreate little weather scenes: rain, snow, wind, clouds, etc. This was really hard to get right, and I’m still working to improve it. This was one of the more CPU-intensive features, and I had to constantly adjust the clouds and rain to not melt my iPhone.

A series of weather scenes from Ambient Almanac — sound on!
A snow winter scene from Ambient Almanac
A snow winter scene from Ambient Almanac

Season and hemisphere-specific constellations
Depending on what season you are in and what hemisphere you are in, only certain constellations in the starry night sky are visible. The same is true inside the app (technically, you have to press and hold down on the orb on a clear night to see these). This was a fun easter egg to create.

The butterflies (and moths)
Depending on your season, weather, and time of day, you may see some color-palette-limited-but-beautiful little butterflies flapping around. Hold down the orb (short or long), and you can release more into the atmosphere. This was clearly an essential UX feature. The moths are more rare and challenging to discover. Bees coming in future updates!

Two late winter butterflies in Ambient Almanac
Two late winter butterflies in Ambient Almanac
A couple of rare nighttime moths in Ambient Almanac
A couple of rare nighttime moths in Ambient Almanac

Land & terrain data
This feature is pretty nerdy, but one of my favorites. Drawing from many sources, like OpenTopoData, ISRIC SoilGrids, Open-Meteo, USGS, EPA, and Native Land data, I developed an overlay feature that tells you a lot of really cool scientific information about the land you are standing on. It also tells the user what the historical Native territory is.

Some overlay scenes from Ambient Almanac
Some overlay scenes from Ambient Almanac

Some Thoughts on Machine-Assisted Coding

Writing off coding as less valuable in a value system of creative expression is definitely a controversial opinion. There are entire schools of thought around poetic computation and code-as-art. And I respect that. I still code weird, fun, pointless tools and websites, often by hand. And there is no straight scientific, mathematically accurate way to code projects. There are best practices, but then again, there are best practices in most vocations and crafts. I personally believe that coding for utility is not art and does not need to be as protected as art and artistic expression (See our AI Policy). I also do not believe that machine-made code is as damaging to the fabric of societal trust as is machine-made art, design, photography, music, or audio.

Ambient Almanac on an old ipad in some moody situation!

That said, I certainly was not going to code tens of thousands of lines of Swift by hand, nor could I if I wanted to. I’m comfortable handing that off to a computer, even if it is not perfect. This wasn’t client work, and I had no deadline or scope. I think if this were in a more rigid, paid client pipeline, I would bring on a full stack or Swift developer to assist and QA. That’s my general take on dipping into the agentic coding world.

It isn’t perfect, and often downright worse than hand-coding (I found myself learning Swift because I needed to get something done or correct a mistake from Claude Code that it simply wasn’t doing, or was doing wrong entirely). There are also capacity limitations. I’d find myself hitting a rate limit and just hand-coding the rest and learning that way. I think, as a learning modality, these tools can be really fun and helpful. I don’t think I’d replace a real, human developer with one of these just yet for big client projects.

A look behind the scenes at Ambient Almanac as it sits in the Xcode dock waiting to be tested

Vision vs Reality

While I am relatively happy with the end result, it’s live on the App Store, it mostly functions as expected, it’s pretty, etc., I do have some takeaways that I would change if I did this again. Now that I understand the limitations and the ecosystem of the Swift language, I would be a little less ambitious with the visual interpretation of my idea. Coming from a traditional art and graphic design background, I expect everything to be the most beautiful version of itself, with no limitations on painterliness, depth, weight, size, etc. A beautiful oil painting is a big, physical, unapologetic thing that takes up space, gravity, molecules, etc. Swift, and Apple hardware, are not canvases.

An oversimplification of an incredibly complicated Grow Zone logic in Ambient Almanac's Swift code
An oversimplification of an incredibly complicated Grow Zone logic in Ambient Almanac‘s Swift code

They are not supercomputers. They have real limitations, and for the first 4 months of this app development process, my test phones were overheating every time I tried to load the app. I had to really pare down the visual richness of the 3D environment and make some sacrifices to get it to a launchable, practical product. I had a nice, beautiful natural paper grain effect over the whole experience, but it just created so much backend computing drama that the devices would overheat. I had to remove it. Audio engines were often too complex and had to be simplified. I’m still paring down weather animations and 3D ecologies on successive updates just to get the app running faster. It’s an ongoing education.

If I do this again, I will certainly make things visually more simple. This was a bit of a disappointing limitation, and I think if I worked with a professional Swift developer, they would probably have some more nuanced workarounds or wisdom that I simply did not have access to with these AI coding agents.

Whats Next?

Overall, I created something I could not have completed on my own, at least not in 6 months, but I do feel like there were some severe limitations and gaps missing that would have benefitted from having a seasoned iOS developer at hand. I am still very proud of the app. I think it is very inconsequential and beautiful, and I look forward to improving it over the coming weeks and months until it is even more weird and fun.

Some unreleased postcard features in development for Ambient Almanac
Some unreleased postcard features in development for Ambient Almanac

Next I plan to continuously improve on the app as time allows. I am currently working on building an Animal-Crossing-style mail system that uses internal Apple Cloudkit identifiers instead of your contact list—keeping things minimal, private, & secure. The ethos of the app is no ads, no tracking, no weird scammy stuff. Pay once, free updates forever.

Check it out at the links below if you are interested:

Ambient Almanac on the Apple App Store

Official Ambient Almanac website: ambientalmanac.app

Our Simple AI Policy

Lots of small colorful heirloom tomatoes scattered on an olive green paper background
A bunch of loose heirloom cherry tomatoes I photographed last year. AI-free! (You can use this human-made photo for free along with others over on Unsplash)

Lately, I’ve been seeing more and more artists and creators publishing seemingly AI-assisted or completely AI-generated content, so I thought I would go ahead and publish our AI policy in case it helps anyone else who may be having questions or doubts about their own relationship to AI. It’s not a new policy for Tomato Lab; it’s just been sitting on the shelf for months, collecting dust. We will likely update it a lot in the coming months.

Our Creative work is Human-made

Tomato Laboratories does not use generative AI for visual art, illustration, design, photography, animation, or any core creative output.

Our visual and narrative work is conceived, crafted, and executed by humans.

This is a defining value of our organization, and it will not change.

What we do not and will never use AI for:

  • Image, photography, or graphics generation
  • Copywriting or writing of any kind
  • Creative briefs or creative ideation
  • Video or motion graphics generation
  • Audio or music generation
  • Brand guides
  • Editorial or layout design
  • UI/UX mockups
  • Product mockups

We selectively use large language models (LLMs) for administrative and technical support (such as engineering assistance), with all outputs directed and reviewed by humans, and never in place of human creative labor.

What we do allow the use of AI for (with assistance and quality assurance checking by humans):

  • Code assistance
  • Grammar checks
  • Research and data synthesis

Continuous Review

AI evolves quickly.

We review this policy periodically to ensure it reflects the evolving technological landscape, our commitment to the ethical treatment of human craft, the rights of artists, and the use of humane and sustainable technology.

Tomato Lab AI Policy

Branding Fish Sounds

Illustrations and diagrams by Tomato Lab, created for our client FishEye Collaborative, were recently published in the British Ecological Society’s journal Methods in Ecology and Evolution. Part of a larger web buildout and branding project, the illustrations were developed alongside a broader scene-building schema—or toolbox—crafted to meet the standards of scientific literature while maintaining a plain-language visual style and brand consistency.

Fish species silhouettes, coral reefs, rocks, and oceanic accompaniments were all hand-designed for future use cases. Seeing these published in a scientific journal was a wonderful way to transition out of the summer season.

The cover of the journal Methods in Ecology and Evolution is shown on a gray background
A magazine spread is shown with a scientific diagram showing various ways to record fish sounds underwater

The publication was picked up by several press outlets. The Washington Post, Earth.com, Nautilus, and even an episode of NPR’s All Things Considered (among others) featured FishEye’s work, drawing many curious eyes to the newly launched website and fish sound library we designed for the team. Overall, it was a great test run for the aquatic branding and visual identity to gain some real-world exposure above the surface.

Two screenshots of a website are shown, the website is a fish sound library and it shows a grid of illustrated fish
Two mobile device mockups are shown with a website on each - the first is a fish sound library and the second is an FAQ section about fish sounds

Another wonderful compliment was seeing their hardware sub-brand put our logo designs to use on compact hydrophone prototypes. Scattered across tropical reef sites around the world, the logo-adorned modules now rest on the seafloor between coral villages, quietly watching fish swim by until they’re collected by divers for analysis. Initial locations include Palau, the Great Barrier Reef, Curaçao, Wakatobi National Park, and Mozambique.

Three screenshots of a video are shown, they show a diver placing an underwater hydrophone device near some coral reefs to record fish sounds passively
Screenshots from FinDrop: Accessible Acoustic Monitoring for Mesophotic Marine Environments

Between leafing through vintage coral reef books, learning the subtle differences between fish-fin silhouettes, and designing an interface deserving of renowned and celebrated scientific Field Guide illustrator and author Val Kells (no pressure!)—whose beautiful illustrations were licensed for the project (thanks, Marc)—this was a fascinating and absorbing project to swim around in.

A photo of 4 pieces of coral next to two books - one book is A Field Guide to Coastal Fishes and the other is A Field Guide to Coral Reefs, both books show some wear and tear - the books are on a desk surrounded by coral and sea sponges and a vintage underwater camera

We’re looking forward to seeing where the FishEye crew takes the brand in the coming years as the science and technology propel it forward. 🐟 🐡 🤿

For more on the branding and approach, as well as a closer look at some of the deliverables, view the full case study.