patx/youtube-clone

/** Channels and their videos for the demo dataset. */
export const CHANNELS = [
  {
    username: 'pixelforge', displayName: 'Pixel Forge', hue: 265,
    bio: 'Shader experiments, generative art and the maths that makes them move. New breakdowns every Tuesday.',
    videos: [
      { title: 'Building a Mandelbrot zoom from scratch', category: 'Tech', recipe: 'mandel', tone: 'hum', seconds: 16,
        sub: 'Escape-time rendering, step by step',
        description: 'We start with the escape-time algorithm on a plain 2D grid, add smooth iteration colouring, then push the whole thing onto the GPU. By the end you have a zoom that stays sharp at 10^12 magnification.\n\nChapters:\n00:00 The escape-time idea\n00:05 Smooth colouring\n00:11 Moving to the GPU' },
      { title: 'Sierpinski carpets and why recursion is beautiful', category: 'Learning', recipe: 'carpet', tone: 'chime', seconds: 14,
        sub: 'One rule, infinite detail',
        description: 'A single substitution rule, applied forever, produces a shape with zero area and infinite perimeter. We build it three ways: recursively, iteratively, and with a surprising bitwise trick.' },
      { title: 'Cellular automata: rule 110 is Turing complete', category: 'Tech', recipe: 'auto', tone: 'pulse', seconds: 15,
        sub: 'A universal computer in one line of cells',
        description: 'Rule 110 looks like static until you know what to look for. We trace the gliders, show how they collide, and sketch the argument that this one-dimensional toy can compute anything a laptop can.' },
    ],
  },
  {
    username: 'quietkitchen', displayName: 'The Quiet Kitchen', hue: 22,
    bio: 'Slow, unhurried cooking. No shouting, no jump cuts — just good technique and a very sharp knife.',
    videos: [
      { title: 'The only omelette technique you need', category: 'Cooking', recipe: 'flow', tone: 'chime', seconds: 13,
        sub: 'Low heat, constant motion, 90 seconds',
        description: 'Three eggs, a knob of butter, and a pan you trust. The whole trick is heat control: keep it low enough that you can hold your hand over the pan, and keep the curds moving until the last possible second.' },
      { title: 'Sourdough without the anxiety', category: 'Cooking', recipe: 'grade', tone: 'quiet', seconds: 18,
        sub: 'A schedule that fits around a real job',
        description: 'Feed at breakfast, mix at dinner, bake the next morning. This is the loaf I actually make on weekdays — no 3am shaping, no obsessive temperature logging.' },
      { title: 'Knife skills: the pinch grip, properly explained', category: 'Learning', recipe: 'spiral', tone: 'quiet', seconds: 12,
        sub: 'Ten minutes that fix a decade of bad habits',
        description: 'Most people hold a knife like a hammer. Move your thumb and forefinger onto the blade and everything downstream — speed, safety, consistency — gets better at once.' },
    ],
  },
  {
    username: 'northbound', displayName: 'Northbound', hue: 198,
    bio: 'Long walks in cold places. Trip reports, gear that survived, and the occasional weather-related mistake.',
    videos: [
      { title: 'Forty-eight hours above the tree line', category: 'Travel', recipe: 'flow', tone: 'hum', seconds: 20,
        sub: 'Two nights, one very cold ridge',
        description: 'A short overnight that turned into a lesson about wind. Full gear list in the description, including the jacket that finally earned its place in the pack.' },
      { title: 'Packing for a week with a 40 litre bag', category: 'Travel', recipe: 'grade', tone: 'quiet', seconds: 14,
        sub: 'Everything laid out, nothing left behind',
        description: 'The full spread, item by item, with weights. The short version: your sleep system and your shell are worth the money, everything else can be cheap.' },
      { title: 'Reading weather like a local', category: 'Nature', recipe: 'mandel', tone: 'hum', seconds: 16,
        sub: 'Clouds, pressure, and knowing when to turn back',
        description: 'Forecasts are for planning; the sky is for deciding. What to look for on the morning of, and the three signals that mean you should go home.' },
    ],
  },
  {
    username: 'lowlatency', displayName: 'Low Latency', hue: 140,
    bio: 'Competitive play, frame data, and the unglamorous practice routines behind it.',
    videos: [
      { title: 'Why your aim is inconsistent (it is not your mouse)', category: 'Gaming', recipe: 'auto', tone: 'pulse', seconds: 15,
        sub: 'Posture, sensitivity, and the 20-minute warmup',
        description: 'We put six sensitivities through the same drill and measured the spread. The winner was not the fastest or the slowest — it was the one the player could repeat.' },
      { title: 'Frame data for people who hate frame data', category: 'Gaming', recipe: 'spiral', tone: 'pulse', seconds: 13,
        sub: 'Startup, active, recovery — that is it',
        description: 'You do not need to memorise a spreadsheet. You need three numbers per move and a feel for what beats what. Here is the shortcut.' },
      { title: 'The practice routine that actually stuck', category: 'Fitness', recipe: 'life', tone: 'chime', seconds: 12,
        sub: 'Twenty minutes, four blocks, no burnout',
        description: 'Aim, movement, matchup review, then one real set. Short enough that you do it on a bad day, structured enough that it compounds.' },
    ],
  },
  {
    username: 'roomtone', displayName: 'Room Tone', hue: 320,
    bio: 'Home recording on a budget. Mic tests, mixing walkthroughs, and honest gear opinions.',
    videos: [
      { title: 'Your room matters more than your microphone', category: 'Music', recipe: 'flow', tone: 'chime', seconds: 17,
        sub: 'A blanket fort beats a boutique preamp',
        description: 'Same vocal, same take, four spaces. The differences are not subtle. Treat the room first, then argue about capsules.' },
      { title: 'Mixing a song in one pass', category: 'Music', recipe: 'mandel', tone: 'chime', seconds: 19,
        sub: 'Balance, then EQ, then everything else',
        description: 'A full rough mix start to finish, narrated. The order matters far more than the plugins: get faders right before you touch a single band of EQ.' },
      { title: 'Compression, finally explained with pictures', category: 'Learning', recipe: 'grade', tone: 'hum', seconds: 15,
        sub: 'Threshold, ratio, attack, release',
        description: 'Four knobs, one waveform, and a visual for each. Once you can see what attack is doing, you stop guessing.' },
    ],
  },
  {
    username: 'thedailyloop', displayName: 'The Daily Loop', hue: 8,
    bio: 'A five-minute digest of what happened, why it matters, and what to watch next.',
    videos: [
      { title: 'This week in open source', category: 'News', recipe: 'bulletin', tone: 'pulse', seconds: 14,
        sub: 'Licences, forks, and one very large merge',
        description: 'A quiet week with one loud exception. We cover the licence change everyone is arguing about and what it means if you ship on top of it.' },
      { title: 'The battery numbers nobody checks', category: 'Tech', recipe: 'bulletin', tone: 'pulse', seconds: 13,
        sub: 'Marketing hours vs. measured hours',
        description: 'We ran the same workload on six laptops. Two of them matched their claims. The gap for the rest was bigger than any spec sheet suggests.' },
      { title: 'A short history of the undo button', category: 'Comedy', recipe: 'spiral', tone: 'chime', seconds: 12,
        sub: 'The most forgiving idea in software',
        description: 'From typewriter correction tape to infinite command stacks. A gentle tour of the feature that made experimenting safe.' },
    ],
  },
];

/** Extra accounts so subscriptions and comments have real people behind them. */
export const VIEWERS = [
  { username: 'marta', displayName: 'Marta Oyelaran', hue: 44, bio: 'Backend engineer. Here for the fractals and the bread.' },
  { username: 'dev_haruki', displayName: 'Haruki N.', hue: 172, bio: 'Learning to cook, badly. Improving.' },
  { username: 'clara_b', displayName: 'Clara Bianchi', hue: 300, bio: 'Trail runner, occasional commenter.' },
  { username: 'sam.reads', displayName: 'Sam Whitfield', hue: 96, bio: 'I watch tutorials I will never act on.' },
  { username: 'tuesday', displayName: 'Tuesday Adeyemi', hue: 250, bio: 'Sound engineer. Loud opinions about rooms.' },
];

export const COMMENTS = [
  'Genuinely the clearest explanation of this I have found. Bookmarked.',
  'I have watched three videos on this today and yours is the only one that made it click.',
  'The pacing here is perfect — no ten minutes of intro before the actual content.',
  'Tried this over the weekend and it worked first time. Thank you.',
  'Could you do a follow-up that goes deeper on the second half?',
  'Small correction: I think the number at the halfway point should be doubled, but it does not change the conclusion.',
  'This channel deserves so many more subscribers.',
  'Came for the thumbnail, stayed for the actual substance.',
  'The part where you show the failure case is what makes this useful. Most videos skip it.',
  'Sending this to my entire team.',
  'I disagree with the framing slightly, but the demonstration is excellent.',
  'Watched twice. Second time with a notebook.',
  'Any chance of a written version? I would love to reference this later.',
  'Perfect length. Respect for not padding it out.',
];

export const REPLIES = [
  'Same here — the failure case was the useful bit.',
  'Agreed. The follow-up would be great.',
  'Glad it helped! There is a longer version planned.',
  'Good catch, you are right about that number.',
  'Seconded.',
];