<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[David Künnen]]></title><description><![CDATA[a German software developer.]]></description><link>https://davidkunnen.com/</link><image><url>http://davidkunnen.com/favicon.png</url><title>David Künnen</title><link>https://davidkunnen.com/</link></image><generator>Ghost 2.4</generator><lastBuildDate>Sun, 21 Jan 2024 04:44:36 GMT</lastBuildDate><atom:link href="https://davidkunnen.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[How my stock app in Flutter reached $1k MRR in 6 months]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://davidkunnen.com/content/images/2020/05/image.png" class="kg-image"></figure><p>It's been 6 months since I launched <a href="https://stockevents.app">Stock Events</a> and recently the subscriptions for my app have been surging. How did this happen?</p><h2 id="i-created-something-i-actually-need">I created something I actually need</h2><p>I created a lot of things so far, but this is the first time I actually created something that I personally</p>]]></description><link>https://davidkunnen.com/how-my-stock-app-in-flutter-reached-1k-mrr-in-6-months/</link><guid isPermaLink="false">5ea1e3de2acd6d34aa80e771</guid><dc:creator><![CDATA[David Künnen]]></dc:creator><pubDate>Thu, 23 Apr 2020 20:42:24 GMT</pubDate><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://davidkunnen.com/content/images/2020/05/image.png" class="kg-image"></figure><p>It's been 6 months since I launched <a href="https://stockevents.app">Stock Events</a> and recently the subscriptions for my app have been surging. How did this happen?</p><h2 id="i-created-something-i-actually-need">I created something I actually need</h2><p>I created a lot of things so far, but this is the first time I actually created something that I personally need. I didn't even want to make money with this at first. It was okay if if's useful just for myself. </p><p><em>You may ask: "But there are tons of stock apps available, why creating something like that again?"</em></p><p>Yes, there are heaps of apps for stocks available. Many of them with a lot more data, more graphs, more of anything than mine, but they were all not what I was searching for. </p><p>I was interested in events that happen around stocks. Namely earning reports. Now almost every stock app shows when the next earnings will be and how past earnings turned out. But it's always very cumbersome to actually see which earnings are next. You'd have to click through all the stocks on your watchlist and look for the next earnings. </p><figure class="kg-card kg-image-card"><img src="https://davidkunnen.com/content/images/2020/04/image-2.png" class="kg-image"><figcaption><em>"Nice, but when will the next earnings happen?"&nbsp;</em></figcaption></figure><p>What I wanted instead was some sort of calendar view, with all important events of my stocks in the past and future lined up, so that I can see what's happening next or what happened last week. After not finding anything to my liking, I decided to just created it myself. </p><h2 id="i-created-something-unique">I created something unique</h2><p>By deciding on some sort of calendar view for the app instead of a watchlist, I created something no other stock app has. </p><p>But that wasn't the only unique feature I have. I integrated the most popular Subreddits on Reddit for stocks (yes, even the infamous /r/wallstreetbets) and added events that indicate when stocks are dipping.</p><h2 id="i-created-the-right-thing-at-the-right-time">I created the right thing at the right time</h2><p>COVID-19 has conquered the world and almost everywhere people are on lockdown. </p><p>This impact caused the stock markets to crash.</p><figure class="kg-card kg-image-card"><img src="https://davidkunnen.com/content/images/2020/04/image-3.png" class="kg-image"><figcaption>SPY past Year</figcaption></figure><p>Actually many people have been waiting for some sort of correction of the markets, so that they can buy stocks at a low price. Stock brokers reported as many new signups in the first quarter this year as they had in the entire last year. </p><p>All those people want apps that help with their investments.</p><h2 id="i-used-something-that-helps-me-create-fast-">I used something that helps me create fast.</h2><p>Why did I use Flutter? Because I'm able to create apps for both platforms with a beautiful UI, blazingly fast. </p><p>I created apps with other hybrid frameworks like Cordova or React Native in the past, but the results were not to my liking. </p><p>Cordova is just a webview and you can clearly see that. I want something that looks and feels native.</p><p>React Native is good, but creating a beautiful UI is a lot harder than it is in Flutter and oh lord if you want to upgrade to a new React Native version. You're in for ride!</p><p>As for my back end: It's lots of go services in some Kubernetes cluster, hosted in the Google Cloud.</p><h2 id="i-charged-enough-with-a-tight-restriction-">I charged enough with a tight restriction.</h2><p>I descided to go with a freemium model. You get most of the features for free and can subscribe to some sort of PRO version for more features. </p><p>Most of those features are nice to have but not mandatory, except for one. That one is a very rough restriction on the most crucial part of my app: The amount of stocks you can watch. Without subscribing, you <strong>can only add 8 stocks</strong> to your watchlist. Most people have a lot more than that. </p><p>I was sceptical whether that works or not, but it turns out it works like a charm. People are willing to pay for apps, if they think the features are worth it. </p><p>As for the amount. I'm charging ~29$/Year. At first I thought that might be too much, but no. Again, people are willing to pay for apps.</p><h2 id="i-created-something-that-just-works">I created something that just works</h2><p>Many apps are bugridden or have a lot of steps to actually get started. Why do I have to create an account if I just want to watch some stocks? No, thanks.</p><p>I focused on ease of adoption from the very beginning. No account, no login, no nothing. Just install the app and add your favorite stocks. I even added a list of the most popular stocks, so people don't have to search for themselves. </p><p>I tested the app rigorously to avoid any sort of bugs. Well, of course there have been bugs after go live, but they were fixed immediately.</p><h2 id="i-used-google-adwords-to-rank-fast">I used Google AdWords to rank fast</h2><p>To gain visibility, I wanted to rank high, fast in the Play Store. The best way to do that is to have a lot of installs. So I just hit AdWords without restriction to countries for a low bid price and it worked nicely.</p><figure class="kg-card kg-image-card"><img src="https://davidkunnen.com/content/images/2020/04/image-4.png" class="kg-image"><figcaption>Google AdWords at work</figcaption></figure><p>I did this for two weeks. That was enough to rank within the first 10 apps for my desired keywords.</p><h2 id="closing-thoughts">Closing thoughts</h2><p>I'm very happy with the way things went. Especially since it's the first time I actually created something I personally need.</p><p>By doing that I was very relaxed when it came to selling the app. Since even if it doesn't work, I still got this app that's useful just for myself.</p><p>Thank you for reading and I'm happy to hear from you!</p>]]></content:encoded></item><item><title><![CDATA[How to get 250k+ pages indexed by Google]]></title><description><![CDATA[A guide for speeding up the crawling speed of your website from a few pages per minutes to many pages per second.]]></description><link>https://davidkunnen.com/how-to-get-250k-pages-indexed-by-google/</link><guid isPermaLink="false">5c2fea732acd6d34aa80e757</guid><dc:creator><![CDATA[David Künnen]]></dc:creator><pubDate>Fri, 04 Jan 2019 23:31:36 GMT</pubDate><media:content url="https://davidkunnen.com/content/images/2019/01/dasdf.JPG" medium="image"/><content:encoded><![CDATA[<img src="https://davidkunnen.com/content/images/2019/01/dasdf.JPG" alt="How to get 250k+ pages indexed by Google"><p>When creating <a href="https://devsnap.io/">Devsnap</a> I was pretty naive. I used create-react-app for my frontend and Go with GraphQL for my backend. A classic SPA with client side rendering.</p><p>I knew for that kind of site I would have Google to index a lot of pages, but I wasn't worried, since I knew Google Bot is rendering JavaScript by now and would index it just fine</p><p><em>Oh boy, was I wrong.</em></p><p>At first, everything was fine. Google was indexing the pages bit by bit and I got the first organic traffic.</p><figure class="kg-card kg-image-card"><img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NrV4VLCT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/tbckeuwotch56sr6hv2v.png" class="kg-image" alt="How to get 250k+ pages indexed by Google"></figure><p>But somehow indexing was really slow. Google was only indexing ~2 pages per minute. I thought it would speed up after some time, but I it wasn't, so I needed to do something, since my website relies on Google to index a lot of pages fast.</p><h1 id="1-enter-ssr">1. Enter SSR</h1><p>I started by implementing SSR, because I stumbled across some quote from a Googler, stating that client side rendered websites have to get indexed twice. The Google Bot first looks at the initial HTML and immediately follows all the links it can find. The second time, after it has sent everything to the renderer, which returns the final HTML. That is not only very costly for Google, but also slow. That's why I decided I wanted Google Bot to have all the links in the initial HTML.</p><figure class="kg-card kg-image-card"><img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IpSQsN1p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/jiie4ygnge5jlc6nk96r.jpg" class="kg-image" alt="How to get 250k+ pages indexed by Google"></figure><p>I was doing that, by following <a href="https://medium.freecodecamp.org/demystifying-reacts-server-side-render-de335d408fe4">this</a> fantastic guide. I thought it would take me days to implement SSR, but it actually only took a few hours and the result was very nice.</p><figure class="kg-card kg-image-card"><img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DFKqWal5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/zp8p56n8aid324v4m0k0.JPG" class="kg-image" alt="How to get 250k+ pages indexed by Google"></figure><p>Without SSR I was stuck at around 20k pages indexed, but now it was steadily growing to &gt;100k.</p><p><em>But it was still not fast enough</em></p><p>Google was not indexing more pages, but it was still too slow. If I ever wanted to get those 250k pages indexed and new job postings discovered fast, I needed to do more.</p><h1 id="2-enter-dynamic-sitemap">2. Enter dynamic Sitemap</h1><p>With a site of that size, I figured I'd have to guide Google somehow. I couldn't just rely on Google to crawl everything bit by bit. That's why I created a small service in Go that would create a new Sitemap two times a day and upload it to my CDN.</p><p>Since sitemaps are limited to 50k pages, I had to split it up and focused on only the pages that had relevant content.</p><figure class="kg-card kg-image-card"><img src="https://res.cloudinary.com/practicaldev/image/fetch/s--evn3n3hJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/i36qstybkd9byhw1bp5w.JPG" class="kg-image" alt="How to get 250k+ pages indexed by Google"></figure><p>After submitting it, Google instantly started to crawl faster.</p><p><em>But it was still not fast enough</em></p><p>I noticed the Google Bot was hitting my site faster, but it was still only 5-10 times per minute. <em>I don't really have an indexing comparison to #1 here, since I started implementing #3 just a day later.</em></p><h1 id="3-enter-removing-javascript">3. Enter removing JavaScript</h1><p>I was thinking why it was still so slow. I mean, there are other websites out there with a lot of pages as well and they somehow managed too.</p><p>That's when I thought about the statement of #1. It is reasonable that Google only allocates a specific amount of resources to each website for indexing and my website was still very costly, because even though Google was seeing all the links in the initial HTML, it still had to send it to the renderer to make sure there wasn't anything to index left. It simply doesn't know everything was already in the initial HTML when there is still JavaScript left.</p><p>So all I did was removing the JavaScript for Bots.</p><pre><code>if(isBot(req)) {
    completeHtml = completeHtml.replace(/&lt;script[^&gt;]*&gt;(?:(?!&lt;\/script&gt;)[^])*&lt;\/script&gt;/g, "")
} 
</code></pre><p>Immediately after deploying that change the Google Bot went crazy. <strong>It was now crawling 5-10 pages - not per minute - per second.</strong></p><figure class="kg-card kg-image-card"><img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wg_A9xy0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/77kz23tc3jz5n14boefk.JPG" class="kg-image" alt="How to get 250k+ pages indexed by Google"></figure><figure class="kg-card kg-image-card"><img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AgTSHPlW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/fj531qkcyjhuk47r0adz.JPG" class="kg-image" alt="How to get 250k+ pages indexed by Google"></figure><figure class="kg-card kg-image-card"><img src="https://davidkunnen.com/content/images/2019/01/image.png" class="kg-image" alt="How to get 250k+ pages indexed by Google"></figure><p></p><p>And this is the current result. Since I implemented the changes just recently, there are still a lot of pages that have been crawled, but haven't been indexed yet (grey bars). Nevertheless I'm more than happy with the result.</p><p>After having Google index all the pages, the performance went up a lot as well.</p><figure class="kg-card kg-image-card"><img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pS_3dEHp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/62qvba66iljh4e2h0dky.JPG" class="kg-image" alt="How to get 250k+ pages indexed by Google"></figure><h1 id="conclusion">Conclusion</h1><p>If you want to have Google index a big website, only feed it the final HTML and remove all the JavaScript (except for inline Schema-JS of course).</p>]]></content:encoded></item><item><title><![CDATA[My most important things to do]]></title><description><![CDATA[All the things I love to do that helped me become the person I am right now.]]></description><link>https://davidkunnen.com/my-most-important-things/</link><guid isPermaLink="false">5c14e46e2acd6d34aa80e6c8</guid><dc:creator><![CDATA[David Künnen]]></dc:creator><pubDate>Sat, 15 Dec 2018 12:36:35 GMT</pubDate><media:content url="https://davidkunnen.com/content/images/2018/12/photo-1530847887473-36dbaf586122.jpg" medium="image"/><content:encoded><![CDATA[<h3 id="1-meditation">1. Meditation</h3><img src="https://davidkunnen.com/content/images/2018/12/photo-1530847887473-36dbaf586122.jpg" alt="My most important things to do"><p>If you mention meditation to people here in Germany you usually get weird looks. It's kind of a pity really. I've always thought differently about it. I started to meditate 10 years ago, since thought it was cool. Maybe because I loved Dragon Ball, where Goku and friends got stronger when they meditated? Anyways, I bought some books and started doing basic <a href="http://how-to-meditate.org/breathing-meditations">breathing meditation</a> for 10 minutes a day. It was kind of hard at first, but got easier over time. After doing it for several weeks I noticed that I was becoming less stressed, more happy and less anxious. I was able to concentrate better and became more self aware. It was fantastic and I was wondering why not anyone would do this? Why didn't they teach it at school? It's like one of the greatest things to do to become more happy.</p><p>Some time later I found <a href="https://www.sciencedirect.com/science/article/pii/S092549271000288X">this study</a>. It says, that doing meditation even irreversibly rewires your brain to achieve the results I mentioned. That's pretty cool actually. You don't even have to do meditation all the time, just doing it once for some time in your life is enough to become a better person for the rest of your life.</p><h3 id="2-yoga">2. Yoga</h3><p>Again, if you mention this to people here in Germany, you get weird looks. As a male even more so. And again it's such a pity. So many people I know complain about back and neck pain, stress and all this stuff. They take pain killers or other meds to get rid of it. Why not work on the cause instead? We are mostly sitting in offices all day long these days. That causes our muscles and tendons to shrink, which causes the aforementioned pains. </p><p>Yoga is for exactly these things. It stretches your tendons, strengthens your back and calms your mind. It's not even as exhausting as a full workout in the gym, but much more beneficial. It's something anyone can and should do, regardless of age or other circumstances. On top of that you learn to do headstand. How cool is that?</p><h3 id="3-making">3. Making</h3><p>I started coding when I was 12, because I wanted to play games that didn't exist. I didn't accept the fact that whatever I wanted to have wasn't there. I needed to have that so the only way was to create it myself. </p><p>The first game was in Visual Basic. It was like Space Invader. It was thrilling to for me to have total control over how the game works and what I could do with it. Usually you'd have to to cope with it if a game didn't work like you wanted.</p><p>When I was 14 I created games in Java. One custom version of Tetris and a game where I could shoot down a band I didn't like. A nice side effect was that my computer class teacher let me play my games during class, since he really couldn't teach me anything anymore.</p><p>This passion of mine still hasn't stopped. I created many things throughout the years. Some with more success, some with less. But I always learned a lot. </p><h3 id="4-music">4. Music</h3><p>I have been playing the piano since I was 6 and I'm convinced it helped me a great deal in developing my brain into what it is today. While playing music you need to concentrate. A lot. You have to repeat things over and over again, become totally engrossed in a task and overcome your limits. </p><h3 id="5-games">5. Games</h3><p>I love playing games. It's the best thing to detach yourself and relax. These days I usually play a few games League of Legends after coming home. It's always a good break.</p><p></p><p></p>]]></content:encoded></item></channel></rss>