Sign in

Aleksander Stojanowski

@stojanowski.dev
168 followers 370 following 1.1K posts

#IndieHacker working on @letspark.it

PostsRepliesMedia
Aleksander Stojanowski @stojanowski.dev · 07/11/2025
I even set a deadline for myself, but I’m not ready to share it with you yet. 😅 Either way, the long weekend in Poland we start today might give me a bit of a head start, or at least I hope so. 🤞
000
Aleksander Stojanowski @stojanowski.dev · 07/11/2025
I plan to leave basically only the data model, as I want users to be able to upgrade to the new version seamlessly, but everything else I plan to get rid of and start from scratch.
100
Aleksander Stojanowski @stojanowski.dev · 07/11/2025
I’ve learned so much during all this time, and the more I want to change, the more I see I have issues in the foundation of the app, so either way I need to change a lot even for some basic functionality. 🫤
100
Aleksander Stojanowski @stojanowski.dev · 07/11/2025
However… Struggling with App Intents, I made a tough decision regarding Spark’s future. Instead of slowly progressing as I did over the last half a year or so, I’ll make a hard cutoff and start developing version 2.0. 😳
100
Aleksander Stojanowski @stojanowski.dev · 07/11/2025
Much later than I wanted to, but a new version of Spark is available to download! 🥳 It’s also a much smaller update than I thought it’d be, but at least now Spark has a new #LiquidGlass icon. 🤩 #BuildInPublic #iOSDev #IndieDev #IndieHacker
261
Aleksander Stojanowski @stojanowski.dev · 30/10/2025
That’s nice, but can we get contact photos on iPad back maybe? 🤔
000
Aleksander Stojanowski @stojanowski.dev · 25/10/2025
It’s not much, but it’s honest work. 😊 #BuildInPublic #IndieHacker #iOSDev #IndieDev
051
Aleksander Stojanowski @stojanowski.dev · 25/10/2025
As for the progress in general, I had yet another exhausting week and I haven’t made much progress. I even took a 2-day break from working on Spark completely! 😱 However, I managed to create intents to work with habit groups and extended entities, so I can use them with my view.
100
Aleksander Stojanowski @stojanowski.dev · 25/10/2025
I avoided watching Apple’s materials on AppIntents for now and mostly read documentation and example projects, but maybe it’s high time to make use of them. 😁
100
Aleksander Stojanowski @stojanowski.dev · 25/10/2025
Running them directly from code by instantiating them and calling perform makes them run in an environment where all their dependencies aren’t initialized. At least that’s what I understand from chatting with AI. However, I admit I haven’t double-checked yet. 😅
100
Aleksander Stojanowski @stojanowski.dev · 25/10/2025
This time I asked AI what’s going on, and its explanation seems reasonable. In a nutshell, intents for their dependency injection to work properly need to be run in a proper environment. Be it via Button with intent as a param, or from the Shortcuts app.
100
Aleksander Stojanowski @stojanowski.dev · 25/10/2025
So… I’ve just learned that most of my adoration for #AppIntents was premature. 😆 I discovered why they didn’t work from actionable notifications, by having the same issue when I tried to use them in .onMove. 😬 #BuildInPublic #IndieHacker #iOSDev #IndieDev
151
Aleksander Stojanowski @stojanowski.dev · 20/10/2025
Well, this time I mostly changes the internals, user doesn’t see any changes, or rather shouldn’t. 😅 That’s what I want to test the most, that all my App Intents that now drive the app logic make it work as before.
000
Aleksander Stojanowski @stojanowski.dev · 18/10/2025
As usual, if you’d like to help me with testing Spark, just DM me and I’ll send you an invite. 😊 #BuildInPublic #IndieHacker #iOSDev #IndieDev
171
Aleksander Stojanowski @stojanowski.dev · 18/10/2025
During the week, I also attempted to change a bit some animations in the app, but I failed, so for now there is nothing new the user can actually see by using the app. At least I hope so, there won’t be a bunch of crashes from running intents. 😆
100
Aleksander Stojanowski @stojanowski.dev · 18/10/2025
The only problem I have is using App Intent from an actionable notification. For some reason, dependency injection doesn’t work when the intent is performing in a delegate handler. I work around it for now, by passing them manually to the intent instance, but it feels wrong. 😑
100
Aleksander Stojanowski @stojanowski.dev · 18/10/2025
It looks like two weeks in a row I’m coming back to you with an update. 😅 Again, #TestFlight one, but I’m now much closer to a full update! Today I finished introducing #AppIntents to @letspark.it They aren’t available from Shortcuts or Siri, but they helped me clean up code.
100
Reposted by Aleksander Stojanowski
Aleksander Stojanowski @stojanowski.dev · 11/10/2025
As usual, if you‘d like to help make @letspark.it better, or just use the best #HabitTracker there is (😝) for free, just send me a DM and I’ll send you an #TestFlight invite. 😉
001
Aleksander Stojanowski @stojanowski.dev · 11/10/2025
As usual, if you‘d like to help make @letspark.it better, or just use the best #HabitTracker there is (😝) for free, just send me a DM and I’ll send you an #TestFlight invite. 😉
001
Aleksander Stojanowski @stojanowski.dev · 11/10/2025
Frankly, the next few weeks are going to be even tougher for me, and I think most of that will need to wait until sometime in November. 😩 I’m just happy I found time and strength to work for just a bit today. 😊
000
Aleksander Stojanowski @stojanowski.dev · 11/10/2025
Not only will they make the code much simpler, but they will enable me to share them via shortcuts and Siri with users easily in the future. 😉
100
Aleksander Stojanowski @stojanowski.dev · 11/10/2025
However, before full migration, I plan to move all data operations to #AppIntents. I played with them for a while, and only now I see that I should have started with them from the beginning. 🙈
100
Aleksander Stojanowski @stojanowski.dev · 11/10/2025
It’s strongly coupled with my data model, and it makes the changes in the data schema so hard for me. Luckily, I have an idea of how to separate these two matters, and it should remove the main blocker of migrating to a new schema! Hopefully. 🤞
100
Aleksander Stojanowski @stojanowski.dev · 11/10/2025
Frankly, it’s quite a small update. I streamlined background tasks at last and created a simple solution for synchronous scheduling of background work, without strange workarounds as before. The next task I want to tackle is… Notification scheduler. 😫
100
Aleksander Stojanowski @stojanowski.dev · 11/10/2025
I’m back! 🥳 I had some tough times, caught a cold… Generally not the best period. 😅 I’m still not 100% healthy and strong, but back nonetheless. I even brought the Spark update with me! 😱 New #TestFlight version, but the update is an update, it still counts! 😜 #BuildInPublic #iOSDev #IndieDev
191
Aleksander Stojanowski @stojanowski.dev · 05/10/2025
I believe I must be missing something, but I just have too little experience with #SwiftConcurrency, I guess. 😔 #BuildInPublic #IndieHacker #iOSDev #IndieDev
141
Aleksander Stojanowski @stojanowski.dev · 05/10/2025
Even the description sounds horrible. 😬 Moreover, I believe there are cases when something might go wrong, but I just haven’t encountered them yet. I thought the actors could save me here, but reentrancy means every await call makes my actor method calls interleave. 😩
100
Aleksander Stojanowski @stojanowski.dev · 05/10/2025
That forced me to create yet another horrible solution when waiting for execution to finish means I close the async stream, wait for the background task to end, and recreate the stream with its background handler.
100
Aleksander Stojanowski @stojanowski.dev · 05/10/2025
I created my handler in a way that enqueues the operations to an async stream and executes them on a background thread in the proper order, but it looks and feels like a very dirty workaround. Especially since I need to be sure that it finishes in a few places.
100
Aleksander Stojanowski @stojanowski.dev · 05/10/2025
Don’t get me wrong, most of the APIs that are asynchronous are fine. The problem in my case is that I need to be able to call methods from different places and for them to be executed synchronously.
100
Aleksander Stojanowski @stojanowski.dev · 05/10/2025
I hate notification scheduling on iOS. 😩 The main problem I have right now with moving my code to intents is that I need to handle notifications scheduling correctly, and today I realized why I hate that API so much. It’s asynchronous!
100
Aleksander Stojanowski @stojanowski.dev · 05/10/2025
Working on a new schema (at last 😆), I decided I need to move my data interaction to app intents (yet another excuse 😅), as then I'll have one point to change my logic after schema migration. However, that means I need to extract my logic first, and it made me realize one thing…
100
Reposted by Aleksander Stojanowski
Signal @signal.org · 03/10/2025
We are alarmed by reports that Germany is on the verge of a catastrophic about-face, reversing its longstanding and principled opposition to the EU’s Chat Control proposal which, if passed, could spell the end of the right to privacy in Europe. signal.org/blog/pdfs/ge...
signal.org
4039242364
Aleksander Stojanowski @stojanowski.dev · 28/09/2025
If you’d like to test Spark, let me know through DM, and I’ll send you a #TestFlight invite. 😉 Remember that in Test Flight, you “buy” subscriptions for free. 😁
000
Aleksander Stojanowski @stojanowski.dev · 28/09/2025
I spent more time working on that than I initially anticipated today, but as a result, there is a new #TestFlight build waiting to be released for testers. 😆 As if the optimization was too little, I upgraded the app icon to a #LiquidGlass design as well. 😁
The new app icon for the Spark habit tracker, featuring a modern Liquid Glass design with a stylized flame in vibrant orange and yellow gradients, enclosed in a rounded square with a subtle shadow.
100
Aleksander Stojanowski @stojanowski.dev · 28/09/2025
I have to more often say publicly that I don’t have much time to do something, I guess… I’ve sat for a moment to optimize the calendar view before migrating to a new schema, and it happened that I had a lot of opportunities to do so. 😅 #BuildInPublic #iOSDev #IndieDev
170
Aleksander Stojanowski @stojanowski.dev · 27/09/2025
I wish I could say that the next update is near, but I believe the new schema might be really necessary to optimize everything without some strange hacks, and frankly, life happens, and I won’t have much time to work on Spark in the near future. 😩
000
Aleksander Stojanowski @stojanowski.dev · 27/09/2025
There is also a problem with sheets animating together with button presses. I don’t understand what’s going on there, especially when that behavior is gone if the sheet has full height. 🫤 I’m quite sure it has something to do with #LiquidGlass, but I don’t know what yet. 😔
100
Aleksander Stojanowski @stojanowski.dev · 27/09/2025
It requires some optimizations. However, in the playground project, it worked smoothly, so I suppose the new data schema used there might help. Yet another reason I have to migrate at last… 😬 #IndieHacker
220
Aleksander Stojanowski @stojanowski.dev · 27/09/2025
It took me much longer than I wanted, but I started at last moving the new calendar view out of the playground project into Spark, and I must admit the results are great. 😊 Not only can you now easily go through history, but the calendar now scrolls naturally. 😁 #BuildInPublic #iOSDev #IndieDev
Two smartphones displaying the "Write a Journal" habit in the Spark habit tracker app. The left phone shows a detailed monthly calendar view for September, highlighting completed days with blue circles. The right phone displays a summary view with a grid of completion dots for June, July, August, and September, emphasizing the 59-day streak and a 3-day streak type. Both screens use a dark theme with purple and blue accents.
1101
Reposted by Aleksander Stojanowski
Spark - Habit Tracker @letspark.it · 29/08/2025
Ready to build better habits with the new & improved Spark? ⬇️ Download now and take control of your daily routines ✨📈 #SelfImprovement #DailyHabits #ProductivityApps
apple.co
‎Habit Progress Tracker - Spark
‎What if your habits grew stronger each day instead of crumbling? Spark turns shaky intentions into unstoppable momentum through atomic tracking and guilt-free reminders. No complex systems – just a f...
001
Aleksander Stojanowski @stojanowski.dev · 20/09/2025
Having said that, I find POC, especially UI, it generates in the end very useful. It might be that I’m just more patient and I take time to clean up the mess it creates, or maybe the fact I try to ask only for small iterations of changes and clean as it goes. 😅
110
Aleksander Stojanowski @stojanowski.dev · 20/09/2025
I have similar thoughts, however I used Claude only through Copilot on VSC and never for iOS development. I’ve been trying new AI integration in Xcode (ChatGPT, and only free version) lately and if I don’t give it a set of constraints it most often generates garbage code. 🫤
110
Aleksander Stojanowski @stojanowski.dev · 19/09/2025
I must admit, that after a tough week, that win makes me enormously happy, and in order not to change that, I decided to go to sleep before I find some new problems 😆
000
Aleksander Stojanowski @stojanowski.dev · 19/09/2025
I almost gave up for the day, but then I got one more idea… Let’s flip the view horizontally! That’s it! Now calendars scroll in natural order, and everything works smoothly! 🥳 Of course, I needed to flip both, the parent scroll view as well as the calendars themselves. 😅
100
Aleksander Stojanowski @stojanowski.dev · 19/09/2025
Then I got a quick fix. Instead of moving the view to the end, let’s reverse the array. Brilliant! Now swiping between months is also reversed… 😩 I asked an AI for help, but it couldn’t propose anything performant as well. 😬
100
Aleksander Stojanowski @stojanowski.dev · 19/09/2025
That in itself caused the app to lag, a big amount. Mostly because a lot of computation was required to create a single month calendar. I need to optimize the view, but it will help only a bit in case of dozens of views being created at once. 😕
100
Aleksander Stojanowski @stojanowski.dev · 19/09/2025
The dates in the array were from the oldest one to the present, which caused that first month the user saw after opening was an ancient history. Using scroll position for some reason caused that for every month in the array, the calendar view was created when moved to the end. 😔
100
Aleksander Stojanowski @stojanowski.dev · 19/09/2025
It went viral that time wheel in iOS picker isn’t infinite. I did the same. Instead of fighting with adding new months when needed, I generated a list of dates, put them into a lazy stack, and… I got the problem. 🥲
100
Aleksander Stojanowski @stojanowski.dev · 19/09/2025
I just got the moment of peak engineering! I struggled with an infinitely scrolling calendar timeline. I tried a few approaches, but none of them worked as intended (to say the least 😆). Then it struck me! #BuildInPublic #IndieHacker #iOSDev #IndieDev
291