/* 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" }) => (
REDACTED
ARCHIVES
· EST 2025 ·
);
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.
>
) : (
<>
· ACCESS GRANTED · LEAKED FILE ·
EXHIBIT AFILE ███.███
Nice try.
We don't actually have codes. Drop 003 unlocks for everyone 06.21.26 @ 6pm ET .
You played yourself.
setBusted(false)}>TRY ANOTHER CODE
RESPECT, CLOSE
>
)}
);
};
/* ---------- 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 (
<>
Search
Cart · 0
setOpen(o => !o)} aria-label="Menu">
>
);
};
/* ---------- hero ---------- */
const Hero = () => (
File #003 // Quarter II / 2026
● CLASSIFIED // NOT FOR PUBLIC RECORD ●
NY · LA · LIS · MNL
EVIDENCE
OF A
MISSPENT
YOUTH.
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 }) => (
);
/* ---------- 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 GRASSOR 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}
))}
);
};
/* ---------- 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}
{r.action}
))}
);
};
/* ---------- 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.
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.
window.location.href = "https://www.google.com"}>No, I am a child
Yes, declassify
);
/* ---------- 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)} />}
setCodeOpen(true)} />
setCodeOpen(false)} />
setTweak("accent", v)} />
setTweak("redactStyle", v)} />
setTweak("grain", v)} />
setTweak("marqueeSpeed", v)} />
setTweak("cursorMode", v)} />
{ setTweak("showAgeGate", v); setGate(v); }} />
setGate(true)} />
>
);
}
ReactDOM.createRoot(document.getElementById("root")).render( );