THE REDACTED ASSISTANT (2025–2026)

(rank-based redaction, recomputed locally)
Doc. ref: HK-REDACTED-2025
Category
Tools & Infrastructure
Medium
React, Vite, Tauri, Gemini; localStorage only
Venue
redacted-asst.hnsk.site
State
live
Tags
writing, interface, redaction

A prompt, one of five writing styles, and a density slider. The model generates a passage and returns it as a JSON array in which every word and punctuation token carries a redaction rank: -1 for tokens never to be hidden, and positive integers ordering the rest by semantic importance, lower being more significant. The interface then masks words and lets the reader click to reveal them, type replacements into the gaps, or export either a fill-in worksheet or a complete answer key as plain text.

One generation call ranks every token; the density slider re-derives the mask locally.
One generation call ranks every token; the density slider re-derives the mask locally.

The ranking happens exactly once, at generation. Moving the density slider makes no further API calls: a local effect filters to ranked tokens, computes how many to hide from the density value, sorts the ranks, takes the rank at that position as a threshold, and masks everything at or below it. Adjusting redaction density is therefore instant and free, which is the point of ranking rather than re-prompting.

The five styles are backed by distinct system instructions naming specific reference registers rather than adjectives — Hegel, Levinas and Schelling for the philosophical mode, the CCRU’s theory-fictions for the hyperstitious one. Uploaded .txt or .md files can seed the prompt directly. Exports are generated client-side as blobs with no server round-trip.

In development the Gemini client runs against a build-time key; in production calls proxy through a rate-limited Netlify function holding a server-side key. The client is constructed lazily, so the production build, which carries no client-side key, never instantiates it. A Tauri wrapper builds the same frontend as a macOS desktop app.

Storage is browser localStorage only, scoped per visitor. A shared server-side store was rejected on the grounds that an unauthenticated site-wide store would give every visitor the same session list.

Last updated: 2026.09.03 20:20:09 UTCHnshokrian@gmail.com