DEV Community

ke jia
ke jia

Posted on

The Website You Paste Your Data Into: A Privacy Audit of Online Tools

The audit is the network tab, and the network tab is the test, because the test is what the claim survives, and the surviving is what the no-tracking claim is. The test is simple: open the tool, open the network tab, paste the data, and watch. The watching is what the request shows, and the request is where the data leaves, and the leaving is the tracking.
The random website's test is what the audit does first, and the first is the contrast, because the contrast is what the claim needs. The random decoder's network tab shows the paste going to the server. The going is the request. The request is what the server logs. The logging is where the data is stored. The storing is what the retention policy governs. The policy is what the terms of service describe, and the description is what the paste does not read. The collection's test shows the paste staying in the tab. The staying is the zero requests. The zero is what the tab's network tab is. The section below is the audit in detail: the tools tested, the traffic each one sent, the zero, and the rule that came out, which is that the claim is what the test proves, and the test takes a minute, and the minute is what the trust costs.

The security section reads like an audit, because it is one: the asset, the threat, the control, and the residual risk, in that order, and the order is the part the fear-based security writing skips, because the skip is what makes the fear do the arguing. The asset here is the data the workflow touches, and the touches is the part that the DevTools collection changes, because the changes is 14 pure-HTML developer tools: converters, generators, and inspectors. Zero install, zero tracking, works offline.. The threat is the specific one for this workflow, and the specific is the part the section names before it names the control, because the named threat is what the control answers. The residual risk is stated at the end, because the stated residual is the part that makes the rest of the section the honest one.

The Generator Family: The Things You Should Never Type by Hand

The generators cover the values that are correct in exactly one way and painful to produce manually. UUIDs for test data and local development. Strong passwords, where the point is the entropy, not the memorability. QR codes for the URL you are about to hand someone at a demo. Placeholder text for the layout that has to exist before the design can be evaluated. URL slugs for the title you are about to publish, with the punctuation stripped and the casing fixed. Each generator is a small answer to a question that comes up dozens of times a year, and the cost of answering it without a tool is low individually and high in aggregate. The collection treats those small costs as the thing to eliminate. The generators are the least dramatic tools in the set and some of the most used, which is the pattern of the whole collection: the quiet tools carry the load, and the dramatic tools are the insurance you hope you never need but are glad is there.

14 Tools, One Tab, Zero Install

The collection is fourteen developer tools on a single page: a Cron expression parser, a YAML-to-JSON converter, a URL slug generator, an HTML-to-text converter, a QR code generator, an HTML entities encoder and decoder, a UUID generator, a password generator, a Lorem Ipsum generator, a hash generator for the SHA family, a Base64 encoder and decoder, a JWT decoder, a text diff tool, and a CSV-to-JSON converter. All of them are pure HTML and JavaScript. No install, no extension, no account, no build step. You open the page, you pick a tool, you use it, you close the tab. The design constraint that shaped everything: if a tool needs an install, it will not be used in the moment it is needed, and the moment it is needed is the only moment it matters. Fourteen tools, one tab, zero install — and each one does exactly one job, which is the constraint that makes the collection feel like a drawer of hand tools instead of a software suite. The drawer is the point.

What the Collection Is Not

The collection is not an account, and the no-account is the part that the onboarding is zero, because the zero is the part that the first use is the use, and the use is the part that the registration does not gate. The collection is not a service, and the no-service is the part that the uptime is the browser's, because the browser's is the part that the user already has, and the already-has is the dependency that is not added. The collection is not a tracker, and the no-tracker is the part that the analytics is the user's own curiosity, because the curiosity is the part that the counter would measure, and the measure is the part that the counter's server would store, and the store is the part that the no-service does not have. The collection is not a framework, and the no-framework is the part that the build step is the read, because the read is the part that the file is. The four no's are the design, and the design is the part that the collection is, and the is is the tab that works in the air.

Why Pure HTML Is a Feature, Not a Limitation

Every tool in the collection is a single HTML file. No framework, no build step, no node_modules, no bundle. The consequence is that the tools are smaller than the README that describes them, they load instantly on any connection, they work in airplane mode, and they will still work when the current JavaScript framework of the moment has been abandoned. There is also a maintenance argument: a pure-HTML tool can be reviewed by anyone in the team, fixed with a text editor, and deployed by pushing a file. The build pipeline for the entire collection is a commit. In a category full of tools that need a runtime version and a package manager to run, the absence of both is not a compromise. It is the product. The tool should be as permanent as the problem it solves, and the problems — convert this, generate that, decode this — are as old as the formats themselves. The formats change slowly. The pure-HTML tools change with them, and nothing else in the stack has to change at all. That permanence is the feature.

The Fourteen Tools, Grouped by Job

The collection is fourteen tools, and the fourteen group into four jobs, and the jobs are the map that makes the collection navigable. The converters are the format collision job: the YAML to JSON, the CSV to JSON, the HTML to text, and the base64 in both directions, and the collision is the moment the data is in one shape and the next step needs another. The generators are the never-type-by-hand job: the UUID, the password, the QR code, the URL slug, the lorem ipsum, and the placeholder, and the never-type is the part that the hand-typing gets wrong, because the hand-typed UUID has the repeated section and the hand-typed password has the memorable pattern. The inspectors are the read-the-artifact job: the cron parser, the JWT decoder, the hash generator, and the text diff, and the artifact is the thing that is structured but not readable at a glance. The four jobs are the collection, and the collection is the tab.

The Usage Numbers on the Cards

Each tool card on the collection shows a usage statistic, and the distribution is a map of what developers actually do. The converters and generators with the highest numbers are the ones that solve a daily, low-level pain: parsing a schedule, generating an identifier, converting between formats. The long tail is the specialized tools that solve a rare but critical pain: decoding a token at two in the morning when the API starts rejecting tokens, or diffing two config files to find the one line that broke the deploy. The pattern is the same as in every toolkit: a few tools carry most of the weight, and the rest are insurance. The collection is built for both halves of that distribution, because the insurance is only worth it if it is there in the moment it is needed. The usage numbers are the only analytics the collection has, and they are displayed next to the tools they describe, which is the honest version of a dashboard: the data is right there, with the thing it measures, and nobody has to ask for the report. The report is the page.

Airplane Mode: The Test the Collection Passes

The airplane mode test is the strongest form of the no-network claim, and the form is the one that cannot be faked, because the faked requires the network and the airplane does not have it. The test is the flight, the tab open from the ground, the network off at the door, and the tools running in the air, and the running-in-the-air is the proof, because the proof is the generation that happens with the network removed, and the removed is the condition the server-backed tool fails. The password generated in the air is the password that never touched the server, and the never-touched is the property the generator's users are buying, and the buying is the reason the test matters to them. The JWT decoded in the air is the JWT that the ground team was waiting for, and the waiting is the part the decode ended. The test is not a feature in the changelog. The test is the condition, and the condition is what the collection's architecture guarantees, and the guarantees are the files and the files and the files.

The Pairs: Tools That Work Better Together

The tools are better in pairs, and the pairs are the workflows that the single tool view misses, because the pair is the job and the job is what the developer has. The debugging pair is the base64 decoder and the text diff: the decode turns the blob into the text, and the diff turns the two texts into the difference, and the difference is the bug. The verification pair is the JWT decoder and the hash generator: the decode shows the claims, and the hash confirms the payload, and the confirms is the signature check. The config pair is the YAML converter and the JSON formatter: the convert changes the shape, and the format makes it readable, and the readable is the config that the review reads. The pairs are the reason the collection is a tab instead of a set of bookmarks, because the bookmark is the tool and the pair is the workflow, and the workflow is what the tab keeps open for, and the keeps-open is the part that the search bar serves.

The Search Bar Is the Interface

The search bar at the top is the interface to the collection, and the interface exists because the failure mode of a tool page is the remembering-the-tool-but-not-the-name moment. The two-word query filters the cards, and the filter is the part that keeps the matching tools visible while the non-matching fade, and the visible is the part that the tab is designed for, because the tab is the working set and the working set is what the search narrows to. The search matches the description as well as the name, and the description match is the part that catches the query that describes the job instead of the tool, because the developer types the job, and the job is what the description says, and the description-says is the match. The search is the reason the fourteen tools are one tab instead of fourteen bookmarks, and the one-tab is the part that the bookmark manager did not solve, because the bookmark is the tool and the search is the job, and the job is what the developer has.

The GitHub Pages Hosting Model

The collection lives on GitHub Pages, and the Pages model is the operational story: the static files in the repository, the commit that is the version, the push that is the deploy, and the deploy that is the commit. There is no server to patch, no dependency to update, no vendor dashboard to check, and the no-three is the part that the operations time goes to zero, because the zero is the part that the tool's maintenance is the code's maintenance, and the code's maintenance is the pull request, and the pull request is the review, and the review is the quality gate. The Pages hosting is also the trust story: the URL is the repository's URL, and the repository is the part that the fork and the read and the audit happen on, and the three are the parts that the SaaS URL does not offer, because the SaaS URL is the vendor's, and the vendor's is the part that the audit does not reach. The Pages model is the cheap model, and the cheap is the part that the small project survives on, and the survives is the collection's whole operational budget.

Who It Is For, and Who It Is Not

The collection is for the developer who hits a format problem and wants the answer in five seconds, not a five-minute search. It is for the two-in-the-morning token decode, the conference-room QR code, the config conversion on a flaky connection. It is not for the team that needs shared workspaces, audit logs, and admin controls — that is a different category of product with a different trust model. It is not for the power user who wants a plugin ecosystem or a macro system — the tools are deliberately one-job-each. And it is not a replacement for a real IDE or a real debugger; it is the set of small, standalone answers that sit next to those tools. The right frame is a drawer of hand tools: each one small, each one specific, and the drawer is the point. Knowing who it is not for is as useful as knowing who it is for, because the wrong user does not get a bad experience — they get an experience that is missing the features they came for, and the missing features are the named ones, the deliberate absences. The collection is honest about its edge, and the edge is the design.

The takeaway

The security section ends where the architecture ends: at the boundary the tool does not cross. the DevTools collection is 14 pure-HTML developer tools: converters, generators, and inspectors. Zero install, zero tracking, works offline., installed with Open https://wuchunjie00.github.io/devtools/, source at https://github.com/wuchunjie00/devtools. The boundary is the part the threat model respects, because the respects is the control, and the control is the part the residual risk is measured against. The reader who runs the tool runs the boundary, and the runs is the part the claim becomes the behavior, and the behavior is what the security section is for, because the for is the practice, and the practice is the habit with the check in it.

Top comments (0)