# Build brief — a focused alternative to 1of10

> **Verdict:** Partly, if you narrow it · **Buildability:** 71/100 · **Category:** Social Media
> **Source:** https://www.canitbevibecoded.com/1of10
> Independent editorial assessment from Can It Be Vibe Coded? Not affiliated with, endorsed by, or derived from 1of10. Verify current pricing and capabilities before acting.

## Context

**1of10** — YouTube research tool that surfaces outlier videos: clips that massively beat their channel's normal view count. It currently costs $29/mo.

The core math is embarrassingly simple: pull a channel's uploads, compute a median or trailing baseline, divide each video's views by it, sort descending. The YouTube Data API hands you everything you need for that, and an agent can wire up a local outlier dashboard for a list of channels you care about in a focused implementation. Where it breaks down is scale: 1of10's real product is a pre-indexed corpus of millions of videos you can search across niches you have never heard of, with history that predates your interest. Your build can only see channels you thought to track, and the free API quota caps how many you can refresh per day. Good enough for watching 50 competitors, useless for open-ended idea mining.

This brief describes a focused, single-operator replacement for the part of 1of10 that is genuinely reproducible. It is deliberately narrower than the product it replaces, and it says so in writing. Build the useful core; do not pretend to have rebuilt the rest.

## What you are building

Tracks a list of YouTube channels, computes each video's view multiple against its channel baseline, and shows a sortable outlier feed with thumbnails and titles.

- Draft, queue, and track content for the few networks you actually use.
- A responsive interface with real empty, loading, success, and error states.

## Requirements

### Functional

- Python 3.11 and a machine or cheap VPS to run a daily refresh.
- A hand-curated list of channels to track.

### Data and integrations

- YouTube Data API v3 key (free tier, 10k units/day).

Each of these needs a real account, credential, or quota. Set them up before writing feature code.

### Non-functional

- Accessibility: semantic markup, labelled controls, visible focus, and reduced-motion support.
- Security: server-side secrets, validated input, and no credentials in the client bundle.
- Reliability: retries with backoff on external calls, and a clear failure state when a provider is down.
- Portability: the operator can export their data and leave without losing it.

## Implementation brief

Build a local YouTube outlier tracker: a self-hosted dashboard that flags videos massively outperforming their own channel's baseline.

Stack, no substitutions:
- Python 3.11, FastAPI, Jinja2 templates, plain CSS, no JS framework
- SQLite via sqlite3 stdlib, file at ./data/outliers.db
- httpx for YouTube Data API v3 calls
- API key from .env (YOUTUBE_API_KEY), python-dotenv, ship .env.example, never commit .env

Data model:
- channels(id, handle, title, added_at)
- videos(id, channel_id, title, published_at, thumbnail_url, duration_seconds, is_short, view_count, fetched_at)
- snapshots(video_id, view_count, taken_at) for view velocity

Ingest (CLI: python -m app.sync):
- For each tracked channel, resolve the uploads playlist, page playlistItems for up to the 200 most recent videos, then batch videos.list (50 ids per call) for statistics and contentDetails
- Treat anything under 180 seconds as a Short and baseline Shorts separately from long-form
- Baseline = median view_count of that channel's previous 10 videos of the same format that are at least 30 days old; outlier_score = views / baseline
- Log estimated quota units used per run and stop cleanly before 9500

Web UI on localhost:8000:
- Table sorted by outlier_score: thumbnail, title, channel, published date, views, baseline, score, link to the video
- Filters: format (short/long), minimum score, published within N days, channel
- A form to add or remove a tracked channel by handle or URL
- A page per channel showing its videos and baseline curve as a simple inline SVG

In scope: sync CLI, dashboard, filters, CSV export of the current view.
Out of scope: user accounts, auth, hosted deployment, telemetry, payments, cross-channel keyword search, thumbnail downloads, AI title suggestions.

Include a README with setup, how to get an API key, quota math, and a cron line for a daily sync. Handle API errors and deleted videos without crashing the run.

## Delivery standard

- Inspect the repository first, then write a short implementation plan before writing code.
- Deliver the smallest complete end-to-end workflow first; every primary control must work against persisted data.
- Use real validation and storage; never substitute fake dashboards, decorative controls, hard-coded success states, or mock integrations.
- Include responsive layouts plus genuine empty, loading, success, validation, and failure states.
- Keep secrets server-side in environment variables, provide .env.example, and never commit credentials or user data.
- Add structured logs around every external call and return actionable errors without leaking sensitive details.
- Write unit tests for the core logic and one automated test of the main user journey.
- Finish with a README covering setup, architecture, data location, backups, tests, deployment, and known limitations.

## Acceptance criteria

- [ ] A clean install starts the app using only the README and .env.example.
- [ ] The primary journey works from first visit through saved result, reload, edit, export, and deletion where applicable.
- [ ] Invalid input, missing configuration, provider failure, and an empty database each have a usable state.
- [ ] The interface works at 390px and 1440px, is keyboard navigable, and shows visible focus on every control.
- [ ] Tests, type checking, linting, and a production build all pass with no ignored failures.
- [ ] No part of the interface implies a live integration, security guarantee, or scale capability that was not actually built and verified.

## Non-goals

Do not build these, and do not claim to have replaced them:

- Cross-channel discovery: you can only find outliers in channels you already listed.
- Historical depth, their index has view curves from before you started collecting.
- Quota headroom, refreshing thousands of channels daily needs paid access or many keys.
- Curated niche collections, thumbnail galleries and saved-idea workflows.
- Shorts vs long-form normalization and view-velocity nuance that took them iterations to get right.

## What you still own after launch

- Secure credentials, rotate secrets, and handle provider rate limits.
- Run migrations, backups, restores, and dependency updates.
- Test the critical journey after every model, API, or hosting change.
- Monitor failures and fix the edge cases a first prompt will miss.

## Risk

**Operational risk.** The code is achievable; dependable data, integrations, and ongoing operations are the real cost.

Editorial confidence in this assessment: medium. No reviewed project implementation is linked yet.

---

Generated by [Can It Be Vibe Coded?](https://www.canitbevibecoded.com) · Full report: https://www.canitbevibecoded.com/1of10
