Hey guys, so Swiftor from Twitch joined Atomcal with his 4Million + subscribers using ATomcal on a daily basis.
That... well, fucked us up. I wasn't prepared as an indie hacker. I didn't know the extend of things that could go wrong... and then 2 months later HE LEFT THE PLATFORM...
But I couldn't possibly give up on him, somehow I kept a positive attitude. I did what I do the best and made a check list... what went wrong? what can be fixed? what are the priorities? after fixing what was broken, improved a hell lot more, then I shared the list with him, and HE AGREED to try it again :D
so now Swiftor is back as a full time Atomcal user, and the best part is ... well, ill keep it a secret for now ... but checkout his calendar here
Btw Atomcal grew a whooping 46% last month. That was indeed a feat to celebrate with a blog post! Good luck guys. and have fun <3
What happened
On 28 May '23 (26 days ago today 23 June '23) a massive Twitch and Youtube influencer signed up to use Atomcal known as Swiftor. Swiftor already had a Discord schedule he was manually managing and he had an unmanaged Twitch schedule with some recurring events.
I reached out to him via a cold DM on Discord. He seemed interested in giving the bot chance and since connecting multiple accounts is a premium feature I had to give him complementary free access to get things going.
How long do you keep someone using a product for free? 15 days? 30 days? Well, it wasn't as simple as it sounds. Last 26 days went so quickly I can't even tell what happened and what work was done during these 26 days.
Although I have some rough memory of all the things that went wrong and that I had to fix for Swiftor to make the bot work properly for him and improve it.
Needless to say I have became a thorough watcher of Swiftors Twitch stream. His stream starts around 6pm my time and goes until 3am in the morning. Naturally had to shift my work schedule accordingly. Specially in the last 2 weeks and whilst sacrificing my sleep cycle and the way of life. I did what needed done.
Here is sneak peak of what happened...
All the commits made since Swiftor joined; mostly performance based
196 commits made both improving the product by adding features and fixing existing bugs or improving existing features to accomodate the Swiftor useage
What changed and what broke
One of the biggest bump in Atomcal usage after Swiftor joined as 150+ guests per event, the most guests were 200+ that could make you lose your sleep, of-course the code struggled to keep up. Hotfixing guest signups when 200+ guests are signing up was the most fun I ever had coding.
Then something else broke like it was sending @tags to 200+ guests in one GO and multiple times as event is broadcasted 2-5 times ... not a smart more which made all guests cry SPAMMER and KICK IT to the bot that was funny... my apologies truly I didn't know that was annoying ... all tags removed, 2am in the morning a hot-patch was out, nobody noticed but that was the point anyways
Stream was live but event ended
Then his stream was still on going when the event ended... that wasn't appropriate and reflective of what was going on... so I thought why not to increase event time while the stream is still live?! Alas the new periodic check was spinning up the checked event ending in 5 minutes every minute. That is how event start or end notifications and routines are triggered. Check event starting or event ending every minute and process in parallel using promise resolve.
If event is ending in the next 5 minutes, and its a stream and the streamer is still streaming bump the time by 15 minutes. Also save this bump as a history message for safe keeping and send it as an update in the announcement thread!
Swiftor changes his stream title and game category 2-3 times
Swiftor change his stream game type and stream title middle of his stream... which doesn't reflect the Discord event, so event has to be updated accordingly. Now since we're tracking the event 5 minute before ends... the data that twich returned when checking if the streamer is live also included the title and category of the event. Alas, if the title and category is different in this case, update the event and also create history and channel message.
Why not watch stream go Live, Offline, Updated
Can it be improved? We're bumping event end time by 15 minutes if stream is still live before 5 minute of event end time. What if Swiftor finish his stream before the 15 minute bump? Only if we could end the event immediately if stream ends? But sometimes stream could end if someone disconnected from their internet. Which I believe is counter intuitive.
Watching Swiftor stream goes LIFE and OFFLINE and online can help send a message that stream has started in thread if exists... or outside if it doesn't. Watching someone go live and auto creating an event if it doesn't exists is also possible... If Swiftor goes offline and event is ending in 20 minutes then this extra time can be skipped by updating end time to now + 1 minute.
Fix Twitch events not updating on schedule recalibration
Of-course updating Twitch event was broken, and had hi-cups. Would have never found out if not monitored Swiftor streams and schedule closely. Fixed tho.
Swiftor likes creating event from Discord then sending it to Twitch and Google; How can we improve it?
Problem with creating events via Discord is you can't set the event category. So now by default his events doesn't have a category by default. It gets added on the first end time bump... but what about the event details for the initial 1 hour duration until the first bump? In this period thumbnail are not captured or title and categories are not updated... its a mess
It doesn't exactly reflect what is going on Twitch .
So for this how about we add a default category for events, like we have default statuses OR event better using the event title pick the best event category... if it is a wrong category Swiftor can always go to the dashboard to fix it.
And also, what if Swiftor wants to add a @tag a role when creating an event... do we save the discord message as default and use when event is made via Discord? If yes, great if not update but should ask Swiftor to add tags.
There is segment in Drops Enabled || 2 gift subs = Primal Mount || Rogue/64/W3 Diablo 4 stream on 23 Friday June... where Swiftor says something about Twitch notifications bein ineffective... well if he adds a default @tag role to the event then this problem can be fixed
To fix this, I am thinking to forcefully check the stream every 15 minutes instead of only 5 minutes before the event ends? OR if it is a Twitch stream and stream is live... we could set the end time to be start time +15 minutes, then it will keep bumping the time ... THINK think you bastard
Collecting stream images to share when event ends
While processing the end time extension the data which Twitch was returning had alot of other things like category and title to figure if it changed and also thumbnail images which were different everytime.
So now the bot started storing these images to share when stream ends to show people who didn't join how the stream looked and the idea is to show everyone what happened and that if someone should join the next time.
Changing calendar background image based on active events category
Okay this was cool
Allow every announcement to be shared as a new message
Swiftor promotion channel has a lot of messages which makes his event announcement lost in message pretty fast and since the any next announcement after the first one share the next announcement message in the thread the announcement message was still hidden in the scroll.
For that an option to announce an event as new everytime a broadcast is triggered mean Swiftor event can always be at the top of the list
Fixing cross promotional announcement to not include @everyone or @here tags or the announcement message AND to not allow manually announcement to post in cross promotional channels
This is something i figured from another server, but it is essentail to have when there are bigger servers allowing cross promotions
Asking Swiftor to add @role tags in his event announcements
Yes, Swiftor couldn't figure out this was an option. When I shared it with him after one of his event didn't get the right traction he was delighted and surprised this was possible. Hmm it can be improved by making adding tags an obvious option.
Swiftor event thread had this weirdly long list of members
This doesn't seem right, or looks good if there are more than 200+ guests in an event. Which means adding an option to hide this list in the threads is needed.
Event DM notification are setup to run in a for loop... and if there are 200+ guests it takes up to 2+ minute to process all DMs
Make all the DMs to process in parallel by using Promise.Resolve
Sometimes Swiftor sets his event to start at a time but doesn't start the the stream 10 minutes until past that time
If we start watching the stream start/end then a ping can be sent when the event actually starts... message can have the tags and the message can be shared in threads or if no thread is found send in the channel directly...
OR PERHAPS! If an event is starting in 5 minutes and its a stream and if the stream is not live we could bump the start timing and duration by 5 minutes! what DO YA THANK?!
Lets remove the paywall
Value first approach