fdaudens Claude Opus 4.6 (1M context) commited on
Commit
34db5b5
·
1 Parent(s): cfd2b42

feat: add course homepage and Codex starter kit

Browse files

Static Space with index.html for Builders Track (Classes 5 & 6)
and my-assistant/ starter kit for personal AI coding assistants.

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

README.md CHANGED
@@ -1,12 +1,21 @@
1
  ---
2
- title: Course Material
3
- emoji: 🏃
4
- colorFrom: red
5
- colorTo: gray
6
- sdk: gradio
7
- sdk_version: 6.9.0
8
- app_file: app.py
9
  pinned: false
10
  ---
11
 
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: "AI Journalism Lab — Builders Track"
3
+ emoji: "\U0001F4DD"
4
+ colorFrom: blue
5
+ colorTo: purple
6
+ sdk: static
 
 
7
  pinned: false
8
  ---
9
 
10
+ # AI Journalism Lab Builders Track
11
+
12
+ Course materials for the CUNY AI Journalism Lab, Builders Track (Classes 5 & 6).
13
+
14
+ ## Contents
15
+
16
+ - **`index.html`** — Course homepage (served by the Space)
17
+ - **`my-assistant/`** — Starter kit for building a personal AI coding assistant with Codex
18
+
19
+ ## For Students
20
+
21
+ Visit the [Space homepage](https://huggingface.co/spaces/CUNY-Builders/course-material) for links to presentations, resources, and the starter kit.
index.html ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>AI Journalism Lab — Builders Track</title>
7
+ <style>
8
+ * { margin: 0; padding: 0; box-sizing: border-box; }
9
+
10
+ body {
11
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
12
+ background: #f8f9fb;
13
+ color: #1a1a2e;
14
+ line-height: 1.6;
15
+ }
16
+
17
+ header {
18
+ background: linear-gradient(135deg, #1a1a2e 0%, #2d2d5e 100%);
19
+ color: #fff;
20
+ padding: 3rem 2rem 2.5rem;
21
+ text-align: center;
22
+ }
23
+
24
+ header p.label {
25
+ font-size: 0.8rem;
26
+ text-transform: uppercase;
27
+ letter-spacing: 0.15em;
28
+ color: #a0a0d0;
29
+ margin-bottom: 0.5rem;
30
+ }
31
+
32
+ header h1 {
33
+ font-size: 2rem;
34
+ font-weight: 700;
35
+ margin-bottom: 0.5rem;
36
+ }
37
+
38
+ header .subtitle {
39
+ font-size: 1.05rem;
40
+ color: #c0c0e8;
41
+ max-width: 560px;
42
+ margin: 0 auto;
43
+ }
44
+
45
+ main {
46
+ max-width: 780px;
47
+ margin: -1.5rem auto 3rem;
48
+ padding: 0 1.5rem;
49
+ }
50
+
51
+ .card {
52
+ background: #fff;
53
+ border-radius: 12px;
54
+ box-shadow: 0 1px 3px rgba(0,0,0,0.06), 0 4px 12px rgba(0,0,0,0.04);
55
+ padding: 2rem;
56
+ margin-bottom: 1.5rem;
57
+ }
58
+
59
+ .card h2 {
60
+ font-size: 1.15rem;
61
+ font-weight: 650;
62
+ margin-bottom: 1rem;
63
+ color: #1a1a2e;
64
+ }
65
+
66
+ .link-list {
67
+ list-style: none;
68
+ }
69
+
70
+ .link-list li {
71
+ border-bottom: 1px solid #eee;
72
+ padding: 0.75rem 0;
73
+ }
74
+
75
+ .link-list li:last-child {
76
+ border-bottom: none;
77
+ padding-bottom: 0;
78
+ }
79
+
80
+ .link-list a {
81
+ text-decoration: none;
82
+ color: #3b3b8f;
83
+ font-weight: 550;
84
+ display: flex;
85
+ align-items: baseline;
86
+ gap: 0.5rem;
87
+ transition: color 0.15s;
88
+ }
89
+
90
+ .link-list a:hover {
91
+ color: #5c5cc8;
92
+ }
93
+
94
+ .link-list .meta {
95
+ font-size: 0.85rem;
96
+ color: #777;
97
+ font-weight: 400;
98
+ margin-left: auto;
99
+ white-space: nowrap;
100
+ }
101
+
102
+ .link-list .desc {
103
+ font-size: 0.88rem;
104
+ color: #555;
105
+ margin-top: 0.25rem;
106
+ padding-left: 1.25rem;
107
+ }
108
+
109
+ .badge {
110
+ display: inline-block;
111
+ font-size: 0.7rem;
112
+ font-weight: 600;
113
+ text-transform: uppercase;
114
+ letter-spacing: 0.05em;
115
+ padding: 0.15em 0.5em;
116
+ border-radius: 4px;
117
+ vertical-align: middle;
118
+ }
119
+
120
+ .badge.new { background: #e8f5e9; color: #2e7d32; }
121
+ .badge.upcoming { background: #fff3e0; color: #e65100; }
122
+
123
+ .starter-kit {
124
+ background: linear-gradient(135deg, #f0f0ff 0%, #e8ecff 100%);
125
+ border: 1px solid #d0d4f0;
126
+ }
127
+
128
+ .starter-kit h2 { color: #2d2d5e; }
129
+
130
+ .starter-kit .dl-btn {
131
+ display: inline-block;
132
+ margin-top: 1rem;
133
+ padding: 0.65rem 1.4rem;
134
+ background: #2d2d5e;
135
+ color: #fff;
136
+ border-radius: 8px;
137
+ text-decoration: none;
138
+ font-weight: 600;
139
+ font-size: 0.92rem;
140
+ transition: background 0.15s;
141
+ }
142
+
143
+ .starter-kit .dl-btn:hover {
144
+ background: #3b3b8f;
145
+ }
146
+
147
+ footer {
148
+ text-align: center;
149
+ padding: 1.5rem;
150
+ font-size: 0.82rem;
151
+ color: #999;
152
+ }
153
+
154
+ footer a { color: #777; }
155
+
156
+ @media (max-width: 600px) {
157
+ header { padding: 2rem 1.2rem 1.8rem; }
158
+ header h1 { font-size: 1.5rem; }
159
+ main { padding: 0 1rem; }
160
+ .card { padding: 1.4rem; }
161
+ .link-list a { flex-wrap: wrap; }
162
+ .link-list .meta { margin-left: 1.25rem; margin-top: 0.1rem; }
163
+ }
164
+ </style>
165
+ </head>
166
+ <body>
167
+
168
+ <header>
169
+ <p class="label">CUNY AI Journalism Lab</p>
170
+ <h1>Builders Track</h1>
171
+ <p class="subtitle">Course materials, presentations, and starter files for building AI-powered journalism tools.</p>
172
+ </header>
173
+
174
+ <main>
175
+
176
+ <!-- Starter Kit -->
177
+ <div class="card starter-kit">
178
+ <h2>My Assistant — Starter Kit</h2>
179
+ <p>A ready-to-use workspace template for building your personal AI coding assistant with Codex. Includes custom instructions, context files, and reusable skills.</p>
180
+ <a class="dl-btn" href="my-assistant/">Browse starter kit</a>
181
+ </div>
182
+
183
+ <!-- Presentations -->
184
+ <div class="card">
185
+ <h2>Presentations</h2>
186
+ <ul class="link-list">
187
+ <li>
188
+ <a href="#">
189
+ Class 5 — Your AI Coding Assistant
190
+ <span class="meta">Mar 26 <span class="badge upcoming">upcoming</span></span>
191
+ </a>
192
+ <p class="desc">Setup, AGENTS.md, context files, building your first skill</p>
193
+ </li>
194
+ <li>
195
+ <a href="#">
196
+ Class 6 — Build, Code &amp; Ship
197
+ <span class="meta">Apr 9 <span class="badge upcoming">upcoming</span></span>
198
+ </a>
199
+ <p class="desc">Codex deep dive, code building, MCP, from prototype to daily driver</p>
200
+ </li>
201
+ </ul>
202
+ </div>
203
+
204
+ <!-- Resources -->
205
+ <div class="card">
206
+ <h2>Resources</h2>
207
+ <ul class="link-list">
208
+ <li>
209
+ <a href="https://openai.com/index/introducing-codex/">Codex Documentation</a>
210
+ </li>
211
+ <li>
212
+ <a href="https://modelcontextprotocol.io/directory">MCP Servers Directory</a>
213
+ </li>
214
+ <li>
215
+ <a href="https://code.visualstudio.com/">VS Code Download</a>
216
+ </li>
217
+ </ul>
218
+ </div>
219
+
220
+ </main>
221
+
222
+ <footer>
223
+ <p>Instructor: Florent Daudens &middot; <a href="https://huggingface.co/spaces/CUNY-Builders/course-material">View on Hugging Face</a></p>
224
+ </footer>
225
+
226
+ </body>
227
+ </html>
my-assistant/AGENTS.md ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # My Assistant
2
+
3
+ ## Who I am
4
+
5
+ I'm [YOUR NAME], a [reporter / editor / data journalist / producer] at [YOUR ORGANIZATION].
6
+
7
+ ## My beat
8
+
9
+ - I cover [YOUR BEAT — e.g., politics, criminal justice, healthcare, technology, housing]
10
+ - Current focus: [what you're actively investigating or tracking]
11
+
12
+ ## How I work
13
+
14
+ - I verify everything before publishing — accuracy is non-negotiable
15
+ - I work with data: spreadsheets, databases, public records, court documents
16
+ - I think in terms of: what's the evidence? what's the public interest? what's the story?
17
+
18
+ ## What I need help with
19
+
20
+ - **Research synthesis**: summarize documents, find patterns across sources, flag gaps
21
+ - **Data analysis**: explore datasets, identify outliers, suggest visualizations
22
+ - **Interview prep**: brainstorm questions based on background material
23
+ - **Daily briefing**: scan sources for relevant developments
24
+ - **Story development**: find angles, identify missing context, stress-test arguments
25
+ - **Writing support**: help me think, don't replace my writing
26
+
27
+ ## Privacy and confidentiality
28
+
29
+ **NEVER share with AI:**
30
+ - Names or identifying details of confidential sources
31
+ - Unpublished investigation details
32
+ - Whistleblower communications
33
+ - Embargoed information
34
+
35
+ **When working with sensitive material:**
36
+ - Replace real names with placeholders: [Source A], [Source B]
37
+ - Remove identifying details before analysis
38
+ - Ask me before accessing files in `research/` that are marked sensitive
39
+
40
+ ## What you should NOT do
41
+
42
+ - Never fabricate quotes, statistics, or sources
43
+ - Never assume access to material I haven't shared
44
+ - Always flag when you're uncertain or speculating
45
+ - Don't write in my voice unless I explicitly ask — help me think, don't replace my writing
46
+
47
+ ## My workspace
48
+
49
+ - `context/` — beat notes, source list, style guide
50
+ - `skills/` — reusable workflows (interview prep, daily digest, etc.)
51
+ - `data/` — datasets, CSVs, spreadsheets
52
+ - `research/` — background material, reports, documents
53
+ - `scripts/` — Python scripts, notebooks
54
+ - `drafts/` — work in progress
55
+
56
+ When I ask for help, check my `context/` folder first to understand what I'm working on.
my-assistant/context/beat-notes.md ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Beat Notes — [Your Beat]
2
+
3
+ ## Key themes I'm tracking
4
+
5
+ - [Theme 1 — e.g., rising housing costs in NYC boroughs]
6
+ - [Theme 2 — e.g., NYPD use-of-force data transparency]
7
+ - [Theme 3 — e.g., migrant shelter policy changes]
8
+
9
+ ## Open questions
10
+
11
+ - [Question I'm trying to answer — e.g., How does the new zoning proposal affect affordable housing targets?]
12
+ - [Angle I haven't explored yet — e.g., Which neighborhoods saw the biggest rent increases since 2023?]
13
+
14
+ ## Recent developments
15
+
16
+ - [Date]: [What happened and why it matters]
17
+ - [Date]: [What happened and why it matters]
18
+
19
+ ## Key people and organizations
20
+
21
+ - [Person/org]: [Why they matter for your beat]
22
+ - [Person/org]: [Why they matter for your beat]
my-assistant/context/sources.md ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Sources
2
+
3
+ ## Primary sources
4
+
5
+ | Name | Role / Organization | Expertise | Notes |
6
+ |------|---------------------|-----------|-------|
7
+ | [Name] | [Role] | [Area] | [Last spoke: date, context] |
8
+
9
+ ## Organizations to watch
10
+
11
+ - [Org 1]: [Why they matter for your beat]
12
+ - [Org 2]: [Why they matter for your beat]
13
+
14
+ ## Daily feeds and websites
15
+
16
+ ### News
17
+
18
+ - [URL] — [What it covers and why you follow it]
19
+ - [URL] — [What it covers and why you follow it]
20
+
21
+ ### Beat-specific
22
+
23
+ - [URL] — [What it covers and why you follow it]
24
+ - [URL] — [What it covers and why you follow it]
25
+
26
+ ### Data sources
27
+
28
+ - [URL] — [What data is available and how you use it]
29
+ - [URL] — [What data is available and how you use it]
30
+
31
+ ### Social accounts to watch
32
+
33
+ - [Platform — handle] — [Why you follow them]
34
+ - [Platform — handle] — [Why you follow them]
my-assistant/context/style-guide.md ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Style Guide
2
+
3
+ ## Language and tone
4
+
5
+ - Default language: English
6
+ - Follow [YOUR ORG]'s editorial standards
7
+ - [AP style / Chicago style / house style]
8
+
9
+ ## Conventions
10
+
11
+ - [Spelling preferences — e.g., "healthcare" vs "health care"]
12
+ - [Title conventions — e.g., capitalize formal titles before names]
13
+ - [Number rules — e.g., spell out one through nine]
14
+ - [Attribution style — e.g., "said" not "stated"]
15
+
16
+ ## Formatting
17
+
18
+ - [Preferred date format — e.g., March 26, 2026]
19
+ - [How to handle quotes]
20
+ - [How to cite data sources]
my-assistant/data/.gitkeep ADDED
File without changes
my-assistant/drafts/.gitkeep ADDED
File without changes
my-assistant/research/.gitkeep ADDED
File without changes
my-assistant/scripts/.gitkeep ADDED
File without changes
my-assistant/skills/daily-digest.md ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Daily Digest
2
+
3
+ When I ask for a daily digest, morning briefing, or beat scan, follow these steps:
4
+
5
+ 1. Read `context/beat-notes.md` and extract current themes and open questions
6
+ 2. Read `context/sources.md` and scan each listed feed or site for new items
7
+ 3. Check `research/` for newly added material that may shift priorities
8
+ 4. Select the 8-10 most relevant items and rank by editorial value
9
+ 5. Draft a concise morning briefing with links and suggested story angles
10
+
11
+ ## Output format
12
+
13
+ Save to `drafts/daily-digest-YYYY-MM-DD.md`:
14
+
15
+ **Theme of the day**
16
+ [1 sentence on the dominant theme]
17
+
18
+ **Top items**
19
+
20
+ 1. **[Headline]**
21
+ - Source: [Publication/author]
22
+ - Why it matters: [1 sentence]
23
+ - Summary: [2 sentences]
24
+ - Link: [URL]
25
+
26
+ [... up to 8-10 items]
27
+
28
+ **Story angles**
29
+ - [Angle 1 — what to pursue and why]
30
+ - [Angle 2 — what to pursue and why]
31
+
32
+ **Sources checked**
33
+ - [List every feed/site/calendar checked]
34
+
35
+ ## Rules
36
+
37
+ - Do not fabricate facts, quotes, or links
38
+ - If a source cannot be accessed, state that clearly in "Sources checked"
39
+ - Prioritize items that are: (1) timely, (2) relevant to tracked themes, (3) actionable for reporting
40
+ - Include national or international developments only if directly relevant to the beat
my-assistant/skills/interview-prep.md ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Interview Prep
2
+
3
+ When I ask you to prepare for an interview, follow these steps:
4
+
5
+ 1. Read my beat notes in `context/beat-notes.md`
6
+ 2. Research the person or organization I'm interviewing
7
+ 3. Find their recent public statements, articles, social media posts
8
+ 4. Identify 3 key themes or tensions to explore
9
+ 5. Draft 10 questions, organized by theme
10
+ 6. Flag any claims that need verification
11
+ 7. Note any connections to my current projects
12
+
13
+ ## Output format
14
+
15
+ **Bio** (3-4 lines)
16
+
17
+ **Key themes**
18
+ - Theme with brief context for each
19
+
20
+ **Questions** (grouped by theme, ordered easy to hard)
21
+ - Opening questions (rapport-building)
22
+ - Core questions (the meat of the interview)
23
+ - Tough questions (accountability, contradictions)
24
+ - Closing questions (forward-looking, anything they want to add)
25
+
26
+ **Suggested follow-ups**
27
+ - If they say X, ask Y
28
+
29
+ **Background links**
30
+ - Relevant articles, data, documents
31
+
32
+ ## Rules
33
+
34
+ - Never fabricate quotes or attribute statements without a source
35
+ - Flag when information is unverified or based on limited sources
36
+ - Prioritize questions that serve the public interest
37
+ - Include at least one question I probably haven't thought of
my-assistant/skills/story-pitch.md ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Story Pitch Generator
2
+
3
+ When I ask you to help me develop a story pitch, follow these steps:
4
+
5
+ 1. Read `context/beat-notes.md` for current themes and open questions
6
+ 2. If I give you a topic or tip, research what's already been published on it
7
+ 3. Identify what's new, what's missing from existing coverage, and why it matters now
8
+ 4. Draft a structured pitch
9
+
10
+ ## Output format
11
+
12
+ **Headline** (working title)
13
+
14
+ **The story in one sentence**
15
+ [What happened + why it matters + who's affected]
16
+
17
+ **Why now?**
18
+ [The news peg or timing hook]
19
+
20
+ **What we know**
21
+ - [Key fact 1 with source]
22
+ - [Key fact 2 with source]
23
+ - [Key fact 3 with source]
24
+
25
+ **What we don't know (and need to find out)**
26
+ - [Open question 1]
27
+ - [Open question 2]
28
+
29
+ **Key sources to contact**
30
+ - [Person/org] — [Why they matter] — [How to reach them if public]
31
+
32
+ **Data and documents**
33
+ - [What public records or datasets could support this story]
34
+
35
+ **Comparable coverage**
36
+ - [What other outlets have done on this — links]
37
+ - [What angle hasn't been covered yet]
38
+
39
+ **Scope and format**
40
+ - Estimated reporting time: [quick hit / 1-week / longer investigation]
41
+ - Suggested format: [text / data viz / interactive / video / podcast]
42
+
43
+ ## Rules
44
+
45
+ - Every fact must have a source — flag anything unverified
46
+ - Focus on public interest and impact
47
+ - Be honest about what's strong and what's thin
48
+ - Suggest the strongest version of the story, not the easiest
my-assistant/todo.md ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ # To Do
2
+
3
+ ## This week
4
+
5
+ - [ ] Fill in AGENTS.md with my info
6
+ - [ ] Add my beat notes to context/beat-notes.md
7
+ - [ ] List my key sources and feeds in context/sources.md
8
+ - [ ] Test: ask Codex to read my AGENTS.md and summarize what it knows about me
9
+ - [ ] Test: run the interview prep skill on a real interview
10
+ - [ ] Build one custom skill for a task I do regularly