<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vercel on Christian Martínez De La Rosa</title><link>https://christt105.github.io/tags/vercel/</link><description>Recent content in Vercel on Christian Martínez De La Rosa</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 18 Aug 2026 00:00:00 +0200</lastBuildDate><atom:link href="https://christt105.github.io/tags/vercel/index.xml" rel="self" type="application/rss+xml"/><item><title>Cinepillos</title><link>https://christt105.github.io/blog/cinepillos/</link><pubDate>Tue, 18 Aug 2026 00:00:00 +0200</pubDate><guid>https://christt105.github.io/blog/cinepillos/</guid><enclosure url="https://christt105.github.io/blog/cinepillos/cover.png" length="654947" type="image/png"/><description>&lt;p&gt;Hey again!&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;m still finishing off projects I&amp;rsquo;ve had sitting around, and today it&amp;rsquo;s Cinepillos&amp;rsquo; turn. I started it a few months back, around January, as &amp;ldquo;Club de Cine&amp;rdquo;, a site for keeping a shared board of movie suggestions with a group of friends, scheduling a session and voting on which one to watch. Honestly, I&amp;rsquo;ve never really needed it, I barely watch movies myself, let alone with other people, but I liked the idea of having a site for it. I doubt I&amp;rsquo;ll ever use it for real, but well, maybe it&amp;rsquo;s useful to someone.&lt;/p&gt;&#10;&lt;h2 id="where-the-name-comes-from"&gt;Where the name comes from&#10;&lt;/h2&gt;&lt;p&gt;My dog has a toy we call &amp;ldquo;zorropillo&amp;rdquo; (&amp;ldquo;little fox thing&amp;rdquo;), and mashing that together with &amp;ldquo;cine&amp;rdquo; (cinema) gave Cinepillos. So the rebrand from &amp;ldquo;Club de Cine&amp;rdquo; isn&amp;rsquo;t much more thought out than that.&lt;/p&gt;&#10;&lt;h2 id="from-self-hosted-to-vercel-and-neon"&gt;From self-hosted to Vercel and Neon&#10;&lt;/h2&gt;&lt;p&gt;It was the only site out of all my projects I had self-hosted on my mini PC, through Cloudflare tunnels, and this time I wanted to try alternatives instead of piling it onto my server, which is already starting to drown under everything. So I decided to build it on &lt;a class="link" href="https://vercel.com" target="_blank" rel="noopener"&#10; &gt;Vercel&lt;/a&gt; for deployment and &lt;a class="link" href="https://neon.tech" target="_blank" rel="noopener"&#10; &gt;Neon&lt;/a&gt; as managed Postgres. Nothing on the mini PC, no disks to maintain, every push to the main branch deploys itself. Honestly both platforms offer pretty generous free tiers, plenty for this project.&lt;/p&gt;&#10;&lt;p&gt;That said, for anyone who&amp;rsquo;d rather run it on their own server, it&amp;rsquo;s still perfectly self-hostable with Docker Compose, more on that later.&lt;/p&gt;&#10;&lt;h2 id="about-monetizing-it"&gt;About monetizing it&#10;&lt;/h2&gt;&lt;p&gt;I went back and forth on trying to make some money off this project, just to make the time I put into it worth something, I&amp;rsquo;m not expecting to become a millionaire. But in the end I dropped it. Neither was the monetization idea I had any good, nor was it worth getting tangled up with the terms of use of TMDB and TVDB, the two databases the site pulls from, which don&amp;rsquo;t allow commercial use just like that. So Cinepillos stays free and open source, like the rest of my projects, and me: broke. I lack a shark&amp;rsquo;s instincts. Long live open source.&lt;/p&gt;&#10;&lt;h2 id="how-it-works"&gt;How it works&#10;&lt;/h2&gt;&lt;p&gt;The idea is simple. A group keeps a shared board of movie suggestions, and any member can add one by searching for it directly on the site. Whenever people feel like getting together, a session gets scheduled with a date and time, voting opens between the suggestions, and everyone votes for the one they want to watch. When voting closes, the most voted one wins and gets logged as that day&amp;rsquo;s session.&lt;/p&gt;&#10;&lt;p&gt;A single instance can host several clubs at once, and each one is completely private, nobody in one club sees anything from another. Login is with Google, and on &lt;code&gt;/settings&lt;/code&gt; everyone can pick an avatar taken from a TMDB poster or a TVDB character photo, so even the avatar pulls from the same databases as the rest of the site.&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="Home page with the next session and the club’s suggestions" class="gallery-image" data-flex-basis="448px" data-flex-grow="186" height="900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://christt105.github.io/blog/cinepillos/home.png" srcset="https://christt105.github.io/blog/cinepillos/home_hu_58d35ec3c33b336f.png 800w, https://christt105.github.io/blog/cinepillos/home_hu_dac0350349017f24.png 1600w, https://christt105.github.io/blog/cinepillos/home.png 1680w" width="1680"&gt;&#10;&lt;img alt="Movie search pulling from TMDB, with genre filters" class="gallery-image" data-flex-basis="384px" data-flex-grow="160" height="900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://christt105.github.io/blog/cinepillos/search.png" srcset="https://christt105.github.io/blog/cinepillos/search_hu_62a7b31bab4821ed.png 800w, https://christt105.github.io/blog/cinepillos/search.png 1440w" width="1440"&gt;&lt;/p&gt;&#10;&lt;h2 id="working-with-ai"&gt;Working with AI&#10;&lt;/h2&gt;&lt;p&gt;With Claude I followed the same flow as in other projects, but this time with an addition I really liked. Every time I open a PR, Vercel deploys a preview and Neon clones a copy of the production database for that preview. That keeps tasks nicely contained: I give Claude a specific task, it pushes it to GitHub, and by the time it&amp;rsquo;s done I already have a working preview with real data to test the change, look over the code and, if all goes well, merge it. No need to set anything up by hand or worry about breaking production while testing.&lt;/p&gt;&#10;&lt;h2 id="open-source-and-free"&gt;Open source and free&#10;&lt;/h2&gt;&lt;p&gt;As always, all the code is on GitHub for anyone who wants to use it, tinker with it or improve it. Cinepillos is free and already up at &lt;a class="link" href="https://cinepillos.vercel.app" target="_blank" rel="noopener"&#10; &gt;cinepillos.vercel.app&lt;/a&gt;, login is Google-only because it was the simplest option for me, but being open source anyone can spin up their own instance with Docker Compose and their own TMDB and TVDB keys if that fits better.&lt;/p&gt;&#10;&lt;a class="github-repo-card" href="https://github.com/christt105/cinepillos" target="_blank" rel="noopener"&gt;&#10; &lt;img src="https://avatars.githubusercontent.com/u/36189169?v=4" alt="christt105 avatar" class="repo-avatar"&gt;&#10; &lt;h3&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;&#10; &lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&#10; &lt;path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /&gt;&#10;&lt;/svg&gt;&#10;&#10;&#10; christt105/cinepillos&lt;/h3&gt;&#10; &lt;p&gt;&lt;/p&gt;&#10; &lt;div class="repo-stats"&gt;&#10; &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-star"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z" /&gt;&lt;/svg&gt; 0&lt;/span&gt;&#10; &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-git-fork"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M10 18a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M5 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M15 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M7 8v2a2 2 0 0 0 2 2h6a2 2 0 0 0 2 -2v-2" /&gt;&lt;path d="M12 12l0 4" /&gt;&lt;/svg&gt; 0&lt;/span&gt;&#10; &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-calendar-event"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12" /&gt;&lt;path d="M16 3l0 4" /&gt;&lt;path d="M8 3l0 4" /&gt;&lt;path d="M4 11l16 0" /&gt;&lt;path d="M8 15h2v2h-2l0 -2" /&gt;&lt;/svg&gt; 2026-08-18&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;/a&gt;&#10;&lt;p&gt;And that&amp;rsquo;s it for today&amp;rsquo;s post. If you try Cinepillos or the code, you know where to leave a comment.&lt;/p&gt;&#10;&lt;p&gt;Until next time!&lt;/p&gt;&#10;</description></item></channel></rss>