<?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: DarkenAmber</title>
    <description>The latest articles on DEV Community by DarkenAmber (@darkenamber).</description>
    <link>https://dev.to/darkenamber</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3968767%2Fb4ec3020-523e-4203-b89f-3afb3bd14810.png</url>
      <title>DEV Community: DarkenAmber</title>
      <link>https://dev.to/darkenamber</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/darkenamber"/>
    <language>en</language>
    <item>
      <title>Toolkit that gives Claude persistent memory and custom behaviors - here's what I learned</title>
      <dc:creator>DarkenAmber</dc:creator>
      <pubDate>Mon, 22 Jun 2026 11:55:09 +0000</pubDate>
      <link>https://dev.to/darkenamber/toolkit-that-gives-claude-persistent-memory-and-custom-behaviors-heres-what-i-learned-3g99</link>
      <guid>https://dev.to/darkenamber/toolkit-that-gives-claude-persistent-memory-and-custom-behaviors-heres-what-i-learned-3g99</guid>
      <description>&lt;p&gt;Every time I started a new chat with Claude, I had to re-explain everything.&lt;br&gt;
"Build this as a single HTML file, no React, no npm."&lt;br&gt;
"Bias toward shipping, not planning."&lt;br&gt;
"Remember I'm building for Android first."&lt;br&gt;
Every. Single. Time.&lt;br&gt;
So I built claude-kit - a collection of skills and MCP servers that make Claude work the way I think, without repeating myself.&lt;/p&gt;

&lt;p&gt;What is claude-kit?&lt;br&gt;
Two things in one repo:&lt;br&gt;
Skills - Markdown files that change how Claude reasons for a specific task. Copy one file to your project and Claude immediately knows your rules.&lt;br&gt;
MCP Servers - Python servers that give Claude new capabilities it didn't have before.&lt;br&gt;
claude-kit/&lt;br&gt;
├── skills/        - copy SKILL.md to your project. No install needed.&lt;br&gt;
└── mcp/           - run server.py to give Claude new capabilities.&lt;br&gt;
The tagline I kept coming back to: Skills fix the habits. MCP fixes the memory.&lt;/p&gt;

&lt;p&gt;The skills&lt;br&gt;
single-file-app&lt;br&gt;
I've built 4 real products as single HTML files - no npm, no React, no backend:&lt;/p&gt;

&lt;p&gt;DarkenAmber IT Tools - 17+ developer tools in 194KB&lt;br&gt;
ZeroOffice - PDF, image, AI tools offline&lt;br&gt;
PrivacyKit - photo privacy tools, no upload required&lt;/p&gt;

&lt;p&gt;Without this skill, Claude would start every tool with npx create-react-app. With it:&lt;br&gt;
bashcurl -o CLAUDE.md &lt;a href="https://raw.githubusercontent.com/DarkenAmber/claude-kit/main/skills/single-file-app/SKILL.md" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/DarkenAmber/claude-kit/main/skills/single-file-app/SKILL.md&lt;/a&gt;&lt;br&gt;
claude&lt;br&gt;
Claude now defaults to vanilla JS, localStorage, offline-first. Every time.&lt;br&gt;
ship-it&lt;br&gt;
This one took the most iteration to get right.&lt;br&gt;
Early versions were too aggressive - they told Claude to skip everything. The final version shows trade-offs instead of making decisions:&lt;br&gt;
User saysClaude shows"We need tests before launching""Manual smoke test now or write tests after validation - your call""Let me refactor first""Refactor now (cleaner, delayed feedback) or ship and refactor if users return (faster validation, messier code)"&lt;br&gt;
The key insight: a skill should be an advisor, not a saboteur.&lt;br&gt;
The most important part of ship-it is the Do NOT use when section:&lt;/p&gt;

&lt;p&gt;Payments and billing&lt;br&gt;
Auth and licensing&lt;br&gt;
Irreversible data operations&lt;/p&gt;

&lt;p&gt;Without this, the skill would tell you to skip tests on your payment module. That's dangerous.&lt;br&gt;
flutter-app&lt;br&gt;
Android-first, offline-first, Google Drive as backend.&lt;br&gt;
The most technically detailed skill. Went through 3 rounds of code review:&lt;/p&gt;

&lt;p&gt;Fixed UTF-8 byte length bug for Drive Media (Cyrillic/non-ASCII content)&lt;br&gt;
Updated to google_sign_in 7.x API (breaking changes from v6)&lt;br&gt;
Added AZ/EN/RU localization patterns&lt;br&gt;
Separated personal vs team Drive scopes (OAuth verification implications)&lt;/p&gt;

&lt;p&gt;indie-builder&lt;br&gt;
Build and launch micro-SaaS as a solo developer.&lt;br&gt;
Key addition after review: two revenue models - subscription MRR and one-time/license. Most indie playbooks only cover subscription. Hardware-gated demo tiers (free tier that only works with your device) are a valid funnel, not a leak.&lt;br&gt;
Distribution channels that actually matter for non-US markets: Telegram and Play Store ASO. Both missing from most Western indie guides.&lt;br&gt;
telegram-bot&lt;br&gt;
aiogram 3.x, webhook in production, FSM for conversations.&lt;br&gt;
The review caught two real bugs:&lt;/p&gt;

&lt;p&gt;asyncio.run(main()) + web.run_app() = RuntimeError in production. Fixed by making main() a regular function.&lt;br&gt;
ADMIN_IDS=123,456 in .env causes JSONDecodeError. Fixed with field_validator.&lt;/p&gt;

&lt;p&gt;The MCP servers&lt;br&gt;
memory-kit&lt;br&gt;
This is the one that surprised me most.&lt;br&gt;
Local SQLite with FTS5 full-text search. No cloud, no registration. Token stays on your machine.&lt;br&gt;
I installed it, wrote "remember that I prefer dark themes" and Claude called recall() and remember() automatically. Then in a new chat:&lt;/p&gt;

&lt;p&gt;"Here's what I've got on your preferences: Brand &amp;amp; identity - DarkenAmber with amber accent #E8A020. Stack - Flutter with setState, ESP32/ESP8266, single-file HTML tools. Working style - concept-first, debug one bug at a time..."&lt;/p&gt;

&lt;p&gt;It remembered everything across sessions. That's the feature.&lt;br&gt;
Install:&lt;br&gt;
bashcd mcp/memory-kit&lt;br&gt;
pip install -r requirements.txt&lt;br&gt;
Add to claude_desktop_config.json:&lt;br&gt;
json{&lt;br&gt;
  "mcpServers": {&lt;br&gt;
    "claude-kit-memory": {&lt;br&gt;
      "command": "python",&lt;br&gt;
      "args": ["/path/to/claude-kit/mcp/memory-kit/server.py"]&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
skills-server&lt;br&gt;
MCP server that loads skills dynamically from GitHub. Instead of copying SKILL.md manually, Claude can call get_skill("flutter-app") and load the rules directly into the conversation.&lt;br&gt;
5 tools: list_skills, get_skill, search_skills, recommend_skills, export_skill&lt;br&gt;
TTL cache + stampede protection so it doesn't hammer GitHub on every call.&lt;br&gt;
telegram-mcp&lt;br&gt;
Let Claude send messages, photos, and files to Telegram without leaving the conversation.&lt;br&gt;
Bot token from environment variable - never passed through the model. HTML parse_mode with fallback to plain text. Multipart for local files.&lt;br&gt;
github-mcp&lt;br&gt;
Close the development loop. Read issues, create PRs, comment - without switching to the browser.&lt;br&gt;
8 tools. Token from GITHUB_TOKEN env. Repo validation against path injection. Readable errors for 401/403/404.&lt;/p&gt;

&lt;p&gt;What I learned building this&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Each skill took 3+ rounds of review to be actually useful
The first version of ship-it was a list of rules. The final version is a decision framework. The difference is whether it helps you think or tries to think for you.&lt;/li&gt;
&lt;li&gt;The Do NOT use when section matters more than the rules
Every skill has a section that explicitly says when NOT to apply it. Without this, the skill becomes dangerous in the wrong context.&lt;/li&gt;
&lt;li&gt;Code review catches real bugs
flutter-app v1.0 had a bug that would silently corrupt files with Cyrillic content. telegram-bot v1.0 would crash in production. Independent review rounds caught both.&lt;/li&gt;
&lt;li&gt;MCP servers need tokens from environment, not parameters
If the bot token is a function parameter, it passes through the LLM context on every call - going to Anthropic's servers. Token in env = stays local. This is a security design decision, not just a convenience.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Quick start&lt;br&gt;
bash# Clone&lt;br&gt;
git clone &lt;a href="https://github.com/DarkenAmber/claude-kit.git" rel="noopener noreferrer"&gt;https://github.com/DarkenAmber/claude-kit.git&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Install a skill (5 seconds)
&lt;/h1&gt;

&lt;p&gt;curl -o CLAUDE.md &lt;a href="https://raw.githubusercontent.com/DarkenAmber/claude-kit/main/skills/ship-it/SKILL.md" rel="noopener noreferrer"&gt;https://raw.githubusercontent.com/DarkenAmber/claude-kit/main/skills/ship-it/SKILL.md&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Start Claude Code
&lt;/h1&gt;

&lt;p&gt;claude&lt;/p&gt;

&lt;h1&gt;
  
  
  Claude now ships instead of over-engineers
&lt;/h1&gt;

&lt;p&gt;For MCP servers, see the README for full setup instructions with Windows and Mac paths.&lt;/p&gt;

&lt;p&gt;What's next&lt;br&gt;
More skills in progress: docs-writer, test-writer, content-engine.&lt;br&gt;
More MCP servers planned based on what users actually need.&lt;br&gt;
If you build something with claude-kit - I'd love to hear about it.&lt;/p&gt;

&lt;p&gt;What rules do you give your AI coding assistant? Do you have a CLAUDE.md you swear by?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>opensource</category>
      <category>github</category>
    </item>
    <item>
      <title>Photo privacy tool that runs entirely in your browser - no upload, no server, no tracking</title>
      <dc:creator>DarkenAmber</dc:creator>
      <pubDate>Tue, 16 Jun 2026 07:25:53 +0000</pubDate>
      <link>https://dev.to/darkenamber/photo-privacy-tool-that-runs-entirely-in-your-browser-no-upload-no-server-no-tracking-1jlf</link>
      <guid>https://dev.to/darkenamber/photo-privacy-tool-that-runs-entirely-in-your-browser-no-upload-no-server-no-tracking-1jlf</guid>
      <description>&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%2F4oluzvakordbitbcgg1m.png" 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%2F4oluzvakordbitbcgg1m.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;Your photos contain secrets you never agreed to share.&lt;br&gt;
Every JPEG carries hidden metadata — GPS coordinates, device model, timestamps, editing history. Upload it to a random online "EXIF cleaner" and you've just handed all of that to a stranger's server.&lt;br&gt;
So we built PrivacyKit. One HTML file. Open it. Done. Your photos never leave your device.&lt;br&gt;
What's inside&lt;br&gt;
7 tools, zero dependencies, zero server:&lt;/p&gt;

&lt;p&gt;🔍 EXIF Cleaner -&lt;br&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%2Fk0mtb6g2xpsrso7t25wo.png" 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%2Fk0mtb6g2xpsrso7t25wo.png" alt=" " width="800" height="384"&gt;&lt;/a&gt; strips metadata at binary level, not just the surface&lt;br&gt;
✏️ Metadata Editor - edit or delete specific fields&lt;br&gt;
✂️ Crop - free or preset ratios&lt;br&gt;
🔄 Rotate &amp;amp; Flip&lt;br&gt;
📐 Resize - presets or custom px&lt;br&gt;
🌊 Watermark - drag, pinch, two-finger rotate on mobile&lt;br&gt;
🗜️ Compress - live before/after preview&lt;/p&gt;

&lt;p&gt;The bug we almost shipped&lt;br&gt;
After cleaning a file, ExifTool still found GPS in the XMP block. Turns out JPEG hides metadata in 4 different places - and most tools only clean one of them.&lt;br&gt;
We fixed it by stripping all APP blocks at binary level first, then re-inserting only what the user wants to keep.&lt;br&gt;
Then we caught another one - Honor/Huawei phones use non-standard EXIF that makes piexif.load() throw silently. The old code would "clean" the file while leaving the original EXIF completely intact.&lt;br&gt;
Real-world testing caught both. The verification report that shows REMOVED / PRESENT / was empty after every clean was born from that experience.&lt;br&gt;
Stack&lt;br&gt;
Vanilla JS. No frameworks. No build step. ~109 KB total.&lt;br&gt;
exifr + piexifjs + Canvas API + ArrayBuffer for binary JPEG manipulation.&lt;br&gt;
Built together with Claude through a lot of iteration, testing, and real bugs on real photos.&lt;br&gt;
Try it&lt;br&gt;
🔒 Live: &lt;a href="https://darkenamber.github.io/privacykit/" rel="noopener noreferrer"&gt;https://darkenamber.github.io/privacykit/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⭐ GitHub: &lt;a href="https://github.com/DarkenAmber/privacykit" rel="noopener noreferrer"&gt;https://github.com/DarkenAmber/privacykit&lt;/a&gt;&lt;br&gt;
MIT. Single file. Works offline.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>privacy</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I built a free office toolkit in a single HTML file - PDF, images, AI writing tools, no account needed</title>
      <dc:creator>DarkenAmber</dc:creator>
      <pubDate>Tue, 09 Jun 2026 05:23:05 +0000</pubDate>
      <link>https://dev.to/darkenamber/i-built-a-free-office-toolkit-in-a-single-html-file-pdf-images-ai-writing-tools-no-account-56kp</link>
      <guid>https://dev.to/darkenamber/i-built-a-free-office-toolkit-in-a-single-html-file-pdf-images-ai-writing-tools-no-account-56kp</guid>
      <description>&lt;p&gt;I got tired of sending documents to random websites.&lt;/p&gt;

&lt;p&gt;Every time I needed to merge a PDF, compress a photo, or rewrite a work email - &lt;br&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%2F5vcfqbxaw4c44t41fy2j.png" 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%2F5vcfqbxaw4c44t41fy2j.png" alt=" " width="800" height="384"&gt;&lt;/a&gt;I had to hand my files to some server I know nothing about. Most of these sites have ads, want your email, and who knows what happens to your data after.&lt;/p&gt;

&lt;p&gt;So I started building something for myself. One tool, then another. Somewhere around tool number 20 I realized I was building an actual product.&lt;/p&gt;

&lt;p&gt;ZeroOffice is a single HTML file. Open it in your browser. Your files never leave your device. Close the tab and everything is gone.&lt;/p&gt;

&lt;p&gt;What's inside&lt;/p&gt;

&lt;p&gt;PDF tools - merge multiple PDFs, split by pages, compress scanned documents, add a watermark, convert to and from images.&lt;/p&gt;

&lt;p&gt;Image tools - compress photos for email or web, resize to exact pixels or presets like Instagram or 4K, convert between formats, basic editor with brightness and contrast.&lt;/p&gt;

&lt;p&gt;Text and Data - word counter with reading time, compare two texts line by line, view and convert CSV files, build charts from CSV data and export to PNG or Excel.&lt;/p&gt;

&lt;p&gt;Converters - live currency rates, unit converter for length and weight and temperature, and more.&lt;/p&gt;

&lt;p&gt;AI tools - this part needs a Claude API key. Email rewriter with tone selection, contract analyzer that explains legal text in plain language, invoice generator, document summarizer, business letter writer. New accounts get around 5 dollars in free credits which is enough for several hundred operations with Haiku.&lt;/p&gt;

&lt;p&gt;The part I want to be honest about&lt;/p&gt;

&lt;p&gt;The AI tools send your text directly from your browser to Anthropic's API. ZeroOffice is not in the middle. Your API key is stored only in localStorage on your own machine. I never see it.&lt;/p&gt;

&lt;p&gt;Also - this was built with heavy Claude assistance. My ideas, my decisions, my testing, but Claude wrote most of the code. I'm upfront about this because I think honesty matters more than the impression it might create.&lt;/p&gt;

&lt;p&gt;Architecture note&lt;/p&gt;

&lt;p&gt;One HTML file. Around 480KB. No npm. No build step. No server. No database. No account.&lt;/p&gt;

&lt;p&gt;open index.html&lt;/p&gt;

&lt;p&gt;That's the entire setup.&lt;/p&gt;

&lt;p&gt;Links&lt;/p&gt;

&lt;p&gt;Live: &lt;a href="https://darkenamber.github.io/ZeroOffice/" rel="noopener noreferrer"&gt;https://darkenamber.github.io/ZeroOffice/&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/DarkenAmber/ZeroOffice" rel="noopener noreferrer"&gt;https://github.com/DarkenAmber/ZeroOffice&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback welcome. Especially if something doesn't work — I test on desktop and Android but I'm sure there are edge cases I've missed.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>opensource</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I built 36 offline IT/security tools in a single HTML file (no npm, no backend, no tracking)</title>
      <dc:creator>DarkenAmber</dc:creator>
      <pubDate>Fri, 05 Jun 2026 05:47:30 +0000</pubDate>
      <link>https://dev.to/darkenamber/i-built-36-offline-itsecurity-tools-in-a-single-html-file-no-npm-no-backend-no-tracking-1fn0</link>
      <guid>https://dev.to/darkenamber/i-built-36-offline-itsecurity-tools-in-a-single-html-file-no-npm-no-backend-no-tracking-1fn0</guid>
      <description>&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%2Fx6ayjk6anur1sz1apkp2.png" 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%2Fx6ayjk6anur1sz1apkp2.png" alt=" " width="800" height="388"&gt;&lt;/a&gt;&lt;br&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%2Frmlet1sqz0xo9dklyjs6.png" 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%2Frmlet1sqz0xo9dklyjs6.png" alt=" " width="799" height="385"&gt;&lt;/a&gt;I'm an engineer from Baku. I build things as a hobby.&lt;/p&gt;

&lt;p&gt;I got tired of opening 5 different sites every time I needed to check &lt;br&gt;
a certificate, calculate subnets, or encrypt something. Each one had &lt;br&gt;
ads, wanted my email, and made me wonder where my data went.&lt;/p&gt;

&lt;p&gt;So I started building. One tool. Then another. 36 tools later — here we are.&lt;/p&gt;
&lt;h2&gt;
  
  
  The unusual part
&lt;/h2&gt;

&lt;p&gt;It's a single HTML file. 460KB. No npm. No build step. No server.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;open index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the entire setup. Works offline, works on any machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's inside
&lt;/h2&gt;

&lt;p&gt;The usual stuff — JSON, JWT, Base64, UUID, QR codes, Regex.&lt;/p&gt;

&lt;p&gt;But also things I haven't seen elsewhere as offline tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Packet Analyzer&lt;/strong&gt; - paste Wireshark hex dump, get full protocol breakdown&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CIDR Aggregator&lt;/strong&gt; - merge subnets, export as Cisco ACL or iptables&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Config Diff&lt;/strong&gt; - syntax-aware diff for Cisco IOS, Juniper, nginx&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP Headers Analyzer&lt;/strong&gt; - security grade A+ to F&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AES-GCM encryption, SSH/RSA keys&lt;/strong&gt; - all via Web Crypto API&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest note
&lt;/h2&gt;

&lt;p&gt;Built with heavy AI assistance (Claude). My ideas, my decisions, &lt;br&gt;
my testing. Claude wrote the code. Being upfront about this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;Demo: &lt;a href="https://darkenamber.github.io/DarkenAmber-it-tools" rel="noopener noreferrer"&gt;https://darkenamber.github.io/DarkenAmber-it-tools&lt;/a&gt;&lt;br&gt;
GitHub: &lt;a href="https://github.com/DarkenAmber/DarkenAmber-it-tools" rel="noopener noreferrer"&gt;https://github.com/DarkenAmber/DarkenAmber-it-tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback welcome.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>javascript</category>
      <category>security</category>
      <category>networking</category>
    </item>
  </channel>
</rss>
