/* Redacted Archives — main app */ const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "accent": "#e63329", "grain": 0.06, "redactStyle": "black", "showAgeGate": true, "marqueeSpeed": 38, "cursorMode": "redact" }/*EDITMODE-END*/; /* ---------- tiny helpers ---------- */ const Logo = ({ size = 22, color = "#e63329" }) => ( ); const Rd = ({ children, variant }) => ( {children} ); /* ---------- announcement marquee ---------- */ const Announcement = ({ speed }) => { const items = [ "DROP 003 // CLASSIFIED OBJECTS", "FREE SHIPPING OVER $80", "REDACTED BY POPULAR DEMAND", "NEW: ASK ME ABOUT MY ████ TEE", "EVIDENCE LOCKER NOW OPEN", "MEMBERS ONLY — SIGN THE NDA", "DROP 003 // CLASSIFIED OBJECTS", "FREE SHIPPING OVER $80", "REDACTED BY POPULAR DEMAND", "NEW: ASK ME ABOUT MY ████ TEE", "EVIDENCE LOCKER NOW OPEN", "MEMBERS ONLY — SIGN THE NDA", ]; return (
{items.map((t, i) => {t})} {items.map((t, i) => {t})}
); }; /* ---------- drop 003 code modal ---------- */ const DropCodeModal = ({ open, onClose }) => { const [code, setCode] = React.useState(""); const [busted, setBusted] = React.useState(false); const [verifying, setVerifying] = React.useState(false); const inputRef = React.useRef(null); React.useEffect(() => { if (open) { setCode(""); setBusted(false); setVerifying(false); setTimeout(() => inputRef.current && inputRef.current.focus(), 100); } }, [open]); React.useEffect(() => { const onKey = (e) => { if (e.key === "Escape") onClose(); }; if (open) window.addEventListener("keydown", onKey); return () => window.removeEventListener("keydown", onKey); }, [open, onClose]); const submit = (e) => { e.preventDefault(); if (!code.trim()) return; setVerifying(true); setTimeout(() => { setVerifying(false); setBusted(true); }, 900); }; if (!open) return null; return (
e.stopPropagation()}> {!busted ? ( <>
· CLASSIFIED · ACCESS REQUIRED ·

Drop 003
is sealed.

This file is members-only until 06.21.26. Enter your access code to declassify early.

setCode(e.target.value.toUpperCase())} placeholder="RA-████-████" maxLength={20} disabled={verifying} />
Don't have a code? Sign the NDA to get one.
) : ( <>
· ACCESS GRANTED · LEAKED FILE ·
You think you are that smart
EXHIBIT A
FILE ███.███

Nice try.

We don't actually have codes. Drop 003 unlocks for everyone 06.21.26 @ 6pm ET. You played yourself.

)}
); }; /* ---------- nav ---------- */ const Nav = ({ onDropClick }) => { const [open, setOpen] = React.useState(false); React.useEffect(() => { document.body.style.overflow = open ? "hidden" : ""; }, [open]); const close = () => setOpen(false); const dropClick = (e) => { e.preventDefault(); close(); onDropClick(); }; return ( <>
Shop 01 Drop 003 🔒 02 Lookbook 03 Manifesto 04 Drop Schedule 05 Sign the NDA 06
FILE #003 · Q2 2026
); }; /* ---------- hero ---------- */ const Hero = () => (
File #003 // Quarter II / 2026
● CLASSIFIED // NOT FOR PUBLIC RECORD ●
NY · LA · LIS · MNL

EVIDENCE OF A MISSPENT YOUTH.

18+ NDA
REQUIRED
Cut-and-sew tees, hoodies and accessories for the chronically online. Each drop is a folder of evidence we forgot to shred. Don't tell mom.
Drop 003 ↘
Opens 06.21.26 · 6pm ET
—— scroll to declassify ——
); /* ---------- tee mockup ---------- */ const Tee = ({ color = "dark", children, textColor = "#fff", small }) => (
{children}
); /* ---------- drop grid ---------- */ const Drop = () => { const cards = [ { size: "feat", code: "RA-003-01", tag: "NEW", stock: "IN STOCK", stockClr: "", title: "Ask me about my ████", price: "$58", color: "dark", teeText: <>ASK ME ABOUT
MY ████, teeColor: "dark", teeTextColor: "#f2ebd9", stamp: "ITEM 001 / 06 · COTTON 240GSM" }, { size: "skin", code: "RA-003-02", tag: "DROP 003", stock: "LOW STOCK", stockClr: "a", title: "Big If True", price: "$54", color: "cream", teeText: <>BIG
IF
TRUE, teeColor: "cream", teeTextColor: "#e63329", stamp: "ITEM 002 / 06 · HEAVYWEIGHT" }, { size: "skin", code: "RA-003-03", tag: "PREORDER", stock: "PREORDER", stockClr: "r", title: "Emotionally Unavailable™", price: "$62", color: "red", teeText: <>EMOTIONALLY
UNAVAILABLE™, teeColor: "red", teeTextColor: "#0a0a0a", stamp: "ITEM 003 / 06 · BOXY FIT" }, { size: "skin", code: "RA-003-04", tag: "RESTOCK", stock: "IN STOCK", stockClr: "", title: "Touch Grass / or Don't", price: "$48", color: "dark", teeText: <>TOUCH GRASS
OR DON'T, teeColor: "dark", teeTextColor: "#f2ebd9", stamp: "ITEM 004 / 06 · OVERSIZED" }, { size: "feat", code: "RA-003-05", tag: "LIMITED 200", stock: "LIVE FRI", stockClr: "a", title: "Probably Oversharing Hoodie", price: "$110", color: "cream", teeText: <>PROBABLY
OVERSHARING, teeColor: "cream", teeTextColor: "#0a0a0a", stamp: "ITEM 005 / 06 · HEAVY FLEECE" }, { size: "skin", code: "RA-003-06", tag: "RUNS SMALL", stock: "IN STOCK", stockClr: "", title: "Not For Your FYP", price: "$52", color: "dark", teeText: <>NOT FOR
YOUR FYP, teeColor: "dark", teeTextColor: "#f2ebd9", stamp: "ITEM 006 / 06 · BOXY" }, ]; return (
§ 01 / DROP 003 ——— CLASSIFIED OBJECTS

The current
evidence locker.

06 files / 240gsm cotton / printed in a basement somewhere in Brooklyn / receipts available on request.
{cards.map((c, i) => (
{c.teeText}
{c.code}
{c.stamp.split("·")[1]}
{c.tag}
{c.title}
{c.stamp}
{c.price}
{c.stock}
))}
); }; /* ---------- lookbook ---------- */ const Lookbook = () => { const slots = [ { cls: "lb big", num: "PHOTO 01 / RA-003", stamp: "EXHIBIT A", name: "Subject 01 — Brooklyn rooftop", mt: "Wearing 'Ask me about my ████'", reveal: "Subject was seen leaving the scene." }, { cls: "lb tall", num: "PHOTO 02 / RA-003", stamp: "EXHIBIT B", name: "Subject 02 — Bedroom mirror", mt: "Wearing 'Emotionally Unavailable™'", reveal: "Refused to answer further questions." }, { cls: "lb med2", num: "PHOTO 03 / RA-003", stamp: "EXHIBIT C", name: "Subject 03 — Bodega exterior, 2:14am", mt: "Wearing 'Touch grass / or don't'", reveal: "Last seen buying a four loko." }, { cls: "lb med", num: "PHOTO 04 / RA-003", stamp: "EXHIBIT D", name: "Subject 04 — Backseat of an Uber", mt: "Wearing 'Big if true' tee", reveal: "Conversation was lightly unhinged." }, ]; return (
§ 02 / LOOKBOOK ——— SURVEILLANCE FOOTAGE

People we
can't name.

Hover any frame to declassify. All subjects consented. Mostly.
{slots.map((s, i) => (
{s.num}
{s.stamp}
{s.reveal}
{s.name}
{s.mt}
))}
); }; /* ---------- manifesto ---------- */ const Manifesto = () => (
§ 03 / MANIFESTO ——— WHY THIS EXISTS

Clothes for
thoughts you
shouldn't
have posted.

Redacted Archives is a
New York streetwear
label. We make tees,
hoodies and small
objects for the chronically
online generation —
printed in small batches,
sold once, never restocked.

We're collecting evidence. Bad text messages, group chat receipts, notes app confessions, screenshots you should've deleted. We turn them into clothes.

Every drop is a folder. Six files, usually under two hundred units. When the folder is gone, it's gone — sealed, classified, and archived. That's the point.

We are not a vibe. We are not a brand voice. We are a kink for things you can't say at thanksgiving.

AUTHORIZED
BY THE
DEPT. OF
OVERSHARING
Signed,
████ ███████ — founder
████ ████ — creative director
); /* ---------- drop schedule ---------- */ const Schedule = () => { const rows = [ { dt:"06.21", yr:"2026 · FRI", nm:"DROP 003 — Classified Objects", sub:"6 files. 240gsm cotton. NY studio.", st:"OPENS 6PM ET", pc:"06 PIECES", live:true, gone:false, action:"NOTIFY ME →" }, { dt:"05.10", yr:"2026 · SAT", nm:"DROP 002 — Group Chat Receipts", sub:"4 files. Hoodie + tee co-drop.", st:"SOLD OUT", pc:"04 PIECES", live:false, gone:true, action:"WAITLIST" }, { dt:"03.30", yr:"2026 · SUN", nm:"DROP 001 — Notes App Confessions", sub:"3 files. Founder edition.", st:"SOLD OUT", pc:"03 PIECES", live:false, gone:true, action:"ARCHIVE" }, { dt:"08.??", yr:"2026 · ???", nm:"DROP 004 — █████████████████", sub:"Classified. Members get the file first.", st:"REDACTED", pc:"?? PIECES", live:false, gone:false, action:"SIGN THE NDA" }, ]; return (
§ 04 / DROP SCHEDULE ——— DOCKET

What's
declassified next.

Drops happen once a month-ish. Folders open at 6pm Eastern. Once they're gone, they're gone.
DATE
FILE
STATUS
UNITS
ACTION
{rows.map((r, i) => (
{r.dt}{r.yr}
{r.nm}{r.sub}
{r.st}
{r.pc}
))}
); }; /* ---------- newsletter / NDA ---------- */ const Newsletter = () => (
§ 05 / MEMBERS ONLY ——— SIGN THE NDA

sign the NDA.
get the file
before the world.

Members get drops 24 hours early, leaked sketches from upcoming folders, and the occasional shipping freebie. We email maybe twice a month. No spam — we have nothing to gain from annoying you.

{ e.preventDefault(); alert("Welcome to the archive. We've got receipts on you now."); }}>
NO SPAM UNSUBSCRIBE ANYTIME WE DON'T SELL YOUR DATA WE DO KEEP RECEIPTS
); /* ---------- footer ---------- */ const Footer = () => ( ); /* ---------- age gate ---------- */ const AgeGate = ({ onPass }) => (

This file is classified.

Some of our designs contain double meanings, mild profanity, and general overshare. Confirm you're 18 or older to enter the archive.

); /* ---------- redacting cursor ---------- */ const RedactCursor = ({ enabled }) => { const ref = React.useRef(null); const isTouch = typeof window !== "undefined" && window.matchMedia("(hover: none)").matches; React.useEffect(() => { if (!enabled || isTouch) return; const el = ref.current; const move = (e) => { el.style.transform = `translate(${e.clientX - 24}px, ${e.clientY - 8}px)`; }; window.addEventListener("mousemove", move); return () => window.removeEventListener("mousemove", move); }, [enabled, isTouch]); if (!enabled || isTouch) return null; return (
); }; /* ---------- root ---------- */ function App() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); const [gate, setGate] = React.useState(t.showAgeGate); const [codeOpen, setCodeOpen] = React.useState(false); React.useEffect(() => { document.documentElement.style.setProperty("--red", t.accent); document.documentElement.style.setProperty("--grain-op", String(t.grain)); }, [t.accent, t.grain]); React.useEffect(() => { if (t.redactStyle === "red") { document.querySelectorAll(".rd").forEach(el => el.classList.add("red")); } else { document.querySelectorAll(".rd").forEach(el => el.classList.remove("red")); } }, [t.redactStyle]); return ( <> {gate && setGate(false)} />}