<?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: Roxroy </title>
    <description>The latest articles on DEV Community by Roxroy  (@roxroy).</description>
    <link>https://dev.to/roxroy</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%2F1356184%2F831ab05b-cef2-4e38-996c-05ea81879597.jpeg</url>
      <title>DEV Community: Roxroy </title>
      <link>https://dev.to/roxroy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/roxroy"/>
    <language>en</language>
    <item>
      <title>Stop Rewriting the Same Dev Helpers: Build a Browser Toolbelt Instead</title>
      <dc:creator>Roxroy </dc:creator>
      <pubDate>Tue, 30 Dec 2025 18:44:00 +0000</pubDate>
      <link>https://dev.to/roxroy/stop-rewriting-the-same-dev-helpers-build-a-browser-toolbelt-instead-g48</link>
      <guid>https://dev.to/roxroy/stop-rewriting-the-same-dev-helpers-build-a-browser-toolbelt-instead-g48</guid>
      <description>&lt;p&gt;For a long time, my dev life looked like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open editor.
&lt;/li&gt;
&lt;li&gt;Open docs.
&lt;/li&gt;
&lt;li&gt;Google “online JSON formatter” for the fifth time that week.
&lt;/li&gt;
&lt;li&gt;Write another tiny helper script I knew I had somewhere, but couldn’t find.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these tasks were hard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Format or validate JSON
&lt;/li&gt;
&lt;li&gt;Convert CSV ↔ JSON ↔ XML
&lt;/li&gt;
&lt;li&gt;Generate test data
&lt;/li&gt;
&lt;li&gt;Convert time zones
&lt;/li&gt;
&lt;li&gt;Decode some weird token or Base64 blob
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But they were constant. Death by a thousand tiny helpers.&lt;/p&gt;

&lt;p&gt;At some point I realised my problem wasn’t skill. It was that I treated every small task as a one‑off, instead of part of a repeatable workflow. So I stopped trying to be a hero and built myself a &lt;strong&gt;browser toolbelt&lt;/strong&gt; instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed for me
&lt;/h2&gt;

&lt;p&gt;Once I treated these chores as a system, a few things shifted:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I cut my “yak shaving” time by roughly &lt;strong&gt;60–70%&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;The little 5–10 minute detours started to disappear.
&lt;/li&gt;
&lt;li&gt;I went from many small context switches to a few predictable ones.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this shows up on a project plan, but it shows up in how tired your brain feels at 3 p.m.&lt;/p&gt;

&lt;p&gt;This post walks through how I built that toolbelt, and how you can build your own with whatever tools you prefer. I did end up turning my own setup into a public toolbox at &lt;a href="https://www.coderstool.com/" rel="noopener noreferrer"&gt;CodersTool&lt;/a&gt;, but the ideas here work even if you never visit the site.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple rule: refuse “one‑off” scripts for repeat work
&lt;/h2&gt;

&lt;p&gt;I use one rule now:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;If a task is repetitive, mechanical, and easy to get wrong,&lt;br&gt;&lt;br&gt;
 I try not to solve it with a brand‑new script.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of opening a scratch file, I ask three questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Have I solved this before?
&lt;/li&gt;
&lt;li&gt;Is there a stable tool that already does this?
&lt;/li&gt;
&lt;li&gt;Does this really need to live in the repo?
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Often the answer is “&lt;strong&gt;no, I just need a reliable helper.&lt;/strong&gt;” That’s where the browser toolbelt comes in.&lt;/p&gt;

&lt;h2&gt;
  
  
  From random tabs to a deliberate toolbelt
&lt;/h2&gt;

&lt;p&gt;For years my “toolbelt” was just search history:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;format json online&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;csv to json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;utc to est converter&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;url decode online&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every session: same searches, slightly different sites, new pop‑ups and layouts. Two problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Behaviour wasn’t consistent.
&lt;/li&gt;
&lt;li&gt;I never built muscle memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I did something boring but effective:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Picked &lt;strong&gt;one&lt;/strong&gt; tool per repeated chore.
&lt;/li&gt;
&lt;li&gt;Bookmarked it in a &lt;code&gt;Dev Toolbelt&lt;/code&gt; folder.
&lt;/li&gt;
&lt;li&gt;Used that same tool every time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That was the turning point. Once the folder existed, adding and pruning tools became natural.&lt;/p&gt;




&lt;h2&gt;
  
  
  The core categories in my browser toolbelt
&lt;/h2&gt;

&lt;p&gt;Your work will be different, but these categories gave me the best return.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. JSON and API helpers
&lt;/h3&gt;

&lt;p&gt;If you touch APIs, JSON is probably your main friction point. I rely on three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A formatter/validator so I can actually read payloads.
&lt;/li&gt;
&lt;li&gt;A way to diff two JSON blobs.
&lt;/li&gt;
&lt;li&gt;Converters between JSON and CSV or XML.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can cover this with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your IDE formatter
&lt;/li&gt;
&lt;li&gt;CLI tools like &lt;a href="https://jqlang.org/" rel="noopener noreferrer"&gt;&lt;code&gt;jq&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;One trusted online formatter and converter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key is to stop hunting and use the same few tools each time.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Test data and fixtures
&lt;/h3&gt;

&lt;p&gt;I used to “test” with &lt;code&gt;test@test.com&lt;/code&gt; and &lt;code&gt;John Doe&lt;/code&gt; and be surprised when real data broke everything.&lt;/p&gt;

&lt;p&gt;Now I treat realistic test data as a first‑class tool:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faker‑style libraries for code
&lt;/li&gt;
&lt;li&gt;Simple generators for CSV / JSON lists
&lt;/li&gt;
&lt;li&gt;A shared sample dataset I can reuse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The workflow is simple: generate, export, import, re‑use. The more realistic your test data, the fewer weird production bugs you get.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Time zones and date math
&lt;/h3&gt;

&lt;p&gt;Time zones can eat entire afternoons. I mix:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Language features and libs
&lt;/li&gt;
&lt;li&gt;MDN or official docs
&lt;/li&gt;
&lt;li&gt;One friendly converter for sanity checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I never try to do timezone math in my head anymore. I push it through the same tiny set of tools every time.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Encodings and “what is this string?”
&lt;/h3&gt;

&lt;p&gt;I keep one place for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Base64
&lt;/li&gt;
&lt;li&gt;URL encoding/decoding
&lt;/li&gt;
&lt;li&gt;HTML entities
&lt;/li&gt;
&lt;li&gt;Quick hash checks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can do most of this with your standard library or &lt;a href="https://openssl-library.org/" rel="noopener noreferrer"&gt;&lt;code&gt;openssl&lt;/code&gt;&lt;/a&gt;. I still like having a familiar browser tool for quick checks, especially when I’m away from my main machine.&lt;/p&gt;




&lt;h2&gt;
  
  
  Keep it safe
&lt;/h2&gt;

&lt;p&gt;Browser tools are powerful, but they need guardrails:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Never paste production secrets or live customer data into random sites.
&lt;/li&gt;
&lt;li&gt;Prefer tools that clearly say they process data in the browser.
&lt;/li&gt;
&lt;li&gt;For sensitive workflows, consider self‑hosted or in‑house tools.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If it would be awkward to explain in a post‑mortem, it doesn’t belong in a public tool.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where AI fits in (and where it doesn’t)
&lt;/h2&gt;

&lt;p&gt;Today we also have AI helpers like Copilot and ChatGPT. They are great for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sketching one‑off scripts
&lt;/li&gt;
&lt;li&gt;Exploring unfamiliar APIs
&lt;/li&gt;
&lt;li&gt;Explaining confusing stack traces
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But they are not a full replacement for a toolbelt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI can be &lt;strong&gt;confident but wrong&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;It may use outdated or insecure patterns.
&lt;/li&gt;
&lt;li&gt;Results can change from run to run.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A small, deterministic toolbelt still wins for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quick format / convert / validate jobs
&lt;/li&gt;
&lt;li&gt;Reproducible workflows you can share with the team
&lt;/li&gt;
&lt;li&gt;Situations where you cannot paste data into an AI system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I use AI around the toolbelt, not instead of it.&lt;/p&gt;




&lt;h2&gt;
  
  
  When your toolbelt isn’t enough
&lt;/h2&gt;

&lt;p&gt;Not everything belongs in a browser tool. Some signs you need a different approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The task must run in CI or on every deploy.
&lt;/li&gt;
&lt;li&gt;The logic is specific to your business rules.
&lt;/li&gt;
&lt;li&gt;You need state, history, or heavy performance work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those problems deserve proper code, tests, and review. For me, the toolbelt is for stateless, repetitive, mechanical tasks.&lt;/p&gt;




&lt;h2&gt;
  
  
  Build your own in 20 minutes
&lt;/h2&gt;

&lt;p&gt;If you want to try this, here is a quick starting plan:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List your top five recurring annoyances.
&lt;/li&gt;
&lt;li&gt;For each one, pick a single helper you like.
&lt;/li&gt;
&lt;li&gt;Create a &lt;code&gt;Dev Toolbelt&lt;/code&gt; bookmark folder.
&lt;/li&gt;
&lt;li&gt;Add those links and pin the folder.
&lt;/li&gt;
&lt;li&gt;For one week, reach for the toolbelt before writing a new helper.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Optional extras:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add custom search keywords in your browser.
&lt;/li&gt;
&lt;li&gt;Pin a “toolbelt” tab you always keep open.
&lt;/li&gt;
&lt;li&gt;Share the list with your team and invite suggestions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start with &lt;strong&gt;three&lt;/strong&gt; solid tools, not thirty. Add more only after you feel the same pain a few times.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you’re curious what my own browser toolbelt looks like in a more concrete, tool-by-tool way, the canonical, link-heavy version of this idea lives here:&lt;br&gt;
👉 &lt;a href="https://www.coderstool.com/blog/computer-programming-made-easier" rel="noopener noreferrer"&gt;https://www.coderstool.com/blog/computer-programming-made-easier&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Common pitfalls
&lt;/h2&gt;

&lt;p&gt;A few mistakes I ran into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Trying to build a “perfect” toolbelt in one sitting
&lt;/li&gt;
&lt;li&gt;Re‑implementing tools that already exist and work well
&lt;/li&gt;
&lt;li&gt;Making everything depend on personal quirks no one else understands
&lt;/li&gt;
&lt;li&gt;Never pruning old or broken tools from the folder
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep the bar simple: does this tool save me time, reliably, in real work? If not, it goes.&lt;/p&gt;




&lt;h2&gt;
  
  
  A tiny maintenance habit
&lt;/h2&gt;

&lt;p&gt;Once a quarter, I spend ten minutes in the bookmark folder:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove tools I no longer use.
&lt;/li&gt;
&lt;li&gt;Replace anything that feels slow or sketchy.
&lt;/li&gt;
&lt;li&gt;Add one or two helpers that proved useful in the last few months.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That little cleanup keeps the toolbelt feeling light instead of bloated.&lt;/p&gt;




&lt;h2&gt;
  
  
  Over to you
&lt;/h2&gt;

&lt;p&gt;That’s how I went from random tabs and throwaway helpers to a small browser toolbelt that quietly saves me hours a month.&lt;/p&gt;

&lt;p&gt;I’m curious:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is one tool you can’t live without in your daily dev work?
&lt;/li&gt;
&lt;li&gt;Do you keep a toolbelt like this, or is everything still hiding in search history and old repos?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Share your essentials in the comments. I’d love to steal a few good ideas for my own setup.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tooling</category>
      <category>webdev</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to Add a security.txt File to Your Website in 5 Minutes (With a Generator)</title>
      <dc:creator>Roxroy </dc:creator>
      <pubDate>Wed, 03 Dec 2025 15:53:00 +0000</pubDate>
      <link>https://dev.to/roxroy/how-to-add-a-securitytxt-file-to-your-website-in-5-minutes-with-a-generator-2ik7</link>
      <guid>https://dev.to/roxroy/how-to-add-a-securitytxt-file-to-your-website-in-5-minutes-with-a-generator-2ik7</guid>
      <description>&lt;p&gt;If you’re running a website in 2026, you probably care about security.&lt;/p&gt;

&lt;p&gt;You might have HTTPS, HSTS, CSP, maybe even a bug bounty program. But there’s a tiny text file most sites still miss:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;/.well-known/security.txt&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s a simple file that tells security researchers &lt;strong&gt;how to contact you&lt;/strong&gt; if they find vulnerabilities on your site.&lt;/p&gt;

&lt;p&gt;In this post, I’ll explain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What &lt;code&gt;security.txt&lt;/code&gt; is (in human words)&lt;/li&gt;
&lt;li&gt;Why it matters even if you don’t run a big security team&lt;/li&gt;
&lt;li&gt;What goes inside the file&lt;/li&gt;
&lt;li&gt;How to generate one in a couple of minutes using a browser-based tool&lt;/li&gt;
&lt;li&gt;How to deploy it on common setups (static site, Laravel/PHP, .NET/IIS, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No security team required. Just you, a text file, and a few minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is &lt;code&gt;security.txt&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;security.txt&lt;/code&gt; is a proposed standard (RFC 9116) for publishing &lt;strong&gt;security contact information&lt;/strong&gt; for your website.&lt;/p&gt;

&lt;p&gt;The idea is similar to &lt;code&gt;robots.txt&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;robots.txt&lt;/code&gt; → tells search engines how to crawl your site&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;security.txt&lt;/code&gt; → tells security researchers how to &lt;strong&gt;report vulnerabilities&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It normally lives at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/.well-known/security.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;on your main domain. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://example.com/.well-known/security.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside that file, you list things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who to contact (email or URL)&lt;/li&gt;
&lt;li&gt;A link to your security policy&lt;/li&gt;
&lt;li&gt;Optional: your PGP key, acknowledgements page, hiring info, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So when someone finds a bug and wants to report it responsibly, they don’t have to guess. They just go to that URL and follow the instructions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why should you care as a “normal” developer?
&lt;/h2&gt;

&lt;p&gt;You don’t need to be a security engineer to benefit from &lt;code&gt;security.txt&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. It reduces friction for responsible disclosure
&lt;/h3&gt;

&lt;p&gt;Many security issues go unreported because people don’t know &lt;strong&gt;where&lt;/strong&gt; to report them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No security@ email address&lt;/li&gt;
&lt;li&gt;No bug bounty program&lt;/li&gt;
&lt;li&gt;No clear disclosure policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A &lt;code&gt;security.txt&lt;/code&gt; file says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“If you find something, here’s exactly how to tell us.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That alone can be the difference between a quiet, responsible report and an angry social media thread.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. It shows you take security seriously
&lt;/h3&gt;

&lt;p&gt;Even if you’re a small SaaS, indie project, or side project, adding &lt;code&gt;security.txt&lt;/code&gt; sends a signal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You’ve thought about security, at least to the point of defining a contact and a process.&lt;/li&gt;
&lt;li&gt;You’re open to hearing from researchers and power users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don’t need a massive program. A simple line like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Policy: https://example.com/security-policy
Contact: mailto:security@example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is enough to look much more mature than “no info at all”.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. It’s cheap “security hygiene”
&lt;/h3&gt;

&lt;p&gt;Some security improvements are complex and time-consuming.&lt;/p&gt;

&lt;p&gt;This one is not.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A small text file&lt;/li&gt;
&lt;li&gt;Served over HTTPS&lt;/li&gt;
&lt;li&gt;Updated once in a while when contacts change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s one of those “10 minutes now, potential life saver later” tasks.&lt;/p&gt;




&lt;h2&gt;
  
  
  What goes inside a &lt;code&gt;security.txt&lt;/code&gt; file?
&lt;/h2&gt;

&lt;p&gt;The standard defines several fields. You don’t need all of them, but here are the most common ones:&lt;/p&gt;

&lt;h3&gt;
  
  
  Required-ish (strongly recommended)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Contact&lt;/strong&gt; – How to reach you about security issues
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Contact: mailto:security@example.com
  Contact: https://example.com/security-contact
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Expires&lt;/strong&gt; – When this file should be considered out of date
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Expires: 2026-01-01T00:00:00Z
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Very useful
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Policy&lt;/strong&gt; – Your security/vulnerability disclosure policy
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Policy: https://example.com/security-policy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Acknowledgments&lt;/strong&gt; – Where you thank researchers (if you have a hall of fame)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Acknowledgments: https://example.com/security-acknowledgments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Encryption&lt;/strong&gt; – Public key for sending encrypted reports
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Encryption: https://example.com/pgp-key.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hiring&lt;/strong&gt; – If you’re hiring for security roles
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Hiring: https://example.com/careers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Canonical&lt;/strong&gt; – The canonical URL of this &lt;code&gt;security.txt&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  Canonical: https://example.com/.well-known/security.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also add comments with &lt;code&gt;#&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Security contact for Example Corp
Contact: mailto:security@example.com
Policy: https://example.com/security-policy
Expires: 2027-01-01T00:00:00Z
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That’s it. It’s just a structured text file.&lt;/p&gt;




&lt;h2&gt;
  
  
  The manual way vs. the generator way
&lt;/h2&gt;

&lt;p&gt;You &lt;em&gt;can&lt;/em&gt; create a &lt;code&gt;security.txt&lt;/code&gt; file by hand:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read the RFC (or various blog posts)&lt;/li&gt;
&lt;li&gt;Decide which fields to use&lt;/li&gt;
&lt;li&gt;Copy/paste some examples&lt;/li&gt;
&lt;li&gt;Try not to mess up the syntax&lt;/li&gt;
&lt;li&gt;Remember to set a valid future &lt;code&gt;Expires&lt;/code&gt; date&lt;/li&gt;
&lt;li&gt;Save the file, move it to the right path, deploy, test…&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It’s not rocket science, but it’s also the sort of thing you’ll probably do &lt;strong&gt;once&lt;/strong&gt; and forget how you did it next year when you need to update it.&lt;/p&gt;

&lt;p&gt;That’s why I prefer using a generator.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using a browser-based &lt;code&gt;security.txt&lt;/code&gt; generator
&lt;/h2&gt;

&lt;p&gt;There are several generators out there. I built one into &lt;a href="https://www.coderstool.com/" rel="noopener noreferrer"&gt;CodersTool&lt;/a&gt; because I kept needing simple “one-off” web utilities while working on various SaaS projects.&lt;/p&gt;

&lt;p&gt;The flow is basically:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fill out a small form in your browser&lt;/li&gt;
&lt;li&gt;Get a valid &lt;code&gt;security.txt&lt;/code&gt; snippet&lt;/li&gt;
&lt;li&gt;Download or copy the text&lt;/li&gt;
&lt;li&gt;Drop it into your site at &lt;code&gt;/.well-known/security.txt&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No login, no project setup, no CLIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example workflow (CodersTool-style)
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;You can follow this even if you use a different generator – the steps are the same.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Open the generator&lt;/strong&gt;&lt;br&gt;
Go to the &lt;code&gt;security.txt&lt;/code&gt; generator on CodersTool.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fill in the key fields&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Contact&lt;/strong&gt; – Most people use a dedicated mailbox like &lt;code&gt;security@yourdomain.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Policy&lt;/strong&gt; – If you don’t have a detailed policy, even a short page explaining “please email us, don’t publicly disclose immediately” is better than nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expires&lt;/strong&gt; – Pick a date 6–12 months in the future, so you’re forced to review it periodically.&lt;/li&gt;
&lt;li&gt;Optional: Acknowledgments, Encryption, Hiring, Canonical.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Generate the file&lt;/strong&gt;
The tool will spit out a &lt;code&gt;security.txt&lt;/code&gt; that looks something like:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   # security.txt for Example SaaS
   Contact: mailto:security@example.com
   Policy: https://example.com/security-policy
   Acknowledgments: https://example.com/security-acknowledgments
   Expires: 2027-01-01T00:00:00Z
   Canonical: https://example.com/.well-known/security.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Copy + save locally&lt;/strong&gt;
Save it as &lt;code&gt;security.txt&lt;/code&gt; on your local machine.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next step: deploy it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deploying &lt;code&gt;security.txt&lt;/code&gt; on different kinds of sites
&lt;/h2&gt;

&lt;p&gt;The goal is always the same:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Serve the file from &lt;code&gt;https://yourdomain.com/.well-known/security.txt&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How you get it there depends on your stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Static site / GitHub Pages / plain hosting
&lt;/h3&gt;

&lt;p&gt;If your site is just static HTML/CSS/JS:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a folder called &lt;code&gt;.well-known&lt;/code&gt; at the root of your site:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   /your-site-root/
     index.html
     ...
     /.well-known/
       security.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Put your generated &lt;code&gt;security.txt&lt;/code&gt; inside it.&lt;/li&gt;
&lt;li&gt;Deploy / upload as you normally would.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Test it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://yourdomain.com/.well-known/security.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see your text file in the browser.&lt;/p&gt;

&lt;p&gt;If you’re using a static site generator (Hugo, Jekyll, etc.), you can usually add &lt;code&gt;.well-known/security.txt&lt;/code&gt; to your &lt;code&gt;public&lt;/code&gt;/&lt;code&gt;dist&lt;/code&gt; output via a static files folder.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Laravel / PHP apps
&lt;/h3&gt;

&lt;p&gt;For a typical Laravel app:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option A – Serve it as a static file&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;public/.well-known/&lt;/code&gt; if it doesn’t exist.&lt;/li&gt;
&lt;li&gt;Add your &lt;code&gt;security.txt&lt;/code&gt; inside:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   /public/
     index.php
     ...
     /.well-known/
       security.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Laravel will happily let the web server serve this file directly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Option B – Route-based (if you really want it dynamic)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you prefer to generate it dynamically (e.g., from config or DB), you can add a route:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// routes/web.php&lt;/span&gt;
&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/.well-known/security.txt'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;&amp;lt;&amp;lt;&amp;lt;TXT
# security.txt for Example SaaS
Contact: mailto:security@example.com
Policy: https://example.com/security-policy
Expires: 2027-01-01T00:00:00Z
TXT;&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'Content-Type'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'text/plain'&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;p&gt;But honestly, a static file is usually enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. ASP.NET / IIS apps
&lt;/h3&gt;

&lt;p&gt;For .NET apps hosted on IIS:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In your site’s root folder, create a &lt;code&gt;.well-known&lt;/code&gt; directory.&lt;/li&gt;
&lt;li&gt;Drop &lt;code&gt;security.txt&lt;/code&gt; into it.&lt;/li&gt;
&lt;li&gt;Ensure IIS is configured to serve &lt;code&gt;.txt&lt;/code&gt; from that path (it usually is by default).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;File structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/wwwroot/
  web.config
  ...
  /.well-known/
    security.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you’re running ASP.NET Core with Kestrel + reverse proxy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Put &lt;code&gt;.well-known/security.txt&lt;/code&gt; into &lt;code&gt;wwwroot&lt;/code&gt;, or&lt;/li&gt;
&lt;li&gt;Map a route in your app to return the text file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Behind a CDN or reverse proxy
&lt;/h3&gt;

&lt;p&gt;If you sit behind something like Cloudflare, Fastly, etc.:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make sure the upstream origin serves &lt;code&gt;/.well-known/security.txt&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check that your CDN isn’t blocking or rewriting that path.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If your CDN has its own &lt;code&gt;security.txt&lt;/code&gt; feature, decide whether to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use theirs directly, or&lt;/li&gt;
&lt;li&gt;Use your origin &lt;code&gt;security.txt&lt;/code&gt; and let the CDN just pass it through.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;In many cases, you can still generate the content using a tool and then paste it into whatever config your CDN expects.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to verify your &lt;code&gt;security.txt&lt;/code&gt; file
&lt;/h2&gt;

&lt;p&gt;Once you’ve deployed, check:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Direct browser test&lt;/strong&gt;
Open:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   https://yourdomain.com/.well-known/security.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;in your browser and confirm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It’s accessible over &lt;strong&gt;HTTPS&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;It’s not being redirected somewhere weird&lt;/li&gt;
&lt;li&gt;The content matches what you generated&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check headers&lt;/strong&gt;
Use your browser dev tools or &lt;code&gt;curl&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   curl &lt;span class="nt"&gt;-I&lt;/span&gt; https://yourdomain.com/.well-known/security.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;HTTP/2 200&lt;/code&gt; (or similar success code)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;content-type: text/plain&lt;/code&gt; (ideal, though not strictly mandatory for humans)&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use an online validator&lt;/strong&gt;
There are validators that will:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Fetch your &lt;code&gt;security.txt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Check required fields&lt;/li&gt;
&lt;li&gt;Flag issues like invalid &lt;code&gt;Expires&lt;/code&gt; dates or unreachable URLs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(Just search “security.txt validator” and plug in your domain.)&lt;/p&gt;




&lt;h2&gt;
  
  
  Common mistakes to avoid
&lt;/h2&gt;

&lt;p&gt;A few gotchas that pop up a lot:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wrong path&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;https://example.com/security.txt&lt;/code&gt; is &lt;em&gt;not&lt;/em&gt; the standard path.&lt;br&gt;
Use &lt;code&gt;https://example.com/.well-known/security.txt&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No HTTPS&lt;/strong&gt;&lt;br&gt;
The file should be available over HTTPS. Serving it only over HTTP is discouraged.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Expired &lt;code&gt;Expires&lt;/code&gt; date&lt;/strong&gt;&lt;br&gt;
If the &lt;code&gt;Expires&lt;/code&gt; value is in the past or very soon, tools may treat your file as stale.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Unmonitored email address&lt;/strong&gt;&lt;br&gt;
Don’t point &lt;code&gt;Contact&lt;/code&gt; to an inbox nobody checks. Even if you can’t reply to every report, someone should at least see them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Invalid Contact&lt;/strong&gt;&lt;br&gt;
Ensure the email address you list (security@ or admin@) actually goes to a real inbox that is monitored.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Forgetting to update when things change&lt;/strong&gt;&lt;br&gt;
If your security contact moves, or your policy URL changes, update the file. That’s one reason having a generator handy is nice — you can recreate a clean file quickly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Where to go from here
&lt;/h2&gt;

&lt;p&gt;You don't need a SOC 2 audit or a dedicated CISO to take security seriously. You just need to be reachable.&lt;/p&gt;

&lt;p&gt;If you own or manage a website, adding &lt;code&gt;security.txt&lt;/code&gt; is one of those small, high-leverage tasks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It takes minutes.&lt;/li&gt;
&lt;li&gt;It helps people help you.&lt;/li&gt;
&lt;li&gt;It signals that you give a damn about security.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open a &lt;code&gt;security.txt&lt;/code&gt; generator (like the one on CodersTool).&lt;/li&gt;
&lt;li&gt;Fill in your contact, policy, and expiry.&lt;/li&gt;
&lt;li&gt;Save it as &lt;code&gt;/.well-known/security.txt&lt;/code&gt; on your site.&lt;/li&gt;
&lt;li&gt;Verify it in the browser and with a quick validator.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then you can forget about it… at least until your next &lt;code&gt;Expires&lt;/code&gt; date reminder.&lt;/p&gt;

&lt;p&gt;If you haven't created one yet, head over to the &lt;a href="https://www.coderstool.com/security-txt-generator" rel="noopener noreferrer"&gt;CodersTool Generator&lt;/a&gt;, create your snippet, and push it to production today.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>devops</category>
      <category>cybersecurity</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
