Build DataTalksClub/dataops as the single operations portal for
DataTalks.Club.
The first milestone is a code and process merge, not a full product rewrite. The repo should bring the existing systems under one roof, keep them runnable, and create clear integration points.
Source systems:
../dtc-operations: process docs, SOP editor, search, Lambda docs app../datatasks: task execution engine, templates, bundles, recurring work../podcast-assistant: Telegram intake and AI drafting for podcast prep
The merged portal will have these top-level areas:
Home: today, overdue, active workflows, inbox, assistant jobsWork: tasks, bundles, workflows, recurring work, assignmentsProcesses: SOPs, templates, references, playbooks, prompts, lint statusAssistants: podcast assistant first, later process-doc and newsletter helpersArtifacts: files, generated docs, event links, transcripts, invoices, reportsSearch: one search across work, process docs, artifacts, and assistant outputAdmin: users, integrations, imports, secrets, diagnostics
Use this target structure after the merge:
dataops/
_docs/ repo process, architecture, merge notes
.claude/agents/ role-agent instructions for the issue pipeline
content/ DataTalks.Club process docs from dtc-operations
frontend/ shared portal frontend
backend/ Python backend copied from dtc-operations Lambda app
work-engine/ DataTasks TypeScript task engine during transition
assistants/
podcast/ podcast-assistant code and prompts
scripts/ import, migration, lint, dev tooling
tests/ cross-system tests
playwright_tests/ portal E2E tests
Transition rule:
- Keep source systems mostly intact at first.
- Integrate through APIs and explicit import/sync scripts.
- Refactor only after one workflow runs end to end in the merged repo.
Superseded -- TypeScript is the consolidated backend. The analysis below
was the original merge-period direction; it was reversed in favor of one
TypeScript backend (see _docs/TARGET_ARCHITECTURE.md for the decision and
rationale). The Python docs/SOP/search backend has been retired; its
content-validation tooling lives in tools/content_tools/.
Original direction (historical context):
- Use Python as the long-term portal backend.
- The
dtc-operationsdocs Lambda,podcast-assistant, and process-doc parsing/linting are already Python. - Python was a better fit for assistant jobs, document parsing, transcription, and background processing.
Why this was reversed:
- The work engine (the larger, stateful, actively-developed core) is TypeScript.
- The Python backend's only runtime third-party deps were
minsearchandpython-frontmatter, both with drop-in Node equivalents. minsearchpulled inscikit-learn+numpy+scipy+pandas-- the single largest contributor to Lambda package size and cold-start latency.- Replacing it with
zerosearch-node(zero-dependency BM25-lite) both removes the heavy scientific-Python stack and gives the lighter Lambda.
Current state: backend/ is the single TypeScript backend. The only remaining
Python is the podcast assistant worker and the content-validation CI tools.
Use the existing dtc-operations vanilla JavaScript frontend as the first portal
shell.
Reasons:
- It already has docs navigation, search, filters, editor, drafts, lint status, image upload, keyboard shortcuts, and mobile layout.
- It avoids a framework rewrite before the merge proves the product model.
Do not introduce React or another frontend framework in the merge milestone.
Use separate stores for separate truth:
- GitHub markdown is the source of truth for process knowledge.
- DynamoDB stores execution state: users, tasks, bundles, workflows, recurring work, assistant jobs, artifacts, sessions, and notifications.
- S3 or GitHub stores generated files depending on the artifact type.
- Lambda
/tmpremains cache only, not durable storage.
Superseded -- search now uses zerosearch-node (zero-dependency
BM25-lite). The original minsearch (TF-IDF via scikit-learn) has been
retired; see _docs/TARGET_ARCHITECTURE.md.
Original direction (historical context):
Then add indexed records for:
- workflows
- task templates
- active bundles
- tasks
- artifacts
- assistant outputs
Keep the dtc-operations Lambda deployment model for the first merge.
Required paths:
- Content-only changes validate docs and refresh the deployed index.
- Code changes run backend, frontend, and Playwright tests before deploy.
- Assistant jobs can run locally first, then move to a Lambda, container, or queued worker once the portal job model is stable.
Use both ecosystems during transition:
- Python:
uv - Node/TypeScript:
npm
Add one top-level Makefile later to wrap common commands.
Outcome: DataTalksClub/dataops is ready for issue-driven work.
Tasks:
- Create public GitHub repo.
- Add planning docs.
- Add
_docs/PROCESS.md. - Add role-agent instructions.
- Add labels for the GitHub issue pipeline.
- File initial merge issues.
Outcome: the process-doc portal runs from dataops.
Tasks:
- Copy
content/,frontend/,lambda-functions/,scripts/,templates/, and docs-app tests from../dtc-operations. - Preserve commit history only if we decide it is worth the added merge
complexity. Otherwise record the source commit in
_docs/import-log.md. - Rename
lambda-functions/tobackend/after import, or leave it in place until tests pass. - Keep docs search, editor, lint, image handling, and GitHub-backed save working.
- Update repo names and deployment configuration from
dtc-operationstodataops.
Validation:
- Local docs app starts.
- Search works.
- SOP lint still runs.
- A document can be edited and saved in local mode.
Outcome: task execution code lives in the merged repo and still runs.
Tasks:
- Copy DataTasks into
work-engine/. - Keep its TypeScript build, tests, and Playwright tests passing from that subdirectory.
- Add an adapter contract between portal backend and work engine.
- Expose tasks, templates, bundles, recurring configs, users, files, and notifications as portal concepts.
- Add
instructionDocId,instructionStepId,phase,systems, and required artifact fields to the task/template model.
Validation:
npm test,npm run typecheck, and focused Playwright tests pass inwork-engine/.- A task can link to a process doc by ID.
- A bundle can show related process docs.
Outcome: podcast-assistant is a portal assistant module.
Tasks:
- Copy local
../podcast-assistantintoassistants/podcast/. - Keep its tests passing with
uv. - Replace local-only
documents/output with portal artifact records. - Add assistant job records: queued, running, needs review, done, failed.
- Keep Telegram intake.
- Add a portal screen for inbox, job logs, generated draft review, and approval.
Validation:
- Telegram or local input can create a podcast assistant inbox item.
- The assistant can draft a podcast prep document.
- A reviewed draft becomes a
podcast-docartifact.
Outcome: one real workflow runs across docs, tasks, artifacts, and assistant output.
Use Podcast first.
Tasks:
- Add stable IDs to priority podcast SOPs and templates.
- Define the Podcast workflow from the DataTasks/Trello template.
- Link each workflow task to a process doc or template.
- Preserve operator-flow links through stable IDs, with external assistant process references called out until the content registry supports them.
- Add required artifacts: podcast doc, Luma link, Meetup link, YouTube link, transcript, Spotify link, Apple link, DTC webpage link.
- Add stages: prep, announced, live, post-production, published, follow-up, done.
- Add Playwright coverage for the operator flow.
Validation:
- Create Podcast bundle.
- Generate tasks.
- Open a task and jump to its SOP.
- Run podcast assistant.
- Approve generated podcast doc.
- Attach artifact to bundle.
- Complete required-link tasks only after outputs exist.
Outcome: the portal has one backend implementation for work and docs.
Tasks:
- Move task execution from TypeScript into Python only after the first workflow proves the model.
- Migrate DataTasks data access to the portal backend.
- Retire
work-engine/when parity tests pass.
Do not start this phase before Phase 4 succeeds.
Create these as the first issues in DataTalksClub/dataops:
- Set up process docs and role-agent workflow.
- Import DTC Operations into
dataops. - Keep DTC Operations docs app running from merged repo.
- Import DataTasks into
work-engine/. - Add document registry IDs and resolver.
- Add task-to-process-doc links.
- Import Podcast Assistant into
assistants/podcast/. - Define Podcast workflow.
- Build Podcast end-to-end slice.
- Add first portal dashboard.
Use dtc-operations as the base app during the merge because it already owns
the process docs and portal-like frontend.
Use DataTalksClub/dataops as the new public repo.
Use GitHub Issues in DataTalksClub/dataops.
The orchestrator files raw issues from user input. The user does not need to write issue specs manually.
Use Podcast as the first real workflow because it touches all three source systems.