|
| 1 | +# Linear for Vercel Academy (Education Team) |
| 2 | + |
| 3 | +> **Linear is the source of truth.** Notion is deprecated for content tracking. |
| 4 | +
|
| 5 | +## The Key Insight |
| 6 | + |
| 7 | +**DX Deliverable** is the magic label. Add it to ANY issue and it shows up in the content calendar. |
| 8 | + |
| 9 | +``` |
| 10 | +Issue (any team) + "DX Deliverable" label → Content Calendar |
| 11 | +``` |
| 12 | + |
| 13 | +## Education Team |
| 14 | + |
| 15 | +| Name | Email | Linear ID | Notion ID | Slack ID | |
| 16 | +|------|-------|-----------|-----------|----------| |
| 17 | +| Joel Hooks | [email protected] | `47b94c47-f82f-4110-b7f1-9432ab567de3` | `1a7d872b-594c-81ed-9a54-0002a3193d1b` | `U08FCNRDY0J` | |
| 18 | +| Eve Porcello | [email protected] | `cf8edf1a-34d6-4d73-8e42-7536acf179ee` | `28fd872b-594c-8120-bc67-00024e0f4521` | `U09LZ68M67Q` | |
| 19 | + |
| 20 | +## Your Context |
| 21 | + |
| 22 | +- **Team**: Education (EDU-*) |
| 23 | +- **Team ID**: `3913aea8-c6df-4fcf-ab46-caba08f1ea6c` |
| 24 | +- **Site**: vercel.com/academy |
| 25 | +- **Slack Channel**: `#academy` (`C08UMBNDZ6G`) |
| 26 | + |
| 27 | +## Collaborators (Cross-Team) |
| 28 | + |
| 29 | +| Name | Email | Linear ID | Slack ID | Expertise | |
| 30 | +|------|-------|-----------|----------|-----------| |
| 31 | +| Hayden Bleasel | [email protected] | `e8258444-62fa-4557-ac9b-f18f55bfb23c` | - | shadcn/ui, design systems | |
| 32 | +| Drew Bredvick | [email protected] | `c64a8541-6605-4649-9487-025402aad9fd` | `U028DSQRZ6U` | AI, enterprise patterns | |
| 33 | +| Jimmy Lai | [email protected] | `6ecc995a-d2b0-4e0c-b351-ad2f3dd2caed` | - | Performance, profiling | |
| 34 | +| Dom Sipowicz | [email protected] | `132089fc-73a1-4423-bb70-c98a5a55e0b3` | - | Enterprise deployments, v0, flags | |
| 35 | +| Daniel Roe | [email protected] | `7269eae3-1018-4d91-9f7f-829a688038ae` | - | Nuxt, Vue ecosystem | |
| 36 | +| Dominic Ferber | - | - | - | Flags SDK creator | |
| 37 | + |
| 38 | +## Documentation Team Collaborators |
| 39 | + |
| 40 | +| Name | Email | Linear ID | Notion ID | Focus | |
| 41 | +|------|-------|-----------|-----------|-------| |
| 42 | +| Delba de Oliveira | [email protected] | `162d1ea2-3763-4f7b-9b3e-dc7d34d7095a` | `54c94858-2934-4931-ae79-06b9c111928a` | Next.js Education, Cache Comps | |
| 43 | +| Amy Burns | [email protected] | `79473979-bade-4346-880d-3a0c3b4efda6` | `00f52499-a6a5-4b5b-97b4-c1be4026299d` | Docs platform, Getting started | |
| 44 | +| Ismael Rumzan | [email protected] | `28a6cbf0-d706-4850-874e-585a4c0f7d93` | `53de7174-7d58-47a0-b6bc-d662c0b5b2db` | Knowledge base, CDN docs | |
| 45 | +| Anthony Shew | [email protected] | `bb0b2640-bce8-4468-bf23-79033d74ad1a` | `7d7d9288-a649-4ef7-96af-8026539da217` | Code examples, Turborepo | |
| 46 | +| Nico Albanese | [email protected] | `3f70c170-45cb-493e-ba4a-08937b0f89eb` | `3878be83-e05c-4e8a-8bbf-aeff821e10ac` | AI SDK education | |
| 47 | + |
| 48 | +## Quick Actions |
| 49 | + |
| 50 | +### Check Education Team Work |
| 51 | + |
| 52 | +``` |
| 53 | +# My assigned issues |
| 54 | +linear_list_issues(assignee="me") |
| 55 | +
|
| 56 | +# Eve's assigned issues |
| 57 | +linear_list_issues(assignee="[email protected]") |
| 58 | +
|
| 59 | +# All DX Deliverables (content calendar items) |
| 60 | +linear_list_issues(team="Education", label="DX Deliverable") |
| 61 | +
|
| 62 | +# Just courses |
| 63 | +linear_list_issues(team="Education", label="Course") |
| 64 | +
|
| 65 | +# Education team overview (natural language) |
| 66 | +linear_query_data(query="Issues assigned to Joel Hooks or Eve Porcello") |
| 67 | +``` |
| 68 | + |
| 69 | +### Create Academy Course |
| 70 | + |
| 71 | +**ALWAYS add DX Deliverable to get on the content calendar:** |
| 72 | + |
| 73 | +``` |
| 74 | +linear_create_issue( |
| 75 | + team="Education", |
| 76 | + title="[Course Name] Course", |
| 77 | + description="## Overview\n\n## Learning Outcomes\n\n## Modules\n\n## Target Audience", |
| 78 | + labels=["Course", "DX Deliverable"] |
| 79 | +) |
| 80 | +``` |
| 81 | + |
| 82 | +### Natural Language Queries |
| 83 | + |
| 84 | +``` |
| 85 | +# Content calendar overview |
| 86 | +linear_query_data(query="All DX Deliverable issues due this week") |
| 87 | +
|
| 88 | +# My content |
| 89 | +linear_query_data(query="Issues assigned to Joel with DX Deliverable label") |
| 90 | +
|
| 91 | +# Academy-specific |
| 92 | +linear_query_data(query="Issues mentioning Academy or Course") |
| 93 | +``` |
| 94 | + |
| 95 | +## Labels |
| 96 | + |
| 97 | +### Required for Content Calendar |
| 98 | + |
| 99 | +| Label | ID | Note | |
| 100 | +|-------|-----|------| |
| 101 | +| **DX Deliverable** | `6b3d7451-e2b0-4b69-a27e-486845b95dd5` | **ADD THIS TO EVERYTHING** | |
| 102 | + |
| 103 | +### Content Type Labels |
| 104 | + |
| 105 | +| Label | ID | Use For | |
| 106 | +|-------|-----|---------| |
| 107 | +| Course | `3315ba45-f5b2-4bb9-950a-8cd6ea5b259a` | Academy courses | |
| 108 | +| Blog | `4b41c668-65dc-4ebd-ae80-071ea8d0911e` | Blog posts | |
| 109 | +| Social Post | `29286dc7-0311-428a-855b-234f0b0f19dd` | Twitter, LinkedIn, Bluesky | |
| 110 | +| Video | `efdef145-2a7f-4ac2-b1a4-1ee6f6dc5c81` | Video content | |
| 111 | +| Guide or Tutorial | `3836ebc4-c457-46dc-9eb6-23081baf4353` | Standalone tutorials | |
| 112 | +| Demo or Example | `367a6973-c306-434b-a330-04135ee6d12e` | Code examples | |
| 113 | + |
| 114 | +### Topic Labels |
| 115 | + |
| 116 | +| Label | ID | |
| 117 | +|-------|-----| |
| 118 | +| AI | `8fb7f72a-e024-4510-9238-98caa47307f1` | |
| 119 | +| area:next | `347ff051-3f2e-4d67-ba95-de6af6139941` | |
| 120 | + |
| 121 | +## Workflow States |
| 122 | + |
| 123 | +``` |
| 124 | +Triage → Backlog → Todo → In Progress → In Draft → In Review → Done |
| 125 | +``` |
| 126 | + |
| 127 | +| State | ID | |
| 128 | +|-------|-----| |
| 129 | +| Backlog | `b46ceef4-89bf-44bb-b368-c1441006eca4` | |
| 130 | +| Todo | `90d01a28-3805-4c37-a534-fb0283c598a5` | |
| 131 | +| In Progress | `bad70e2d-7b96-49e5-9d0a-7d6d2db6cfee` | |
| 132 | +| In Draft | `0b4c8cb9-3411-4b08-ac33-3e968690c48b` | |
| 133 | +| In Review | `36bc1f68-a336-4ba4-b53f-d2e071b90a38` | |
| 134 | +| Done | `5a2cc380-14d6-41b1-b8d7-6275e2f88b98` | |
| 135 | + |
| 136 | +## Relevant Projects |
| 137 | + |
| 138 | +| Project | ID | Focus | |
| 139 | +|---------|-----|-------| |
| 140 | +| AI SDK Education Pipeline | `5cf81552-48aa-42c3-854d-9cc5c9deddfe` | AI SDK content | |
| 141 | +| Cache Components | `8a07a35a-0e73-4663-bbcf-2fa3d4b4393f` | Cache Components education | |
| 142 | +| Turbopack Engineering | `7924e3d4-4996-4493-9c14-938bbeb7c491` | Turbopack blogs | |
| 143 | +| Engineering Blogs | `9508cd00-9391-416d-9d9d-40003a09f274` | Technical blogs | |
| 144 | +| Next.js Skills / Agents DX | `ddb1b139-10e1-46a5-bb7c-0233b9fe36ae` | Skills for agents | |
| 145 | +| Education Strategy | `d8a90053-24dc-4d99-afc9-05a7902ef765` | Strategy planning | |
| 146 | + |
| 147 | +## Current Courses (Jan 2026) |
| 148 | + |
| 149 | +### Shipped |
| 150 | +| Issue | Title | Owner | |
| 151 | +|-------|-------|-------| |
| 152 | +| EDU-1 | React UI with shadcn/ui + Radix + Tailwind | Hayden | |
| 153 | +| EDU-2 | Vercel AI SDK Fundamentals | Joel | |
| 154 | +| EDU-3 | Slack Agents Course | Joel | |
| 155 | +| EDU-4 | Production Monorepos with Turborepo | Eve | |
| 156 | +| EDU-5 | Subscription Store with Vercel and Stripe | Eve | |
| 157 | +| EDU-6 | AI Summary App with Next.js | Eve | |
| 158 | + |
| 159 | +### In Progress |
| 160 | +| Issue | Title | Owner | Target | |
| 161 | +|-------|-------|-------|--------| |
| 162 | +| EDU-7 | Next.js Foundations | Joel | Beta live, glossary added | |
| 163 | +| EDU-8 | Microfrontends on Vercel | Eve | Feb 5, 2026 | |
| 164 | +| EDU-9 | Filesystem Agents | Eve | Feb 11, 2026 | |
| 165 | +| EDU-10 | Building Intelligent Agents with AI SDK | Joel | Feb 15, 2026 | |
| 166 | +| EDU-16 | Svelte on Vercel | Eve | TBD (Rich Harris collab) | |
| 167 | + |
| 168 | +### Backlog |
| 169 | +| Issue | Title | Owner | Notes | |
| 170 | +|-------|-------|-------|-------| |
| 171 | +| EDU-12 | v0 to Hero | Joel | Mar 15 - Dom's workshop → course | |
| 172 | +| EDU-14 | Profiling with Jimmy Lai | - | Needs scheduling | |
| 173 | +| EDU-15 | Nuxt on Vercel | Eve | Daniel Roe collab | |
| 174 | + |
| 175 | +## Multi-Course Projects |
| 176 | + |
| 177 | +### Advanced Next.js Deployment (EDU-13 Restructured) |
| 178 | + |
| 179 | +Major restructure into 4-course series with Dom Sipowicz as SME: |
| 180 | + |
| 181 | +| Issue | Title | Status | |
| 182 | +|-------|-------|--------| |
| 183 | +| EDU-17 | Shared Example (Turbo Repo Base) | **BLOCKS ALL** | |
| 184 | +| EDU-18 | Feature Flags on Vercel | Blocked | |
| 185 | +| EDU-19 | Rolling Release on Vercel | Blocked | |
| 186 | +| EDU-20 | Skew Protection on Vercel | Blocked | |
| 187 | + |
| 188 | +### Project Structure Pattern |
| 189 | + |
| 190 | +``` |
| 191 | +┌─────────────────────────────────────────────────────────────┐ |
| 192 | +│ LINEAR PROJECT: [Topic Name] │ |
| 193 | +│ (Groups related work with shared goal) │ |
| 194 | +├─────────────────────────────────────────────────────────────┤ |
| 195 | +│ │ |
| 196 | +│ 🔧 [TOPIC]-0: Shared Example Base │ |
| 197 | +│ └─ Dev work (code, repo setup) │ |
| 198 | +│ └─ BLOCKS all courses below │ |
| 199 | +│ └─ Label: "Demo or Example" │ |
| 200 | +│ │ |
| 201 | +│ 📚 [TOPIC]-1: Course Name A │ |
| 202 | +│ └─ BLOCKED BY [TOPIC]-0 │ |
| 203 | +│ └─ Labels: "Course", "DX Deliverable" │ |
| 204 | +│ │ |
| 205 | +│ 📚 [TOPIC]-2: Course Name B │ |
| 206 | +│ └─ BLOCKED BY [TOPIC]-0 │ |
| 207 | +│ └─ Labels: "Course", "DX Deliverable" │ |
| 208 | +│ │ |
| 209 | +└─────────────────────────────────────────────────────────────┘ |
| 210 | +``` |
| 211 | + |
| 212 | +## Slack Integration |
| 213 | + |
| 214 | +### Mining #academy for Intel |
| 215 | + |
| 216 | +```bash |
| 217 | +# Get recent channel history |
| 218 | +slack_slack_get_channel_history(channel_id="C08UMBNDZ6G", limit=50) |
| 219 | + |
| 220 | +# Look up a user by ID |
| 221 | +slack_slack_get_user_profile(user_id="U...") |
| 222 | +``` |
| 223 | + |
| 224 | +### Slack URL Format |
| 225 | + |
| 226 | +Timestamp `1769114468.646389` → URL: `https://vercel.slack.com/archives/C08UMBNDZ6G/p1769114468646389` |
| 227 | + |
| 228 | +(Remove the dot from timestamp, prefix with `p`) |
| 229 | + |
| 230 | +### What to Extract from Slack |
| 231 | + |
| 232 | +- **Ship dates** - "we shipped X on [date]" |
| 233 | +- **Blockers** - "waiting on Y before we can..." |
| 234 | +- **Collaborator mentions** - who's working on what |
| 235 | +- **Target dates** - "aiming for [date]" |
| 236 | +- **Status updates** - progress, pivots, scope changes |
| 237 | + |
| 238 | +## Course Template |
| 239 | + |
| 240 | +```markdown |
| 241 | +## Overview |
| 242 | + |
| 243 | +[What is this course about?] |
| 244 | + |
| 245 | +## Target Audience |
| 246 | + |
| 247 | +[Who is this for? Skill level?] |
| 248 | + |
| 249 | +## Learning Outcomes |
| 250 | + |
| 251 | +By the end of this course, learners will: |
| 252 | + |
| 253 | +- [ ] Outcome 1 |
| 254 | +- [ ] Outcome 2 |
| 255 | +- [ ] Outcome 3 |
| 256 | + |
| 257 | +## Modules |
| 258 | + |
| 259 | +1. Module 1: [Title] |
| 260 | +2. Module 2: [Title] |
| 261 | +3. Module 3: [Title] |
| 262 | + |
| 263 | +## Prerequisites |
| 264 | + |
| 265 | +- [Required knowledge] |
| 266 | + |
| 267 | +## Timeline |
| 268 | + |
| 269 | +- [ ] Outline |
| 270 | +- [ ] Content draft |
| 271 | +- [ ] Review |
| 272 | +- [ ] Production |
| 273 | +- [ ] Launch |
| 274 | + |
| 275 | +## Links |
| 276 | + |
| 277 | +- Repo: [course repo] |
| 278 | +- Academy URL: vercel.com/academy/[slug] |
| 279 | +- Draft URL: vercel.com/academy/draft/[slug] |
| 280 | +``` |
| 281 | + |
| 282 | +## Workflows |
| 283 | + |
| 284 | +### Add to Content Calendar |
| 285 | + |
| 286 | +1. Create or find issue |
| 287 | +2. Add `DX Deliverable` label |
| 288 | +3. Set due date |
| 289 | +4. Issue appears in content calendar |
| 290 | + |
| 291 | +### Weekly Review |
| 292 | + |
| 293 | +``` |
| 294 | +# What's due this week |
| 295 | +linear_query_data(query="DX Deliverable issues due this week assigned to me") |
| 296 | +
|
| 297 | +# What's in progress |
| 298 | +linear_list_issues(assignee="me", state="In Progress") |
| 299 | +
|
| 300 | +# What's in review |
| 301 | +linear_list_issues(assignee="me", state="In Review") |
| 302 | +``` |
| 303 | + |
| 304 | +### New Course Workflow |
| 305 | + |
| 306 | +1. Create issue: `linear_create_issue(team="Education", title="...", labels=["Course", "DX Deliverable"])` |
| 307 | +2. Add to relevant project |
| 308 | +3. Set due date |
| 309 | +4. Move through: Backlog → Todo → In Progress → In Draft → In Review → Done |
| 310 | + |
| 311 | +## Tips |
| 312 | + |
| 313 | +- **DX Deliverable = content calendar** - always add this label for visibility |
| 314 | +- Use `linear_query_data` for complex date-based queries |
| 315 | +- Link Academy courses to their GitHub repos |
| 316 | +- Sub-issues work well for course modules |
| 317 | +- **Mine Slack regularly** - that's where real status lives |
| 318 | + |
| 319 | +## Legacy: Notion References (Deprecated) |
| 320 | + |
| 321 | +> **DO NOT USE NOTION for new work.** These references exist for historical context only. |
| 322 | +
|
| 323 | +### Old Notion Databases (Read-Only Reference) |
| 324 | + |
| 325 | +| Database | Collection ID | Notes | |
| 326 | +|----------|---------------|-------| |
| 327 | +| Academy Course Pipeline | `collection://292e06b0-59c4-80b3-93ea-000bdeff1d9e` | Migrated to Linear | |
| 328 | +| DX Deliverables | `collection://2b7e06b0-59c4-8041-bcad-000b4b0d5ab4` | Use Linear DX Deliverable label | |
| 329 | +| Campaign Planning | `collection://2bfe06b0-59c4-8006-91e1-000bdea543cb` | Migrated to Linear | |
0 commit comments