<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by lassiecoder  on Medium]]></title>
        <description><![CDATA[Stories by lassiecoder  on Medium]]></description>
        <link>https://medium.com/@lassiecoder?source=rss-5bb557ac64b3------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*ssRMSfdTgkLZMewOe_lLGA.jpeg</url>
            <title>Stories by lassiecoder  on Medium</title>
            <link>https://medium.com/@lassiecoder?source=rss-5bb557ac64b3------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 13 Nov 2026 21:44:56 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@lassiecoder/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[How I got my first 5 Open Source PRs merged in two weeks]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://levelup.gitconnected.com/how-i-got-my-first-5-open-source-prs-merged-in-two-weeks-fc9a820492be?source=rss-5bb557ac64b3------2"><img src="https://cdn-images-1.medium.com/max/1600/1*M9U2Ijq7UH5CJigGuhZeJw.png" width="1600"></a></p><p class="medium-feed-snippet">Open Source Notes, #1</p><p class="medium-feed-link"><a href="https://levelup.gitconnected.com/how-i-got-my-first-5-open-source-prs-merged-in-two-weeks-fc9a820492be?source=rss-5bb557ac64b3------2">Continue reading on Level Up Coding »</a></p></div>]]></description>
            <link>https://levelup.gitconnected.com/how-i-got-my-first-5-open-source-prs-merged-in-two-weeks-fc9a820492be?source=rss-5bb557ac64b3------2</link>
            <guid isPermaLink="false">https://medium.com/p/fc9a820492be</guid>
            <category><![CDATA[mobile]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[android]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[lassiecoder ]]></dc:creator>
            <pubDate>Fri, 06 Nov 2026 16:47:00 GMT</pubDate>
            <atom:updated>2026-11-06T16:47:00.983Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[I tried to break Jostraca’s merge, and it survived until I cloned the repo]]></title>
            <link>https://medium.com/tech-scoop/i-tried-to-break-jostracas-merge-and-it-survived-until-i-cloned-the-repo-a31423c31941?source=rss-5bb557ac64b3------2</link>
            <guid isPermaLink="false">https://medium.com/p/a31423c31941</guid>
            <category><![CDATA[developer-tools]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[open-source]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[lassiecoder ]]></dc:creator>
            <pubDate>Wed, 21 Oct 2026 21:31:28 GMT</pubDate>
            <atom:updated>2026-10-21T21:31:28.702Z</atom:updated>
            <content:encoded><![CDATA[<h4>Yesterday I generated a <a href="https://github.com/lassiecoder/supabase-management-sdk">TypeScript and Python SDK</a> for the Supabase Management API with <a href="https://voxgig.com/sdk">Voxgig’s</a> SDK generator.</h4><p>The first command overwrote two files I already had. My .gitignore lost the line that ignored .env , the file holding my API token, and my LICENSE came back as “Copyright © 2026 Voxgig”.</p><p>When I went looking for the cause, I found a .jostraca/ folder in my repo with 844 files inside it. The SDK generator writes its files through <a href="https://jostraca.org">Jostraca</a>, a code generator by Richard Rodger, who also wrote the SDK generator. So I spent an evening testing Jostraca 0.40.0 on its own, to find out whether the overwrite was Jostraca’s fault or a choice made on top of it.</p><h3><strong>The pitch</strong></h3><p><strong>Jostraca’s</strong> docs open with a claim I agree with: the first run of a code generator is easy, and the hard one is the second run, after people have edited the output. Its answer is to split generation into two phases. Your callback builds a tree of components in memory, and only after that does a build phase write files, comparing each one with what’s already on disk.</p><pre>import { Jostraca, Project, File, Content } from &#39;jostraca&#39;<br><br>const jostraca = Jostraca({ existing: { txt: { write: true, merge: true } } })<br><br>await jostraca.generate({ folder: &#39;./out&#39; }, () =&gt; {<br>  Project({}, () =&gt; File({ name: &#39;config.sh&#39; }, () =&gt; Content(&#39;PORT=8080\n&#39;)))<br>})</pre><p>There is no template language. Loops are for, conditions are if, and the only substitution syntax is $$path$$, which reads one value from the model and can do nothing else. I like this a lot, and so will anyone who has debugged a Handlebars partial late at night.</p><p>For files that already exist, you pick a mode per file type: write, preserve, present, diff or merge. The default is write, which overwrites.</p><p>That answered my first question. The SDK generator’s scaffolder passes existing: {txt: {write: true, merge: false}} explicitly, and sdkgen itself does the same. Jostraca overwrote my .gitignore because it was told to. The feature its homepage leads with is switched off in the tool that brought me to Jostraca in the first place.</p><h3><strong>Merge, when it works</strong></h3><p>I wanted to know whether merge deserved to be switched on, so I tested the case the homepage example avoids: the user and the generator both change the same line.</p><pre>await run(&#39;PORT=8080\nHOST=localhost\n&#39;)<br>writeFileSync(&#39;./out/config.sh&#39;, &#39;PORT=3000\nHOST=localhost\n&#39;)  // my edit<br>const res = await run(&#39;PORT=9090\nHOST=localhost\n&#39;)              // generator change<br>console.log(res.files.conflicted)  // [ &#39;out/config.sh&#39; ]</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qFyUDXkJndqps17OMGRD4A.png" /></figure><p>Jostraca doesn’t guess here, and if you run the generator again without resolving the conflict, the file is still listed in conflicted. My complaint is about what happens around it: generate() resolves normally and the process exits 0, while config.sh is now a shell script that won’t run. A CI job stays green unless you check res.files.conflicted yourself. The docs do tell you to check it, but I’d rather the safe behaviour were the default, with an option to opt out.</p><h3><strong>Merge, after git clone</strong></h3><p>A three-way merge needs a base. Jostraca keeps a copy of the previous output in .jostraca/generated/ , and it writes a .gitignore that keeps that copy out of git. So I played the part of a teammate: generate, add a line by hand, commit, then delete .jostraca the way a fresh clone would see it, and regenerate with merge on.</p><pre>await run(&#39;PORT=8080\nHOST=localhost\n&#39;)<br>appendFileSync(&#39;./out/config.sh&#39;, &#39;DEBUG=1\n&#39;)   // committed hand edit<br>rmSync(&#39;./out/.jostraca&#39;, { recursive: true })   // what a fresh clone has<br>const res = await run(&#39;PORT=9090\nHOST=localhost\n&#39;)<br>console.log(res.files.written)  // [ &#39;out/config.sh&#39; ]</pre><p>DEBUG=1 is gone. There’s no conflict and no warning, and the file is reported as written, exactly like a normal overwrite.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*chr3zWFYPgbPODN857LAHQ.png" /></figure><p>The reference docs do describe this, in a section called “Merge needs a baseline, and degrades silently without one”. The explanation page says something else: that a colleague without the base gets a first merge that “degrades to a two-way comparison”. My test agrees with the reference. The README says every code sample in the docs is run by the test suite, and that’s true, but this sentence is prose, so nothing checks it. And the explanation page is where you’d go to decide whether merge is safe for a team.</p><p>Jostraca’s fix is control.version:true, which commits the base. For my Supabase SDK that’s 9.3 MB across 844 files, a second copy of the repo inside the repo. Copier, the Python project templater, handles the same problem differently. It commits a small answers file that records the template version, and on update it regenerates the old output in a temporary directory to use as the base. Jostraca generators are arbitrary code, so copying that approach is harder. But Jostraca already knows when the base file is missing, because that’s the check that triggers the fallback. It could warn, or refuse to merge. Today it falls back to the most destructive mode and says nothing.</p><h3><strong>Two substring matches</strong></h3><p>Two other features rely on plain string matching, and both caught me out.</p><p>Any file on disk that contains the text JOSTRACA_PROTECT, anywhere, is never overwritten again. I wrote a generator that emits a CONTRIBUTING.md explaining this feature to users. On the second run the generator couldn’t update its own file. It stayed at version 1, and every list in res.files was empty, so nothing told me the file had been skipped. The docs say to “emit the marker yourself only in files you intend people to adopt”, but a file that only mentions the feature counts as adopting it. Requiring a specific form, such as a line starting with JOSTRACA_PROTECT:, would prevent this kind of accident.</p><p>The replace option on templates has the same problem. A plain key matches anywhere, including inside other identifiers:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*D7jmcaqEdzLIk_HgzlysbA.png" /></figure><p>That output type-checks, runs, and reads two environment variables nobody sets, so the service loads undefined.json. You can write /\\bNAME\\b/ as a regex key instead, and the docs explain the matching rules clearly. Still, the short form is the one people will copy, and it’s the one that does the risky thing.</p><h3><strong>What I’d keep</strong></h3><p><strong>Jostraca’s</strong> docs are more candid than most commercial products’ docs. They list their own sharp edges, like present doing nothing unless write is false, and they spell out what each design choice costs. Because the samples are tested, I could copy them and get exactly the documented output. The define-then-build split is a good idea, and I’d keep the no-template-language rule in any generator I wrote.</p><p>My problem is that most of Jostraca’s value depends on merge, and merge only works on the machine that ran the previous generation. Its biggest user has turned merge off, and the docs disagree with each other about what happens without a base. Until a missing base produces at least a warning, I’d use Jostraca the way sdkgen does: write mode, everything committed, and git diff as the merge tool. That works. But it leaves the component API and the missing template language as the reasons to pick Jostraca over a few hundred lines of my own fs.writeFileSync, and those aren’t what the homepage is selling.</p><p>You can find the codebase on <em>GitHub; </em><a href="https://github.com/lassiecoder/jostraca-experiments"><strong><em>lassiecoder/jostraca-experiments</em></strong></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a31423c31941" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tech-scoop/i-tried-to-break-jostracas-merge-and-it-survived-until-i-cloned-the-repo-a31423c31941">I tried to break Jostraca’s merge, and it survived until I cloned the repo</a> was originally published in <a href="https://medium.com/tech-scoop">Tech Scoop</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[React Native build failed? Find the real Error in your logs]]></title>
            <link>https://levelup.gitconnected.com/react-native-build-failed-find-the-real-error-in-your-logs-c4c23b048a07?source=rss-5bb557ac64b3------2</link>
            <guid isPermaLink="false">https://medium.com/p/c4c23b048a07</guid>
            <category><![CDATA[android]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[npm]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[lassiecoder ]]></dc:creator>
            <pubDate>Fri, 16 Oct 2026 15:24:51 GMT</pubDate>
            <atom:updated>2026-10-16T15:24:51.138Z</atom:updated>
            <content:encoded><![CDATA[<h4>A free, open-source CLI that reads React Native and Expo build logs (Gradle, Xcode, CocoaPods, Metro, logcat) and shows the real error, the evidence and the fix</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dUBs-IT8yll7oDPqq1cCJg.png" /><figcaption>RN Build Doctor, find the real reason your React Native build failed: <a href="https://www.npmjs.com/package/rn-build-doctor">https://www.npmjs.com/package/rn-build-doctor</a></figcaption></figure><p>If you build React Native apps, you know this moment. You run the Android build, wait a few minutes, and the terminal ends with BUILD FAILED. Above it are hundreds of lines of Gradle tasks, deprecation warnings and “Run with — stacktrace” hints. The actual problem is in there somewhere.</p><p>iOS is no better. Xcode prints thousands of lines, CocoaPods has its own error format, Metro has another, and when the app builds but crashes on a device, the clue is buried in an adb logcat stream full of system noise.</p><p>I’ve lost more hours to finding the right line than to fixing the actual problem. So I built a tool for it: RN Build Doctor, a free, open-source command-line tool that reads React Native and Expo build, device and crash logs and tells you what actually failed, shows the evidence, and suggests what to do next.</p><pre>npx rn-build-doctor</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*3x75iKLWMZx0TnrBZ05Cog.gif" /><figcaption>RN Build Doctor diagnosing an Android build failure, an app that can’t reach Metro, and an iOS signing error</figcaption></figure><h3>The problem: the last line of the log is rarely the real error</h3><p>Here is the bottom of a real failed Android build from a React Native 0.87 app. This is what you see when the build stops:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BNrf1YIPrPDmX1Ba3x1lOg.png" /><figcaption>The last lines of a failed React Native Gradle build: Try hints, deprecation warnings and BUILD FAILED</figcaption></figure><p>The cause is in that log, but it’s surrounded by noise. And this is an easy one. In a release build with a JS bundling step, a native module and a Kotlin compile step, the real error can be several hundred lines above the end, and every toolchain formats errors differently.</p><p>The usual way to deal with this is to scroll, search for “error”, copy something that looks important into Google or an AI chat, and hope. That last option has a hidden cost too: build logs often contain file paths, tokens and environment values you probably shouldn’t be pasting into a chat window.</p><h3>What RN Build Doctor does</h3><p>You give it a log, either as a file or piped straight from the build:</p><pre>(cd android &amp;&amp; ./gradlew assembleDebug) 2&gt;&amp;1 | npx rn-build-doctor analyze -</pre><p>For that same build, it prints:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9TVVUpiVSX7145TQGGPtHg.png" /><figcaption>rn-build-doctor reporting that androidx.health.connect needs minSdk 26 while the app’s minSdk is 24, with evidence and next steps</figcaption></figure><p>Every finding has the same four parts:</p><p>1. What failed: the primary error, in plain words, not the last line of the log.</p><p>2. The evidence: the exact log lines (with their original line numbers) and the project files and versions involved.</p><p>3. What to do next: specific steps, not “try cleaning the build”.</p><p>4. How to verify: a command or check that tells you the fix worked.</p><p>It covers the places React Native builds break:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bzZemtIu9PSndpe1ea4hFg.png" /><figcaption>The areas RN Build Doctor checks: Android/Gradle, iOS/Xcode, Metro, runtime, Expo and environment variables</figcaption></figure><p>- Android / Gradle: JDK vs Android Gradle Plugin mismatches, Gradle too old, dependency resolution, AAR metadata and compileSdk requirements, duplicate classes, manifest merger failures (including a library that needs a higher minSdk), Kotlin and Java compile errors, and JVM options the JDK rejects.</p><p>- iOS / Xcode: code signing, CocoaPods version problems and missing specs, compile errors, linker errors, and the “Bundle React Native code and images” phase.</p><p>- Metro: unresolved modules (missing package, path alias, Node built-in, wrong relative path) and syntax errors.</p><p>- Runtime: JavaScript exceptions, red screens when a debug app can’t reach Metro, Android fatal exceptions, and iOS crash reports.</p><p>- Expo: app config, config plugins, SDK version mismatches, and environment variables that never reach EAS builds.</p><p>There’s also a project check (npx rn-build-doctor scan) that looks at your setup before you build: JDK version, Android SDK location, lockfiles, Expo config and env variables.</p><h3>Three rules I built it around</h3><h4>1. Never guess</h4><p>This was the most important decision. Each of the 40 checks has a specific trigger, required evidence, and the versions it applies to. If a failure doesn’t match any check, the tool doesn’t invent a cause. It says “No supported diagnosis” and shows you the first real error lines instead.</p><p>Every finding also carries a confidence level (high, medium or low) and lists what it can’t know. For example, a local scan can’t see variables stored in EAS, so it says so.</p><h4>2. Evidence first</h4><p>A diagnosis without proof is just a guess with good formatting. The report format won’t accept an error or warning finding without evidence, so you can always check the tool’s reasoning against the log yourself.</p><h4>3. Offline and private</h4><p>scan and analyze run entirely on your machine and make no network requests. The test suite fails if they try. .env files are read for variable names only, never values, and every report is redacted (tokens, keys, passwords, your home directory) before it’s printed or saved.</p><p>There is an optional AI explanation (rn-build-doctor explain) for failures the rules don’t cover. It’s opt-in, shows you exactly what would be sent with, dry-run, and labels its suggestions as unverified, separate from the evidence-based findings.</p><h3>How it works</h3><p>Under the hood there are two steps.</p><p>First, parsers read the log structure for each toolchain: Gradle’s “What went wrong” sections and failing task paths, Xcode errors and failed build commands, CocoaPods [!] blocks, Metro resolver and Babel errors, and logcat lines (grouped by process ID, so system noise doesn’t end up in the evidence).</p><p>Then rules run against those parsed failures plus your project files: package.json, installed packages, the Gradle wrapper, Android Gradle Plugin version, minSdk, gradle.properties, Podfile, and app config. That combination is what lets it tell an uninstalled package apart from a Metro cache problem, or point to the exact line in gradle.properties that breaks the build.</p><p>It’s written in TypeScript, and reports are validated with Zod and exported as Markdown or JSON, so you can attach a clean, redacted report to a GitHub issue or a Slack thread.</p><h3>What testing it on real apps taught me</h3><p>Synthetic test logs only get you so far, so before writing this I ran the published package against real projects: two React Native CLI apps (React Native 0.86 and 0.87, Gradle 9, AGP 8.12 and 9.2), an Expo SDK 57 app, Xcode 26 builds, CocoaPods, and an Android 14 emulator. I broke them in realistic ways and piped the output into the tool, exactly as a user would.</p><p>It found real problems in my own tool, which is the point of testing:</p><p>- Piping a live build crashed. The very first published version read piped input in a way that failed while the build was still writing (an EAGAIN error). Static log files worked fine; real pipes didn’t. Fixed in the next release.</p><p>- Apple changed the linker’s wording. Since Xcode 15, a missing library is reported as ld: library ‘X’ not found instead of the old ld: library not found for -lX. My rule only knew the old wording and gave the wrong advice.</p><p>- The New Architecture changed how “Metro not running” looks. In a modern debug build, an app that can’t reach Metro no longer crashes. It shows a red screen and logs a warning, so the tool said “no failure detected”. That’s one of the most common problems people hit, so it got its own check:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*o25hZ4dgbLvqHk9yqV4kug.png" /><figcaption>rn-build-doctor explaining that the app couldn’t reach Metro to load its JavaScript bundle, with adb reverse as a next step</figcaption></figure><p>- CocoaPods warnings looked like errors. Every fresh React Native pod install prints “[!] hermes-engine has added 1 script phase”, using the same [!] marker as real errors. The tool reported a successful install as a failure. Now it knows the difference.</p><p>- One crash showed up as three errors. A JavaScript error at startup causes follow-on errors (“App has not been registered”). They’re now grouped under the error that caused them.</p><p>There were older-project lessons too. One of my older work projects still had -XX:MaxPermSize in gradle.properties, a leftover from old React Native templates. On a modern JDK, Gradle can’t even start, and the error is easy to miss. The tool now names the exact line:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-Vab5iVmHCPc3mRvMHYCqA.png" /><figcaption>rn-build-doctor explaining that the JVM rejects -XX:MaxPermSize, an option removed in JDK 8, and pointing to gradle.properties</figcaption></figure><p>Every one of those real logs, anonymized, became a regression test. The benchmark now has 67 labeled cases, 18 of them from real builds, including “near misses” that must not trigger a rule.</p><p><strong>To try it i<em>n any React Native or Expo project (Node.js 22.12 or later):</em></strong></p><pre># Check the project and environment<br>npx rn-build-doctor scan</pre><pre># Analyze a failing build<br>(cd android &amp;&amp; ./gradlew assembleDebug) 2&gt;&amp;1 | npx rn-build-doctor analyze -</pre><pre># Analyze a crash or red screen on Android<br>adb logcat -d | npx rn-build-doctor analyze -</pre><pre># Export a redacted report to share<br>npx rn-build-doctor report --output build-report.md</pre><p>It also works in CI: pipe your build into a log and run analyze when the step fails, and the report can go straight into the GitHub Actions job summary.</p><h3>What’s next</h3><p>It’s version 0.1, and the catalog is narrow on purpose. I’d rather have 40 checks that are right than 400 that guess. The most valuable thing anyone can send me is a real build failure it doesn’t recognize. An anonymized log in a GitHub issue is how the next checks get written.</p><p><strong>GitHub: </strong><a href="https://github.com/lassiecoder/rn-build-doctor"><strong>https://github.com/lassiecoder/rn-build-doctor</strong></a></p><p><strong>npm: </strong><a href="https://www.npmjs.com/package/rn-build-doctor"><strong>https://www.npmjs.com/package/rn-build-docto</strong>r</a></p><p><strong><em>If this saves you an hour of scrolling through Gradle output, a star on GitHub helps other developers find it.</em></strong></p><p><strong><em>And I’d love to hear: what’s the most painful React Native build error you’ve had to debug?</em></strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c4c23b048a07" width="1" height="1" alt=""><hr><p><a href="https://levelup.gitconnected.com/react-native-build-failed-find-the-real-error-in-your-logs-c4c23b048a07">React Native build failed? Find the real Error in your logs</a> was originally published in <a href="https://levelup.gitconnected.com">Level Up Coding</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Meta Just Shipped Every User Their Own VM — Here’s What’s Actually Inside It]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/design-bootcamp/meta-just-shipped-every-user-their-own-vm-heres-what-s-actually-inside-it-447792e604bc?source=rss-5bb557ac64b3------2"><img src="https://cdn-images-1.medium.com/max/1200/0*hCMU6FMFYQLzCBGm.jpg" width="1200"></a></p><p class="medium-feed-snippet">On September 8, 2026, Meta introduced Muse, a &#x201C;personal AI agent&#x201D; that doesn&#x2019;t just chat, it acts: books your travel, negotiates your&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/design-bootcamp/meta-just-shipped-every-user-their-own-vm-heres-what-s-actually-inside-it-447792e604bc?source=rss-5bb557ac64b3------2">Continue reading on Bootcamp »</a></p></div>]]></description>
            <link>https://medium.com/design-bootcamp/meta-just-shipped-every-user-their-own-vm-heres-what-s-actually-inside-it-447792e604bc?source=rss-5bb557ac64b3------2</link>
            <guid isPermaLink="false">https://medium.com/p/447792e604bc</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[meta]]></category>
            <dc:creator><![CDATA[lassiecoder ]]></dc:creator>
            <pubDate>Mon, 14 Sep 2026 18:50:46 GMT</pubDate>
            <atom:updated>2026-09-14T18:50:46.317Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[What MCP 2026–07–28 changes for anyone building on Claude]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://levelup.gitconnected.com/what-mcp-2026-07-28-changes-for-anyone-building-on-claude-b2e4ac9c5653?source=rss-5bb557ac64b3------2"><img src="https://cdn-images-1.medium.com/max/1478/1*JVPxUN9e-jfMtDi2_25iBg.png" width="1478"></a></p><p class="medium-feed-link"><a href="https://levelup.gitconnected.com/what-mcp-2026-07-28-changes-for-anyone-building-on-claude-b2e4ac9c5653?source=rss-5bb557ac64b3------2">Continue reading on Level Up Coding »</a></p></div>]]></description>
            <link>https://levelup.gitconnected.com/what-mcp-2026-07-28-changes-for-anyone-building-on-claude-b2e4ac9c5653?source=rss-5bb557ac64b3------2</link>
            <guid isPermaLink="false">https://medium.com/p/b2e4ac9c5653</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[claude]]></category>
            <dc:creator><![CDATA[lassiecoder ]]></dc:creator>
            <pubDate>Fri, 07 Aug 2026 15:46:18 GMT</pubDate>
            <atom:updated>2026-08-07T15:46:18.104Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Test the Email Verification Protocol (EVP) with an origin trial in Google Chrome]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/illumination/test-the-email-verification-protocol-evp-with-an-origin-trial-in-google-chrome-45e8752fc10e?source=rss-5bb557ac64b3------2"><img src="https://cdn-images-1.medium.com/max/1920/0*Y_pBqt8u3S1aUEGt.png" width="1920"></a></p><p class="medium-feed-snippet">Chrome is running an origin trial for something that finally fixes this: the Email Verification Protocol (EVP). No email sent. No&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/illumination/test-the-email-verification-protocol-evp-with-an-origin-trial-in-google-chrome-45e8752fc10e?source=rss-5bb557ac64b3------2">Continue reading on ILLUMINATION »</a></p></div>]]></description>
            <link>https://medium.com/illumination/test-the-email-verification-protocol-evp-with-an-origin-trial-in-google-chrome-45e8752fc10e?source=rss-5bb557ac64b3------2</link>
            <guid isPermaLink="false">https://medium.com/p/45e8752fc10e</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[google]]></category>
            <dc:creator><![CDATA[lassiecoder ]]></dc:creator>
            <pubDate>Thu, 23 Jul 2026 13:57:09 GMT</pubDate>
            <atom:updated>2026-07-23T13:57:09.337Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[border-shape with Pure CSS]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/design-bootcamp/border-shape-with-pure-css-618c0db682a0?source=rss-5bb557ac64b3------2"><img src="https://cdn-images-1.medium.com/max/1150/0*_rgJW96jIA_EGXEE.jpg" width="1150"></a></p><p class="medium-feed-snippet">If you&#x2019;ve ever tried to put a border on a CSS shape, you already know the pain. clip-path cuts the shape out beautifully, and takes your&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/design-bootcamp/border-shape-with-pure-css-618c0db682a0?source=rss-5bb557ac64b3------2">Continue reading on Bootcamp »</a></p></div>]]></description>
            <link>https://medium.com/design-bootcamp/border-shape-with-pure-css-618c0db682a0?source=rss-5bb557ac64b3------2</link>
            <guid isPermaLink="false">https://medium.com/p/618c0db682a0</guid>
            <category><![CDATA[css]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[animation]]></category>
            <dc:creator><![CDATA[lassiecoder ]]></dc:creator>
            <pubDate>Tue, 21 Jul 2026 21:35:12 GMT</pubDate>
            <atom:updated>2026-07-21T21:35:12.644Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[How to use Claude Cowork effectively]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://levelup.gitconnected.com/how-to-use-claude-cowork-effectively-62f7df0edbb1?source=rss-5bb557ac64b3------2"><img src="https://cdn-images-1.medium.com/max/2000/0*sop6e6N4aHCjX1SF.jpg" width="2000"></a></p><p class="medium-feed-snippet">Anthropic released a breakdown of how people are using Claude Cowork, based on 1.2 million sampled sessions from May 2026.</p><p class="medium-feed-link"><a href="https://levelup.gitconnected.com/how-to-use-claude-cowork-effectively-62f7df0edbb1?source=rss-5bb557ac64b3------2">Continue reading on Level Up Coding »</a></p></div>]]></description>
            <link>https://levelup.gitconnected.com/how-to-use-claude-cowork-effectively-62f7df0edbb1?source=rss-5bb557ac64b3------2</link>
            <guid isPermaLink="false">https://medium.com/p/62f7df0edbb1</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[lassiecoder ]]></dc:creator>
            <pubDate>Mon, 20 Jul 2026 15:30:00 GMT</pubDate>
            <atom:updated>2026-07-20T15:30:00.646Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Google Vids — Google’s free AI video editor]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/design-bootcamp/google-vids-googles-free-ai-video-editor-d27fb90a0bf5?source=rss-5bb557ac64b3------2"><img src="https://cdn-images-1.medium.com/max/2600/1*uxwvdbYNu_CxU0MypzG3Mw.png" width="2992"></a></p><p class="medium-feed-snippet">Google Vids has quietly become one of the most capable free AI video tools available in 2026, and most people still don&#x2019;t know what it can&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/design-bootcamp/google-vids-googles-free-ai-video-editor-d27fb90a0bf5?source=rss-5bb557ac64b3------2">Continue reading on Bootcamp »</a></p></div>]]></description>
            <link>https://medium.com/design-bootcamp/google-vids-googles-free-ai-video-editor-d27fb90a0bf5?source=rss-5bb557ac64b3------2</link>
            <guid isPermaLink="false">https://medium.com/p/d27fb90a0bf5</guid>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[lassiecoder ]]></dc:creator>
            <pubDate>Fri, 17 Jul 2026 21:13:45 GMT</pubDate>
            <atom:updated>2026-07-17T21:13:45.199Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[I tried 3 Google AI tools for job hunting and here’s what actually works]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/design-bootcamp/i-tried-3-google-ai-tools-for-job-hunting-and-heres-what-actually-works-826a54348e22?source=rss-5bb557ac64b3------2"><img src="https://cdn-images-1.medium.com/max/2600/1*5016-IBCdfkXTXe8mJ3rBw.png" width="2760"></a></p><p class="medium-feed-snippet">Google quietly built a full job search toolkit. Most people have no idea it exists.</p><p class="medium-feed-link"><a href="https://medium.com/design-bootcamp/i-tried-3-google-ai-tools-for-job-hunting-and-heres-what-actually-works-826a54348e22?source=rss-5bb557ac64b3------2">Continue reading on Bootcamp »</a></p></div>]]></description>
            <link>https://medium.com/design-bootcamp/i-tried-3-google-ai-tools-for-job-hunting-and-heres-what-actually-works-826a54348e22?source=rss-5bb557ac64b3------2</link>
            <guid isPermaLink="false">https://medium.com/p/826a54348e22</guid>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[jobs]]></category>
            <dc:creator><![CDATA[lassiecoder ]]></dc:creator>
            <pubDate>Fri, 26 Jun 2026 07:46:07 GMT</pubDate>
            <atom:updated>2026-06-26T07:46:07.544Z</atom:updated>
        </item>
    </channel>
</rss>