{"id":296,"date":"2020-05-06T15:23:55","date_gmt":"2020-05-06T13:23:55","guid":{"rendered":"https:\/\/mic.st\/blog\/?page_id=296"},"modified":"2024-11-05T21:27:12","modified_gmt":"2024-11-05T20:27:12","slug":"portfolio","status":"publish","type":"page","link":"https:\/\/mic.st\/blog\/portfolio\/","title":{"rendered":"Portfolio"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">iOS Apps<\/h2>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-d0b3c9c8 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"--col-width:33.33%;flex-basis:33.33%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"1024\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/overview_de-472x1024.png\" alt=\"Screenshot of overview screen of Home Renovation App\" class=\"wp-image-956\" style=\"width:225px;height:487px\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/overview_de-472x1024.png 472w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/overview_de-138x300.png 138w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/overview_de-768x1665.png 768w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/overview_de-709x1536.png 709w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/overview_de-945x2048.png 945w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/overview_de.png 1179w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><figcaption class=\"wp-element-caption\">Overview screen<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"1024\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/analytics_en-472x1024.png\" alt=\"Screenshot of Home Renovation App Analytics screen\" class=\"wp-image-955\" style=\"width:207px;height:448px\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/analytics_en-472x1024.png 472w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/analytics_en-138x300.png 138w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/analytics_en-768x1665.png 768w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/analytics_en-709x1536.png 709w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/analytics_en-945x2048.png 945w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/analytics_en.png 1179w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><figcaption class=\"wp-element-caption\">Analytics screen<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"472\" height=\"1024\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/newRoom_de-472x1024.png\" alt=\"\" class=\"wp-image-957\" style=\"width:237px;height:512px\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/newRoom_de-472x1024.png 472w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/newRoom_de-138x300.png 138w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/newRoom_de-768x1665.png 768w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/newRoom_de-709x1536.png 709w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/newRoom_de-945x2048.png 945w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2024\/11\/newRoom_de.png 1179w\" sizes=\"auto, (max-width: 472px) 100vw, 472px\" \/><figcaption class=\"wp-element-caption\">Creating a new room<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"--col-width:66.66%;flex-basis:66.66%\">\n<h3 class=\"wp-block-heading has-text-align-left\">Home Renovation App<\/h3>\n\n\n\n<a href=\"https:\/\/apps.apple.com\/app\/apple-store\/id6708240777?pt=120128198&#038;ct=mic.st_portfolio&#038;mt=8\"><img decoding=\"async\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/04\/Download_on_the_App_Store_Badge_US-UK_RGB_blk_092917.svg\"><\/a>\n\n\n\n<p>Landingpage with all the features and release information: <a href=\"https:\/\/homerenovation.tips\/\" target=\"_blank\" rel=\"noopener\">https:\/\/homerenovation.tips<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Technologies used<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SwiftData<\/li>\n\n\n\n<li>SwiftUI<\/li>\n\n\n\n<li>Apple Sign In<\/li>\n\n\n\n<li>Google Sign In<\/li>\n\n\n\n<li>In App Subscriptions using Revenue Cat<\/li>\n\n\n\n<li>Parse Framework<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Idea for this app<\/h4>\n\n\n\n<p>During the process of buying a house I searched for an app that keeps track of the renovation budget in a really simple way. I did not find anything, that is why I decided to create someting. Also I did neither use the rather new SwiftData framework nor SwiftCharts. This app seemed like a good opportunity to try both of these.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Features<\/h4>\n\n\n\n<p>The basic idea is that you can have buildings, that can have floors, these floors do have rooms and the rooms do have renovations.<\/p>\n\n\n\n<p>This is the underyling relationship for everything. On top of this, you can track progress of renovations in a simple &#8220;todo&#8221; or &#8220;done&#8221; way. This is summed up across all renovations, rooms and floors to draw nice little graphics.<\/p>\n\n\n\n<p>Renovations always can have an estimated cost amount and a spent amount. This is currently just summed up and in a couple of places you can switch between both values to quickly compare them. E.g. if a certain floor, room or a whole building is above budget.<\/p>\n\n\n\n<p>There is an analytics screen that shows the different amounts in some interactive donut charts. Based on the timestamps for renovations I am planning to also include some time of historical overview of the renovations.<\/p>\n\n\n\n<p>A feature for sharing data across devices and maybe platforms later on is currently in development. I am using Parse as a backend for that.<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-d0b3c9c8 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"--col-width:33.33%;flex-basis:33.33%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/misteu.github.io\/florra-landing\/assets\/screenshot\/yourscreenshot.png\" alt=\"Image showing the home screen of Bread Timer App.\" style=\"width:207px;height:448px\"\/><figcaption class=\"wp-element-caption\">Home screen of Florra<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"http:\/\/mic.st\/florra\/presskit\/product\/images\/AddContentBottomSheet.png.thumb.jpg\" alt=\"Image of the about page in Bread Timer App.\" style=\"width:225px;height:487px\"\/><figcaption class=\"wp-element-caption\">Plant adding via AI recognition<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"473\" height=\"1024\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2023\/05\/Simulator-Screenshot-iPhone-13-Pro-2023-05-15-at-21.57.26-473x1024.png\" alt=\"\" class=\"wp-image-740\" style=\"width:237px;height:512px\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2023\/05\/Simulator-Screenshot-iPhone-13-Pro-2023-05-15-at-21.57.26-473x1024.png 473w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2023\/05\/Simulator-Screenshot-iPhone-13-Pro-2023-05-15-at-21.57.26-139x300.png 139w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2023\/05\/Simulator-Screenshot-iPhone-13-Pro-2023-05-15-at-21.57.26-768x1662.png 768w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2023\/05\/Simulator-Screenshot-iPhone-13-Pro-2023-05-15-at-21.57.26-710x1536.png 710w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2023\/05\/Simulator-Screenshot-iPhone-13-Pro-2023-05-15-at-21.57.26-946x2048.png 946w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2023\/05\/Simulator-Screenshot-iPhone-13-Pro-2023-05-15-at-21.57.26.png 1170w\" sizes=\"auto, (max-width: 473px) 100vw, 473px\" \/><figcaption class=\"wp-element-caption\">Default plant care data for common genus<\/figcaption><\/figure>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"--col-width:66.66%;flex-basis:66.66%\">\n<h3 class=\"wp-block-heading has-text-align-left\">Florra Plant Care Diary<\/h3>\n\n\n\n<a href=\"https:\/\/apps.apple.com\/app\/apple-store\/id6444456083?pt=120128198&#038;ct=mic.st_portfolio&#038;mt=8\"><img decoding=\"async\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/04\/Download_on_the_App_Store_Badge_US-UK_RGB_blk_092917.svg\"><\/a>\n\n\n\n<p>Landingpage with all the features and release information: <a href=\"https:\/\/florra.app\" target=\"_blank\" rel=\"noopener\">https:\/\/florra.app<\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Technologies used<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Swift<\/li>\n\n\n\n<li>Core Data<\/li>\n\n\n\n<li>Custom Transitions<\/li>\n\n\n\n<li>Notifications<\/li>\n\n\n\n<li>In App Subscriptions using Revenue Cat<\/li>\n\n\n\n<li>Plant.Net API<\/li>\n\n\n\n<li>Parse Framework<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Idea for this app<\/h4>\n\n\n\n<p>Actually, I don&#8217;t remember the initial starting point for developing this app. I always liked having plants, caring for plants and propagating them. I was not really interested in some watering reminder (there are also hundreds of them in the Appstore), I wanted to have some kind of manager or diary where you can leave all the information about any plant. E.g. when did you re-pot it, gave it some water, pruned it etc. Everything should be pretty simple and local first. I am not a big fan of uploading everything straight into the cloud. Therefore, everything should be saved on the device.<\/p>\n\n\n\n<p>Very early on I thought it might be nice to group plants. To not over-complicate it one level deepness should be enough. So no group in a group in a group.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Features<\/h4>\n\n\n\n<p>If you open up the app, you have some empty tabs asking you to add plants groups or any other data. There is a &#8220;Home&#8221; screen showing all your groups and plants, a &#8220;Notifications&#8221; tab showing all the reminders on plants or groups set up in a filterable way and a &#8220;Diary&#8221; that shows all of your saved content, e.g. photos and texts with a date and an optional category.<\/p>\n\n\n\n<p>It was important for me to connect all of these data points, e.g. a plant can have numerous events, each event can have up to three photos and each event can be categorized. You can also create custom categories if the default ones are not enough.<\/p>\n\n\n\n<p>Plants can be moved into and out of groups whenever you want. Everything else moves with it automatically.<\/p>\n\n\n\n<p>As an extra feature I added plant recognition which works via the device&#8217;s camera or a photograph from its gallery.<\/p>\n\n\n\n<p>One of the latest features is plant care data. This can be set up for each plant our you can pick some default data based on the plant&#8217;s genus. The plant care data is fetched from a server, so that I am able to quickly update it whenever needed.<\/p>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div class=\"wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-d0b3c9c8 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"--col-width:33.33%;flex-basis:33.33%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Simulator-Screen-Shot-iPhone-8-2020-06-01-at-21.15.25-576x1024.png\" alt=\"Image showing the home screen of Bread Timer App.\" class=\"wp-image-347\" style=\"width:220px\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Simulator-Screen-Shot-iPhone-8-2020-06-01-at-21.15.25-576x1024.png 576w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Simulator-Screen-Shot-iPhone-8-2020-06-01-at-21.15.25-169x300.png 169w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Simulator-Screen-Shot-iPhone-8-2020-06-01-at-21.15.25.png 750w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><figcaption class=\"wp-element-caption\">Home screen of Bread Timer<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Simulator-Screen-Shot-iPhone-8-2020-06-01-at-21.16.50-576x1024.png\" alt=\"Image showing a notification posted by Bread Timer on an iPhone.\" class=\"wp-image-348\" style=\"width:220px\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Simulator-Screen-Shot-iPhone-8-2020-06-01-at-21.16.50-576x1024.png 576w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Simulator-Screen-Shot-iPhone-8-2020-06-01-at-21.16.50-169x300.png 169w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Simulator-Screen-Shot-iPhone-8-2020-06-01-at-21.16.50.png 750w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><figcaption class=\"wp-element-caption\">Notification by Bread Timer<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"1024\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Simulator-Screen-Shot-iPhone-8-2020-06-01-at-21.44.26-576x1024.png\" alt=\"Image of the about page in Bread Timer App.\" class=\"wp-image-349\" style=\"width:220px\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Simulator-Screen-Shot-iPhone-8-2020-06-01-at-21.44.26-576x1024.png 576w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Simulator-Screen-Shot-iPhone-8-2020-06-01-at-21.44.26-169x300.png 169w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Simulator-Screen-Shot-iPhone-8-2020-06-01-at-21.44.26.png 750w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><figcaption class=\"wp-element-caption\">About page with in app purchase button<\/figcaption><\/figure>\n<\/div>\n\n\n<p><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"--col-width:66.66%;flex-basis:66.66%\">\n<h3 class=\"wp-block-heading has-text-align-left\">Bread Alarm iOS App<\/h3>\n\n\n\n<a href=\"https:\/\/apps.apple.com\/us\/app\/bread-timer\/id1515034685\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/04\/Download_on_the_App_Store_Badge_US-UK_RGB_blk_092917.svg\"><\/a>\n\n\n\n<h4 class=\"wp-block-heading\">Technologies used<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SwiftUI<\/li>\n\n\n\n<li>Combine<\/li>\n\n\n\n<li>StoreKit<\/li>\n\n\n\n<li>UserNotifications<\/li>\n\n\n\n<li>AVKit<\/li>\n\n\n\n<li>WebKit<\/li>\n\n\n\n<li>Sketch (for drawing the bread illustration)<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Idea for this app<\/h4>\n\n\n\n<p>When I bake sourdough bread, I start with a higher temperature and then turn down the oven to a lower temperature. In the past I sometimes forgot to set a new timer after setting the first timer. So I built an app that offers two timers that finish after each other.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Features<\/h4>\n\n\n\n<p>There are two picker elements to select the amount of time for both temperatures, a label showing the total time and the time when everything will be finished. As time flys by, the pickers also change their value. The app saves it&#8217;s state constantly, therefore users can even close the app completely and they will see the states of any unfinished timers. Whenever a timer finishes, the user will get a local notification with a custom sound.<\/p>\n\n\n\n<p>Unfortunately Apple does not allow to override device muting with custom sounds. Therefore, users have to unmute their device. Although you can request this capability for your app, as far as I understood it is only allowed for critical applications (e.g. healthcare). In addition to that, you can request it only as a team and not as a single developer.<\/p>\n\n\n\n<p>I also wanted to learn how to implement in app purchases (IAP) and added one to tip me with 1,09\u20ac (or 0,99USD). For the first time a user buys this, the hat on the home screen gets a nice baker&#8217;s hat as an upgrade.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized is-style-default\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/inappPurchasePic.png\" alt=\"Image showing the comic bread illustration with a hat.\" class=\"wp-image-350\" style=\"width:200px;height:200px\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/inappPurchasePic.png 1024w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/inappPurchasePic-300x300.png 300w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/inappPurchasePic-150x150.png 150w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/inappPurchasePic-768x768.png 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Bread with hat upgrade<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-d0b3c9c8 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"--col-width:33.33%;flex-basis:33.33%\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"218\" height=\"386\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/04\/screenshot_1_preview.png\" alt=\"Flippy iOS App Homescreen\" class=\"wp-image-162\" style=\"width:220px\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/04\/screenshot_1_preview.png 218w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/04\/screenshot_1_preview-169x300.png 169w\" sizes=\"auto, (max-width: 218px) 100vw, 218px\" \/><figcaption class=\"wp-element-caption\">The homescreen of the app<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"621\" height=\"1104\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/04\/screenshot_4.png\" alt=\"Flippy App iOS Training Screen\" class=\"wp-image-166\" style=\"width:220px\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/04\/screenshot_4.png 621w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/04\/screenshot_4-169x300.png 169w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/04\/screenshot_4-576x1024.png 576w\" sizes=\"auto, (max-width: 621px) 100vw, 621px\" \/><figcaption class=\"wp-element-caption\">The training screen of the app.<\/figcaption><\/figure>\n<\/div>\n\n\n<p><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"--col-width:66.66%;flex-basis:66.66%\">\n<h3 class=\"wp-block-heading has-text-align-left\">Flippy Vocabulary iOS App<\/h3>\n\n\n\n<a href=\"https:\/\/apps.apple.com\/us\/app\/flippylearn\/id1479486387\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/04\/Download_on_the_App_Store_Badge_US-UK_RGB_blk_092917.svg\"><\/a>\n\n\n\n<h4 class=\"wp-block-heading\">Technologies used<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>UIKit<\/li>\n\n\n\n<li>WebKit<\/li>\n\n\n\n<li>Storyboards with Auto Layout<\/li>\n\n\n\n<li>Sketch (for designing the first prototype)<\/li>\n\n\n\n<li>Testflight for Beta testing<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">About the app<\/h4>\n\n\n\n<p>The core feature of the iOS FlippyApp is a very simple adaptive learning algorithm that draws words based on the learning progess. Users can create as much languages they like, everything is saved on their device.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Sharing languages<\/h4>\n\n\n\n<p>Users can share languages as csv files for backing them up or editing them on another device. I used Swift&#8217;s <code>UIActivityController<\/code> for that so users can share language files via any supporting service or App, e.g. Mail, WhatsApp, Telegram or Airdrop.<\/p>\n\n\n\n<p>FlippyApp is my first app that I sucessfully released to the iOS AppStore. I learnt a lot about the App Store review process while publishing this first app. You can read more about it here: <a href=\"https:\/\/mic.st\/blog\/my-first-intransparent-app-store-review-adventure\/\">https:\/\/mic.st\/blog\/my-first-intransparent-app-store-review-adventure\/<\/a><\/p>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-css-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Other<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-d0b3c9c8 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"--col-width:33.33%;flex-basis:33.33%\">\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Screen-Shot-2020-06-09-at-21.28.02.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"456\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Screen-Shot-2020-06-09-at-21.28.02-1024x456.png\" alt=\"Chart showing temperature and humidity\" class=\"wp-image-359\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Screen-Shot-2020-06-09-at-21.28.02-1024x456.png 1024w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Screen-Shot-2020-06-09-at-21.28.02-300x133.png 300w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Screen-Shot-2020-06-09-at-21.28.02-768x342.png 768w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Screen-Shot-2020-06-09-at-21.28.02-1200x534.png 1200w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/Screen-Shot-2020-06-09-at-21.28.02.png 1243w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">Dynamically rendered temperature and humidity charts<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/sensorPrototype-1024x768.jpg\" alt=\"Photograht of prototypical setup of a raspberry with three AM2302 sensors.\" class=\"wp-image-360\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/sensorPrototype-1024x768.jpg 1024w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/sensorPrototype-300x225.jpg 300w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/sensorPrototype-768x576.jpg 768w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/sensorPrototype.jpg 1032w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Prototype with Raspberry Pi Zero W and three temperature \/ humidity sensors<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"750\" height=\"1000\" src=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/sensors.jpg\" alt=\"Photograph of a hand holding three AM2302 temperature and humidity sensors applied to wooden sticks.\" class=\"wp-image-361\" srcset=\"https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/sensors.jpg 750w, https:\/\/mic.st\/blog\/wp-content\/uploads\/2020\/06\/sensors-225x300.jpg 225w\" sizes=\"auto, (max-width: 750px) 100vw, 750px\" \/><figcaption class=\"wp-element-caption\">Sensors equipped with wooden sticks<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"--col-width:66.66%;flex-basis:66.66%\">\n<h3 class=\"wp-block-heading\">Raspberry Pi x Greenhouse<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Idea for the project<\/h4>\n\n\n\n<p>I am a hobby gardener for quite some time and I always enjoyed to raise up plants from seeds. In the past I relied upon raising them in small plastic bags. This is not always the best option because of the low light conditions that are indoors.<\/p>\n\n\n\n<p>Luckily, I got quite a big greenhouse for my birthday that I equipped floor after floor (it has three \ud83d\ude43) with LED lights connected to a 230V time switch. I felt the whole thing heating up pretty tropical but I had now idea how much it was actually heating up. So, I decided to put some electronics in there.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">The setup<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">Hardware<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>RaspberryPi Zero W connected to our WiFi<\/li>\n\n\n\n<li>3x AM2302 (temperature &amp; humidity sensor)<\/li>\n\n\n\n<li>some meters of three core cable<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\">Software<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Minimal setup for the Raspberry (Raspbian Lite)<\/li>\n\n\n\n<li>Python script for reading the sensors with the library <code>Adafruit_DHT<\/code> and sending them via<code>requests<\/code>to my backend<\/li>\n\n\n\n<li>Cron task executes this python script every 15 minutes<\/li>\n\n\n\n<li>My backend is running a MySQL Server where the six values are saved into a table together with a timestamp<\/li>\n\n\n\n<li>A PHP-script selects the last 600 entries, i.e. 200 per sensor and renders it to HTML via charts.js<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Technologies<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Electronics, Raspberry Pi<\/li>\n\n\n\n<li>Python<\/li>\n\n\n\n<li>MySQL<\/li>\n\n\n\n<li>PHP<\/li>\n\n\n\n<li>HTML, CSS, JavaScript<\/li>\n<\/ul>\n\n\n\n<p>See it in action: <a href=\"http:\/\/mic.st\/tempLog\/getTemperatures.php\">http:\/\/mic.st\/tempLog\/getTemperatures.php<\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>iOS Apps Home Renovation App Landingpage with all the features and release information: https:\/\/homerenovation.tips Technologies used Idea for this app During the process of buying a house I searched for an app that keeps track of the renovation budget in a really simple way. I did not find anything, that is why I decided to&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-296","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mic.st\/blog\/wp-json\/wp\/v2\/pages\/296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mic.st\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mic.st\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mic.st\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mic.st\/blog\/wp-json\/wp\/v2\/comments?post=296"}],"version-history":[{"count":14,"href":"https:\/\/mic.st\/blog\/wp-json\/wp\/v2\/pages\/296\/revisions"}],"predecessor-version":[{"id":958,"href":"https:\/\/mic.st\/blog\/wp-json\/wp\/v2\/pages\/296\/revisions\/958"}],"wp:attachment":[{"href":"https:\/\/mic.st\/blog\/wp-json\/wp\/v2\/media?parent=296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}