Wayfindersix Claude Opus 4.6 (1M context) commited on
Commit
c31ea0c
·
0 Parent(s):

PRIDE feat. Marsha P. Johnson — interactive Stonewall history engine

Browse files

Pay It No Mind. Pride started with a riot and the riot started with Marsha.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Files changed (3) hide show
  1. README.md +66 -0
  2. app.py +330 -0
  3. requirements.txt +2 -0
README.md ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: "PRIDE — It Started With a Brick and the Brick Was Marsha's"
3
+ emoji: "\u2B55"
4
+ colorFrom: red
5
+ colorTo: purple
6
+ sdk: gradio
7
+ sdk_version: "5.34.2"
8
+ app_file: app.py
9
+ pinned: false
10
+ license: mit
11
+ short_description: "Pay It No Mind."
12
+ tags:
13
+ - history
14
+ - pride
15
+ - stonewall
16
+ - civil-rights
17
+ - build-small-hackathon
18
+ ---
19
+
20
+ # PRIDE feat. Marsha P. Johnson
21
+
22
+ **Pay It No Mind.**
23
+
24
+ An interactive history engine about Stonewall, the riot that became a movement, and the woman who threw the first brick.
25
+
26
+ ## What It Is
27
+
28
+ Walk through the Stonewall timeline — forward from the raid to the marches, backward from today to the moment everything changed. Every stop on the timeline tells you what happened, who was there, and who got the credit they deserved (and who didn't).
29
+
30
+ This isn't a summary. It's a walk through the night of June 28, 1969, and every night since.
31
+
32
+ ## Marsha P. Johnson
33
+
34
+ The P stands for "Pay It No Mind."
35
+
36
+ Black trans woman. Threw the first brick (or the first shot glass, depending on who you ask — she was there either way and she didn't flinch). Co-founded STAR (Street Transvestite Action Revolutionaries) with Sylvia Rivera. Fed homeless queer youth out of her own pocket. Marched, organized, performed, survived.
37
+
38
+ Found dead in the Hudson River in 1992. NYPD ruled it suicide. Nobody believed them. The case was reopened in 2012. Still unresolved.
39
+
40
+ Pride started with a riot and the riot started with Marsha. The parade exists because she threw something first.
41
+
42
+ ## The Timeline
43
+
44
+ - **Before Stonewall** — the raids, the laws, the Mattachine Society, the Sip-In, the world that made the riot inevitable
45
+ - **June 28, 1969** — the raid on the Stonewall Inn, the crowd that didn't scatter, the brick, the nights that followed
46
+ - **The Aftermath** — Gay Liberation Front, STAR House, the first Christopher Street Liberation Day March (June 28, 1970)
47
+ - **The Long Road** — Harvey Milk, the AIDS crisis, ACT UP, Don't Ask Don't Tell, marriage equality, the names that got remembered and the names that got erased
48
+ - **Today** — where the fight is now, what's been won, what's under threat, and why Marsha still matters
49
+
50
+ ## The Stack
51
+
52
+ - **Model:** NVIDIA Nemotron Nano Omni with full historical fallback
53
+ - **Framework:** Gradio
54
+ - **Sources:** Stonewall National Museum archives, NYC LGBT Historic Sites Project, "Pay It No Mind: Marsha P. Johnson" (2012 documentary), Martin Duberman's "Stonewall" (1993)
55
+
56
+ ## The Rule
57
+
58
+ Pride is not a brand. It's not a parade float with a bank logo on it. It's a brick through a window thrown by a Black trans woman who had nothing left to lose and everything to fight for.
59
+
60
+ This app exists so nobody forgets that.
61
+
62
+ ---
63
+
64
+ Free dev tools at [Hometree](https://heuremenforprofit.online).
65
+
66
+ **Heuremen LLC** — Build Small Hackathon 2026 — Builder: Wayfinder6
app.py ADDED
@@ -0,0 +1,330 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ PRIDE feat. Marsha P. Johnson — Interactive Stonewall History Engine
3
+ Pay It No Mind.
4
+
5
+ Walk the timeline forward or backward. Every stop tells you what happened,
6
+ who was there, and who got the credit they deserved.
7
+
8
+ Pride started with a riot. The riot started with Marsha.
9
+ """
10
+
11
+ import gradio as gr
12
+ import os
13
+ from openai import OpenAI
14
+
15
+ # --- NVIDIA Nemotron ---
16
+ NVIDIA_API_KEY = os.environ.get("NVIDIA_API_KEY", "")
17
+ NEMOTRON_MODEL = "nvidia/nemotron-3-nano-omni-30b-a3b-reasoning"
18
+
19
+ nvidia_client = None
20
+ if NVIDIA_API_KEY:
21
+ nvidia_client = OpenAI(
22
+ base_url="https://integrate.api.nvidia.com/v1",
23
+ api_key=NVIDIA_API_KEY,
24
+ )
25
+ print("NVIDIA Nemotron connected.")
26
+ else:
27
+ print("No NVIDIA_API_KEY — running in fallback mode.")
28
+
29
+
30
+ # --- Timeline Data ---
31
+ TIMELINE = [
32
+ {
33
+ "year": "1950s",
34
+ "title": "Before the Brick",
35
+ "period": "before",
36
+ "content": """The 1950s and early 60s were a war on queer existence. The Lavender Scare purged gay and lesbian federal employees alongside the Red Scare. Being gay was a felony in every state. The American Psychiatric Association classified homosexuality as a mental disorder. Police raided gay bars routinely — not to enforce laws, but to humiliate. Patrons were arrested, photographed, and their names published in newspapers. Careers ended. Families disowned. Suicides followed.
37
+
38
+ The Mattachine Society (1950) and the Daughters of Bilitis (1955) were the first organized resistance — but they operated in suits and ties, asking politely for tolerance. The strategy was assimilation: prove we're just like you. It didn't work, but it planted seeds."""
39
+ },
40
+ {
41
+ "year": "1966",
42
+ "title": "The Sip-In",
43
+ "period": "before",
44
+ "content": """Three years before Stonewall, four members of the Mattachine Society walked into Julius' Bar in Greenwich Village and announced they were gay, then ordered drinks. New York State Liquor Authority regulations effectively banned serving gay customers — bars could lose their license for having a 'disorderly' (read: gay) clientele.
45
+
46
+ The bartender refused to serve them. They had a reporter and a photographer ready. The story ran. The SLA was forced to clarify that being gay wasn't, technically, grounds to refuse service. It was a small crack in a big wall. Julius' Bar is still open. It's the oldest gay bar in New York City."""
47
+ },
48
+ {
49
+ "year": "June 28, 1969",
50
+ "title": "The Raid",
51
+ "period": "stonewall",
52
+ "content": """1:20 AM. Eight plainclothes officers from the NYPD Public Morals Squad entered the Stonewall Inn at 51-53 Christopher Street. Standard raid — check IDs, arrest anyone in 'gender-inappropriate clothing,' shut it down, move on. They'd done it hundreds of times before.
53
+
54
+ The Stonewall Inn was run by the Mafia. It was one of the few places in New York where queer people could dance together. No liquor license. Watered-down drinks at inflated prices. The toilets barely worked. It was filthy and it was theirs.
55
+
56
+ That night, the crowd didn't scatter. They watched the police load patrons into the paddy wagon. They watched a lesbian fight back as she was dragged to the car. Someone threw a coin. Then a bottle. Then a brick.
57
+
58
+ The police barricaded themselves INSIDE the bar. The crowd — street queens, butch lesbians, homeless queer youth, drag queens, and the people who had nothing left to lose — surrounded it. They tried to set it on fire. The Tactical Patrol Force was called in. It took hours to disperse the crowd.
59
+
60
+ They came back the next night. And the next. For six days."""
61
+ },
62
+ {
63
+ "year": "June 28, 1969",
64
+ "title": "Marsha",
65
+ "period": "stonewall",
66
+ "content": """Marsha P. Johnson was 23 years old. Black. Trans. From Elizabeth, New Jersey. She'd been living in Greenwich Village since she was 17, surviving on the street, doing sex work, performing in drag.
67
+
68
+ The P stood for 'Pay It No Mind.' That's what she said when people asked about her gender.
69
+
70
+ Whether she threw the first brick, the first shot glass, or was simply one of the first to fight back depends on who's telling the story. What nobody disputes: she was there, she didn't run, and she fought. Multiple witnesses put her at the front.
71
+
72
+ After Stonewall, she and Sylvia Rivera founded STAR — Street Transvestite Action Revolutionaries. They opened STAR House, a shelter for homeless trans youth in a trailer truck in Greenwich Village. Marsha paid for it with sex work money. They fed kids. They kept people alive.
73
+
74
+ Marsha P. Johnson was found dead in the Hudson River on July 6, 1992. She was 46. The NYPD ruled it suicide. Her friends said she'd been harassed in the days before. Witnesses reported seeing her with a group before she disappeared. The case was reopened in 2012. It remains unsolved.
75
+
76
+ The first Pride parade exists because Marsha P. Johnson threw something at a cop and didn't apologize."""
77
+ },
78
+ {
79
+ "year": "1970",
80
+ "title": "The First March",
81
+ "period": "after",
82
+ "content": """June 28, 1970. One year after the raid. The Christopher Street Liberation Day March — the first Gay Pride march in U.S. history. It started at the Stonewall Inn and marched north to Central Park.
83
+
84
+ There were no floats. No corporate sponsors. No bank logos. Just people walking together in daylight for the first time, some of them openly, some of them terrified, all of them alive.
85
+
86
+ Simultaneous marches happened in Los Angeles, San Francisco, and Chicago. The movement had legs.
87
+
88
+ Craig Rodwell, Fred Sargeant, Ellen Broidy, and Linda Rhodes organized the New York march. Marsha and Sylvia were there. They were always there."""
89
+ },
90
+ {
91
+ "year": "1970s",
92
+ "title": "The Movement Builds",
93
+ "period": "after",
94
+ "content": """The Gay Liberation Front formed within weeks of Stonewall. The Gay Activists Alliance followed. For the first time, queer people had organizations that didn't ask for tolerance — they demanded rights.
95
+
96
+ Harvey Milk was elected to the San Francisco Board of Supervisors in 1977 — the first openly gay elected official in California. He was assassinated in 1978 by Dan White, a fellow supervisor. White got voluntary manslaughter. Five years. The White Night Riots followed.
97
+
98
+ Meanwhile, Marsha and Sylvia kept running STAR House. They were pushed to the margins of the movement they helped start. The 'respectable' gay rights organizations didn't want trans women and street queens at the front anymore. Sylvia Rivera was booed off the stage at a 1973 Pride rally for talking about trans prisoners. The movement that started with a brick was already forgetting who threw it."""
99
+ },
100
+ {
101
+ "year": "1981-1996",
102
+ "title": "The Plague",
103
+ "period": "after",
104
+ "content": """AIDS killed a generation. The government watched. Reagan didn't say the word 'AIDS' publicly until 1985 — four years and thousands of deaths into the epidemic. By 1995, one in nine gay men in New York City had been diagnosed.
105
+
106
+ ACT UP (AIDS Coalition to Unleash Power) formed in 1987. Their motto: Silence = Death. They stormed the FDA, shut down Wall Street, invaded St. Patrick's Cathedral. They were furious and they were right. They forced the government to fund research, accelerate drug trials, and acknowledge that queer people were dying while politicians looked away.
107
+
108
+ Marsha P. Johnson was an ACT UP member. She marched until she couldn't. She died in 1992, one year after Magic Johnson's HIV announcement brought AIDS into living rooms that had been ignoring it for a decade.
109
+
110
+ The quilt. The names. The empty chairs at dinner tables. A generation of artists, activists, lovers, friends — gone. The people who survived carry that weight every day of Pride month."""
111
+ },
112
+ {
113
+ "year": "2015",
114
+ "title": "Obergefell",
115
+ "period": "modern",
116
+ "content": """June 26, 2015. The Supreme Court ruled 5-4 in Obergefell v. Hodges that same-sex couples have a constitutional right to marry. Justice Kennedy wrote the opinion.
117
+
118
+ 46 years from brick to wedding ring.
119
+
120
+ The White House was lit in rainbow colors that night. It felt like an ending. It wasn't.
121
+
122
+ Trans rights were (and remain) under sustained legislative attack. Bathroom bills, sports bans, healthcare restrictions, book bans. The movement that started with a trans woman throwing a brick at a cop had won marriage equality — for the people who looked most like the mainstream. The people who looked like Marsha were still fighting for the right to exist in public."""
123
+ },
124
+ {
125
+ "year": "Today",
126
+ "title": "Where We Are",
127
+ "period": "modern",
128
+ "content": """Pride Month is June. It's also the month with the most anti-LGBTQ+ legislation introduced in state houses across the country.
129
+
130
+ Corporate Pride is a $multi-billion industry. The same companies that put rainbow logos on their products in June fund politicians who write anti-trans legislation in July. The parade has floats now. The floats have logos.
131
+
132
+ Marsha P. Johnson was inducted into the National LGBTQ Wall of Honor at Stonewall in 2019. A state park in Brooklyn was named after her in 2020. Netflix made a documentary. There's a statue proposal.
133
+
134
+ She lived on the street. She fed kids out of a trailer. She threw a brick at a cop. She died in a river and nobody solved it.
135
+
136
+ Pride started with a riot. The riot started with Marsha. Everything since — every parade, every wedding, every kid who came out to parents who didn't disown them — traces back to a Black trans woman who had nothing and gave everything.
137
+
138
+ Pay It No Mind."""
139
+ },
140
+ ]
141
+
142
+
143
+ def get_era_content(era):
144
+ """Get all timeline entries for an era."""
145
+ era_map = {
146
+ "Before Stonewall": "before",
147
+ "The Stonewall Riots": "stonewall",
148
+ "The Aftermath": "after",
149
+ "The Modern Era": "modern",
150
+ }
151
+ period = era_map.get(era, "stonewall")
152
+ entries = [t for t in TIMELINE if t["period"] == period]
153
+
154
+ html = ""
155
+ for entry in entries:
156
+ html += f"""
157
+ <div class="pride-entry">
158
+ <div class="pride-year">{entry['year']}</div>
159
+ <div class="pride-title">{entry['title']}</div>
160
+ <div class="pride-content">{entry['content']}</div>
161
+ </div>
162
+ """
163
+ return html
164
+
165
+
166
+ def ask_marsha(question):
167
+ """Ask a question about Stonewall history."""
168
+ if not question or not question.strip():
169
+ return ""
170
+
171
+ system = """You are a historian specializing in the Stonewall Riots and LGBTQ+ civil rights history, with particular focus on Marsha P. Johnson and Sylvia Rivera. Answer questions with historical accuracy, directness, and respect. Center marginalized voices — especially Black and brown trans women who started the movement. Don't sanitize the history. Don't both-sides it. Tell the truth.
172
+
173
+ Keep answers under 200 words. Cite specific dates, names, and events when possible."""
174
+
175
+ if nvidia_client:
176
+ try:
177
+ response = nvidia_client.chat.completions.create(
178
+ model=NEMOTRON_MODEL,
179
+ messages=[
180
+ {"role": "system", "content": system},
181
+ {"role": "user", "content": question}
182
+ ],
183
+ max_tokens=400,
184
+ temperature=0.3,
185
+ )
186
+ return response.choices[0].message.content.strip()
187
+ except Exception:
188
+ pass
189
+
190
+ return "The model is resting, but the history is in the timeline above. Walk through it — Marsha's story is all there."
191
+
192
+
193
+ # --- CSS ---
194
+ CUSTOM_CSS = """
195
+ @import url('https://fonts.googleapis.com/css2?family=Source+Serif+4:ital,wght@0,400;0,600;0,700;1,400&family=Inter:wght@400;500;600&display=swap');
196
+
197
+ body, .gradio-container {
198
+ background: #0d0d0d !important;
199
+ font-family: 'Inter', sans-serif !important;
200
+ max-width: 900px !important;
201
+ margin: 0 auto !important;
202
+ }
203
+ footer { display: none !important; }
204
+
205
+ .pride-header {
206
+ text-align: center;
207
+ padding: 32px 0 20px;
208
+ border-bottom: 1px solid #222;
209
+ margin-bottom: 24px;
210
+ }
211
+ .pride-header h1 {
212
+ font-family: 'Source Serif 4', serif;
213
+ font-size: 3rem;
214
+ font-weight: 700;
215
+ background: linear-gradient(90deg, #E40303, #FF8C00, #FFED00, #008026, #004DFF, #750787);
216
+ -webkit-background-clip: text;
217
+ -webkit-text-fill-color: transparent;
218
+ background-clip: text;
219
+ margin: 0;
220
+ }
221
+ .pride-header .featuring {
222
+ font-family: 'Source Serif 4', serif;
223
+ font-size: 1.2rem;
224
+ color: #888;
225
+ font-style: italic;
226
+ margin-top: 4px;
227
+ }
228
+ .pride-header .payitno {
229
+ font-family: 'Inter', sans-serif;
230
+ font-size: 0.85rem;
231
+ color: #555;
232
+ letter-spacing: 0.2em;
233
+ text-transform: uppercase;
234
+ margin-top: 8px;
235
+ }
236
+
237
+ .pride-entry {
238
+ padding: 24px 0;
239
+ border-bottom: 1px solid #1a1a1a;
240
+ }
241
+ .pride-entry:last-child { border-bottom: none; }
242
+
243
+ .pride-year {
244
+ font-family: 'Inter', sans-serif;
245
+ font-size: 0.8rem;
246
+ color: #750787;
247
+ font-weight: 600;
248
+ letter-spacing: 0.15em;
249
+ text-transform: uppercase;
250
+ margin-bottom: 4px;
251
+ }
252
+ .pride-title {
253
+ font-family: 'Source Serif 4', serif;
254
+ font-size: 1.5rem;
255
+ font-weight: 700;
256
+ color: #e0e0e0;
257
+ margin-bottom: 12px;
258
+ }
259
+ .pride-content {
260
+ font-family: 'Source Serif 4', serif;
261
+ font-size: 1.05rem;
262
+ color: #aaa;
263
+ line-height: 1.8;
264
+ white-space: pre-line;
265
+ }
266
+
267
+ button.primary {
268
+ background: #750787 !important;
269
+ color: #fff !important;
270
+ border: none !important;
271
+ font-family: 'Inter', sans-serif !important;
272
+ }
273
+ button.primary:hover { background: #5a0566 !important; }
274
+
275
+ .gr-radio label { color: #ccc !important; }
276
+ """
277
+
278
+ # --- App ---
279
+ with gr.Blocks(css=CUSTOM_CSS, title="PRIDE feat. Marsha P. Johnson") as demo:
280
+
281
+ gr.HTML("""
282
+ <div class="pride-header">
283
+ <h1>PRIDE</h1>
284
+ <div class="featuring">feat. Marsha P. Johnson</div>
285
+ <div class="payitno">Pay It No Mind</div>
286
+ </div>
287
+ """)
288
+
289
+ era_picker = gr.Radio(
290
+ choices=["Before Stonewall", "The Stonewall Riots", "The Aftermath", "The Modern Era"],
291
+ value="The Stonewall Riots",
292
+ label="Walk the Timeline",
293
+ )
294
+
295
+ timeline_output = gr.HTML(value=get_era_content("The Stonewall Riots"))
296
+
297
+ era_picker.change(get_era_content, [era_picker], [timeline_output])
298
+
299
+ gr.HTML("""<div style="border-top: 1px solid #222; margin: 24px 0; padding-top: 24px;">
300
+ <p style="font-family: 'Source Serif 4', serif; color: #888; font-size: 1rem; text-align: center; font-style: italic;">
301
+ Ask a question about Stonewall, Marsha, or the movement.
302
+ </p>
303
+ </div>""")
304
+
305
+ question = gr.Textbox(
306
+ placeholder="Who was Sylvia Rivera? What happened at the 1973 Pride rally? Why was Stonewall run by the Mafia?",
307
+ label="",
308
+ show_label=False,
309
+ )
310
+ ask_btn = gr.Button("Ask", variant="primary")
311
+ answer = gr.Markdown()
312
+
313
+ ask_btn.click(ask_marsha, [question], [answer])
314
+ question.submit(ask_marsha, [question], [answer])
315
+
316
+ gr.HTML("""
317
+ <div style="text-align:center; padding: 24px 0 8px; border-top: 1px solid #222; margin-top: 24px;">
318
+ <p style="font-family: 'Source Serif 4', serif; color: #555; font-size: 0.9rem; font-style: italic; line-height: 1.8;">
319
+ Pride is not a brand. It's not a parade float with a bank logo on it.<br>
320
+ It's a brick through a window thrown by a Black trans woman<br>
321
+ who had nothing left to lose and everything to fight for.
322
+ </p>
323
+ <p style="color: #333; font-size: 0.7em; font-family: 'Inter', sans-serif; margin-top: 16px;">
324
+ Heuremen -- Build Small Hackathon 2026
325
+ </p>
326
+ </div>
327
+ """)
328
+
329
+ if __name__ == "__main__":
330
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ gradio>=4.0
2
+ openai