<?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: Jordan Rudman</title>
    <description>The latest articles on DEV Community by Jordan Rudman (@jrud25).</description>
    <link>https://dev.to/jrud25</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%2F1129607%2Fde8d6e49-d7ff-4821-b312-82bfca268798.png</url>
      <title>DEV Community: Jordan Rudman</title>
      <link>https://dev.to/jrud25</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jrud25"/>
    <language>en</language>
    <item>
      <title>Stop Repeating Yourself: Use Rules and Skills to Level Up Your AI Agent</title>
      <dc:creator>Jordan Rudman</dc:creator>
      <pubDate>Fri, 08 May 2026 07:49:25 +0000</pubDate>
      <link>https://dev.to/jrud25/stop-repeating-yourself-use-rules-and-skills-to-level-up-your-ai-agent-3699</link>
      <guid>https://dev.to/jrud25/stop-repeating-yourself-use-rules-and-skills-to-level-up-your-ai-agent-3699</guid>
      <description>&lt;p&gt;Do you find yourself typing the same instructions into every new project chat? Or noticing that your agent consistently struggles in certain areas like frontend design, testing, or API patterns? Rules and skills solve exactly that.&lt;/p&gt;

&lt;p&gt;Both are markdown files that provide persistent instructions for your agent, so you don't have to re-explain your preferences on every run. When triggered, the agent reads them automatically and incorporates them into its output.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rules
&lt;/h3&gt;

&lt;p&gt;Rules come in two flavors: &lt;strong&gt;global&lt;/strong&gt; and &lt;strong&gt;workspace&lt;/strong&gt;. Global rules apply across every workspace in your IDE. Workspace rules are scoped to a single project, useful for team conventions or framework-specific patterns. Workspace rules usually override or specialize global behavior.&lt;/p&gt;

&lt;p&gt;Each rule also has a trigger type:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manual: you invoke it explicitly when needed&lt;/li&gt;
&lt;li&gt;Always on: the agent references it on every single run&lt;/li&gt;
&lt;li&gt;Model decision: the agent decides for itself whether the rule is relevant&lt;/li&gt;
&lt;li&gt;Glob: the rule activates only for files matching a pattern, like &lt;code&gt;**/*.go&lt;/code&gt; for Go files or &lt;code&gt;**/*.{js,ts,jsx,tsx}&lt;/code&gt; for a JS/TS project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's an example &lt;code&gt;RULES.md&lt;/code&gt; I use for JS/TS projects:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;trigger&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;glob&lt;/span&gt;
&lt;span class="na"&gt;globs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="s"&gt;/*.{js,ts,jsx,tsx}&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

&lt;span class="gu"&gt;## TypeScript / JavaScript&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; TypeScript is the default — never introduce plain &lt;span class="sb"&gt;`.js`&lt;/span&gt; files unless explicitly asked
&lt;span class="p"&gt;-&lt;/span&gt; Strict mode always: &lt;span class="sb"&gt;`"strict": true`&lt;/span&gt; in tsconfig
&lt;span class="p"&gt;-&lt;/span&gt; No &lt;span class="sb"&gt;`any`&lt;/span&gt; — use &lt;span class="sb"&gt;`unknown`&lt;/span&gt; and narrow it, or model the type properly
&lt;span class="p"&gt;-&lt;/span&gt; Prefer &lt;span class="sb"&gt;`const`&lt;/span&gt; over &lt;span class="sb"&gt;`let`&lt;/span&gt;; never use &lt;span class="sb"&gt;`var`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Use named exports over default exports
&lt;span class="p"&gt;-&lt;/span&gt; Async/await over raw Promises; avoid &lt;span class="sb"&gt;`.then()`&lt;/span&gt; chains
&lt;span class="p"&gt;-&lt;/span&gt; No barrel files (&lt;span class="sb"&gt;`index.ts`&lt;/span&gt; re-exporting everything) unless the project already uses them
&lt;span class="p"&gt;-&lt;/span&gt; Avoid large synchronous operations on the main thread; prefer streaming over buffering where possible
&lt;span class="p"&gt;-&lt;/span&gt; Unit tests live alongside source files as &lt;span class="sb"&gt;`*.test.ts`&lt;/span&gt;; E2E/integration tests may live in a dedicated folder.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Skills
&lt;/h3&gt;

&lt;p&gt;Skills are more targeted than rules. When triggered, the agent reads the full skill file and uses it to guide its approach before responding. Each one lives in its own folder under a &lt;code&gt;skills/&lt;/code&gt; parent directory and provides deep guidance on a specific capability. The description you write for each skill is what the agent uses to decide when to invoke it, so it's worth being precise.&lt;/p&gt;

&lt;p&gt;Here is a snippet of a frontend skill I use, based on one of &lt;a href="https://github.com/anthropics/skills/" rel="noopener noreferrer"&gt;Anthropic's Claude skills&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;frontend-design&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications (examples include websites, landing pages, dashboards, React components, HTML/CSS layouts, or when styling/beautifying any web UI). Generates creative, polished code and UI design that avoids generic AI aesthetics.&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

This skill guides creation of distinctive, production-grade frontend interfaces that avoid generic "AI slop" aesthetics. Implement real working code with exceptional attention to aesthetic details and creative choices.

The user provides frontend requirements: a component, page, application, or interface to build. They may include context about the purpose, audience, or technical constraints.

&lt;span class="gu"&gt;## Design Thinking&lt;/span&gt;

Before coding, understand the context and commit to a BOLD aesthetic direction:
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Purpose**&lt;/span&gt;: What problem does this interface solve? Who uses it?
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Tone**&lt;/span&gt;: Commit to a distinct direction: brutally minimal, maximalist chaos, luxury/refined, lo-fi/zine, dark/moody, soft/pastel, editorial/magazine, brutalist/raw, retro-futuristic, handcrafted/artisanal, organic/natural, art deco/geometric, playful/whimsical, industrial/utilitarian, etc. There are infinite varieties to start from and surpass. Use these as inspiration, but the final design should feel singular, with every detail working in service of one cohesive direction.
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Constraints**&lt;/span&gt;: Technical requirements (framework, performance, accessibility).
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Differentiation**&lt;/span&gt;: What makes this UNFORGETTABLE? What's the one thing someone will remember?

&lt;span class="gs"&gt;**CRITICAL**&lt;/span&gt;: Choose a clear conceptual direction and execute it vigorously. Bold maximalism and refined minimalism both work - the key is intentionality, not intensity.

Then implement working code (HTML/CSS/JS, React, Vue, etc.) that is:
&lt;span class="p"&gt;-&lt;/span&gt; Production-grade, functional, and responsive
&lt;span class="p"&gt;-&lt;/span&gt; Visually striking and memorable
&lt;span class="p"&gt;-&lt;/span&gt; Cohesive with a clear aesthetic point-of-view
&lt;span class="p"&gt;-&lt;/span&gt; Meticulously refined in every detail
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How to get set up
&lt;/h3&gt;

&lt;p&gt;Setting everything up is easy and only takes a few minutes. Most coding tools have a rules and skills section in their settings UI. For Windsurf, it's available under the three dots in the top right of the agent chat. Alternatively, you can create the files directly in the right location.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skills&lt;/strong&gt; - each skill is a &lt;code&gt;SKILL.md&lt;/code&gt; file inside a named folder:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows: &lt;code&gt;C:/Users/[username]/.codeium/windsurf/skills/[skill-name]/SKILL.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Mac/Linux: &lt;code&gt;~/.codeium/windsurf/skills/[skill-name]/SKILL.md&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Global rules&lt;/strong&gt; - a single file:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows: &lt;code&gt;C:/Users/[username]/.codeium/windsurf/memories/global_rules.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Mac/Linux: &lt;code&gt;~/.codeium/windsurf/memories/global_rules.md&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Workspace rules&lt;/strong&gt; - stored in your project folder:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;.windsurf/[rule-name].md&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A couple of things to remember when creating files manually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rules files need a trigger block at the top (see the example above)&lt;/li&gt;
&lt;li&gt;Skill files need a name and description in their frontmatter - that's how the agent knows when to use them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also find many pre-written rules and skills online, like this &lt;a href="https://github.com/ComposioHQ/awesome-claude-skills" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;. Most modern coding agents support some variation of rules and reusable skills/prompts, though the exact format and triggering behavior differs between tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pitfalls to keep in mind
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Too many always-on rules dilute adherence.&lt;/strong&gt; If every rule is always active, the agent's context fills up fast and it starts glossing over instructions. Be selective — reserve "always on" for truly universal conventions and use glob or manual triggers for everything else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conflicting rules create inconsistent outputs.&lt;/strong&gt; If your global rules say "prefer functional components" and a workspace rule says "use class components for stateful logic," the agent will make a judgment call — and it won't always be the one you want. Audit your rules occasionally to make sure they don't contradict each other.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overly specific skills can reduce creativity.&lt;/strong&gt; A skill that prescribes every decision leaves no room for the agent to adapt to context. Aim to set direction and constraints, not a step-by-step recipe — the best skills explain why something matters, not just what to do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Huge skill files increase context usage and latency.&lt;/strong&gt; Every time a skill is invoked, its full content is loaded into the agent's context window. A 5,000-word skill file is expensive. Keep skills focused on one capability and trim anything that doesn't directly affect output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agents sometimes cargo-cult rule text instead of reasoning.&lt;/strong&gt; This is the subtle one. An agent that's told "always use named exports" might apply that rule mechanically in situations where it doesn't make sense, without understanding the tradeoff. Phrasing rules with brief rationale ("...because default exports make refactoring harder") helps the agent apply judgment rather than just pattern-match.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good agents aren’t just about model quality anymore. A big part of the experience comes from the environment you build around them: rules, skills, context, and constraints. A few well-written files can dramatically change the consistency and quality of outputs across an entire project.&lt;/p&gt;

&lt;p&gt;Thanks for reading! Rules and skills are one of those small setup investments that pay off fast, especially on longer projects where consistency matters. If you have any skills or resources worth sharing, drop them in the comments below!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>tooling</category>
      <category>agents</category>
    </item>
    <item>
      <title>The Email I Almost Ignored That Saved My GitHub Repo</title>
      <dc:creator>Jordan Rudman</dc:creator>
      <pubDate>Fri, 02 Jan 2026 21:52:50 +0000</pubDate>
      <link>https://dev.to/jrud25/the-email-i-almost-ignored-that-saved-my-github-repo-5e2a</link>
      <guid>https://dev.to/jrud25/the-email-i-almost-ignored-that-saved-my-github-repo-5e2a</guid>
      <description>&lt;p&gt;Just the other day, a mysterious email landed in my inbox warning me that I had leaked sensitive information in one of my GitHub repositories. Since it came from a sender I didn’t recognize, my first instinct was to ignore it. Still, curiosity got the better of me, so I decided to check the repository myself.&lt;/p&gt;

&lt;p&gt;Sure enough, the email was right. I had accidentally committed my &lt;code&gt;settings.json&lt;/code&gt; file from a new project, which contained my Snowflake login credentials. If someone with malicious intent had discovered it first, the consequences could have been serious: losing access to my Snowflake account, exposing personal data, or even racking up fraudulent charges on my credit card.&lt;/p&gt;

&lt;p&gt;At that point, I took a closer look at the email itself. It turned out to be from GitGuardian, and after a quick search, I found plenty of similar stories. Developers accidentally push secrets to GitHub all the time. According to &lt;a href="https://github.blog/security/application-security/next-evolution-github-advanced-security/" rel="noopener noreferrer"&gt;this blog post from GitHub&lt;/a&gt;, they found 39 million secret leaks in 2024. That’s an absurd amount of sensitive information potentially exposed to anyone who knows how to look for it.&lt;/p&gt;

&lt;p&gt;Configuration files, environment variables, and test credentials routinely slip into commits, especially during rapid development or prototyping. &lt;strong&gt;Simply making the repo private or deleting/modifying the file in GitHub isn’t enough either&lt;/strong&gt;; the secret still exists in the repository’s git history and can be recovered. The only real fix is to revoke or rotate whatever credentials were exposed. But sometimes you have no idea that you leaked anything at all and that a fix is required.&lt;/p&gt;

&lt;p&gt;This is where GitGuardian comes in. GitGuardian automatically scans repositories for leaked secrets and alerts the repository owner as soon as it detects an issue.&lt;/p&gt;

&lt;p&gt;I went ahead and created an account, and I ended up &lt;em&gt;thoroughly&lt;/em&gt; impressed with the product. I was surprised by how quickly I could see exactly what had been exposed, where it lived in the repository, and why it was flagged. GitGuardian also offers preventative tools to stop secrets from ever being pushed in the first place. Since this isn’t a mistake I make often, I chose to rely on their alert system instead, so I can respond immediately if something slips through.&lt;/p&gt;

&lt;p&gt;When you connect GitGuardian to your GitHub account, it will continuously monitor your repositories for exposed secrets and clearly report what was leaked, along with its location. All of this is presented in a clean, intuitive, and informative UI that makes remediation straightforward instead of stressful.&lt;/p&gt;

&lt;p&gt;This experience was a reminder that security incidents don’t always come from sophisticated attacks. They often stem from small, human mistakes. Tools like GitGuardian don’t eliminate those mistakes entirely, but they dramatically reduce the time between "oops" and "fixed," which is often what matters most. If you’re a developer working with GitHub, this is one of those tools you hope you’ll never need, but you’ll be glad it’s there when you do.&lt;/p&gt;

&lt;p&gt;I’m not affiliated with GitGuardian in any way, just a user who was impressed enough by the product to give it a shoutout. You can check it out and get started for free &lt;a href="https://www.gitguardian.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;. I hope this helps you keep your secrets safe.&lt;/p&gt;

&lt;p&gt;Thanks for reading. Have you ever been alerted to a security mistake you didn’t even know you made? Do you use any tools to scan your repositories for mistakes? Let me know in the comments!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>security</category>
      <category>tooling</category>
      <category>github</category>
    </item>
    <item>
      <title>Stop Hard-Coding API Keys: Why You Need Environment Variables Right Now</title>
      <dc:creator>Jordan Rudman</dc:creator>
      <pubDate>Fri, 31 Jan 2025 20:58:15 +0000</pubDate>
      <link>https://dev.to/jrud25/stop-hard-coding-api-keys-why-you-need-environment-variables-right-now-584n</link>
      <guid>https://dev.to/jrud25/stop-hard-coding-api-keys-why-you-need-environment-variables-right-now-584n</guid>
      <description>&lt;p&gt;Have you ever built a project using an API that you wanted to post in a public repository so that you can share your code with the world? Perhaps you hard-coded in your API key and called it good. Well, did you know that there are malicious actors out there who use tools to scan public repositories for API keys? Without the proper security measures, they can have access to your secret key and do a number of things with it, including shutting down your service entirely. But no need to fear, environment variables are here to save the day!&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create a &lt;code&gt;.env&lt;/code&gt; File
&lt;/h2&gt;

&lt;p&gt;In your project folder, create a file called &lt;code&gt;.env&lt;/code&gt; at the same level as your &lt;code&gt;/src&lt;/code&gt; directory. Inside this file, you’ll store your API key. The standard naming convention is all caps with words separated by underscores. If you're using React, the name must start with &lt;code&gt;REACT_APP_&lt;/code&gt;. Here’s what a valid &lt;code&gt;.env&lt;/code&gt; file can look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;API_KEY=your_api_key_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;REACT_APP_API_KEY=your_react_api_key_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Access the Environment Variable
&lt;/h2&gt;

&lt;p&gt;Next, in the file where you want to use the API key, create a variable that references your &lt;code&gt;.env&lt;/code&gt; file like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;REACT_APP_API_KEY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can use the apiKey variable to represent your API key while keeping it hidden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add &lt;code&gt;.env&lt;/code&gt; to &lt;code&gt;.gitignore&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Finally, ensure your &lt;code&gt;.env&lt;/code&gt; file is not uploaded to your repository by adding it to your &lt;code&gt;.gitignore&lt;/code&gt; file:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;.gitignore&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pro Tips:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Restart Your Development Server&lt;/strong&gt;: Remember to restart your development server after making changes to your &lt;code&gt;.env&lt;/code&gt; file. Otherwise, your changes won’t take effect!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend Security Limitation&lt;/strong&gt;: While &lt;code&gt;.env&lt;/code&gt; files are great for hiding keys during development, remember that environment variables used in React are embedded in the build and can be accessed by anyone who inspects the client-side code. For truly sensitive keys, consider using a backend server to handle API requests.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example Usage:
&lt;/h2&gt;

&lt;p&gt;Here’s how you might use the &lt;code&gt;apiKey&lt;/code&gt; variable in an API call with &lt;code&gt;fetch&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fetchData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;REACT_APP_API_KEY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`https://api.example.com/data?api_key=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Wrap-up
&lt;/h2&gt;

&lt;p&gt;And just like that, your API keys are safe and you may share your code online without worry. Give it a try in your next project and let me know how it goes! Do you have another good way of hiding API keys? Share it down below- I’d love to hear your thoughts!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>tutorial</category>
      <category>react</category>
    </item>
    <item>
      <title>Easily Render PDFs in React!</title>
      <dc:creator>Jordan Rudman</dc:creator>
      <pubDate>Thu, 30 Jan 2025 02:20:20 +0000</pubDate>
      <link>https://dev.to/jrud25/easily-render-pdfs-in-react-5h9l</link>
      <guid>https://dev.to/jrud25/easily-render-pdfs-in-react-5h9l</guid>
      <description>&lt;h2&gt;
  
  
  Insert a PDF in your project in minutes!
&lt;/h2&gt;

&lt;p&gt;Have you ever wanted a quick and easy way to render a PDF in React? Look no further than react-pdf. It provides a fast and simple method to beautifully display any pdf just like an image.&lt;/p&gt;

&lt;p&gt;First, install react-pdf. Below are examples of how to do so with npm, yarn, and bun. Please note Bun is not officially supported by react-pdf, but many users report it works well.&lt;/p&gt;

&lt;p&gt;npm&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install @react-pdf/renderer --save
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yarn&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add @react-pdf/renderer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bun&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bun add @react-pdf/renderer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, make sure you have your necessary imports. I will also be using a Box component from MUI as I find it gives good control over how my components look. The following code is at the top of my Resume.js file from the &lt;a href="https://rudman-portfolio.web.app/resume" rel="noopener noreferrer"&gt;resume page on my personal website&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';
import { pdfjs, Document, Page } from 'react-pdf';
import { Box } from "@mui/material";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, you can insert your PDF! Make sure the PDF that you wish to display is in your &lt;code&gt;/public&lt;/code&gt; folder. Then, render it in the file you are working with in &lt;code&gt;/src&lt;/code&gt;. The code framework is as follows, where you can change the filename and desired size:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Document file={{ url: process.env.PUBLIC_URL + '/file.pdf' }}&amp;gt;
    &amp;lt;Page size="A4" /&amp;gt;
&amp;lt;/Document&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how I have worked it into my code for my personal website.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;Box&amp;gt;
    &amp;lt;div style={{ maxWidth: '800px', margin: '0 auto', maxHeight: '1025px', overflow: 'hidden', marginBottom: '20px' }}&amp;gt;
        &amp;lt;Document file={{ url: process.env.PUBLIC_URL + '/resume.pdf' }}&amp;gt;
            &amp;lt;Page pageNumber={1} width={800} /&amp;gt;
        &amp;lt;/Document&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/Box&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For more information on react-pdf's components and their props, visit their documentation page &lt;a href="https://react-pdf.org/components#document" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;🎵 🎵 🎵 &lt;/p&gt;

&lt;p&gt;Thank you for reading! What project are you working on that needs a PDF insertion? Did react-pdf work well for you? Have a better method? Let me know down below!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>tutorial</category>
      <category>coding</category>
    </item>
    <item>
      <title>Music, Programming, and You 🎵</title>
      <dc:creator>Jordan Rudman</dc:creator>
      <pubDate>Wed, 03 Jan 2024 08:33:50 +0000</pubDate>
      <link>https://dev.to/jrud25/music-programming-and-you-2ckp</link>
      <guid>https://dev.to/jrud25/music-programming-and-you-2ckp</guid>
      <description>&lt;h2&gt;
  
  
  Enhance Your Work Focus with Alternative Sounds
&lt;/h2&gt;

&lt;p&gt;If you're like me and love music but tend to get distracted from work by your favorite tunes, check out this list of other sources of sonic bliss to use while you grind.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. &lt;a href="https://musicforprogramming.net/latest/" rel="noopener noreferrer"&gt;Music for Programmers&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Over 100 hours of music tailored to programmers? Yes, please. No account necessary, completely free with no ads, and a cool interface make this site a no-brainer to turn to for some background audio. New "episodes" added occasionally.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Lo-fi Music
&lt;/h2&gt;

&lt;p&gt;Fun, relaxing sounds that won't overstimulate your brain while you code. There's a reason the &lt;a href="https://www.youtube.com/watch?v=jfKfPfyJRdk" rel="noopener noreferrer"&gt;Lo-fi girl&lt;/a&gt; has been the go-to for thousands of people over the years and is still widely popular. Endless playlists throughout YouTube and Spotify are also available, so find some that you like!&lt;/p&gt;

&lt;h2&gt;
  
  
  3. &lt;a href="//brain.fm"&gt;Brain.fm&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;If you want something more robust, there's no better place to turn than brain.fm. Scientifically proven (&lt;a href="https://thecgapress.cga.school/1466/opinion/do-lofi-and-binaural-beats-actually-help-you-study/" rel="noopener noreferrer"&gt;yes, really&lt;/a&gt;) to help you focus better, brain.fm provides a customizable experience with loads of great tracks and a simple UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Video Game Soundtracks
&lt;/h2&gt;

&lt;p&gt;This one might be controversial, but I've found some games have fantastic OSTs for focusing. My personal favorite is the music from Risk of Rain 2 (check it out on Spotify &lt;a href="https://open.spotify.com/album/3eFWXLdogrCHW11f8ZQLoa?si=v9oZSS4NRiKK_5H1fptGiA" rel="noopener noreferrer"&gt;here&lt;/a&gt;). You can often find these soundtracks in their entirety on YouTube or Spotify.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Ambient Noise
&lt;/h2&gt;

&lt;p&gt;Want to switch it up? Try throwing on some calming sounds like rain, forest ambiance, or beach noise. Often used to aide sleep, these sounds can also help increase focus and concentration while working. Just don't fall asleep at your computer!&lt;/p&gt;

&lt;p&gt;🌟🌟🌟&lt;/p&gt;

&lt;p&gt;Enhancing your work focus can be as simple as finding the right sonic companion. Give these alternatives a try, and let the music lead you to a more productive and focused work environment. I've personally found these alternatives to be game-changers in improving my work focus. Experiment with each one and discover what works best for you!&lt;/p&gt;

&lt;p&gt;What's your favorite work music alternative? Share your thoughts and recommendations in the comments below. Thanks for reading!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>developer</category>
      <category>motivation</category>
    </item>
    <item>
      <title>9 Tools to Use for Your Next Website</title>
      <dc:creator>Jordan Rudman</dc:creator>
      <pubDate>Wed, 08 Nov 2023 07:31:26 +0000</pubDate>
      <link>https://dev.to/jrud25/9-tools-to-use-for-your-next-website-44jm</link>
      <guid>https://dev.to/jrud25/9-tools-to-use-for-your-next-website-44jm</guid>
      <description>&lt;p&gt;Whether you're embarking on a new web project or seeking to enhance existing ones, having the right set of tools at your disposal can make all the difference. Here are nine of my favorite tools that I currently use to boost productivity and supercharge my websites' performance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://coolors.co/" rel="noopener noreferrer"&gt;Coolors.co&lt;/a&gt; + &lt;a href="https://www.canva.com/colors/color-wheel/" rel="noopener noreferrer"&gt;Canva color wheel&lt;/a&gt;&lt;br&gt;
Crafting an eye-catching and harmonious color scheme is a breeze with Coolors. This tool offers beautifully curated color sets rooted in color theory. To further customize your palette, the Canva color wheel is your creative playground. Bid farewell to dull and uninspiring websites!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://logo.com/" rel="noopener noreferrer"&gt;LOGO.com&lt;/a&gt;&lt;br&gt;
Need an outstanding logo but lack design skills or extra time? Simply describe your vision, and LOGO.com will bring it to life with professional flair.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.framer.com/" rel="noopener noreferrer"&gt;Framer&lt;/a&gt;&lt;br&gt;
Elevate your website design with Framer by creating buttery-smooth animations that captivate your audience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Development&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://favicomatic.com/" rel="noopener noreferrer"&gt;Favic-o-matic&lt;/a&gt;&lt;br&gt;
Don't overlook the details – give your website a polished touch with a custom favicon generated effortlessly by Favic-o-matic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://mark-rolich.github.io/RulersGuides.js/" rel="noopener noreferrer"&gt;Rulers Guides&lt;/a&gt;&lt;br&gt;
In the world of web development, precision is paramount. Rulers Guides makes it easy to align elements with pixel-perfect accuracy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://matthewlein.com/tools/ceaser" rel="noopener noreferrer"&gt;Ceaser&lt;/a&gt;&lt;br&gt;
Enrich your website with stunning CSS animations, all within your grasp through the user-friendly interface of Ceaser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://mir.aculo.us/dom-monster/" rel="noopener noreferrer"&gt;DOM Monster&lt;/a&gt;&lt;br&gt;
Boost your website's performance and loading speed by optimizing its Document Object Model (DOM) structure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://andy.edinborough.org/CSS-Stress-Testing-and-Performance-Profiling" rel="noopener noreferrer"&gt;CSS Stress Test&lt;/a&gt;&lt;br&gt;
Uncover and resolve performance bottlenecks within your CSS code using the insights provided by CSS Stress Test.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://betterstack.com/uptime" rel="noopener noreferrer"&gt;Better Uptime&lt;/a&gt;&lt;br&gt;
Keep your website running seamlessly with Better Uptime, a tool that continuously monitors your site's uptime and promptly alerts you to any issues.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🌟🌟🌟&lt;/p&gt;

&lt;p&gt;With these powerful tools at your disposal, you'll be well-equipped to create, refine, and maintain a top-notch website. Whether you're focused on design, development, or performance optimization, these tools offer a range of features and functionalities to meet your specific needs.&lt;/p&gt;

&lt;p&gt;In conclusion, these 9 tools are essential for anyone involved in building and maintaining websites. They save you time, enhance the user experience, and keep your site performing at its best. Don't hesitate to explore these tools and incorporate them into your web development toolkit to create websites that shine in terms of design, functionality, and performance. Your website visitors will thank you for it!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>learning</category>
      <category>motivation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Web Design Wonderland: 10 Portfolio Inspirations to Elevate Your Site 🚀</title>
      <dc:creator>Jordan Rudman</dc:creator>
      <pubDate>Sun, 01 Oct 2023 19:31:09 +0000</pubDate>
      <link>https://dev.to/jrud25/web-design-wonderland-10-portfolio-inspirations-to-elevate-your-site-4bmg</link>
      <guid>https://dev.to/jrud25/web-design-wonderland-10-portfolio-inspirations-to-elevate-your-site-4bmg</guid>
      <description>&lt;p&gt;Looking for some inspiration for your own portfolio website or other projects? Just want to check out some well-designed sites? Look no further than these 10 digital portfolios that are bound to get your creative juices flowing. ✨&lt;/p&gt;

&lt;h2&gt;
  
  
  1) &lt;a href="https://www.jashsak.com/" rel="noopener noreferrer"&gt;Jo Ash Sakula&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;With a satisfying intro animation and an interesting horizontal-scrolling projects section, Jo's portfolio is sure to captivate visitors right from the start.&lt;/p&gt;

&lt;h2&gt;
  
  
  2) &lt;a href="http://effyzhang.com/" rel="noopener noreferrer"&gt;Effy Zhang&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Effy's portfolio is a perfect example of a single-page portfolio—simple yet effective and infused with personal flair.&lt;/p&gt;

&lt;h2&gt;
  
  
  3) &lt;a href="https://robinclediere.com/" rel="noopener noreferrer"&gt;Robin Clediere&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;As an experienced designer, Robin's portfolio boasts an elegant layout with a seamless flow, eliminating distractions.&lt;/p&gt;

&lt;h2&gt;
  
  
  4) &lt;a href="http://timothyachumba.com/" rel="noopener noreferrer"&gt;Timothy Achumba&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Timothy's portfolio resembles a high-end fashion magazine layout, bringing an air of sophistication to your screen.&lt;/p&gt;

&lt;h2&gt;
  
  
  5) &lt;a href="http://grace-larosa.com/" rel="noopener noreferrer"&gt;Grace Larosa&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Grace's portfolio exudes elegance and refinement. Similar to Robin's, it flows gracefully, offering just the right blend of style without overwhelming.&lt;/p&gt;

&lt;h2&gt;
  
  
  6) &lt;a href="https://www.damjanstankovic.com/" rel="noopener noreferrer"&gt;Damjan Stankovic&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Damjan's portfolio stands out with its innovative approach. His homepage proudly showcases his projects, and the navigation element in the bottom right adds a unique touch.&lt;/p&gt;

&lt;h2&gt;
  
  
  7) &lt;a href="https://www.rammaheshwari.com/" rel="noopener noreferrer"&gt;Ram Maheshwari&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Ram's portfolio can be described in one word: clean. It presents everything with crystal-clear precision, combining features and functionality seamlessly.&lt;/p&gt;

&lt;h2&gt;
  
  
  8) &lt;a href="https://destroytoday.com/" rel="noopener noreferrer"&gt;Jonnie Hallman&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;While simplicity is often praised, Jonnie's portfolio is an exception. It impresses with beautiful animations that seamlessly enhance the user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  9) &lt;a href="https://thefox.is/" rel="noopener noreferrer"&gt;Karolina Szczur&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Karolina's site is organized into different pages, which works brilliantly. Each section has its dedicated space, making it easy for visitors to find what they need.&lt;/p&gt;

&lt;h2&gt;
  
  
  10) &lt;a href="https://mattfarley.ca/" rel="noopener noreferrer"&gt;Matt Farley&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Matt's portfolio has served as a significant inspiration to me. It is fun, friendly, and informative, providing everything you need to know about him and his projects, along with testimonials from peers— all just a scroll away.&lt;/p&gt;

&lt;p&gt;🌟🌟🌟&lt;/p&gt;

&lt;p&gt;Thanks for reading my first DEV post! I'm excited to share my learning as I journey into the world of web development. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>frontend</category>
      <category>javascript</category>
      <category>design</category>
    </item>
  </channel>
</rss>
