This repository stores reusable launch playbooks, course messaging, outreach lists, copy banks, proof libraries, and social post research for DataTalks.Club courses.
Use it when preparing a new live cohort, refreshing course pages, writing newsletter, Slack, Telegram, YouTube, website, or GitHub copy, planning a launch campaign, or mining previous social posts for reusable patterns.
For a new cohort:
- Create or open a folder under
courses/campaigns/, for examplecourses/campaigns/ai-dev-tools-zoomcamp-2026/. - Copy the process templates from
courses/intocourses/campaigns/<course>-<year>/processes/if they are not already there. - Fill
courses/00-cohort-brief.mdor the campaign copy with the course, dates, registration target, campaign intensity, channels, events, and owners. - Use
courses/01-launch-checklist.mdto track asset updates, events, promotion tasks, and outreach. - Use
courses/02-course-launch-social-system.mdto choose campaign phases, post types, cadence, CTAs, and channel adaptations. - Fill
courses/02-campaign-calendar.csvor the campaign copy with the planned announcement schedule. Replace placeholders with course and campaign values. - Adapt the relevant course folder's
course.yaml,copy-bank/, andproof-library/assets into the campaign folder when the campaign needs cohort-specific versions. - Use
research/typefully/when you need examples of past course-promotion posts or a taxonomy for social post ideas. - After the cohort, complete
03-retrospective.mdso next year's launch has numbers, reusable proof, and lessons learned.
| Path | Purpose |
|---|---|
courses/00-cohort-brief.md |
Planning template for cohort basics, registration gap, channel decisions, event decisions, owners, and approval. |
courses/01-launch-checklist.md |
Execution checklist for asset updates, events, promotion, and outreach. |
courses/01-course-assets-map.md |
Cross-repository map of course assets, URLs, and launch destinations. |
courses/01-course-platform-setup.md |
Process for opening a cohort on the course management platform. |
courses/01-course-repo-cohort-setup.md |
Process for opening and archiving cohort material in the course repository. |
courses/02-course-launch-social-system.md |
Main social launch system: campaign phases, post types, cadence, channel adaptation, metrics, and reusable strategy. |
courses/02-campaign-calendar.csv |
Campaign calendar skeleton with relative timing, phase, platform, post type, CTA, needed assets, and status. |
courses/03-retrospective.md |
Post-cohort retrospective template for final numbers, best channels, best posts, repeated questions, and next-year improvements. |
courses/content-templates/ |
Shared placeholder-only channel templates populated from course and campaign sources. |
research/outreach/ |
Outreach lists for practitioners, communities, podcasts, and potential amplifiers. |
research/typefully/ |
Curated Typefully examples, export tooling, manifest, and social post taxonomy. |
courses/campaigns/ |
Cohort-specific campaign decisions and finished campaign assets. |
skills/ |
Canonical Codex workflows and their task-specific reference material, plus supporting scripts and assets. |
courses/*-zoomcamp/ |
Reusable course reference material, copy banks, proof libraries, and optional course assets. |
Each course folder keeps durable course facts and reusable launch assets close together.
Current course folders:
ai-dev-tools-zoomcamp/de-zoomcamp/llm-zoomcamp/ml-zoomcamp/mlops-zoomcamp/
Common structure:
| Path | Purpose |
|---|---|
course.yaml |
Structured source of truth for course metadata: URLs, cadence, delivery, prerequisites, audience, topics, tools, certificate rules, CTAs, and logistics. |
copy-bank/faq.md |
Reusable FAQ copy and objection-handling snippets. |
copy-bank/email/ |
Email copy and reusable newsletter/module-email templates. |
copy-bank/events/ |
Event descriptions such as pre-course workshops, launch sessions, and live Q&A sessions. |
copy-bank/website/ |
Website banner, landing page, and page-copy blocks where available. |
copy-bank/github/ |
GitHub README update blocks where available. |
copy-bank/youtube/ |
YouTube descriptions and pinned comment blocks where available. |
copy-bank/telegram/ |
Telegram pinned posts and module announcement templates. |
copy-bank/slack/ |
Slack-specific support nudges, discussion prompts, and moderator replies where available. |
copy-bank/social-media/ |
Reserved for course-specific social examples, exports, or drafts. |
course-assets/ |
Reserved for course-specific assets that support copy, pages, or campaigns. |
proof-library/testimonials.md |
Learner quotes and testimonials. |
proof-library/previous-cohorts-stats.md |
Registration, completion, certificate, GitHub, or cohort metrics. |
proof-library/student-projects.md |
Student project examples and portfolio proof. |
ai-dev-tools-zoomcamp/ is currently the most complete folder. In addition to the shared structure, it has:
positioning.md: positioning, audience fit, differentiation, claims to use, and claims to avoid.audience.md: learner segments and messaging angles.curriculum-and-outcomes.md: curriculum framing and learner outcomes.faq-and-objections.md: common objections and answer angles.copy-bank/README.md: channel map and positioning guardrails.- Fully drafted email, Telegram, and Slack support sequences.
- Owned-channel blocks for website banners, landing pages, GitHub README updates, and YouTube descriptions or pinned comments.
Use ai-dev-tools-zoomcamp/ as the reference implementation when deepening the copy banks for the other courses.
courses/campaigns/ stores campaign-specific decisions and assets. Use it for work tied to a particular course cohort, year, registration target, and launch calendar.
Current campaign workspaces:
courses/campaigns/ai-dev-tools-zoomcamp-2026/courses/campaigns/ml-zoomcamp-2026/
Typical structure:
| Path | Purpose |
|---|---|
courses/campaigns/<course>-<year>/course.yaml |
Cohort-specific overrides when durable course metadata is insufficient. |
courses/campaigns/<course>-<year>/positioning.md |
Campaign-specific positioning, claims, and exclusions. |
courses/campaigns/<course>-<year>/audience.md |
Audience segments and messaging angles for this cohort. |
courses/campaigns/<course>-<year>/curriculum-and-outcomes.md |
Campaign-specific curriculum and outcome framing. |
courses/campaigns/<course>-<year>/faq-and-objections.md |
Cohort-specific FAQ and objection handling. |
courses/campaigns/<course>-<year>/processes/ |
Cohort brief, checklist, campaign calendar, social system, and retrospective. |
courses/campaigns/<course>-<year>/copy-bank/ |
Cohort-specific final channel copy. |
courses/campaigns/<course>-<year>/proof-library/ |
Campaign-specific metrics, testimonials, and project proof. |
Keep reusable references and copy patterns in the course folder. Put cohort-specific edits, dates, URLs, and final campaign decisions in courses/campaigns/.
Start from courses/campaigns/<course>-<year>/processes/00-cohort-brief.md. If the campaign folder does not exist yet, create it from the process templates in courses/ and the relevant course folder.
The most important decision is whether this is a normal launch or an extra-push launch. Extra-push launches add channels such as alumni outreach, influencer outreach, partner posts, external newsletters, communities, podcasts, short clips, SEO, or paid distribution.
Once the brief is complete, use 01-launch-checklist.md to track execution. The checklist intentionally separates asset updates, events, promotion, and outreach so owners can work in parallel.
Use courses/01-course-platform-setup.md. Use the course management agent project (~/git/course-management-agent) to make the actual changes; the playbook covers the decisions.
Three things must exist before the campaign can promote anything:
- The course record on
courses.datatalks.club, with the cohort slug, start date, and certificate settings. - The registration campaign, which owns the public registration page and produces the registration link used in every piece of launch copy.
- The course outline: homeworks and projects with their deadlines. Homeworks are created closed and empty; questions are added later, per module.
Copy the previous cohort's outline and shift it rather than designing a new schedule. Keep the previous homework and project slugs. Deadlines are always Monday at 23:00 UTC. Record the confirmed schedule in the cohort brief, then use those dates when filling the campaign calendar.
Use 02-course-launch-social-system.md first to pick the launch shape. Then fill 02-campaign-calendar.csv in the campaign's processes/ folder.
The calendar columns are:
Date,Relative week,Relative date: timing.Phase: campaign phase such as foundation, awareness, consideration, launch, or urgency.Platform: channel or channel group.Post type: reusable social pattern.Typefully examples: example IDs from the Typefully research.Working title / angle: draft idea.Audience,Primary CTA,Assets needed: targeting and inputs.Why this belongs in this phase: strategy note.Status: planning state.
Keep the calendar as the coordination artifact. Drafts can live elsewhere, but every planned campaign item should have a row.
Use course.yaml as the structured source of truth before editing prose. Pull durable facts from it: URLs, start dates, duration, prerequisites, tools, module names, certificate rules, submission platform, Slack/Telegram links, and CTAs.
Every course reference file must follow courses/schema/course.schema.json. Validate all course files after editing:
scripts/validate_courses.rbShared files under courses/content-templates/ contain placeholders only. Resolve those placeholders from the target course's course.yaml; use campaign sources only for cohort-specific dates, deadlines, event links, and final campaign decisions.
If a campaign has its own courses/campaigns/<course>-<year>/course.yaml, use it only for cohort-specific overrides. Use courses/<course>/course.yaml and the reusable course folder for durable facts and copy patterns.
Use copy-bank/ for reusable copy:
- Put event descriptions in
copy-bank/events/, named so they sort by date:NN-YYYY-MM-DD-slug.mdin a campaign folder,NN-yyyy-mm-dd-slug.mdin a reusable course folder. - Keep recurring events in the reusable course folder: the launch session and the pre-course Q&A. Cohort-specific workshops belong in the campaign folder only.
- Index past workshops from
copy-bank/events/README.mdin the course folder, so the drafts stay findable after the campaign folder goes quiet. - Name the person running an event the Instructor, not the host.
- Put newsletter and module email copy in
copy-bank/email/. - Put Telegram announcements in
copy-bank/telegram/. - Put Slack support prompts in
copy-bank/slack/. - Put website and landing page blocks in
copy-bank/website/. - Put GitHub README snippets in
copy-bank/github/. - Put YouTube descriptions and pinned comments in
copy-bank/youtube/. - Put course FAQ and objection-handling copy in
copy-bank/faq.md.
Use placeholders such as {{ cohort_year }}, {{ registration_url }}, {{ module_number }}, and {{ module_title }} for values that change by cohort.
Use proof-library/ before making performance claims. Proof should come from:
previous-cohorts-stats.mdfor numbers.testimonials.mdfor learner quotes.student-projects.mdfor concrete learner output.
Prefer grounded claims over hype. If a claim needs a number or example, put the source in the proof library first.
After the cohort, fill in the campaign's 03-retrospective.md with final numbers, best-performing channels, best posts, best proof assets, repeated learner questions, and changes for next year. This is the input for the next launch brief.
The research/typefully/ folder stores Alexey social post research for posts that mention terms such as zoomcamp or free course.
Important files:
| Path | Purpose |
|---|---|
research/typefully/README.md |
Detailed export instructions. |
research/typefully/manifest.json |
Latest curated export summary and file pointers. |
research/typefully/typefully-examples.json |
Curated normalized examples from the export. |
research/typefully/typefully-examples.csv |
Spreadsheet-friendly version of the examples. |
research/typefully/typefully-examples.md |
Human-readable post digest. |
research/typefully/post-type-taxonomy.md |
Human-readable taxonomy for reusable course social post types. |
research/typefully/post-type-taxonomy.json |
Machine-readable taxonomy. |
research/typefully/post-type-taxonomy-analysis.md |
Notes and analysis behind the taxonomy. |
Run the exporter from the repo root. Use --output-dir typefully when refreshing the central research snapshot:
TYPEFULLY_API_KEY=... python3 research/typefully/scripts/download_posts.py \
--social-set-name-match alexey \
--limit 50 \
--hydrate-details \
--output-dir research/typefullyThe script defaults to research/typefully/. Raw and timestamped filtered exports are ignored; promote reviewed outputs to the curated example files when they should be shared.
Do not commit or store Typefully API keys in this repository.
Use research/outreach/influencers.csv and research/outreach/podcasts.csv when the cohort brief selects extra outreach.
Typical workflow:
- Filter for the course topic and audience fit.
- Decide the outreach angle from
course.yaml,positioning.md, or the copy bank. - Track planned outreach separately or add campaign moments to
02-campaign-calendar.csv. - Record reusable outcomes or proof in the relevant course folder.
The skills/ folder is the canonical source for Codex behavior and reusable writing guidance in this repository. Each skill keeps routing and essential constraints in SKILL.md; substantial style, audience, channel, format, and domain guidance belongs in that skill's references/ folder.
skills/social-content-studio/: Alexey's social voice, audience, examples, structured post creation, and export workflows.skills/newsletter-editor/: AI Shipping Blog voice and editing guidance for Alexey's newsletter.skills/datatalks-event-promotion/: DataTalks.Club event campaign strategy, audience, channel, owner, and platform guidance.skills/alexey-carousel-generator/: social carousel and resource-image rendering workflows.skills/transcript-post-miner/: transcript analysis for post ideas and clip recommendations.skills/video-clip-cutter/: ffmpeg-based clip cutting from timestamp manifests.skills/.system/: team-shared system skills intentionally versioned so collaborators receive the same GitHub-distributed skill set.
Do not maintain parallel copies of skill references under a general documents/ folder. Update the owning skill reference directly. When guidance belongs to more than one skill, keep each skill operationally self-contained and make the ownership boundary explicit in its SKILL.md; avoid a second human-document mirror that can drift independently.
Course and campaign material has different ownership:
| Information | Canonical location |
|---|---|
| Skill workflow and routing | skills/<skill>/SKILL.md |
| Style, audience, channel, format, and domain rules used by a skill | skills/<skill>/references/ |
| Deterministic automation | skills/<skill>/scripts/ |
| Durable course facts | courses/<course>/course.yaml and adjacent course files |
| Reusable course copy | courses/<course>/copy-bank/ |
| Cohort-specific decisions and copy | courses/campaigns/<course>-<year>/ |
| Generated working artifacts | content-runs/ or the user-requested output folder |
Examples and templates belong with the narrowest owner that uses them. A style example used only to calibrate Alexey's social posts belongs in skills/social-content-studio/references/; a reusable course announcement belongs in the relevant course copy bank.
- Treat
skills/<skill>/references/as the source of truth for guidance consumed by that skill. - Do not recreate a top-level
documents/mirror of skill references. - Route conditional references from
SKILL.mdand load only the references needed for the current deliverable. - Keep durable course facts in
course.yaml. - Keep reusable launch copy in
copy-bank/. - Keep proof points in
proof-library/. - Keep reusable planning templates in
courses/and reusable channel templates incourses/content-templates/. - Keep campaign execution in
courses/campaigns/<course>-<year>/. - Use placeholders for cohort-specific values.
- Avoid secrets in the repository, especially API keys.
- Preserve source links for stats, testimonials, and examples whenever possible.
- Prefer concrete learner outcomes, project examples, dates, and logistics over vague promotional language.