Intranets Today

    • About My Journey
    • Newsletter
    • Privacy Policy
Illustration of a bird flying.
  • ChatGPT “5 Vibe” Coding: My Two-Week Pair Session

    You know what? Folks keep saying “chatgpt 5 vibe coding” like it’s a real version. It’s not a version I can click. It’s more of a feel. A rhythm. I spent two weeks coding that way—me, a MacBook, VS Code, and ChatGPT open like a chatty teammate who never gets tired. Here’s how it actually went for me, with real code that shipped. If you're looking for a concise rundown on pairing workflows, this short field guide lays out the basics.

    If you’d like the blow-by-blow of those fourteen days, my candid notes are in this two-week “honest tea” write-up.

    What I mean by “vibe coding”

    It’s simple:

    • I describe the tiny goal.
    • I paste a bit of code or an error.
    • I ask for the next small move, not a giant rewrite.
    • We keep the loop short. Push, test, tweak, repeat.

    Feels like a jam session. I lead the tempo. ChatGPT lays down riffs, but I keep the beat.

    If the term still feels fuzzy, check out my hands-on take on what vibe coding means in practice.

    My stack for this run:

    • Python 3.11, Flask 3.0, Pandas 2.2
    • Node 18, React 18
    • VS Code, iTerm, and the ChatGPT desktop app
    • MacBook Pro, Seattle rain, too much cold brew

    Curious which AI copilots pair best with that stack? I'm partial to a few highlighted in this roundup of the best AI for vibe coding. For the gear itself, the picks that keep me moving are in this list of vibe coding tools I actually rely on.

    Test 1: A tiny Flask API for dad jokes

    I wanted a tiny API I could call from a toy front end. Nothing fancy. ChatGPT drafted the first pass. I asked for small, clear code and human names.

    Here’s the starter app it helped shape:

    # app.py
    from flask import Flask, jsonify
    import random
    
    app = Flask(__name__)
    
    JOKES = [
        "I would tell you a UDP joke, but you might not get it.",
        "Why do Java developers wear glasses? Because they don't C#.",
        "There are 10 types of people: those who understand binary, and those who don't."
    ]
    
    @app.get("/joke")
    def joke():
        return jsonify({"joke": random.choice(JOKES)})
    
    if __name__ == "__main__":
        app.run(debug=True)
    

    First run worked on localhost, but my React page threw a CORS error. I pasted the error into ChatGPT. It suggested a quick patch with flask-cors and scoped it to the one route. Nice and clean.

    from flask_cors import CORS
    
    CORS(app, resources={r"/joke": {"origins": "*"}})
    

    Was that safe? For a demo, sure. For prod, I’d lock it down. It even reminded me to pin the package version and note it in requirements.txt. Little things like that matter when you come back in a month.

    Test 2: A React button that lied

    I had a subscribe form that sent twice. It looked fine. It felt wrong. ChatGPT asked for the snippet, then pointed out the missing e.preventDefault() and the need to guard on “loading.” Simple fix. Honest code. (If you’re curious about the other vibe-coding apps I actually use, VS Code and the ChatGPT desktop app did most of the lifting here.)

    import { useState } from "react";
    
    function SubscribeForm() {
      const [email, setEmail] = useState("");
      const [status, setStatus] = useState("idle"); // idle | loading | ok | error
    
      const onSubmit = async (e) => {
        e.preventDefault();
        if (status === "loading") return;
    
        setStatus("loading");
        try {
          const res = await fetch("/api/subscribe", {
            method: "POST",
            headers: { "Content-Type": "application/json" },
            body: JSON.stringify({ email }),
          });
    
          setStatus(res.ok ? "ok" : "error");
        } catch {
          setStatus("error");
        }
      };
    
      return (
        <form onSubmit={onSubmit}>
          <input
            value={email}
            onChange={(e) => setEmail(e.target.value)}
            placeholder="you@example.com"
          />
          <button disabled={status === "loading"}>
            {status === "loading" ? "Working..." : "Join"}
          </button>
          {status === "ok" && <p>Check your inbox.</p>}
          {status === "error" && <p>Something went wrong.</p>}
        </form>
      );
    }
    

    Did I need a debounce? Nope. This tiny guard did the trick. ChatGPT kept the fix small. My favorite part: it didn’t push a full refactor. It matched my vibe.

    Test 3: Cleaning a crusty CSV with dates that lied

    Real mess: a CSV from a client with money as text (“$1,234.50”) and dates like “03/08/2024.” US? EU? Who knows. I gave ChatGPT 10 sample rows. It suggested a sane parse with dayfirst=True and a tight cleanup for amounts.

    import pandas as pd
    
    df = pd.read_csv("orders.csv")
    
    # Dates: prefer day-first; keep rows we can parse
    df["date"] = pd.to_datetime(df["date"], errors="coerce", dayfirst=True)
    df = df.dropna(subset=["date"])
    
    # Money: strip $ and commas, then to float
    df["amount"] = (
        df["amount"]
        .astype(str)
        .str.replace(r"[$,]", "", regex=True)
        .astype(float)
    )
    
    weekly = (
        df.assign(week=df["date"].dt.to_period("W").dt.start_time)
          .groupby("week", as_index=False)["amount"].sum()
    )
    
    print(weekly.head())
    

    On the first try, it forgot dayfirst. I ran a quick check with two planted rows, and the months were wrong. I pasted the mismatch and asked, “Fix without breaking US rows.” It suggested using a rule: if day > 12, treat as day-first, else fallback. It showed a helper function. That felt human. And it worked on my sample.

    What wowed me

    • It made clean names. Clear verbs. Fewer “utils” that hide stuff.
    • It stayed small. I said “no frameworks,” and it listened.
    • It was fast at glue work: CORS, headers, env hints, tiny tests.
    • When I pasted errors as-is, it read the trace well and cut straight to the line.

    What bugged me

    • It gave me a package that didn’t exist once. Just made it up. I laughed, then I checked PyPI. Not there.
    • It sometimes pushed a “new pattern” that didn’t match my code style. I had to say, “Keep my style.”
    • Version drift: it used a function that moved in Pandas. We pinned versions and it was fine.

    Little tricks that helped

    • Set guardrails: “No big rewrites. Tiny steps.”
    • Ask it to write a small test for every tricky bit. Even one assert helps.
    • Paste real input. Not just “Hello world,” but your ugly row 13.
    • When it’s guessing, ask for a “scratchpad” note. It will show its plan and risks.
    • Keep a running “assumptions” list in the chat. I had four bullets. We checked them when things broke.

    Need a fuller playbook? I pulled together a vibe-coding guide with real code snippets that expands on these tricks.

    Side note: practicing crisp, real-time conversation isn’t limited to code reviews. If you want a playful, adults-only arena to sharpen your quick-fire writing outside the IDE, check out Sexting.vip where consensual, private chat scenarios let you experiment with snappy language and narrative flow—skills that can make your technical communication even tighter when you switch back to dev mode. Similarly, if you’d like a location-based sandbox for concise, attention-grabbing copy, the community overview at Doublelist Sierra Vista breaks down posting etiquette, safety best practices, and the latest local threads—handy for polishing clear communication under a different kind of deadline.

    Time check

    I tracked time with Toggl because I’m that person.

    • Boilerplate tasks
    November 20, 2025
  • I Tried “Vibe Coding” for a Month — Here’s What Stuck

    I thought vibe coding was just a cute idea. You set a mood. You match your code to that mood. You build. Simple. But I tried it for a month, and you know what? It helped me ship.

    It didn’t fix every bug. It didn’t make me a wizard. But it made me feel calm, steady, and kind of… brave. That counts.

    A friend’s write-up, “I Tried Vibe Coding for a Month — Here’s What Stuck”, actually convinced me it was worth a test-drive; I figured I’d see if my notes matched theirs.

    What I mean by vibe coding

    I start with a mood. Rainy day? Neon night? Clean studio? I set a theme in VS Code, pick a playlist, set my lights, and pick a color palette. Then I write code that fits that vibe. Names. Colors. Rhythm. Even commit messages.

    Sounds silly. It’s not. If the phrase still feels fuzzy, this hands-on explainer walks through the mindset step by step.

    • Tools I used: VS Code, Prettier, Git, iTerm, Raycast for quick stuff.
    • Music: Lo-fi beats or synthwave. Nothing with big drops.
    • Themes I used: One Dark Pro, Tokyo Night, and occasionally Light Modern when I want a “fresh notebook” feel.

    For a deeper gear dive, skim this roundup of the best vibe-coding tools; it validated most of my load-out.

    One unexpected helper: I skimmed a compact guide to shaping digital workspaces over on IntranetsToday, and its tips echoed the same “set the scene first” mantra I was chasing.

    It pairs nicely with this longer guide full of real code snippets if you like concrete examples.

    Real example: My “Rainy Day” weather widget

    Style goal: soft blues, calm type, no sharp edges. I kept it small on purpose.

    CSS palette and style:

    :root {
      --ink: #0f172a;     /* deep navy */
      --mist: #a8b2d1;    /* cool gray */
      --accent: #7aa2f7;  /* gentle blue */
      --drop: #e2e8f0;    /* light cloud */
    }
    
    body {
      font-family: Inter, system-ui, -apple-system, sans-serif;
      background: var(--drop);
      color: var(--ink);
    }
    
    .card {
      width: 280px;
      padding: 16px;
      border-radius: 14px;
      background: white;
      box-shadow: 0 6px 18px rgba(15, 23, 42, 0.08);
    }
    
    .temp {
      font-size: 48px;
      font-weight: 700;
      color: var(--accent);
    }
    

    Tiny fetch logic:

    async function getWeather(city) {
      const r = await fetch(`/api/weather?city=${encodeURIComponent(city)}`);
      if (!r.ok) throw new Error('weather down');
      return r.json();
    }
    
    getWeather('Seattle').then(data => {
      document.querySelector('.temp').textContent = Math.round(data.temp) + '°';
    });
    

    I kept the names soft: ink, mist, accent, drop. It helped me stay on theme. It also kept me from overbuilding. I finished in two short sessions.

    Real example: Late-night neon bug hunt

    I had a gnarly crash in a Next.js app. It only hit on slow networks. I switched to my “neon night” vibe: purple theme, dark room, synthwave low. I used a tiny logger so I could watch state like a heartbeat.

    const log = (tag, v) => console.log(`[neon:${tag}]`, v);
    
    export async function handler(req, res) {
      const start = Date.now();
      try {
        log('req', { q: req.query });
        const user = await getUser(req.query.id); // sometimes slow!
        log('user', user?.id);
        res.status(200).json({ ok: true, user });
      } catch (e) {
        log('err', e.message);
        res.status(500).json({ ok: false });
      } finally {
        log('ms', Date.now() - start);
      }
    }
    

    The vibe made me patient. I found a timeout in getUser. I added a fallback cache. Bug gone. Not magic—just focus.

    The late-night grind also mirrored a lot of what’s in this two-week ChatGPT-5 pair-coding diary—especially the bit about lighting cues keeping you patient.

    Small but real: Mood slider that swaps themes

    This was just fun. I made a slider that swaps CSS variables. It felt like painting, but with code.

    <input id="vibe" type="range" min="0" max="2" value="0">
    
    const themes = [
      { ink: '#0f172a', mist: '#a8b2d1', accent: '#7aa2f7', drop: '#e2e8f0' }, // rainy
      { ink: '#111827', mist: '#d1d5db', accent: '#ef4444', drop: '#fef3c7' }, // sunset
      { ink: '#0a0a0a', mist: '#a3a3a3', accent: '#a78bfa', drop: '#0b0f19' }  // neon
    ];
    
    function setTheme(t) {
      const r = document.documentElement.style;
      r.setProperty('--ink', t.ink);
      r.setProperty('--mist', t.mist);
      r.setProperty('--accent', t.accent);
      r.setProperty('--drop', t.drop);
    }
    
    document.getElementById('vibe').addEventListener('input', e => {
      setTheme(themes[Number(e.target.value)]);
    });
    

    It shipped as a demo in a day. My designer friend smiled. That was the win.

    I first hacked the prototype in Replit, and this hands-on review captures the same “open browser, instant vibe” feeling.

    My commit messages (yes, vibe tags)

    I added vibe tags to keep my flow and track why choices felt a certain way.

    • feat(rainy): soft card shadow + gentle blue accent
    • fix(neon): add cache fallback for slow getUser
    • chore(clean): rename color vars to ink/mist/accent/drop

    Silly? Maybe. But in two weeks, I could scan history and recall the headspace fast.

    Turns out that’s one of the small habits this take on vibe-coding tools and flow swears by.

    Good stuff that surprised me

    • I wrote faster when I picked a mood first.
    • I named things better. Fewer tmp and foo junk.
    • My UI work felt more steady and neat.
    • Hard bugs felt less scary. I had a “scene” to sit in.

    If you want a structured learning path, this 8-week vibe-coding course recap shows how the mindset scales over a longer haul.

    Rough edges I had to fix

    • I chased “vibes” too long some nights. Pretty can stall.
    • Tests slipped when I got artsy. Not great.
    • Themes can hide contrast issues. I missed one accessibility fail.

    Some industry voices are skeptical of vibe coding’s usefulness; this recent ITPro analysis breaks down why some experts think the approach can backfire.

    I learned to catch myself. Flow is great. Shipping is greater.

    How I keep it sane now

    These guardrails save me:

    • Timer: 45 minutes build, 10 minutes test and tidy.
    • Branch name with date and mood: feat/rainy-2025-05-10.
    • TODO fence in code so wander stays parked:
    // TODO(vibe-parking):
    // - try softer shadow on hover
    // - maybe add micro-anim on temp number
    
    • End of day rule: push, PR, and one paragraph in the README about choices.

    When vibe coding shines

    • Frontend polish, landing pages, tiny tools.
    • Stuck moments. It greases the gears.
    • Solo sprints or hack nights.
    • Teaching kids. It makes code feel like art.

    Likewise, on nights when I need

    November 20, 2025
  • Hello world!

    Welcome to WordPress. This is your first post. Edit or delete it, then start writing!

    November 3, 2025
←Previous Page
1 2 3

Intranets Today

Proudly powered by WordPress