<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Leonid</title>
    <description>The latest articles on DEV Community by Leonid (@leonid_shlafman).</description>
    <link>https://dev.to/leonid_shlafman</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4011260%2Ff7faef03-e895-4fe8-a684-aed6fd1bd863.jpg</url>
      <title>DEV Community: Leonid</title>
      <link>https://dev.to/leonid_shlafman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leonid_shlafman"/>
    <language>en</language>
    <item>
      <title>I Built an AI App to End the "What Should We Watch?" Fight on Android TV</title>
      <dc:creator>Leonid</dc:creator>
      <pubDate>Wed, 01 Jul 2026 18:00:28 +0000</pubDate>
      <link>https://dev.to/leonid_shlafman/i-built-an-ai-app-to-end-the-what-should-we-watch-fight-on-android-tv-2no1</link>
      <guid>https://dev.to/leonid_shlafman/i-built-an-ai-app-to-end-the-what-should-we-watch-fight-on-android-tv-2no1</guid>
      <description>&lt;h2&gt;
  
  
  The 30-minute problem nobody talks about
&lt;/h2&gt;

&lt;p&gt;Every night it was the same ritual in my house. We'd sit down, turn on the TV, open one streaming app, scroll. Open another app, scroll. Read three plot summaries, watch two trailers, lose interest. Twenty, thirty minutes gone — and we &lt;em&gt;still&lt;/em&gt; hadn't pressed play. Some nights we just gave up and went to bed.&lt;/p&gt;

&lt;p&gt;The streaming services have a perverse incentive here: the longer you browse, the longer you're "engaged." Their home screens are designed to show you &lt;em&gt;everything&lt;/em&gt;, not to help you decide. The paradox of choice is a feature, not a bug.&lt;/p&gt;

&lt;p&gt;I'm a developer, so eventually I did what developers do: I got annoyed enough to build something.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually wanted
&lt;/h2&gt;

&lt;p&gt;Not another catalog. Not another "trending now" row. I wanted to answer one question fast:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Given how I feel right now, and the services I already pay for, what should I watch tonight?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Three constraints mattered:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Mood first.&lt;/strong&gt; Some nights I want to laugh, some nights I want tension, some nights background comfort TV. Genre alone doesn't capture that.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only what I can actually watch.&lt;/strong&gt; Recommending a movie that's locked behind a service I don't subscribe to is worse than useless.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It has to work on the couch.&lt;/strong&gt; This is a &lt;em&gt;TV&lt;/em&gt; problem, so it has to work with a remote — D-pad navigation, big readable cards, no tiny touch targets.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That last one is why I built it for &lt;strong&gt;Android TV&lt;/strong&gt; specifically. Most "what to watch" tools are phone apps or websites. But the decision happens &lt;em&gt;in front of the TV&lt;/em&gt;, remote in hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  How PinpoinTV works
&lt;/h2&gt;

&lt;p&gt;The flow is deliberately short — three taps to a pick:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pick your mood&lt;/strong&gt; (How are you feeling? — e.g. light &amp;amp; funny, tense, cozy, epic).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick a genre / content type&lt;/strong&gt; (movie or series, and the vibe).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It uses AI to generate a tailored recommendation&lt;/strong&gt; — filtered to the streaming subscriptions you've told it you have, and to your country's availability.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You get a concrete pick with the poster and details, not a wall of 200 thumbnails. If it's not the one, you're one click from the next.&lt;/p&gt;

&lt;p&gt;Under the hood it's a React Native app on the new architecture, talking to an AI backend that does the recommendation reasoning, with poster/details enrichment (TMDB) so the result &lt;em&gt;looks&lt;/em&gt; like a real choice, not a text blob.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned building for Android TV
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The remote changes everything.&lt;/strong&gt; Focus states, D-pad order, and big hit areas aren't polish — they're the whole UX. A layout that's lovely on a phone is unusable from the couch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Less is the feature.&lt;/strong&gt; Every extra option I added made the app &lt;em&gt;worse&lt;/em&gt;. The win was showing &lt;em&gt;one&lt;/em&gt; good pick fast, not a better grid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Only on my subscriptions" is the killer feature.&lt;/strong&gt; It's the difference between a fun toy and something you actually use on a Tuesday night.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it (and tell me what's missing)
&lt;/h2&gt;

&lt;p&gt;PinpoinTV is &lt;strong&gt;free on Google Play for Android TV&lt;/strong&gt;: &lt;a href="https://play.google.com/store/apps/details?id=com.leonidster.moviesrecommenderreactnative" rel="noopener noreferrer"&gt;https://play.google.com/store/apps/details?id=com.leonidster.moviesrecommenderreactnative&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Landing page + 2-min demo: &lt;a href="https://leonidster.github.io/pinpointv-site/" rel="noopener noreferrer"&gt;https://leonidster.github.io/pinpointv-site/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm still actively improving it, and honestly the most useful thing right now is blunt feedback. If you've ever lost half an evening to the scroll, I'd love to know whether this fixes it for you — and what would make it a daily habit.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Built by one person to solve one annoying problem. If it saves you even one "we spent longer choosing than watching" night, it did its job.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>android</category>
      <category>ai</category>
      <category>androiddev</category>
    </item>
  </channel>
</rss>
