<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rami James</title>
    <description>The latest articles on DEV Community by Rami James (@ramijames).</description>
    <link>https://dev.to/ramijames</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F58178%2F7487d61c-dfd0-40df-ace5-ff707d83b695.png</url>
      <title>DEV Community: Rami James</title>
      <link>https://dev.to/ramijames</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ramijames"/>
    <language>en</language>
    <item>
      <title>Meet Doodlescan</title>
      <dc:creator>Rami James</dc:creator>
      <pubDate>Tue, 24 Mar 2026 20:59:53 +0000</pubDate>
      <link>https://dev.to/ramijames/meet-doodlescan-3nh9</link>
      <guid>https://dev.to/ramijames/meet-doodlescan-3nh9</guid>
      <description>&lt;p&gt;Every blockchain explorer I've used answers one question: did the transaction succeed? And they answer it with a decoded function signature and a table of raw values. No execution context, no way to see how that function connects to the rest of the contract.&lt;/p&gt;

&lt;p&gt;We built &lt;a href="https://doodledapp.com/explorer" rel="noopener noreferrer"&gt;Doodlescan&lt;/a&gt; to fix that. When you look up a transaction, it renders the called function inside a visual flow graph of the full contract. You can trace the execution path, see the guards and modifiers, the events it emits, the internal calls it makes. The function stops being an isolated signature and becomes a window into the contract's actual behavior.&lt;/p&gt;

&lt;p&gt;The gas breakdown is visual too. You see the gas used vs. the limit as a bar, the price in Gwei, the fee in the native token, and the percentage consumed. When you combine that with the contract graph, you start to see why certain transactions cost more: storage writes, loops over dynamic arrays, mapping reads in access control checks. All visible in the graph.&lt;/p&gt;

&lt;p&gt;It covers Ethereum, Base, Arbitrum, BNB Chain, and Polygon. Search by tx hash, contract address, wallet address, or ENS name. No account required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://doodledapp.com/feed/meet-doodlescan-see-what-every-transaction-actually-does" rel="noopener noreferrer"&gt;https://doodledapp.com/feed/meet-doodlescan-see-what-every-transaction-actually-does&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ethereum</category>
      <category>solidity</category>
      <category>web3</category>
    </item>
    <item>
      <title>If you're not a developer, have you still ever wanted to create a smart contract?</title>
      <dc:creator>Rami James</dc:creator>
      <pubDate>Sat, 14 Mar 2026 03:43:51 +0000</pubDate>
      <link>https://dev.to/ramijames/if-youre-not-a-developer-have-you-still-ever-wanted-to-create-a-smart-contract-15e2</link>
      <guid>https://dev.to/ramijames/if-youre-not-a-developer-have-you-still-ever-wanted-to-create-a-smart-contract-15e2</guid>
      <description>&lt;p&gt;I've been a crypto developer for about 10 years, so I don't think I can answer this question to myself anymore. and most of my social circle is developers as well so it's kind of the same thing.&lt;/p&gt;

&lt;p&gt;I'm trying to figure out if (or what anecdotal percentage of) non-developers have any desire to create smart contracts. Or rather, just the desire to create non-template crypto projects.&lt;/p&gt;

&lt;p&gt;(Full transparency: this is related to something I'm building, but I don't want to promote it here because I'm really just looking to have a discussion)&lt;/p&gt;

&lt;p&gt;Have you ever wanted to create a crypto project but felt like you couldn't because of the skill gap? &lt;/p&gt;

</description>
      <category>solidity</category>
      <category>smart</category>
      <category>contract</category>
    </item>
    <item>
      <title>We sandbox every build. Here is what we learned.</title>
      <dc:creator>Rami James</dc:creator>
      <pubDate>Mon, 23 Feb 2026 14:44:48 +0000</pubDate>
      <link>https://dev.to/ramijames/we-sandbox-every-build-here-is-what-we-learned-2k47</link>
      <guid>https://dev.to/ramijames/we-sandbox-every-build-here-is-what-we-learned-2k47</guid>
      <description>&lt;p&gt;We sandbox every build at Doodledapp. Here's why it matters.&lt;br&gt;
When you compile a smart contract in our visual builder and import a package like OpenZeppelin, that code runs on our servers. NPM packages (the building blocks of most javascript-based software) can execute code during installation.&lt;/p&gt;

&lt;p&gt;Link: &lt;a href="https://doodledapp.com/feed/we-sandbox-every-build-here-is-what-we-learned" rel="noopener noreferrer"&gt;https://doodledapp.com/feed/we-sandbox-every-build-here-is-what-we-learned&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In web3, attackers have exploited this repeatedly by compromising popular libraries used by hundreds of thousands of developers and draining user funds.&lt;/p&gt;

&lt;p&gt;We couldn't just trust the packages our users import. So we built Doodledapp so that every build runs in its own isolated container, completely cut off from the rest of our infrastructure.&lt;/p&gt;

&lt;p&gt;It's fast enough to feel instant and secure enough to treat every dependency as potentially hostile.&lt;/p&gt;

&lt;p&gt;The trade-offs, the architecture decisions, the surprises along the way, it's all in our latest build-in-public post.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>solidity</category>
      <category>ethereuem</category>
      <category>webdev</category>
    </item>
    <item>
      <title>WebGL shaders with Three.js in Nuxt</title>
      <dc:creator>Rami James</dc:creator>
      <pubDate>Wed, 21 Jan 2026 07:22:13 +0000</pubDate>
      <link>https://dev.to/ramijames/webgl-shaders-with-threejs-in-nuxt-2323</link>
      <guid>https://dev.to/ramijames/webgl-shaders-with-threejs-in-nuxt-2323</guid>
      <description>&lt;p&gt;As we rethink what engagement and interactivity mean in digital products, technologies like WebGL, Three.js, and modern frameworks such as Nuxt are enabling entirely new classes of user experiences right in the browser.&lt;/p&gt;

&lt;p&gt;Read the full exploration here: &lt;a href="https://www.ramijames.com/thoughts/webgl-shaders-with-threejs-in-nuxt" rel="noopener noreferrer"&gt;WebGL shaders with Three.js in Nuxt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In my recent write‑up, WebGL shaders with Three.js in Nuxt, I explored how GPU‑accelerated graphics and shader programming can be leveraged inside a Nuxt project to produce subtle, dynamic visual effects that elevate interface design beyond the ordinary. By executing custom fragment and vertex shaders on the GPU, we can craft organic and immersive visual backgrounds without compromising performance and, importantly, do it in a way that degrades gracefully for broader device support.&lt;/p&gt;

&lt;p&gt;Libraries like Three.js bring 3D graphics to the web by abstracting low‑level WebGL details into a flexible JavaScript API, enabling everything from animated scenes to advanced shading techniques. This capability has transformed how designers and developers think about the “canvas” of the web. As we push forward, the intersection of WebGL, GPU computing, and framework‑driven application architecture presents an exciting frontier. Whether subtle background shaders that react to input or full 3D worlds rendered in real time, these technologies empower us to build richer, more expressive interfaces that feel alive.&lt;/p&gt;

&lt;p&gt;If your goal is to innovate on the web rather than replicate the past, integrating GPU‑level graphics into your stack is no longer a niche, it’s a differentiator!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>threejs</category>
      <category>nuxt</category>
    </item>
    <item>
      <title>No More Meetings</title>
      <dc:creator>Rami James</dc:creator>
      <pubDate>Wed, 21 May 2025 09:44:58 +0000</pubDate>
      <link>https://dev.to/ramijames/no-more-meetings-1f1m</link>
      <guid>https://dev.to/ramijames/no-more-meetings-1f1m</guid>
      <description>&lt;p&gt;No more meetings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F011okv3l08ui3toz1dfa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F011okv3l08ui3toz1dfa.jpg" alt="No more meetings t-shirt" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👇 Join the resistance:&lt;br&gt;
&lt;a href="https://www.miserablyemployed.com/products/no-more-meetings" rel="noopener noreferrer"&gt;https://www.miserablyemployed.com/products/no-more-meetings&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not one more sync, not one more “quick check-in,” not one more hour of pretending to take notes while slowly losing the will to live.&lt;/p&gt;

&lt;p&gt;We used to build things. Now we schedule things.&lt;br&gt;
We used to do the work. Now we just talk about it.&lt;/p&gt;

&lt;p&gt;"No More Meetings" is a t-shirt for anyone who’s been booked into oblivion and is one Outlook invite away from starting a commune in the woods.&lt;/p&gt;

&lt;p&gt;Wear it to your next standup. Or don’t — skip it entirely. That’s the dream.&lt;/p&gt;

&lt;h1&gt;
  
  
  MeetingsThatShouldntExist #CorporateSatire #RemoteLife #MiserablyEmployed #CalendarFatigue #LetMeWork
&lt;/h1&gt;

</description>
      <category>agile</category>
      <category>developers</category>
      <category>devrel</category>
      <category>startup</category>
    </item>
    <item>
      <title>The Development Process</title>
      <dc:creator>Rami James</dc:creator>
      <pubDate>Mon, 19 May 2025 10:23:02 +0000</pubDate>
      <link>https://dev.to/ramijames/the-development-process-1e1e</link>
      <guid>https://dev.to/ramijames/the-development-process-1e1e</guid>
      <description>&lt;p&gt;They call it “The Development Process.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5slr7e1065mzwufmeb4b.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5slr7e1065mzwufmeb4b.jpg" alt="The Development Process Miserably Employed Comic" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;👇 Join the broken pipeline: &lt;a href="https://www.miserablyemployed.com/products/the-development-process" rel="noopener noreferrer"&gt;https://www.miserablyemployed.com/products/the-development-process&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpqtoebkaschqzaiodji7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpqtoebkaschqzaiodji7.jpg" alt="The Development Process Miserably Employed T-shirt" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You code sober.&lt;/li&gt;
&lt;li&gt;You push drunk.&lt;/li&gt;
&lt;li&gt;You debug hungover.&lt;/li&gt;
&lt;li&gt;And you release out of pure, unfiltered spite.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s not agile. It’s not clean.&lt;/p&gt;

&lt;p&gt;But it gets deployed — eventually — usually around 4:59PM on a Friday.&lt;br&gt;
"The Development Process" is a t-shirt for the devs who’ve seen too much, fixed what should never have existed, and learned to navigate Jira like a war map.&lt;/p&gt;

&lt;p&gt;Wear it to your next retro. Or your next resignation.&lt;/p&gt;

</description>
      <category>humor</category>
      <category>funny</category>
      <category>developers</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I'm the CTO now</title>
      <dc:creator>Rami James</dc:creator>
      <pubDate>Tue, 13 May 2025 16:32:26 +0000</pubDate>
      <link>https://dev.to/ramijames/im-the-cto-now-510l</link>
      <guid>https://dev.to/ramijames/im-the-cto-now-510l</guid>
      <description>&lt;p&gt;&lt;a href="https://www.miserablyemployed.com/blogs/news/im-the-cto-now" rel="noopener noreferrer"&gt;🧨 Read the full original rant from Miserably Employed:&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-&lt;/p&gt;

&lt;p&gt;Let me tell you a little story about unintentional leadership in tech.&lt;/p&gt;

&lt;p&gt;Everyone quit.&lt;br&gt;
The designers. The PMs. The guy who only ever talked about his standing desk.&lt;/p&gt;

&lt;p&gt;So now… I’m the CTO.&lt;/p&gt;

&lt;p&gt;Not because I earned it. Not because I wanted it.&lt;br&gt;
But because I was too tired to leave.&lt;br&gt;
What Leadership Actually Looks Like&lt;/p&gt;

&lt;p&gt;Let me paint a picture for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The CEO is still slinging “quick ideas” like pancakes at a bad diner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The investors want “roadmap clarity,” even though we’re actively sinking.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The interns? Logging into Figma every morning like it means something.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app is duct-taped together with half-dead microservices and a Redis instance that’s been sending me weird alerts since 2021. No one’s fixed billing in months. Someone set the deploy password to “12345” and then left the company.&lt;/p&gt;

&lt;p&gt;I deploy on Fridays. Because nothing matters.&lt;br&gt;
Climbing the Corporate Ladder (From Below)&lt;/p&gt;

&lt;p&gt;I didn’t climb to the top.&lt;br&gt;
I clawed my way through the smoking wreckage of a startup with a half-finished deployment script in one hand and a Slack notification in the other.&lt;/p&gt;

&lt;p&gt;I’ve inherited a haunted codebase.&lt;br&gt;
A backlog that’s a cry for help.&lt;br&gt;
A wiki that hasn’t been updated since launch day.&lt;/p&gt;

&lt;p&gt;I answer customer support tickets.&lt;br&gt;
I merge PRs I don’t understand.&lt;br&gt;
I manage AI interns who hallucinate half their reports.&lt;/p&gt;

&lt;p&gt;But I’m here. I’m still showing up. And I guess that makes me “leadership” now.&lt;br&gt;
Burnout as a Business Model&lt;/p&gt;

&lt;p&gt;Call it burnout. Call it commitment. Call it unpaid therapy.&lt;/p&gt;

&lt;p&gt;Whatever this is, it’s not “the dream.”&lt;/p&gt;

&lt;p&gt;I’m not a visionary. I’m not agile. I’m not optimizing anything.&lt;/p&gt;

&lt;p&gt;I’m just the last developer standing—and apparently, that means I’m in charge.&lt;br&gt;
TL;DR&lt;/p&gt;

&lt;p&gt;Startups fail.&lt;br&gt;
People leave.&lt;br&gt;
The only thing that stays is the broken code and whoever’s too exhausted to run.&lt;/p&gt;

&lt;p&gt;And sometimes, that person becomes the CTO.&lt;/p&gt;

&lt;p&gt;Welcome to the worst promotion of your life.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Everyone quit. Now I’m the CTO. I deploy on Fridays, manage ghost interns, and answer to a CEO who still thinks we have a “roadmap.” It’s not a promotion—it’s a punishment. https://www.miserablyemployed.com/blogs/news/im-the-cto-now</title>
      <dc:creator>Rami James</dc:creator>
      <pubDate>Tue, 13 May 2025 16:30:03 +0000</pubDate>
      <link>https://dev.to/ramijames/everyone-quit-now-im-the-cto-i-deploy-on-fridays-manage-ghost-interns-and-answer-to-a-ceo-who-e93</link>
      <guid>https://dev.to/ramijames/everyone-quit-now-im-the-cto-i-deploy-on-fridays-manage-ghost-interns-and-answer-to-a-ceo-who-e93</guid>
      <description></description>
      <category>career</category>
      <category>productivity</category>
      <category>leadership</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Have you ever accidentally created mass panic in your team's Slack? A new article by MiserablyEmployed just dropped "9 Ways to Spread Panic in Slack" https://www.miserablyemployed.com/blogs/news/9-ways-to-spread-panic-in-slack</title>
      <dc:creator>Rami James</dc:creator>
      <pubDate>Sat, 10 May 2025 06:43:56 +0000</pubDate>
      <link>https://dev.to/ramijames/have-you-ever-accidentally-created-mass-panic-in-your-teams-slack-a-new-article-by-f6g</link>
      <guid>https://dev.to/ramijames/have-you-ever-accidentally-created-mass-panic-in-your-teams-slack-a-new-article-by-f6g</guid>
      <description></description>
      <category>discuss</category>
      <category>productivity</category>
      <category>workplace</category>
      <category>communication</category>
    </item>
    <item>
      <title>https://www.miserablyemployed.com/blogs/news/how-to-get-fired-from-a-job-you-hate</title>
      <dc:creator>Rami James</dc:creator>
      <pubDate>Fri, 09 May 2025 08:30:22 +0000</pubDate>
      <link>https://dev.to/ramijames/httpswwwmiserablyemployedcomblogsnewshow-to-get-fired-from-a-job-you-hate-753</link>
      <guid>https://dev.to/ramijames/httpswwwmiserablyemployedcomblogsnewshow-to-get-fired-from-a-job-you-hate-753</guid>
      <description></description>
      <category>career</category>
      <category>workplace</category>
      <category>discuss</category>
    </item>
    <item>
      <title>That could have been an email.</title>
      <dc:creator>Rami James</dc:creator>
      <pubDate>Fri, 25 Apr 2025 09:34:21 +0000</pubDate>
      <link>https://dev.to/ramijames/that-could-have-been-an-email-329p</link>
      <guid>https://dev.to/ramijames/that-could-have-been-an-email-329p</guid>
      <description>&lt;p&gt;That could have been an email.&lt;/p&gt;

&lt;p&gt;But instead it was a 45-minute slideshow with graphs no one understood.&lt;/p&gt;

&lt;p&gt;You showed up. You nodded. You questioned the very concept of time. And when it was over, you left with the same amount of information you started with—except now you're 46% more dead inside.&lt;/p&gt;

&lt;p&gt;This shirt says what your polite, tight-lipped smile couldn’t: This. Was. Unnecessary.&lt;/p&gt;

&lt;p&gt;Made from ultra-soft cotton to cushion the crushing weight of wasted hours. Ideal for open offices, Zoom fatigue, and quietly judging calendar invites with 12+ attendees.&lt;/p&gt;

&lt;p&gt;Because efficiency died so that synergy could live.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.miserablyemployed.com/shop/p/that-could-have-been-an-email" rel="noopener noreferrer"&gt;https://www.miserablyemployed.com/shop/p/that-could-have-been-an-email&lt;/a&gt;&lt;/p&gt;

</description>
      <category>jira</category>
      <category>agile</category>
      <category>tech</category>
      <category>nightmare</category>
    </item>
    <item>
      <title>Reading Documentation Effectively</title>
      <dc:creator>Rami James</dc:creator>
      <pubDate>Thu, 13 Feb 2025 09:01:23 +0000</pubDate>
      <link>https://dev.to/ramijames/reading-documentation-effectively-182h</link>
      <guid>https://dev.to/ramijames/reading-documentation-effectively-182h</guid>
      <description>&lt;p&gt;I guess that I wanted to prompt a discussion on how people should read documentation effectively. It's a skill in itself and something that took me a long time to really figure out how to do.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; How do you read docs?&lt;/li&gt;
&lt;li&gt; How much of the docs do you actually read?&lt;/li&gt;
&lt;li&gt; Do you have a set process?&lt;/li&gt;
&lt;li&gt; What makes for a frustrating reading experience?&lt;/li&gt;
&lt;li&gt; What are the best docs that you've come across?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.ramijames.com/thoughts/reading-documentation-effectively" rel="noopener noreferrer"&gt;I put down my thoughts on this here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>documentation</category>
      <category>development</category>
      <category>devrel</category>
      <category>writing</category>
    </item>
  </channel>
</rss>
