Commit Graph
9 Commits
Author SHA1 Message Date
tiennm99 8f4e1928d8 feat(tooling): run blog from Claude Code, OpenCode & Codex on shared engine
Extract newsletter scripts to a neutral scripts/newsletter/ engine and add
side-by-side support for all three AI coding tools off one source of truth.

- Move 9 scripts + substack config from .claude/skills/**/scripts to
  scripts/newsletter/ (history preserved); fix PROJECT_ROOT depth and
  cross-require/config paths; repoint all SKILL.md invocations
- Add canonical AGENTS.md; reduce CLAUDE.md to an @AGENTS.md import
- Add opencode.json (permissions, no MCP); skills auto-discovered in place
- Add codex/prompts/*.md (6 prompts) + copy installers (install.sh/.ps1)
- Add docs/multi-tool-usage.md (setup, per-tool invocation, teardown) + README pointer
2026-06-02 14:07:22 +07:00
tiennm99 eada44d407 refactor(skills): share Substack image helpers and harden URL dedup/routing
- extract isSubstackImage/substackImageUuid into shared url-utils
- route Substack images by host (handles f_auto/.avif/extensionless CDN URLs)
- replace grep-based duplicate check with boundary-aware pure-JS scan
- share one fetch budget across publications in deep sitemap crawl
- expand file-extension classification (avif/heic/mkv/pptx/etc.)
2026-05-30 20:13:27 +07:00
tiennm99 f40103fe82 feat(skills): add mt-add-image handler with Substack source lookup
Add the image handler in the meta-dispatch architecture. Given an image
URL it resolves a label and inserts it into the newsletter Bonus -> Images.

For Substack-hosted images, decode the S3 image UUID and find the source
post across configured publications (ByteByteGo by default): RSS feed first,
then a sitemap crawl up to ~3 months back. Label priority is figure caption,
then post title, then a user-typed name. Non-Substack images are best-effort
then ask. Publications are configurable and the skill offers to add a new one
when the user identifies it.

Wire mt-add-url to dispatch the image route to mt-add-image (previously a
fallback). Update the project skills list.
2026-05-30 16:55:47 +07:00
tiennm99 f5fa315ea1 feat(skills): split newsletter URL workflow into meta dispatcher + handlers
Add mt-add-url meta skill that classifies a URL and auto-dispatches to a
handler skill: articles to mt-add-post, YouTube links to the new
mt-add-video (Bonus -> Videos with a Vietnamese title + short summary).
Unsupported types (image, etc.) prompt the user to add or extend a skill;
image support is deferred to a future mt-add-image handler.

Shared logic (add-url.js router, url-utils.js, find-newsletter-number.js)
and a shared post-mechanics reference live under mt-add-url/. mt-add-post
is reduced to an article-only handler. add-url.js detects watch/youtu.be/
shorts, normalizes to the canonical watch URL, dedups by video id, and
fetches the title via oEmbed. checkDuplicate uses execFileSync (no shell).
2026-05-30 16:23:27 +07:00
tiennm99 ee8c127128 chore: migrate AGENTS.md to CLAUDE.md with tag-check-before-commit rule 2026-03-17 21:08:20 +07:00
tiennm99 32295dab6c feat(agents): merge all code agent rules into one AGENTS.md 2025-09-09 23:10:50 +07:00
tiennm99 6d397e45d3 Add Newsletter #51 post and update guidelines
Added the content and images for Newsletter #51, covering topics on advanced data structures, algorithm performance, AI-assisted coding, HTTP complexity, and building a neural embedding search engine. Updated CLAUDE.md to allow 6-7 tags per post and clarified tag selection guidelines. Adjusted .claude/settings.local.json MCP server settings.
2025-08-31 09:53:35 +07:00
tiennm99 f5aacf1f2f Add URL processing workflow and update permissions
Introduced detailed URL processing workflow and Vietnamese writing guidelines to CLAUDE.md for newsletter automation. Updated settings.local.json to allow general WebFetch and Bash(mkdir:*) permissions, replacing specific domain-based permissions.
2025-07-22 21:00:02 +07:00
tiennm99 7340490dc2 Create CLAUDE.md 2025-07-19 19:06:24 +07:00