Build in Public: Week 9. The Shape of Wykra

Published: (January 31, 2026 at 09:05 AM EST)
7 min read
Source: Dev.to

Source: Dev.to

Build in public – reflections

Build in public is an interesting experiment overall. You get new readers—some of them even stick around—​you start getting invited into different communities, you end up with a proud count of EIGHT stars on your repository, and at some point you inevitably find yourself trying to fit into some LLM‑related program just to get free credits and avoid burning through your own money too fast. I honestly think everyone should try something like this at least once, if only to understand how it actually feels from the inside.

At the same time there are obvious downsides. Writing updates every single week while having a full‑time job requires a level of commitment that is harder to sustain than it sounds, because real life has a habit of getting in the way: a sick cat, a work emergency, getting sick yourself, or just being too tired to produce something coherent. After a while it starts to feel uncomfortably close to a second job, and I’ve had to admit that I’m probably not as committed to blogging as I initially thought I was. Honestly, keeping a build‑in‑public series going for more than a couple of months requires either a wealthy uncle or a very solid stock plan from a big company.

The work itself didn’t stop. Things kept moving, the system kept evolving, and at some point it made sense to pause and do a proper recap of what we’ve actually been building. Yes, we skipped three weekly updates, but looking at the current state of the project, I’d say the result turned out pretty well.

What Wykra Does, In One Paragraph

Before getting into the details it’s worth briefly recalling how this started. Wykra began as a small side project built mostly for fun as part of a challenge, without any serious expectations or long‑term plans, and somewhere along the way turned into whatever this is now.

What it actually does: you tell it something like

“vegan cooking creators in Portugal with 10k–50k followers on Instagram/TikTok”

and it goes hunting across Instagram and TikTok, scrapes whatever profiles it finds, throws them at a language model for analysis, and gives you back a ranked list with scores and short explanations of why each profile ended up there. You can also give it a specific username if you already have someone in mind and want to figure out whether they’re actually worth reaching out to.

Since the original challenge post, this has turned into a nine‑post series on Dev.to. Before moving on, it’s worth taking a quick look at how those posts actually performed.

Dev.to post performance chart

As you can see, the first two posts did pretty well and after that the numbers slowly went down. At this point the audience mostly consists of people who clearly know what they signed up for and decided to stay anyway.

What Users Actually See

At this point it makes more sense to stop talking and just show what this actually looks like now.

The first thing you hit is the landing page at wykra.io, which tries to explain what this thing is in about five seconds. I’m genuinely more proud of the fact that we have a landing page at all than of the fact that we even have a domain for email. Also, please take a moment to appreciate this very nice purple color, #422e63, because honestly it’s pretty great.

Wykra landing page screenshot

We also have a logo that Google Nano Banana generated for us; it’s basically connected profiles drawn as a graph, which is exactly what this thing is about.

After that you can sign up via GitHub because we still need some way to know who’s using this and prevent someone from scraping a million dollars’ worth of data in one go. Once you’re in, you end up in a chat interface that keeps the full history and very openly tells you that searches can take a while—up to 20 minutes in some cases. Sadly there’s no universe where this kind of discovery runs in five or six seconds. That’s just how it works when you’re chaining together web search, scraping, and LLM calls.

Eventually you get back a list of profiles the system thinks are relevant, along with a score for each one and a short explanation of why it made the cut.

Search results screenshot

You can also ask for an analysis of a specific profile if you want to sanity‑check whether someone is actually any good.

Profile analysis screenshot

When you do that you get a quick read on what the account is actually about: the basics, the audience, the typical content style, and a short “pros‑and‑cons” list that helps you decide whether to reach out.

ic stats, a short summary written in human words and a few signals around niche, engagement and overall quality

It’s not trying to pass final judgment on anyone; it just saves you from opening a dozen tabs and scrolling for twenty minutes to figure out whether a profile looks legit.

You can also use the whole thing directly in Telegram if the web version isn’t your style. Same interface, same flows—just inside Telegram instead of a browser.

And Now, the Nerd Stuff

For anyone who cares about how this is actually put together, here’s the short version of the stack.

Backend

  • Framework: NestJS + TypeScript
  • Database: PostgreSQL
  • Cache / Job Queues: Redis
  • Scraping: Bright Data (handles Instagram & TikTok profile fetching)
  • LLM Calls: LangChain + OpenRouter
    • Primary model: Gemini
    • Discovery model: GPT with a web plugin
  • Observability:

Frontend

  • Framework: React 18 + TypeScript, built with Vite
  • State Management: Plain React hooks (no extra libraries)
  • Telegram Integration: Uses the Telegram Web App SDK so the same UI works in a browser and inside Telegram without maintaining two separate apps.

For People Who Like Diagrams

If you prefer a picture over paragraphs, here’s a rough diagram of how Wykra is wired up right now. It’s not meant to be pretty or final—just a way to see where things live and how data moves through the system.

Tracing a single request from top to bottom shows what happens when someone types a message in the app: the API accepts it, long‑running work gets pushed into queues, processors do their thing, external services are called, results are stored, and errors are reported.

LLM Call Flow

All LLM calls → OpenRouter API
    ├─ Gemini 2.5 Flash (primary workhorse)
    │   ├─ Profile analysis
    │   ├─ Context extraction
    │   └─ Chat routing

    └─ GPT‑5.2 with web plugin
        └─ Instagram URL discovery

The Search Flow

Instagram

Searching for creators is a bit of a dance because Bright Data can scrape profiles but doesn’t let you search Instagram directly.

  1. Ask GPT (via web search) to find relevant profile URLs.
  2. Scrape and analyze those profiles with Bright Data.

TikTok

Simpler, because Bright Data supports searching TikTok directly.

  1. Send the search query to Bright Data.
  2. Scrape and analyze the returned profiles.

So, How’s It Going?

Honestly? Search doesn’t work perfectly yet. Some results are great, some are questionable, and there are edge cases where the system does something a bit странное. That’s expected when you stitch together web discovery, scraping, and LLM analysis into one pipeline.

We’re currently working on:

  • Making results more relevant.
  • Reducing operational costs (discovering creators shouldn’t feel like lighting money on fire).

That work is slated for next week.

Code: Everything lives here –

Back to Blog

Related posts

Read more »

This Year in LLVM (2025)

Article URL: https://www.npopov.com/2026/01/31/This-year-in-LLVM-2025.html Comments URL: https://news.ycombinator.com/item?id=46841187 Points: 17 Comments: 0...