FreeRave

FreeRave

@freerave.bsky.social

Dev-Tools & Mobile Engineer | Creator of 7 VS Code extensions & the DotSuite ecosystem (DotScramble, DotEnvy) | Python, Kotlin & Flutter | Building AI tools for devs & robust native apps.

25 followers8 following247 posts

Pinned

Hello Bluesky! šŸ‘‹ "Hello World" from a Dev-Tools & Mobile Engineer. I’m the creator of 7 VS Code extensions and the DotSuite ecosystem (DotScramble, DotEnvy, etc.). I write about Python, Kotlin, Flutter, and building AI tools.

I built DotScramble: a Linux app that hides faces, license plates and text in photos, and strips the GPS and camera data hidden in the file, before you share. Everything stays on your computer. Open source.

View full thread

On save it keeps, strips or fakes the EXIF (GPS, camera, timestamps), with a report of each field first. AI Evasion adds a noise pattern that hides a face from a detector. Tested against MediaPipe, not every system.

I built DotScramble: a Linux app that hides faces, license plates and text in photos, and strips the GPS and camera data hidden in the file, before you share. Everything stays on your computer. Open source.

Detect outlines every region before anything changes, and you click to skip the ones you want to keep. Compare drags a divider across before / after. Seven effects, from blur to oil paint.

1/ I built a file converter for Linux that lives in a radial menu: right-click a file, a wheel blooms, pick a format, done. 440+ conversions (images, PDF, SVG, video, audio, Office), all local, open source.

View full thread

3/ Opens from the file manager, a global hotkey, watched folders, or the terminal. A daemon makes it appear in ~0.1 s. Drag it to the screen edge and it docks as a tab with a half wheel on hover.

1/ I built a file converter for Linux that lives in a radial menu: right-click a file, a wheel blooms, pick a format, done. 440+ conversions (images, PDF, SVG, video, audio, Office), all local, open source.

2/ Under the hood it drives Pillow, librsvg, poppler, Ghostscript, ImageMagick, ffmpeg, LibreOffice and pandoc, and only offers the conversions your machine can actually do.

1/6 Most password managers have a backup dilemma: Export to unencrypted CSV and you dump plaintext secrets on disk. Use proprietary cloud sync and you give keys to a 3rd party. Part 2 of our DotGhostBoard 2.1 "Leviathan" deep dive is live! #Linux #Security

View full thread

5/6 Coordinated Plaintext History Sweep When you copy a key, it enters clipboard history before the Vault. We closed this gap: Saving/deleting a secret sweeps matching unencrypted entries from SQLite history. Plus 3-version encrypted history with 1-click revert!

1/6 Most password managers have a backup dilemma: Export to unencrypted CSV and you dump plaintext secrets on disk. Use proprietary cloud sync and you give keys to a 3rd party. Part 2 of our DotGhostBoard 2.1 "Leviathan" deep dive is live! #Linux #Security

View full thread

3/6 Built-in CSPRNG Password Generator No switching windows to generate credentials. Built on Python's secrets module (/dev/urandom). Features live keyspace entropy: H = L Ɨ logā‚‚(N). Visual meter up to 131 bits (Fort Knox) + UUIDv4, Base64, Hex presets! #DevOps

4/6 Secret Expiry Tracking & Badges API keys and production tokens shouldn't live forever. DotGhostBoard 2.1 introduces calendar-based expiry with dynamic visual badges: • ā›” EXPIRED • āš ļø 3d left • ā³ Active countdown Never let stale credentials linger unnoticed.

1/6 Most password managers have a backup dilemma: Export to unencrypted CSV and you dump plaintext secrets on disk. Use proprietary cloud sync and you give keys to a 3rd party. Part 2 of our DotGhostBoard 2.1 "Leviathan" deep dive is live! #Linux #Security

2/6 Standalone .vault Binary Backups We engineered a tamper-proof package format: DGBV header + version + 16B salt + 12B nonce + ciphertext + 16B GCM tag. Authenticated with AES-256-GCM + AAD. Modifying 1 bit triggers instant cipher rejection. 100k PBKDF2 rounds.

1/6 Most clipboard managers treat every copied item the same: inert text in a database. With DotGhostBoard 2.1 "Leviathan", your clipboard understands what it's holding and surfaces actions immediately. Part 1 of our technical deep dive is live! #Linux #OpenSource

View full thread

5/6 Coming Next in Part 2 Next up, our cryptographic security stack: • Standalone .vault backup packages (AES-256-GCM + AAD) • CSPRNG Password Generator with 131-bit entropy meter • Secret expiry tracking & status badges • Plaintext clipboard history sweeps

1/6 Most clipboard managers treat every copied item the same: inert text in a database. With DotGhostBoard 2.1 "Leviathan", your clipboard understands what it's holding and surfaces actions immediately. Part 1 of our technical deep dive is live! #Linux #OpenSource

View full thread

3/6 Instant Smart Auto-Tagging Copied text is classified and tagged on the fly: • #link — Web URLs • #json — Minified/raw JSON • #secret — API keys, JWTs, AWS tokens • #code — Python, JS, Bash snippets • #ip, #email, #path, #hash Seamlessly searchable and filterable.

4/6 Contextual Inline Smart Actions No more window switching: • āš™ļø { } Format JSON: 1-click 2-space indentation • šŸ”— Open Link: Direct launch in browser • šŸ›”ļø Send to Vault: Envelope encryption for secrets • šŸ“” Copy Clean IP: Strips log noise instantly Productivity in 1 click.

1/6 Most clipboard managers treat every copied item the same: inert text in a database. With DotGhostBoard 2.1 "Leviathan", your clipboard understands what it's holding and surfaces actions immediately. Part 1 of our technical deep dive is live! #Linux #OpenSource

2/6 Zero AI. Zero Cloud. Under 1ms. Using an LLM for clipboard text is a privacy & latency nightmare. Instead, we built a deterministic engine using pre-compiled regex, Shannon entropy & fast heuristics. Typical payloads (< 5KB) classify in 8–82 µs! #Python #DevOps

1/6 Maintaining 7 VS Code extensions across 2 marketplaces (19,500+ downloads) is great—until you have to sync versions & metrics by hand. Instead of spinning up a backend, I built a zero-dependency dual-path synchronizer. Here’s how it works

View full thread

5/6 The best part? No backend required: āŒ No server āŒ No database āŒ No auth layers Because both store APIs support CORS, vanilla JS in the browser + scheduled GitHub Actions handles the entire pipeline cleanly and for free.

1/6 Maintaining 7 VS Code extensions across 2 marketplaces (19,500+ downloads) is great—until you have to sync versions & metrics by hand. Instead of spinning up a backend, I built a zero-dependency dual-path synchronizer. Here’s how it works

View full thread

3/6 The Architecture: Dual-Path Sync Runtime Path: Browser fetches store APIs directly via CORS and caches in localStorage for 24 hours. Build/CI Path: A Node script runs daily via GitHub Actions to keep the static README and HTML fallback fresh.

4/6 Two key engineering decisions: 1ļøāƒ£ 24h Cache TTL: Extensions update over days/weeks, not minutes. 24h is a practical default that stops redundant API calls. 2ļøāƒ£ Clean Git History: CI checks `git diff --staged --quiet` so it only commits when numbers actually change!

1/6 Maintaining 7 VS Code extensions across 2 marketplaces (19,500+ downloads) is great—until you have to sync versions & metrics by hand. Instead of spinning up a backend, I built a zero-dependency dual-path synchronizer. Here’s how it works

2/6 The problem: VS Marketplace and Open VSX expose completely different APIs. Every new release meant: • Checking 2 dashboards • Calculating total installs • Editing HTML cards & README badges I needed one source of truth for both live visitors and the static repo.

A .vsix file is not a compiled binary. It is literally just a ZIP archive containing plain JavaScript. If your build pipeline injects a secret before packaging, anyone can extract it in seconds with unzip and grep. Here is how we eliminated embedded client secrets in DotEnvy

View full thread

The Scanner Paradox: Marketplace scanners then flagged DotEnvy for leaking AWS and Stripe keys — because our regex patterns DETECTED them! We resolved false positives via runtime pattern construction: new RegExp(['A', 'KIA', '[0-9A-Z]{16}'].join('')) + pre-publish CI/CD gates.

A .vsix file is not a compiled binary. It is literally just a ZIP archive containing plain JavaScript. If your build pipeline injects a secret before packaging, anyone can extract it in seconds with unzip and grep. Here is how we eliminated embedded client secrets in DotEnvy

The Trap: We needed DotEnvy to authenticate requests to our backend using HMAC. Our build script injected an EXTENSION_SHARED_SECRET before packaging. Security bots (Trufflehog, GitHub) caught it immediately. If 1 user extracts it, your entire backend trust model collapses.

The Architecture: Zero Embedded Secrets 1. Extension registers anonymously on first launch via /extension/register (10/hr IP limit). 2. Backend returns a per-device secret stored in OS SecretStorage (Keychain). 3. Requests signed with HMAC-SHA256 + 5-minute replay defense.

Calling an AI model for every single secret scan in a VS Code extension was a terrible idea. Every keystroke added 400ms latency, and high-entropy noise easily fooled the model. Here is how we decoupled detection into a 4-layer pipeline in DotEnvy

View full thread

šŸ”¹ L3: Shannon Entropy Gate Pure math filter. Candidates with H(X) < 3.5 are dropped immediately, eliminating ~80% of candidate noise. šŸ”¹ L4: Neural Classifier Only the ~20% ambiguous tokens reach our Python backend, where a 35-feature model analyzes surrounding code semantics.

Calling an AI model for every single secret scan in a VS Code extension was a terrible idea. Every keystroke added 400ms latency, and high-entropy noise easily fooled the model. Here is how we decoupled detection into a 4-layer pipeline in DotEnvy

šŸ”¹ L1: In-Process Regex Known tokens (AWS, Stripe, GitHub) resolve in sub-milliseconds without touching the network. šŸ”¹ L2: Truncated Composite Hashing Cross-references hashes against an anti-poisoning community blacklist via an O(1) in-memory Set. The full secret is never sent.

1/7 A 2,353-line UI file is a symptom that storage, crypto, sync, and UI have collapsed into one boundary. That was DotGhostBoard v1.5 (our Linux clipboard manager). Here is how we refactored the monolith with 0 regressions #FreeRave #Python

View full thread

6/7 The Results (By The Numbers): šŸ“‰ -35% LOC in the main Dashboard window šŸ“ˆ +39% tests (220 āž” 306 passing tests) ⚔ 3.7x faster CI test suite (14.2s āž” 3.8s) šŸ›”ļø 0 detected user-facing regressions Architecture over rewrites. #Linux #OpenSource

1/7 A 2,353-line UI file is a symptom that storage, crypto, sync, and UI have collapsed into one boundary. That was DotGhostBoard v1.5 (our Linux clipboard manager). Here is how we refactored the monolith with 0 regressions #FreeRave #Python

View full thread

4/7 Phase 3: Cryptographic Rigor 2-tier key derivation chain: Password āž” PBKDF2 (600k iter) āž” Base Key āž” HKDF-SHA256 āž” Vault KEK. Password rotation now takes ~2ms via constant-time DEK re-wrapping instead of re-encrypting the whole database.

5/7 Phase 4: Slicing the Monolithic UI Extracted 4 behavioral QObject controllers: • HistoryController (cards & search) • CollectionController (folders) • SecurityController (vault & lock) • SyncController (LAN P2P) Dashboard shrank by -35% LOC (-818 lines).

1/7 A 2,353-line UI file is a symptom that storage, crypto, sync, and UI have collapsed into one boundary. That was DotGhostBoard v1.5 (our Linux clipboard manager). Here is how we refactored the monolith with 0 regressions #FreeRave #Python

2/7 Instead of a risky Big Bang rewrite, we established one golden rule: "Controllers coordinate UI behavior. Services own business rules. Repositories own persistence. Backends own platform integration." Everything has a strict boundary.

3/7 Phase 1 & 2: Decoupling the Core • Decomposed storage into clean Repositories with a 100% backward-compatible Facade (zero broken imports). • Extracted a headless ClipboardPipeline using Python Protocols, ready for native Wayland in v2.0.