larprober logo, an ink bottle with three strokes rising from it larprober
03

Retraining a recommendation feed on purpose

Reseed

A Windows app and an Android app that take hashtags you choose and spend real watch time on them in your own signed in browser session.

Year
2026
Type
Desktop and Android
Stack
Electron, Node, DevTools Protocol, Android WebView
Status
Desktop and emulator verified

github.com/larprober/reseed

The brief

A recommendation feed drifts toward whatever you watched last month. The ask was a tool that pushes it back: you type the hashtags you want more of, and the tool spends genuine watch time on them inside your own signed in session, so the platform learns from real behaviour rather than a fake signal.

Architecture

One platform can be driven inside an embedded browser and one cannot, so the app does both.

  • Instagram runs in an embedded pane on desktop and a WebView on Android.
  • YouTube on desktop is driven through the user's real Chrome over the DevTools protocol, because Google refuses sign in inside an embedded browser and no amount of user agent editing changes that.
  • YouTube on Android cannot be driven at all without a PC in the loop, so the app harvests video ids in a WebView, then hands them to real Chrome through a Custom Tab and a temporary playlist URL. It queues the videos and says so. It never claims watches it cannot prove.

The engine above all of this takes a driver interface of exactly two methods, navigate and evaluate, so the embedded path and the real browser path share every line of logic that matters.

Why Reseed needs two windows on desktop and two browsers on Android On desktop, one Chrome profile holds a sign in window with no debugging port and a driven window with one, because the port sets the automation flag permanently. On Android, a WebView and a Custom Tab keep separate cookie jars, so the app harvests in one and plays in the other. Desktop Android one Chrome profile, one cookie jar Window A you sign in here no debug port webdriver = false Window B Reseed drives this debug port open webdriver = true close Window A first, so its cookie jar flushes the flag sticks even after disconnecting WebView harvests ids its own jar Custom Tab real Chrome plays the queue cookies do not cross so the app hands over a playlist URL and never claims a watch it cannot prove
Both halves come from the same constraint: the browser you can automate is never the browser you are signed into. Desktop solves it with two windows on one profile, Android with a hand off, because a WebView and a Custom Tab share nothing.

Four findings that cost real hours

  • Chrome sets the webdriver flag to true merely because a remote debugging port was passed, attached or not, and it stays true after the debugger disconnects. So the window you sign in with can never be the window you drive. Reseed uses two windows on one profile and asks you to close the first, which also flushes the cookie jar.
  • Custom Tabs and WebViews do not share cookies. They are separate jars in separate processes, and nothing transfers. Sign in over here, automate over there is simply not a design that exists on Android.
  • Search results are client rendered and can take six to nine seconds. Waiting for the result links to appear is correct. Sleeping for a fixed interval is a coin flip.
  • A screenshot is not proof a desktop app is usable. The framework will happily capture a window that was never shown to anyone. Visibility is now checked through the operating system instead.

Honest limits

The desktop app is verified end to end, including the whole remote control path: launch, attach, navigate, inject, harvest. Android is verified on an emulator built for the purpose, with two tags searched, twelve videos queued and playing. A signed in run has never been verified by me, because that needs the account holder's password and the app never asks for one.

All case studies Next: Thirty

Need something like this?

Describe it in a paragraph. I will tell you whether it is a two day job or a two month one before you commit to anything.

Start a project

Reply within 24 hours on weekdays. Taking new projects.

Taking new projectsReply in 24 hours on weekdays Start a project