{"id":194036,"date":"2025-12-27T13:31:20","date_gmt":"2025-12-27T13:31:20","guid":{"rendered":"https:\/\/teknomers.com\/en\/heres-how-i-programmed-an-android-tv-app-without-any-programming-knowledge\/"},"modified":"2025-12-27T13:31:22","modified_gmt":"2025-12-27T13:31:22","slug":"heres-how-i-programmed-an-android-tv-app-without-any-programming-knowledge","status":"publish","type":"post","link":"https:\/\/teknomers.com\/en\/heres-how-i-programmed-an-android-tv-app-without-any-programming-knowledge\/","title":{"rendered":"Here\u2019s how I programmed an Android TV app without any programming knowledge"},"content":{"rendered":"\n<div>\n<p>For years, I have been obsessed with photos\u2014not in taking them, but in managing them.<\/p>\n<p><!-- BREAK 1 --> <\/p>\n<p>I spent a long time searching for the perfect solution that didn&#8217;t depend on Google Photos, and a little over a year ago, I discovered an alternative that was perfect for me after <a rel=\"noopener, noreferrer nofollow\" href=\"https:\/\/javipas.com\/2025\/12\/05\/el-milagro-de-la-ia-immich-en-mi-tele\/\" target=\"_blank\">a lengthy and educational search process<\/a>.<\/p>\n<p><!-- BREAK 2 --><\/p>\n<p>This was the Open Source app <a rel=\"noopener, noreferrer nofollow\" href=\"https:\/\/immich.app\/\" target=\"_blank\">Immich<\/a>, which can be installed on any PC or NAS to create a self-hosted version of Google Photos, avoiding dependence on cloud services.<\/p>\n<p><!-- BREAK 3 -->  <\/p>\n<h2>Immich is nearly perfect but lacks one thing: support for Android TV<\/h2>\n<p>Immich is fantastic for many reasons, but if I had to point out a flaw, it would be that <strong>it&#8217;s not designed for TV usage<\/strong>. Most photo managers, which should enhance your photo enjoyment, need to consider the TV interface better.<\/p>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\">\n<div class=\"caption-img \">\n<p>   <img decoding=\"async\" alt=\"Immich 2\" class=\"\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p>\n<p>        <span>The Open Source project Immich provides a fantastic alternative to Google Photos. Source: Immich (GitHub)<\/span>\n   <\/div>\n<\/p><\/div>\n<\/div>\n<p>While Immich has <a rel=\"noopener, noreferrer nofollow\" href=\"https:\/\/immich.app\/download\" target=\"_blank\">easily installable versions<\/a> for Docker Compose, Portainer, Unraid (which I use on my NAS), and TrueNAS Scale, there is no official app for Android TV or Google TV, nor for tvOS. I don\u2019t own an Apple TV, but I really wanted the app for Android TV. That\u2019s where a parallel project called <a rel=\"noopener, noreferrer nofollow\" href=\"https:\/\/github.com\/giejay\/Immich-Android-TV\" target=\"_blank\">Immich-Android-TV<\/a> comes into play, maintained by a developer known as <a rel=\"noopener, noreferrer nofollow\" href=\"https:\/\/github.com\/giejay\" target=\"_blank\">giejay<\/a> on GitHub.<\/p>\n<p><!-- BREAK 4 --><\/p>\n<p>When I discovered this project, I thought I could finally enjoy photos comfortably on my TV with my little ones, but <strong>initial excitement soon turned into disappointment<\/strong>. Although the app allows for viewing photos, I encountered many limitations.<\/p>\n<p><!-- BREAK 5 --> <\/p>\n<div class=\"article-asset article-asset-normal article-asset-center\">\n<div class=\"desvio-container\">\n<div class=\"desvio\">\n<div class=\"desvio-figure js-desvio-figure\">\n<p>     <img loading=\"lazy\" decoding=\"async\" alt=\"I wanted to build my own Google Photos. I achieved it thanks to a wonderful Open Source alternative.\" width=\"375\" height=\"142\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842278_262_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p>The main issue was not being able to easily access photos from years ago. In both Immich and Immich-Android-TV, the photos are shown in reverse chronological order: the newest first, then the oldest.<\/p>\n<p><!-- BREAK 7 --><\/p>\n<p>In the web, Android, and iOS versions, the Immich app allows users to enjoy a timeline\u2014a sidebar on the right to easily select photos by day, month, and year. This feature is absent in the Android TV client.<\/p>\n<p><!-- BREAK 8 --><\/p>\n<p>If I wished to view recent photos, it wasn&#8217;t a problem, but there was no quick way to access photos from a decade ago. I would have to scroll down in the photo matrix to find those dates. With only a few photos, that could be easy, <strong>but my current library has about 155,000 photos<\/strong> and around 23,000 videos. Scrolling to 2015 would likely take hours of pressing the &#8220;down&#8221; button on my Google TV remote.<\/p>\n<p><!-- BREAK 9 --><\/p>\n<p>There were other significant limitations, and the issue of relying on an Open Source project often means it&#8217;s maintained by one person. Frequently, this person works on it as a hobby, which results in limited dedication. You can ask for features, but they may not be a priority for the project\u2019s future or may take a long time to arrive. If they do arrive, they might not meet your expectations.<\/p>\n<p><!-- BREAK 10 --> <\/p>\n<p>That was before.<\/p>\n<p>Now, many people\u2014though not quite everyone\u2014can take any app idea and bring it to life.<\/p>\n<p><!-- BREAK 11 --><\/p>\n<div class=\"article-asset article-asset-normal article-asset-center\">\n<div class=\"desvio-container\">\n<div class=\"desvio\">\n<div class=\"desvio-figure js-desvio-figure\">\n<p>     <img loading=\"lazy\" decoding=\"async\" alt=\"Programmers can no longer live without AI. But they know they can't trust it 100%.\" width=\"375\" height=\"142\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842278_265_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p>The situation is even more powerful when you have starting points in the form of Open Source projects: the necessary code is already available, so much of the work is typically done; you just need to modify it to your liking.<\/p>\n<p><!-- BREAK 12 --><\/p>\n<p>That is precisely what I did with Immich-Android-TV.<\/p>\n<p>A couple of weeks ago, I had some vacation days to take but didn&#8217;t go anywhere. <a rel=\"noopener, noreferrer nofollow\" href=\"https:\/\/javipas.com\/2025\/08\/04\/chatgpt-puede-ser-maravilloso\/\" target=\"_blank\">I had already experimented<\/a> with programming using AI, but that\u2014a points counter for the card game &#8220;pocha&#8221;\u2014was almost trivial.<\/p>\n<p><!-- BREAK 13 --><\/p>\n<p>This was much more significant. I wanted to take the Immich-Android-TV code <strong>to make it do exactly what I wanted it to do<\/strong>. So one morning, I decided to try something crazy. With no expectations. No hope.<\/p>\n<p><!-- BREAK 14 --><\/p>\n<p>How wrong I was.<\/p>\n<h2>I ask, the AI programs<\/h2>\n<p>A small warning: this part of the article may seem a bit heavy, but feel free to skip it if you prefer. It&#8217;s important for me to explain the &#8220;vibe coding&#8221; process, where you basically chat with an AI to have it program for you.<\/p>\n<p>In my case, I opened a terminal on my Mac Mini M4. Meanwhile, I created a fork of giejay\u2019s project on GitHub. Then I <strong>cloned the repository<\/strong> to my Mac using &#8220;git clone&#8221; and launched <a rel=\"noopener, noreferrer nofollow\" href=\"https:\/\/factory.ai\/product\/ide\" target=\"_blank\">Droid<\/a>, a tool I had been testing almost as a toy. It works similarly to Claude Code, Codex, or Gemini CLI and enables you to access APIs from various AI platforms.<\/p>\n<p><!-- BREAK 15 --> <\/p>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\">\n                   <img class=\"\" height=\"1916\" width=\"2504\" loading=\"lazy\" decoding=\"async\"  fetchpriority=\"high\"  src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_894_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\" alt=\"Captura De Pantalla 2025 12 15 A Las 15 21 55\"\/><br \/>\n   <img decoding=\"async\" alt=\"Captura De Pantalla 2025 12 15 A Las 15 21 55\" class=\"\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_894_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p><\/div>\n<\/div>\n<p>As soon as I launched it, Droid\u2014configured with a gpt-5.1 API key\u2014identified my directory and presented a text box for me to request what I wanted. I explained (in English, though I ended up switching to Spanish later) what the Immich-Android-TV project was about and what I aimed to achieve.<\/p>\n<p><!-- BREAK 16 --><\/p>\n<p>Essentially, I wanted a <strong>&#8220;Timeline&#8221; option<\/strong> that would allow me to navigate quickly through months and years to view the photos from specific months and years. This feature did not exist in the official project, which I had wanted since discovering the development.<\/p>\n<p><!-- BREAK 17 --><\/p>\n<p>Droid\/gpt-5.1 then set to work, and after what I believe was three or four minutes, it created a detailed roadmap divided into phases. After reading it, I simply replied &#8220;go ahead&#8221; and waited.<\/p>\n<p><!-- BREAK 18 --><\/p>\n<p>The modifications to the code finished shortly after. I was unsure what to do next\u2014how to test it? Once again, I just needed to ask. The AI provided instructions for installing Android Studio and launching an emulator for an Android TV Smart TV in 1080p resolution.<\/p>\n<p><!-- BREAK 19 --><\/p>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\">\n<div class=\"caption-img \">\n                   <img class=\"\" height=\"1440\" width=\"2560\" loading=\"lazy\" decoding=\"async\"  fetchpriority=\"high\"  src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_668_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\" alt=\"Immich Programando2\"\/><br \/>\n   <img decoding=\"async\" alt=\"Immich Programando2\" class=\"\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_668_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p>\n<p>        <span>The Android TV emulator in Android Studio on the left (with the remote control simulator below) and Gemini 3 Pro on the right. Behind the emulator is the terminal where I edit files using nano, copying and pasting outputs to Gemini and compiling.<\/span>\n   <\/div>\n<\/p><\/div>\n<\/div>\n<p>Once I completed this step, I could test my fork after compiling the Kotlin code (.\/gradlew installDebug), which <strong>directly installed the created APK package in the emulator via ADB<\/strong>. This initiated a surprisingly robust debugging process: the compilation would fail, I copied the output of the compiling command, sent it to Droid, and it identified the problem, tried to fix it, and told me to test again. Eventually, when it compiled successfully and I could test it, the option was there among the other sections, but it didn\u2019t work.<\/p>\n<p><!-- BREAK 20 --><\/p>\n<p>To find out why, once again, I only needed to ask, while trying to stay proactive. I asked what I could do and what it needed from me to pinpoint the issue. The AI indicated that I should execute a command to copy and paste the output. After several messages, the chatbot didn\u2019t seem to crack the case, and the Timeline kept attempting to access the Immich API, returning a 400 error that gpt-5.1 could not solve in my tests.<\/p>\n<p><!-- BREAK 21 --> <\/p>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\">\n<div class=\"caption-img \">\n                   <img class=\"\" height=\"954\" width=\"1700\" loading=\"lazy\" decoding=\"async\"  fetchpriority=\"high\"  src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_295_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\" alt=\"Immich Gemini\"\/><br \/>\n   <img decoding=\"async\" alt=\"Immich Gemini\" class=\"\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_295_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p>\n<p>        <span>Gemini 3 Pro in action. At that moment, there was a specific issue with the Timeline execution. Gemini instructed me to create a log with a specific command, and I simply copied and pasted the output into the terminal for it to identify the problem.<\/span>\n   <\/div>\n<\/p><\/div>\n<\/div>\n<p>It was then that I <strong>switched to Gemini 3 Pro<\/strong>, which is available for free in both Fast and Thinking modes at the <a rel=\"noopener, noreferrer nofollow\" href=\"https:\/\/gemini.google.com\/app?hl=es\" target=\"_blank\">official Gemini site<\/a>. First, I asked Droid to generate a txt file with a prompt detailing what I wanted to achieve, the problems I was encountering, and which files were involved. This file served as a clear prompt, and upon loading it into Gemini, the model set to work on the solution.<\/p>\n<p><!-- BREAK 22 --><\/p>\n<p>This marked the continuation of the previous conversation with Droid but now on the web. In reality, this form of <em>vibe coding<\/em> isn\u2019t ideal because the user (me) has to constantly update the AI on what\u2019s happening. You end up copying and pasting a lot, along with giving instructions or clarifications. While this can be cumbersome, it makes you more aware of what the AI is doing at every moment. There are tools like Claude Code or Gemini CLI that further automate things, but I began this initial phase using a &#8220;copy-paste&#8221; method.<\/p>\n<p><!-- BREAK 23 --><\/p>\n<h2>This feels like a miracle<\/h2>\n<p>The process with Gemini 3 Pro was similar, but the surprise was that the AI advanced and corrected both the problem I had faced in my initial attempt as well as others that emerged afterward. I don&#8217;t recall precisely how long it took, but it was probably less than four hours, and by the end, I accomplished what I had longed for: <strong>an Immich-Android-TV with a Timeline<\/strong>:<\/p>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\">\n                   <img class=\"\" height=\"1104\" width=\"1926\" loading=\"lazy\" decoding=\"async\"  fetchpriority=\"high\"  src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_426_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\" alt=\"Timeline\"\/><br \/>\n   <img decoding=\"async\" alt=\"Timeline\" class=\"\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_426_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p><\/div>\n<\/div>\n<p>The interface wasn\u2019t stunning by any means, but that didn\u2019t bother me much. What mattered was that it worked. If I wanted to see photos of my little ones from a decade ago, I wouldn\u2019t have to hold the &#8220;down&#8221; button on the remote for hours. I could just search for the year and month and enter that moment in time.<\/p>\n<p><!-- BREAK 24 --><\/p>\n<p>The feeling of having achieved this is hard to explain. It\u2019s something I never thought I could do (although, in reality, I didn\u2019t do it alone). I studied advanced computer engineering, but that was a long time ago, and I never had a strong inclination to program. If I dedicate some time to it, I can understand certain code, the basics, the structure, but it\u2019s still quite challenging for me.<\/p>\n<p><!-- BREAK 25 --><\/p>\n<p>Writing that code, especially in certain languages, would be unfeasible. But AI solves all this, acting like a pretty decent programmer who executes and implements what you want. You just need to be clear about what you want; if you also have some knowledge, you have an advantage. For a seasoned programmer, it\u2019s a remarkable edge.<\/p>\n<p><!-- BREAK 26 --><\/p>\n<div class=\"article-asset article-asset-normal article-asset-center\">\n<div class=\"desvio-container\">\n<div class=\"desvio\">\n<div class=\"desvio-figure js-desvio-figure\">\n<p>     <img loading=\"lazy\" decoding=\"async\" alt=\"The issue isn\u2019t that the AI can't read the time. The problem lies in confirming that it doesn't reason and merely repeats what it has seen.\" width=\"375\" height=\"142\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_431_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p>For me, achieving this seemed virtually impossible. What I had read everywhere, what those who had done something similar recounted&#8230; I finally grasped it. AI may disappoint many across various fields; about 95% of companies may not see a return on investment, it might miscalculate, and sometimes advise bizarre solutions like using glue for pizza cheese. I understand that generates criticism, jokes, and disenchantment. I get that some may claim AI is utterly dumb.<\/p>\n<p><!-- BREAK 27 --><\/p>\n<p>However, achieving something like this shows that in many other areas, <strong>AI can be marvelous<\/strong>. Even if it never improves further, even if it turns out that scaling doesn\u2019t work&#8230; turning an idea into something real without knowing how to do it feels almost magical.<\/p>\n<p><!-- BREAK 28 --> <\/p>\n<p>But there was more.<\/p>\n<h2>The Epilogue: Do (almost) what you want with your app<\/h2>\n<p>Creating a Timeline in Immich-Android-TV made me realize that I could <strong>adapt the application however I wanted<\/strong>. Over the last few days, I seized moments of free time to keep modifying the official project to turn it into what I wanted it to be.<\/p>\n<div class=\"article-asset-video article-asset-normal\">\n<div class=\"asset-content\">\n<p>\n   <iframe loading=\"lazy\" title=\"Immich Android TV with AI\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/xPvwewft83Q?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n  <\/p>\n<\/p><\/div>\n<\/div>\n<p>In that video I <a rel=\"noopener, noreferrer nofollow\" href=\"https:\/\/www.reddit.com\/r\/immich\/comments\/1pi5fkc\/ive_forked_the_immich_app_for_android_tv_with_ai\/\" target=\"_blank\">shared<\/a> on the subreddit r\/Immich, the latest changes are not included, but it gives an idea of what I achieved in those early days. And as I said, there was more to come.<\/p>\n<p><!-- BREAK 29 --><\/p>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\">\n<div class=\"caption-img \">\n                   <img class=\"\" height=\"843\" width=\"1500\" loading=\"lazy\" decoding=\"async\"  fetchpriority=\"high\"  src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_577_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\" alt=\"Immich Android Tv\"\/><br \/>\n   <img decoding=\"async\" alt=\"Immich Android Tv\" class=\"\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_577_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p>\n<p>        <span>Official Immich-Android-TV version interface<\/span>\n   <\/div>\n<\/p><\/div>\n<\/div>\n<p>One of the things that had kept me from using the official project was its interface. And once again, it was simply a matter of asking. <strong>So I requested<\/strong> that there be an option in Settings to hide file names, which always appear in the official version, and that I feel detracts from usability.<\/p>\n<p><!-- BREAK 30 --><\/p>\n<p>While we were at it, I asked for the thumbnails to have rounded corners. I also wanted the option to select whether I wanted a grid of three, four, or five columns, as the official version permanently allows only four. These changes took me just a couple more hours:<\/p>\n<p><!-- BREAK 31 --><\/p>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\">\n<div class=\"caption-img \">\n                   <img class=\"\" height=\"1138\" width=\"1924\" loading=\"lazy\" decoding=\"async\"  fetchpriority=\"high\"  src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_202_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\" alt=\"Immich Android Tv Javipas\"\/><br \/>\n   <img decoding=\"async\" alt=\"Immich Android Tv Javipas\" class=\"\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_202_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p>\n<p>        <span>The interface of my fork of Android-Immich-TV. Three columns, rounded corners, no photo names, and favorites synchronization.<\/span>\n   <\/div>\n<\/p><\/div>\n<\/div>\n<p>Moreover, I also wanted to manage favorites from the Android TV app. In Immich, users can mark or unmark photos and videos as favorites, but in the official version of Immich-Android-TV, this information was not displayed nor could it be controlled.<\/p>\n<p><!-- BREAK 32 --><\/p>\n<p>Another couple of hours later\u2014perhaps longer, as I faced challenges with managing favorites within the Timeline\u2014and once again, magic unfolded. Now I could mark photos and videos as favorites with a long press of the remote&#8217;s central button.<\/p>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\">\n<div class=\"caption-img \">\n                   <img class=\"\" height=\"1080\" width=\"1920\" loading=\"lazy\" decoding=\"async\"  fetchpriority=\"high\"  src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/Heres-how-I-programmed-an-Android-TV-app-without-any.png\" alt=\"Settings Old\"\/><br \/>\n   <img decoding=\"async\" alt=\"Settings Old\" class=\"\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/Heres-how-I-programmed-an-Android-TV-app-without-any.png\"\/><\/p>\n<p>        <span>The design of the Settings section in the official version.<\/span>\n   <\/div>\n<\/p><\/div>\n<\/div>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\">\n<div class=\"caption-img \">\n                   <img class=\"\" height=\"1106\" width=\"1934\" loading=\"lazy\" decoding=\"async\"  fetchpriority=\"high\"  src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_906_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\" alt=\"Immich Android Tv Settings Javipas\"\/><br \/>\n   <img decoding=\"async\" alt=\"Immich Android Tv Settings Javipas\" class=\"\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_906_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p>\n<p>        <span>And the one I ended up achieving in my fork.<\/span>\n   <\/div>\n<\/p><\/div>\n<\/div>\n<p>I also made these interface changes in other sections, such as the Timeline or the Settings of the client, which I wanted to modify using some user interface suggestions created\u2014who else\u2014by the AI.<\/p>\n<p><!-- BREAK 33 --><\/p>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\">\n<div class=\"caption-img \">\n                   <img class=\"\" height=\"1776\" width=\"3920\" loading=\"lazy\" decoding=\"async\"  fetchpriority=\"high\"  src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_540_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\" alt=\"Captura De Pantalla 2025 12 15 A Las 16 49 29\"\/><br \/>\n   <img decoding=\"async\" alt=\"Captura De Pantalla 2025 12 15 A Las 16 49 29\" class=\"\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842279_540_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p>\n<p>        <span>Stitch, Google\u2019s app for designing user interfaces, in action. The design of the main Timeline was great, but after several hours of trying to convert it into code using AI, I faced only problems. Ultimately, I opted to revert and apply the third redesign, which AI had no issues programming.<\/span>\n   <\/div>\n<\/p><\/div>\n<\/div>\n<p>Specifically using <a rel=\"noopener, noreferrer nofollow\" href=\"https:\/\/stitch.withgoogle.com\/\" target=\"_blank\">Stitch<\/a>, a Google Labs service that allows you to transform sketch ideas and UI designs into reality. Once again, you can describe what you want naturally, though it often helps significantly if you start from an initial image. I used the first version of the Timeline I obtained and then asked for improvements.<\/p>\n<p><!-- BREAK 34 --><\/p>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\">\n                   <img class=\"\" height=\"1138\" width=\"1924\" loading=\"lazy\" decoding=\"async\"  fetchpriority=\"high\"  src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842280_542_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\" alt=\"Immich Android Tv Timeline Rediseno\"\/><br \/>\n   <img decoding=\"async\" alt=\"Immich Android Tv Timeline Rediseno\" class=\"\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842280_542_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p><\/div>\n<\/div>\n<p>Recently, I managed to create two new sections that did not exist in the official Immich-Android-TV version. The first was the <strong>&#8220;On this day&#8221; section, which shows the photos from today taken in previous years<\/strong>. The second displays a section featuring only the photos and videos tagged as favorites.<\/p>\n<p><!-- BREAK 35 --><\/p>\n<div class=\"article-asset-image article-asset-large article-asset-center\">\n<div class=\"asset-content\">\n<div class=\"caption-img \">\n                   <img class=\"\" height=\"1106\" width=\"1934\" loading=\"lazy\" decoding=\"async\"  fetchpriority=\"high\"  src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842280_750_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\" alt=\"Immich Android Tv Videos Favoritos\"\/><br \/>\n   <img decoding=\"async\" alt=\"Immich Android Tv Videos Favoritos\" class=\"\" src=\"https:\/\/teknomers.com\/en\/wp-content\/uploads\/2025\/12\/1766842280_750_Heres-how-I-programmed-an-Android-TV-app-without-any.jpeg\"\/><\/p>\n<p>        <span>Favorites section showing only videos. My family\u2019s TikTok for viewing videos of my little ones nonstop. Magical.<\/span>\n   <\/div>\n<\/p><\/div>\n<\/div>\n<p>And to top it all off, I wanted to have an option in Settings to show only videos when browsing sections. If you have kids and record tons of videos like I do, trust me: <strong>this is like a wonderful family TikTok where you can&#8217;t stop watching endless videos almost in a doomscrolling fashion<\/strong> on your home TV with a simple click of your Google TV remote.<\/p>\n<p><!-- BREAK 36 --> <\/p>\n<p>I reiterate: the AI, in this case, seemed magical and almost miraculous.<\/p>\n<p>Now, a necessary clarification: this is a personal project, which allows for charmingly imperfect results. The code generated by the AI may not be the best. The changes I made might not be what others would have chosen. The interface may not be perfect or to everyone&#8217;s liking. However, this is a living, ongoing project that harms no one and brings me special joy.<\/p>\n<p><!-- BREAK 37 --><\/p>\n<p>That said: it&#8217;s imperfect. If you want to take a look or even try it out, here\u2019s the <a rel=\"noopener, noreferrer nofollow\" href=\"https:\/\/github.com\/picajoso\/Immich-Android-TV\" target=\"_blank\">GitHub repository<\/a> and here\u2019s the <a rel=\"noopener, noreferrer nofollow\" href=\"https:\/\/github.com\/picajoso\/Immich-Android-TV\/releases\" target=\"_blank\">Releases section<\/a>, which hosts the latest versions I\u2019m releasing. <strong>I can&#8217;t guarantee that they will work for you or that they won&#8217;t have errors<\/strong>, and I certainly can&#8217;t guarantee that if you&#8217;re interested and comment or request changes, I will implement them. But if I don&#8217;t, you can also do it yourself, as I did. This is the wonderful combination of Open Source and the potential that AI presents.<\/p>\n<p><!-- BREAK 38 --><\/p>\n<p>There\u2019s more. My technological wonderment has become limited over time. Like many of our readers, I find technology advancing rapidly, but often, these changes are subtly discernible as they tend to be iterative improvements.<\/p>\n<p><!-- BREAK 39 --><\/p>\n<p>Most things no longer astonish me or do so only for a brief moment. The Vision Pro excited me, but I wouldn\u2019t pay 4,000 euros for it, and smartphones that used to captivate us when we first saw them in action have turned into a commodity. Just like PCs, which have also become transformational, or the internet\u2014absolutely disruptive.<\/p>\n<p><!-- BREAK 40 --><\/p>\n<p>To me, AI has accomplished what PCs and the internet have. Regardless of what happens in the future, even if it doesn&#8217;t improve much more, it will transform how we work and enjoy. That\u2019s a certainty. Does it fail? Of course. Is it imperfect and even dangerous? Just as the internet was and still is. Is there a bubble? Certainly. <strong>But this has the potential to be even greater<\/strong>. This small project has reaffirmed that belief.<\/p>\n<p><!-- BREAK 41 --><\/p>\n<p>In Xataka | We have a philosophical problem with generative AIs: they&#8217;re affirming everything we ask of them.<\/p>\n<\/div>\n<p><br \/>\n<br \/><a href=\"https:\/\/teknomers.com\/category\/general\/\" rel=\"dofollow\">General News &#8211; 2<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>For years, I have been obsessed with photos\u2014not in taking them, but in managing them. I spent a long time searching for the perfect solution that didn&#8217;t depend on Google Photos, and a little over a year ago, I discovered an alternative that was perfect for me after a lengthy and educational search process. This [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":194038,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[36399],"tags":[29506,4931,18278,2255,6844,23660],"class_list":["post-194036","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology","tag-android","tag-app","tag-heres","tag-knowledge","tag-programmed","tag-programming"],"_links":{"self":[{"href":"https:\/\/teknomers.com\/en\/wp-json\/wp\/v2\/posts\/194036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/teknomers.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/teknomers.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/teknomers.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/teknomers.com\/en\/wp-json\/wp\/v2\/comments?post=194036"}],"version-history":[{"count":1,"href":"https:\/\/teknomers.com\/en\/wp-json\/wp\/v2\/posts\/194036\/revisions"}],"predecessor-version":[{"id":194039,"href":"https:\/\/teknomers.com\/en\/wp-json\/wp\/v2\/posts\/194036\/revisions\/194039"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/teknomers.com\/en\/wp-json\/wp\/v2\/media\/194038"}],"wp:attachment":[{"href":"https:\/\/teknomers.com\/en\/wp-json\/wp\/v2\/media?parent=194036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/teknomers.com\/en\/wp-json\/wp\/v2\/categories?post=194036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/teknomers.com\/en\/wp-json\/wp\/v2\/tags?post=194036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}