[{"data":1,"prerenderedAt":195},["ShallowReactive",2],{"sidebar-posts":3,"post-count":63,"post-\u002Fwhy-i-built-pepelly":64,"page-\u002Fwhy-i-built-pepelly":186,"neighbours-\u002Fwhy-i-built-pepelly":188,"post-projects-\u002Fwhy-i-built-pepelly":193},[4,8,12,16,20,24,28,32,35,39,43,47,51,55,59],{"path":5,"title":6,"date":7},"\u002Ffully-ai-coded-blog-claude-code","This blog is now fully AI coded and run by an agent I just talk to","2026-10-24",{"path":9,"title":10,"date":11},"\u002Fwhy-i-built-pepelly","Why I built Pepelly, a YouTube app for my daughter without the brain rot","2026-10-22",{"path":13,"title":14,"date":15},"\u002Fhow-i-built-an-equity-tracking-app-for-bootstrap-founders-in-a-weekend","How I Built an Equity Tracking App for Bootstrap Founders in a Weekend","2024-11-25",{"path":17,"title":18,"date":19},"\u002Fbuilding-directory-website-with-ai-in-a-day","How I Built a Directory Website in a Day with AI—and Why It's a Game-Changer for SaaS Traffic","2024-11-10",{"path":21,"title":22,"date":23},"\u002Fnetlify-build-plugin-for-nuxt-dynamic-routes","Use a netlify build plugin to generate your nuxt routes","2020-08-08",{"path":25,"title":26,"date":27},"\u002Foptimized-responsive-lazyloading-images-with-nuxt","How to use optimized, responsive and lazyloading images in a nuxt project","2019-11-16",{"path":29,"title":30,"date":31},"\u002Fnuxt-jam-stack","Building a SEO optimized blog with a Nuxt JAM stack and Markdown files","2019-11-07",{"path":33,"title":34,"date":31},"\u002Fprismjs-nuxtjs-static-pages","Getting Prismjs working with Nuxt",{"path":36,"title":37,"date":38},"\u002Fkeylogs-live-on-producthunt","My second launch this year: Keylogs is LIVE on Product Hunt today!","2018-02-12",{"path":40,"title":41,"date":42},"\u002Fa-new-year-and-a-new-startup","A new year and a new startup","2018-01-19",{"path":44,"title":45,"date":46},"\u002Fabout-mydash-whats-the-stack-and-why-did-i-choose-it","About myDash - What’s the stack and why did I choose it?","2017-10-16",{"path":48,"title":49,"date":50},"\u002Fsuper-fast-wordpress-hosting-germany","WordPress hosting test: super fast on raidboxes.eu","2016-12-09",{"path":52,"title":53,"date":54},"\u002Fbest-resources-for-stock-images","Best resources for stock images","2016-12-05",{"path":56,"title":57,"date":58},"\u002Fset-up-automatic-backups-for-parse-server-on-digital-ocean","Set up automatic backups for parse-server on digital ocean","2016-05-25",{"path":60,"title":61,"date":62},"\u002Fhow-to-run-parse-dashboard-alongside-parse-server-on-digital-ocean","How to setup parse-dashboard alongside parse-server on Digital Ocean","2016-05-18",15,{"id":65,"title":10,"body":66,"date":11,"description":173,"draft":174,"extension":175,"image":176,"meta":177,"navigation":178,"path":9,"projects":179,"readingTime":166,"seo":181,"stem":182,"tags":183,"updated":186,"__hash__":187},"posts\u002Fwhy-i-built-pepelly.md",{"type":67,"value":68,"toc":163},"minimark",[69,73,84,89,92,95,98,102,105,109,112,115,118,122,125,128,131,134,138,141,157,160],[70,71,72],"p",{},"My 5-year-old daughter likes to watch clips. And there's a lot of good stuff on YouTube, but there's also a lot of junk and brain rot for the little ones. The worst thing for me are compilations of Peppa Pig or Bluey or whatever that are not real episodes but just clips, so pure brain rot.",[70,74,75,76,83],{},"So I built ",[77,78,82],"a",{"href":79,"rel":80},"https:\u002F\u002Fpepelly.app",[81],"nofollow","Pepelly",".",[85,86,88],"h2",{"id":87},"why-i-built-it","Why I built it",[70,90,91],{},"The idea was to just whitelist certain channels or individual videos for her, but still give her the full app experience. She's old enough now to switch between apps on the iPad and kind of select her own stuff. And I don't want to necessarily supervise this all the time. I also don't want to fight with her about what to watch. I just want to give her an alternative set that's kind of like pre-approved by me.",[70,93,94],{},"On top of that: automated screen time limits, by length for the videos but also total watch time. And soft endings, so she can watch a video to the end, even if it goes over her bedtime or watch time limit. Just so that there are no fights, and then the app automatically switches off.",[70,96,97],{},"That was the initial idea.",[85,99,101],{"id":100},"pepper-telly","Pepper + telly",[70,103,104],{},"It took me a while to come up with a good name and find a nice domain that was still free. In the end I went with this combination of pepper (or capsicum) and telly, because I wanted something red to resemble the YouTube color. And the nice thing: once I had the name, this also inspired the design for the app.",[85,106,108],{"id":107},"the-build","The build",[70,110,111],{},"I used Flutter. I've never worked with Flutter before, but with AI now, that's not really a problem anymore. I designed the whole thing with Claude as well. Behind it there's a Node server, and I'm hosting everything on my Dokku server.",[70,113,114],{},"The build itself was fun and fairly quick: about 2 days in total. I kind of maxed out one set of Claude Code tokens in my subscription for this.",[70,116,117],{},"There's a parent area and a kids area, and a parent can add many kids. Free is one kid and 10 channels. The family plan gets you unlimited channels, unlimited kids and basically unlimited usage, for $2.99 a month, $19.99 a year, or a fairly fair priced lifetime deal for $29.99.",[85,119,121],{"id":120},"building-is-not-the-moat-anymore","Building is not the moat anymore",[70,123,124],{},"Building it was really easy. I think the biggest moat for apps these days is actually the whole app store management shit.",[70,126,127],{},"It took me 1 or 2 days to restart my Apple developer stuff and get all the certificates and profiles and all that stuff set up. Just as cumbersome as I remember it from the last time I built an app, which is, I guess, 5 years ago. And making the builds actually work for the different platforms, iOS and Android, is still fairly annoying, even with AI and Flutter.",[70,129,130],{},"And it's still not live. I'm still waiting for the YouTube API approval. We want read permissions on the subscriptions, so you can automatically add stuff you already subscribe to on YouTube. It's a bit annoying to get through that.",[70,132,133],{},"Since coding and building is not a moat anymore these days, the API accesses and setting up app stores and stuff, that's kind of where the work is now.",[85,135,137],{"id":136},"the-marketing-plan","The marketing plan",[70,139,140],{},"To start, I'm going to seed it in a few WhatsApp groups and Facebook groups I'm already in. But really, I'm hoping for a long-term SEO strategy targeting the pain points the app is solving. I've researched this and I think there's quite a few long phrase keyword sets that should be fairly easy to rank for, like:",[142,143,144,148,151,154],"ul",{},[145,146,147],"li",{},"youtube without shorts for kids",[145,149,150],{},"how to stop peppa pig compilations on youtube",[145,152,153],{},"whitelist youtube channels for kids on ipad",[145,155,156],{},"youtube kids alternative without autoplay",[70,158,159],{},"Then I hope I can get the traffic from there, because I think the App Store SEO is the harder battle to fight here.",[70,161,162],{},"I'll update here once Pepelly is in the stores.",{"title":164,"searchDepth":165,"depth":166,"links":167},"",2,3,[168,169,170,171,172],{"id":87,"depth":165,"text":88},{"id":100,"depth":165,"text":101},{"id":107,"depth":165,"text":108},{"id":120,"depth":165,"text":121},{"id":136,"depth":165,"text":137},"My 5-year-old loves YouTube, but not the brain rot. So I built Pepelly, a kids' video app that only plays what I approve. Why, how, and how I'll market it.",false,"md","\u002Fimg\u002Fpepelly-hero.jpg",{},true,[180],"pepelly",{"title":10,"description":173},"why-i-built-pepelly",[184,185],"startup","ai",null,"-7mevhjklvV6w4mvRyW-se3xfYBQmtcFhjoUi-JspLc",[189,191],{"title":6,"path":5,"stem":190,"children":-1},"fully-ai-coded-blog-claude-code",{"title":14,"path":13,"stem":192,"children":-1},"how-i-built-an-equity-tracking-app-for-bootstrap-founders-in-a-weekend",[194],{"id":180,"title":82},1792851218171]