Happy Monday, everyone!

We made it to Issue #76! Thank you to everyone who read last week’s issue ❤️

It’s a new month (and a new year) which means its time for a new sponor! Big thanks to Morpho for supporting Indie Dev Monday last month.

This month’s sponsor is Shayes Apps 🥰 Each week will be sponsored by different one of Shayes Apps. Take a loook at this week’s app below 👇

Today’s Spotlighted Indie Dev

📆 Today I’m featuring Krystian Kozerawski.

Krystian is the creator of Eter and Negative. Eter Radio is an app for listening to Internet radio stations and is available in a universal version for macOS, iOS, iPadOs and tvOS. Negative is a macOS app for viewing PDFs and inverting colors to view comfortably in the dark without tiring your eyes. Eter and Negative are both very cool apps 😎 I've been hard stuck with the same music on Spotify so I've been looking for a change. I didn't know what change I was looking for but somehow Eter found me. The best part of Eter is that its the same radio I listened to growing up but just on my phone 😉 Eter makes finding and listening to my favorite stations as easy as it could possibly be! Negative is also another amazing tool that I've been using. I work mainly in the early morning and evenings so I like everything to be in dark mode. Oddly enough, macOS doesn't have that feature with Preview when looing at PDFs. Thankfully Krystian came to my rescue and made Negative which inverts PDFs colors for easy reading 🙌

One other thing you'll notice is in today's issue is that Krystian has a passion for teaching. He's been teaching children programming using Swift Playground for five years! This is so amazing. Krystian is such an inspiration and I'm so excited to have him in today's issue!

👉 Please make sure to follow them or support them anyway you can! 😇 I’m excited to share their indie dev stories.

Indie Dev

Krystian Kozerawski

Lodz, Poland

Developer at Apparent Software and creator of Eter and Negative


Krystian Kozerawski

Q&A

1) What is your name? Where do you live?

My name is Krystian Kozerawski, I live in Poland, in the city of Lodz (about 80 miles west of the capital, Warsaw).

2) Introduce yourself. Education? Background? Main job? Interests outside of tech? Interests inside of tech?

I’m a guy in his fifties (I’m 47), who - as they say - has been arround. I did and I do various things in my life, but all of them are the result of some dreams and plans from my youth. And so I am an archaeologist by education and degree (MA). After graduation I worked for a few years in this profession and I dug in Ireland, Czech Republic and of course in Poland.

My second passion was and still is music. I am a metalhead and a guitarist who was an active musician in several Polish bands for over ten years. So I used to divide my time between touring, recording in the studio and digging. Unfortunately being an active archaeologist and musician conflicts with a normal life, it’s hard not only to support a family financially but to have a family at all, so at some point I realized it was time to look for something new.

Technology and computers were my passion since childhood. In the mid 80’s, when Poland was still behind the Iron Curtain, my mother could only buy me an 8-bit Atari, Apple II computers or Macintosh I saw only on pictures and ads in magazines imported from the West and the States. I bought my first Mac only in 2008. Before I started to learn programming I started to run a blog about Apple, which quite quickly became popular among Polish readers. Programming was still my unrealized dream from childhood. Finally, when Apple introduced Swift language I decided that it was time to make this dream come true as well.

My latest passion, related to programming, is teaching children. For five years I have been teaching children programming in Swift for free using Swift Playgrounds in my hometown but also in Warsaw and other cities.

3) Have you ever considered yourself an indie developer?

Have I ever considered myself an independent programmer? I think as a creator (of one sort or another), independence is in my DNA - creating things (be it music or apps) has always been a process with a large dose of independence for me. To some extent, I approach my work as a programmer similarly to how I approach music. I care about creating things that excite me, that contain some part of me. Even if it’s working in a team of some sort, I try to make the relationship feel a bit like working in a rock band.

In my case I’m a indy developer and I work in a small independent Canadian development studio (Apparent Software) where the relationships and the way of working remind me a bit of a rock band.

4) What got you started/interested in creating your own applications outside of your “normal” job?

For many years programming remained my unrealized childhood dream. As I wrote, in the second half of the 80’s my mom could only afford to buy an 8-bit Atari computer, it was also the time of popularity of arcade games and arcades (which, like in the U.S., were then quite numerous in communist Poland), so I definitely played more games, than tried my hand at programming. At that time I only learned the basic concepts such as variables, loops, conditional instructions, but my knowledge ended there. Finally, when Apple presented Swift language I decided that it was time to make this dream come true. The introduction of Swift coincided with some professional burnout and the beginning of the search for a new career and new opportunities. I remember that I made the final decision in January 2015 on the plane, on my way back to Poland from CES in Las Vegas (I had a lot of time to think during the flight).

5) How do you balance your time between friends/family, work, hobbies, and indie dev?

I have been working from home for over 12 years, which of course requires a lot of self-discipline. On the other hand it gives me much more flexibility. I can more easily make time for my family and friends. I have time for my free programming lessons for kids in my neighborhood school. I work on my proprietary apps mostly on weekends (unless a critical bug needs to be fixed quickly, but that thankfully is rare). Working remotely, from home, also saves time commuting to the office.

6) Eter - Eter is super dope! I used to listen to radio to a few radio stations when I lived back in Milwaukee but haven’t found anything new since I’ve been in Chicago. I’ve been missing my stations but I found one of them on Eter! So now I’m listening to 88.9 “Radio Milwaukee” 😊 What got you into internet radio and to start building Eter?

The idea of creating a radio app was born when a new internet radio station launched in Poland, which initially didn’t have a dedicated iPhone app. I thought it was a good opportunity to write such an application for myself and test SwiftUI. Since many of my Twitter friends also wanted to listen to this radio on their iPhones I quickly made available the first, very basic and very limited beta version of Eter in Test Flight. Over time, I added more stations, added CarPlay support, and started working on a Mac version of this app. My friends on Twitter were also asking me to add more and more radio stations to the app. At some point, I realized that adding more stations at the request of users is a dead end. So I started to look for a public database of Internet radio stations with a good API, and that’s how I found radio-browser.info. It’s probably the biggest public database of that kind, but of course you won’t find all the stations you’re looking for there. So in Eter there is an option to manually add the stream address, if only we have one.

Instead, I decided to offer different lists of recommended stations for each country. I am often assisted in selecting stations by friendly developers from other countries. However, sometimes the choice is quite difficult. Take the United States, for example. How to fit into the list of 10 - 12 items? So I decided to go with NPR stations, although it’s probably not the most accurate choice. Maybe I should do some kind of voting, poll, among users from the USA or other countries, which stations should be on the recommended list for given country?

Anyway composing lists of recommended stations for particular countries is a very interesting adventure. It’s a kind of travel around the world without leaving home. Selecting stations for a particular country I often visit the websites of broadcasters or take a virtual walk in Google Street View (if I have not yet had the opportunity to be in a city or country on the list for which I work).

7) Eter - I had no idea that radio-browser.info was a thing 🤯 I feel like every radio station would want internet radio if its so easy to listen to with an app like Eter! Do you know why only some stations stream to the internet? Also… do you have plans get Eter listed on radio-browser.info under the Apps page? 😇

I think most stations also broadcast online. However, not everyone wants the stream available through other apps or services. There are stations that much prefer to keep their listeners/users on their site or app. It’s not convenient for us listeners, but at the end of the day, it’s their own stream, so they can decide for themselves. I think they do this to keep listeners with them and offer them additional content or analyze the listenership level itself. Traditional FM broadcasting doesn’t offer that, so they are trying to take advantage of what internet streaming offers.

I admit that I did not think about being on the aforementioned list with applications using radio-browser.info. I have to make up for it!

8) Eter - What was one of the coolest things you’ve learned while building Eter? What was one of the hardest things you’ve run into while building Eter?

Eter is an app developed entirely in SwiftUI, so using this new technology was exciting in itself, and also a huge challenge. In general, everything in Eter was new to me: using Combine, syncing via iCloud, adding support for CarPlay, for the Apple Watch, Apple TV, or creating a Mac app, initially using Catalyst and eventually as a native macOS app.

I think I had the most trouble just adapting the iOS app (iPad version) to run on the Mac via Catalyst. Something that seemed easy and quick at first ended up being a source of frustration and problems, so I eventually decided to create a separate native build for macOS.

9) Eter - Where does the name Eter come from? I haven’t been able to figure it out

It’s simple, the word “Eter” is the Polish equivalent of the English word Ether, which is a magical volatile substance in which radio waves propagate :)

10) Negative - It looks like you created Negative to make it easier for you to read books at night that were teaching you how to program. That is awesome 😎 How much programming knowledge did you have when you started creating Ether? Did you plan to release it on the App Store from the start?

That’s right. Negative is an app that came from my own need. I learned programming in Swift using PDF e-books like Hacking With Swift by Paul Hudson or iOS Apprentice from Razerware by Ray Wenderlich. PDF manuals definitely work better than those in ePub format, where often a block of code is clipped or you have to swipe through it. Unfortunately, PDFs are usually in the form of a traditional book with black text on a white background. This white background displayed on a computer screen in the dark tires the eyes very quickly. So I looked for a PDF reader that would solve this problem. But I didn’t find any. So I decided to write my own reader based on a simple trick, which is possible in macOS, adding CIFilter which invert colors to PDFView layer.

When I created Negative, I had 1.5 years of Swift programming self education. At first, when I was working on Negative I only thought about myself. However, when Negative was ready, I realized that many other users who are adepts of programming have the same problem with reading PDFs at night. So I decided to make it available on the App Store for free.

11) Negative - I saw that you just rewrote Negative from the ground up. This sounds like a fun task 😁 What caused you to rewrite it? I don’t think I remember what it looked like but 2.0 looks and feels great 🙌

After one of the recent macOS Big Sur updates, users of Macs with Apple Silicon (M1) chips began to complain about problems with Negative. The app started crashing and could no longer be used. I thought it was a good time to not only fix the errors (the crash was related to saving additional attributes attached to PDF files) but also to rewrite it using SwiftUI. It was also a challenge. Negative is a document based app and a few tricks had to be applied here, because unfortunately not all of the new features introduced with macOS Monterey and SwiftUI 3 worked properly, but thanks to the advice of more experienced fellow developers, it was possible to solve virtually all the problems.

12) Eter, Negative - What’s next?! Do you have any future features planned for Eter or Negative that you can share with us?

When it comes to Eter, many challenges lie ahead of me. I plan to add support for Google Cast, a widget for iOS, support for Siri shortcuts or a mini Mac application nested in the top bar of macOS. So 2022 - as far as Eter is concerned - will be definitely exciting (at least for me :)).

And as far as Negative is concerned I also think that an application that would not only invert the colors using CIFIlter in PDFView, but dynamically change only the background colors of the viewed PDF would be useful. This, however, is definitely a bigger challenge, because it will probably require decomposing PDF and creating a dynamically new document of this type. Who knows, maybe it’s worth thinking about a team of independent developers who would like to prepare such an application with me?

13) Is there anything else you’d like to tell the indie dev community about you?

Yes, for five years I have been teaching children for free how to code in Swift with help of Swift Playgrounds app on iPads. I started with my sons’ classes in an elementary school in our hometown. Later, I also extended it to other schools and cities. Of course, my point is not to make all the children I teach developers, but to get them interested in the subject and let them have a solid foundation if they ever want to go further. A few children, whom I have been teaching in this way for several years, have already switched to Xcode and now study the courses themselves, incl. 100 Days of Swift by Paul Hudson. I want the classes to be available to all children and to remain free. In this way, every child at school, regardless of their parents’ economic status or origin, had equal access to knowledge and equal chances at starting. More information about my educational efforts can be found on the Patreon website.

14) Do you have any other indie devs that readers should follow / lookout for?

Of course! I recommend Mathias Gansrigler (@eternalstorms), developer of the apps such as Yoink, Screenfloat and Transloader. I also recommend Jacob Gorban (@jacobgorban), with whom I work in our indie dev studio Apparent Software, creator of, among others, applications such as Trickster, Image Framer or Prana.


Newly Released and Updated Indie Apps

Here are some newly released and newly updated apps from this past week! If you would like to possibly see your app in this list, please submit your app to the look at me form 👀

Supporter Newly Released
Supporter is a complete support section that you can add to your app in under 30 seconds. It's fully customisable, localisable and easy to edit from a local or remote JSON. It includes (optional) private analytics and lets you add images and videos to your support pages.
Use your iOS or iPadOS device as a display for all your speakers. By using NowPlaying you can quickly discover which song is playing and let the user find out more about the music that's on.
Classifier Newly Released
Take your collections everywhere you go with Classifier. Track your owned collectibles, create your wishlists, and organize with tags. Download for free!
A big update for both iOS & macOS to kick off the new year! Adds support for logging notes with goal updates, new Siri Shortcuts, and more. Progress has everything you need to follow through with your goals in 2022!

Thank you to everybody who made it to this footer! You either spent the time to read or took the effort to scroll 😊

Make sure to visit https://indiedevmonday.com/subscribe to get an email of future issues!

And go to Twitter and give @IndieDevMonday a follow… or multiple follows if you manage more than one Twitter account 😜