diff --git a/.astro/types.d.ts b/.astro/types.d.ts index 03d7cc4..f964fe0 100644 --- a/.astro/types.d.ts +++ b/.astro/types.d.ts @@ -1,2 +1 @@ /// -/// \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7910e27..3cdd618 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,7 @@ dist/ # Local Claude settings .claude/ node_modules/ + +# Dev artifacts +.playwright-mcp/ +.superdesign/ diff --git a/CLAUDE.md b/CLAUDE.md index db12f44..b69345d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,203 +1,57 @@ # Channel 47 Site -Astro 5 → channel47.dev via Vercel. Static output + one serverless endpoint (`api/subscribe.ts`). +Astro 5 → channel47.dev via Vercel. Single-page landing with hero card and email capture. + +## What Exists + +- `src/pages/index.astro` — hero card landing page (dark card on cream, 2-column grid, email capture) +- `src/pages/api/subscribe.ts` — Kit email subscription endpoint (server-side, requires `KIT_API_KEY`) +- `src/components/EmailSignup.astro` — reusable email form (inline, default, prominent variants) +- `src/components/LogoAnimated.astro` — animated "47" logo with scramble → lock-in effect +- `src/layouts/BaseLayout.astro` — HTML shell (meta, fonts, structured data, scroll reveal) +- `src/styles/main.css` — design system (tokens, component CSS, keyframes, scroll reveal) +- `src/scripts/scroll-reveal.ts` — IntersectionObserver: `[data-reveal]`, `[data-reveal-stagger]`, `[data-counter]` +- `src/scripts/nav-scroll.ts` — hide/show nav on scroll (targets `[data-nav]`, ready for Nav component) + +## Design System (main.css) + +- Light-first. Body + Headlines: Geist. Mono: Geist Mono. Accent: amber `#fcaa2d`. +- Warm gray neutrals (not pure gray). `--color-bg: #fffef2`. +- Dark panel surface: `--color-panel: #18181a` with rgba white overlay scale: + - `--color-panel-fg` (0.85), `--color-panel-fg-muted` (0.6), `--color-panel-fg-dim` (0.5) + - `--color-panel-dim` (0.35), `--color-panel-tint` (0.05), `--color-panel-tint-hover` (0.08) + - `--color-panel-divider` (0.10), `--color-panel-border` (0.15) +- Light surface tokens: `--color-fg`, `--color-fg-muted`, `--color-fg-dim`, `--color-border`, `--color-surface`, `--color-surface-raised` +- Component patterns in `@layer components`: + - `.btn` (--primary, --secondary, --ghost) + sizes (--sm, --lg) + - `.badge` (--default, --primary, --success, --destructive) + - `.card` (default + --flat) + - `.label` (+ --muted) + - `.code` (inline), `.code-block` (+ `__header`) + - `.divider` (+ --panel) + - `.email-signup`, `.email-form` (inline), `.email-signup--default`, `.email-signup--prominent` +- Scroll reveal: `[data-reveal]`, `[data-reveal-child]`, `[data-reveal-stagger]`, `[data-stagger="1-4"]` +- Brand reference page: `/brand` (noindex, excluded from sitemap) ## Commands ```bash npm run dev # localhost:4321+ npm run build -npm run preview # Preview build output locally -npm test # node --test +npm run preview ``` -Tests use `node:test` (no framework). Test files in `tests/`. - -## Strategy Docs - -- `.claude/product-marketing-context.md` — single source of truth for positioning, competitive landscape, audience, differentiation, messaging, voice, proof points, metrics - ## Environment -`KIT_API_KEY` required for subscribe endpoint. `PUBLIC_GA_*` / `PUBLIC_META_*` for analytics. - -## Plugins (current state) - -Install commands: -- Marketplace: `claude plugin marketplace add channel47` (homepage hero CTA) -- Individual: `claude plugin install google-ads@channel47` (plugin detail pages) - -Three live plugins, one deprecated: - -| Plugin | Status | Workflows | Content file | -|--------|--------|----------:|-------------| -| google-ads | Live v1.0.0 | 9 | `src/content/tools/plugins/google-ads.md` | -| microsoft-ads | Live v1.0.0 | 8 | `src/content/tools/plugins/microsoft-ads.md` | -| meta-ads | Live v1.0.0 | 9 + 2 agents | `src/content/tools/plugins/meta-ads.md` | -| paid-search | Deprecated (frozen v7.0.0) | 6 | `src/content/tools/plugins/paid-search.md` | -| frontend-craft | Not marketed | — | `src/content/tools/plugins/frontend-craft.md` | - - -## Pages - -- `/` — Homepage: "Claude plugins for paid media" (hero with marketplace install CTA + proof bar + plugin directory + credibility + workshop + FAQ + rupture + product callout + CTA) -- `/plugins/` — Plugins hub — filtered listing of featured plugins (excludes deprecated/unmarketable). Targets "claude code plugins", "claude plugin marketplace" -- `/plugins/[slug]` — Plugin detail page with rendered markdown body, schema (SoftwareApplication + BreadcrumbList + HowTo) -- `/guides/` — Guides hub — SEO content hub for practitioner guides. Targets "google ads ai tool", "ai ppc management" -- `/guides/[slug]` — Individual guide articles (Article + BreadcrumbList schema). Categories: setup, workflow, comparison, overview -- `/notes` — Build Notes hub (content collection index, newsletter community content) -- `/notes/[slug]` — Individual note articles (Article + BreadcrumbList schema) -- `/labs` — Skills Labs landing page (monthly live builds → Skool community) -- `/subscribe` — Email signup standalone page -- `/privacy` — Privacy policy -- `/coming-soon` — Shared empty state with email signup -- `/skills/` — 301 redirect to `/plugins` -- `/skills/[slug]` — Skill detail page (legacy, still live for direct links, excluded from sitemap) -- `/mcps/` — 301 redirect to `/plugins` -- `/mcps/[slug]` — MCP detail page (legacy, still live for direct links, excluded from sitemap) -- `/build`, `/tools`, `/ecosystem`, `/hire` — 301 redirects to `/` -- `/api/subscribe` — POST, proxies to Kit API - -## Content Sections - -| Section | Purpose | SEO role | -|---------|---------|----------| -| `/plugins/` | Product hub — the plugins | Targets "claude code plugins", "claude plugin marketplace" | -| `/guides/` | SEO content hub — keyword-targeted how-to guides | Captures search intent: setup, workflows, comparisons | -| `/notes/` | Community content — Build Notes newsletter | Community/newsletter, not SEO-optimized | - -### Guides content collection - -Guides live in `src/content/guides/`. Schema: title, description, date, updated, category (setup/workflow/comparison/overview), plugin (optional related plugin slug), featured, draft. Guide detail pages reuse the article layout pattern from notes with reading progress bar. - -**Phase 1 guides (live):** -- `claude-for-ppc.md` — Pillar page. Targets "claude for google ads", "ai ppc management" -- `connect-google-ads-to-claude.md` — Setup guide. Targets "connect google ads to claude", "google ads mcp claude" -- `morning-brief-workflow.md` — Workflow guide. Targets "google ads morning brief" - -**Phase 2 guides (planned):** -- `waste-detection-google-ads.md` — Workflow guide -- `search-term-analysis.md` — Workflow guide -- `claude-prompts-google-ads.md` — Competes with Adspirer's blog post (they rank #16) -- `connect-meta-ads-to-claude.md` — Setup guide -- `connect-microsoft-ads-to-claude.md` — Setup guide - -**Phase 3 guides (planned):** -- `best-ai-tools-google-ads.md` — Listicle/comparison -- `ai-ppc-management.md` — Broad category guide - -## Navigation - -Header: Plugins · Guides · Notes · Labs · Subscribe -Footer: Plugins · Guides · Notes · Labs · Privacy · jackson attribution +`KIT_API_KEY` for subscribe endpoint. -## Sitemap - -16 URLs in sitemap. Excluded via `astro.config.mjs` filter: `/skills/*`, `/mcps/*`, `/tools/*`, `/plugins/paid-search`, `/plugins/frontend-craft`, `/coming-soon`, redirect pages. - -## Key Files - -``` -src/ -├── layouts/ -│ └── BaseLayout.astro # Root layout (meta, fonts, schema, scroll reveal) -├── pages/ -│ ├── index.astro # Homepage -│ ├── plugins/index.astro # Plugins hub — filtered listing (featured only) -│ ├── plugins/[slug].astro # Plugin detail (renders Content via slot) -│ ├── guides/index.astro # Guides hub — SEO content listing -│ ├── guides/[...slug].astro # Guide detail (article layout with reading progress) -│ ├── skills/[slug].astro # Skill detail (legacy, renders Content via slot) -│ ├── mcps/[slug].astro # MCP detail (legacy, renders Content via slot) -│ ├── notes/index.astro # Build Notes hub -│ ├── notes/[...slug].astro # Article page -│ ├── labs.astro # Skills Labs -│ ├── subscribe.astro # Email signup -│ ├── privacy.astro # Privacy policy -│ ├── coming-soon.astro # Empty state -│ └── api/subscribe.ts # Kit API proxy (serverless) -├── components/ -│ ├── Nav.astro # Fixed glass nav (Plugins · Guides · Notes · Labs · Subscribe) -│ ├── Footer.astro # Plugins · Guides · Notes · Labs · Privacy + attribution -│ ├── Breadcrumbs.astro # Breadcrumb navigation -│ ├── EmailSignup.astro # Email capture form (JS state handling) -│ ├── ContentCard.astro # Note card for grid -│ ├── ToolCard.astro # Full-width tool row -│ ├── ToolDetail.astro # Tool detail layout with slot for markdown body + prose styles -│ ├── ProductCallout.astro # PaidBrief callout card -│ ├── LogoAnimated.astro # Animated channel47 logo -│ ├── ui/button.tsx # shadcn/ui Button (React) -│ └── ui/input.tsx # shadcn/ui Input (React) -├── content/ -│ ├── guides/ # Practitioner guides (markdown, `guides` collection — SEO content) -│ ├── notes/ # Published notes (markdown, `notes` collection — newsletter content) -│ ├── tools/ # Tool registry (markdown with YAML frontmatter, `tools` collection) -│ │ ├── plugins/ # google-ads, microsoft-ads, meta-ads, paid-search, frontend-craft -│ │ ├── skills/ # morning-brief, waste-detector, search-term-verdict, pmax-decoder, platform-setup, gaql -│ │ └── mcps/ # google-ads-mcp, bing-ads-mcp -│ └── newsletters/ # Newsletter drafts (markdown) -├── styles/ -│ └── main.css # Tailwind v4 @theme tokens, @layer components, keyframes -└── scripts/ - ├── scroll-reveal.ts # IntersectionObserver scroll reveal - ├── nav-scroll.ts # Nav hide-on-scroll behavior - └── copy-to-clipboard.ts # Copy button utility -``` - -## Schema (structured data) - -BaseLayout accepts a `schema` prop → renders JSON-LD. Currently deployed: -- **Homepage**: Organization + WebSite + FAQPage -- **Plugin detail pages**: SoftwareApplication + BreadcrumbList + HowTo -- **Plugins hub**: BreadcrumbList + ItemList -- **Guides hub**: BreadcrumbList + ItemList -- **Guide articles**: Article + BreadcrumbList -- **Notes articles**: Article + BreadcrumbList - -## Subscribe API - -`POST /api/subscribe` proxies to Kit. Accepts JSON or form-encoded. - -- `email` (required) — subscriber email -- `tag` (optional) — applies a Kit tag prefixed `ch47-` (e.g., `"home"` → `ch47-home`) -- `fields` (optional) — custom Kit fields. Allowed keys: `name`, `scope`, `brief`, `budget`, `build_role`, `build_task`, `build_tool` - -## CSS - -Tailwind CSS v4 via `@tailwindcss/vite`. Single entry point: `src/styles/main.css`. - -- `@theme` block defines the design token system: warm gray scale, amber accent, font families, radius, animations -- `@layer components` for shared patterns: `.label`, `.wrap`, `.prose`, `.hero`, `.stats`, `.cta`, `.accent-bar` -- Scoped ` - - - - - -
-
- 047 LIVE SESSION - ~75 MIN + Q&A -
-

- AI Skills:
Teach AI How You Work -

-

- So you stop repeating yourself. -

-
- Jackson - - @ctrlswing - - -
-
- - - - -
-
-

"I'm not an expert."

-

- This stuff is months old. Nobody's an expert yet. But I've been building - with it daily. I'll show you what's been working for me. -

-

BUILDER, NOT PROFESSOR

-
- - - - -
-
- RUN OF SHOW -
-

- What We'll Cover -

-
-
- ~10 min - The Ecosystem -
-
- ~15 min - What Skills Are -
-
- ~15 min - Building a Skill -
-
- ~25 min - Live Demos -
-
- ~5 min - Safety + Resources -
-
- ~5 min - Your Takeaway -
-
-
- - - - -
-
- SECTION 01 -
-
01
-
The Ecosystem
-
Different tools for different jobs.
-
- - - - -
-
- 005 ECOSYSTEM -
-

- Three Tools, Three Jobs -

-
-
-
MCP Servers
-
- CONNECTORS -
-
- The wiring. Connects AI to external data and tools. -
-
- Think of it as the power outlets in the room. -
-
-
-
Sub-Agents
-
THE TEAM
-
- AI delegating tasks to other AI. A project manager assigning work. -
-
- Think of it as a PM distributing tasks. -
-
-
-
Skills
-
- THE PLAYBOOK -
-
- Instructions that tell AI how to do a specific job, step by step, - every time. -
-
- Think of it as your best SOP, written for AI. -
-
-
-
- MCP is the wiring. Sub-agents are the team. Skills are the playbook. -
-

- Skills range from a simple SKILL.md to full packages with reference - files, scripts, and API calls. Slash commands are the older pattern — - they're being merged into skills. -

-
- - - - -
-
- 006 TIMELINE -
-

- How Recent Is All of This? -

-
-
-
-
Jun 2024
-
Artifacts
-
-
-
-
Oct 2024
-
Computer Use
-
-
-
-
Nov 2024
-
MCP Protocol
-
-
-
-
Feb 2025
-
Claude Code
-
-
-
-
Oct 2025
-
- Skills launch -
-
-
-
-
Dec 2025
-
- Skills become open standard -
-
-
-
- Eighteen months ago, none of this existed. -
-
- - - - -
-
- 007 ADOPTION -
-

- This Spread Fast -

-
- Claude Desktop - Claude Code - Cursor - Codex - Cline - Manus - + more -
-

- Anthropic released skills in October. By December, open standard. Same - pattern as MCP. -

-
What you learn today works across tools.
-
- - - - -
-
- SECTION 02 -
-
02
-
What Skills Are
-
The 60-second version.
-
- - - - -
-
- 009 DEFINITION -
-

- Skills in 60 Seconds -

-

- A skill is a markdown file with instructions AI follows. That's it. - One file is all you need to start. -

-
-my-skill/ -├── SKILL.md # Required -├── scripts/ # Optional — runnable code -├── references/ # Optional — docs, guides -└── assets/ # Optional — templates
-

- Start with just SKILL.md. Add the rest as you grow. -

-
- - - - -
-
- 010 EXAMPLE -
-

- What a SKILL.md Looks Like -

-

- The frontmatter is what AI reads first. The body is what it follows. -

-
---- -name: Google Search Campaign Architect -description: | - Generates a full Google Ads search campaign - from a landing page URL. Use when user says - "build a campaign" or "Google Ads". ---- - -# Instructions - -## Input -- Landing page URL (required) -- Monthly budget (optional) - -## Steps -1. Fetch and analyze the landing page -2. Extract value props, audience, proof points -3. Build keyword groups with match types -4. Write headlines + descriptions per ad group -5. Add negative keywords and extensions - -## Output -- Full campaign brief with ad group structure -- Copy-paste ready for Google Ads
-
-
- Frontmatter — name + - description. This is what AI scans to decide if the skill matches. -
-
- Body — the actual - instructions. Only loaded when the skill is triggered. -
-
-
- - - - -
-
- 011 HOW IT WORKS -
-

- How Skills Actually Work -

-

- Skills load in three levels. Not everything at once. -

-
-
-
01
-
- YAML Frontmatter -
-
Name + description. Always loaded.
-
-
-
02
-
SKILL.md Body
-
Full instructions. Loaded on match.
-
-
-
03
-
Linked Files
-
Scripts, references. Loaded on demand.
-
-
-
- You can have 20+ skills enabled. Claude only loads what it needs, when - it needs it. -
-
- - - - -
-
- 012 THE KEY -
-

- The Description Makes or Breaks It -

-

- The description is what Claude reads to decide whether to load your - skill. Get this right and it auto-triggers. Get it wrong and it sits - there unused. -

- -
- [What it does] + [When to use it] + [Key capabilities] -
- -
-
-
- BAD -
-
"Generates Google Ads campaigns."
-
-
-
- GOOD -
-
- "Generates a full Google Ads search campaign from a landing page - URL. Use when user says 'build a campaign' or 'Google Ads'." -
-
-
-

- Keep the SKILL.md body concise. Under 5,000 words. Move detailed docs to - references/. -

-
- - - - - -
-
-
- 013 PERSONAL vs. - GENERIC -
-

- The Best Skills Are Personal -

- -
-
-
- GENERIC -
-
- "Write Google Ads copy." -
-
-
-
- PERSONAL -
-
- "Write Google Ads copy for my SaaS product that targets mid-market - CFOs, uses our specific value props, avoids competitor terms we've - tested, and follows our brand voice." -
-
-
- -
-
- Your brand voice -
-
- Your audience -
-
- Your positioning -
-
- -
- The most useful skills aren't templates. They're your playbook. -
-
- - - - -
-
- 014 CLARITY -
-

- What Skills Are NOT -

-
-
-
- Not integrations -
-
That's MCP. Skills are pure instructions.
-
-
-
- Not AI managing AI -
-
- That's sub-agents. Skills are the playbook, not the org chart. -
-
-
-
- Not saved prompts -
-
- Prompts vanish after one chat. Skills persist and improve. -
-
-
-
- Not autopilot -
-
- Skills guide the work. You still judge the output. -
-
-
-
A skill is a playbook, not the player.
-
- - - - -
-
- SECTION 03 -
-
03
-
Building Skills
-
Let's make one together.
-
- - - - -
-
- 016 FILTERS -
-

- What Makes a Good Skill? -

-
-
-
- Repeatable -
-
- You do it more than once. -
-
-
-
- Explainable -
-
- You could explain it to a sharp colleague. -
-
-
-
- Contained -
-
- Clear start. Clear end. -
-
-
-

- If you can describe it in plain language, you can turn it into a skill. -

-
- - - - -
-
- 017 LIVE ~15 MIN -
-

Let's Build It

-
-
-
01
-
Describe what we want
-
-
-
02
-
Claude drafts the SKILL.md
-
-
-
03
-
We refine the instructions
-
-
-
04
-
Test it on a real example
-
-
-

- Open Claude → Settings → Capabilities → Skill Creator - → Try in chat -

-
- - - - -
-
-

That's a skill.

-

- Started with an idea from the room. Described it in plain language. - Claude wrote the instructions. We tested it. -

-

- No code. No config. Just words. -

-
- - - - -
-
- 018 ITERATE -
-

- Skills Improve With Use -

-

- A skill isn't finished when you ship it. Watch for two signals, then - adjust. -

-
-
-
- UNDERTRIGGERING -
-
- Skill doesn't load when it should -
-
- Users have to manually enable it. You keep getting asked "when do I - use this?" -
-
- Fix: Add more trigger phrases and detail to the description. -
-
-
-
- OVERTRIGGERING -
-
- Skill loads when it shouldn't -
-
- Fires on unrelated queries. Users start disabling it. -
-
- Fix: Be more specific. Add negative triggers — "Do NOT use for X." -
-
-
-
- Every skill you build gets better over time. Ship it, watch it, refine - it. -
-
- - - - -
-
- SECTION 04 -
-
04
-
Live Demos
-
Three real workflows you can steal.
-
- - - - -
-
- 020 DEMOS -
-

- What We're Demoing -

-
-
-
- 01 - Search Campaign Architect -
-
-
- Claude Desktop · Live Build -
-
- I run Google Ads at my day job. This skill builds full campaigns - from a URL. -
-
-
-
-
- 02 - Branded HTML Email -
-
-
- Claude Desktop · Live Build -
-
- I have a side business in maintenance mode. This skill keeps - emails on-brand without me. -
-
-
-
-
- 03 - Ad Creative Refresher -
-
-
- Claude Code + Nano Banana Pro -
-
- My coworkers run static ads. This skill generates fresh variations - of winners. -
-
-
-
-
- - - - -
-
- DEMO 01 LIVE BUILD -
-

- Google Search Campaign Architect -

-

- I rebuild Google Ads campaigns every week at work. This skill takes a - URL and drafts the whole thing — copy-paste ready into Google Ads. -

-
- First-draft builder, not an autonomous ad buyer. General skill, - transferrable across orgs. -
- Run Skill in Claude → -
- - - - -
-
- DEMO 02 LIVE BUILD -
-

- Branded HTML Email Generator -

-

- I have a side business but no time to write emails. This skill holds my - brand voice, colors, and copy rules — topic in, finished email out. -

-
- This skill holds everything about my business. Brand voice, colors, - layout, copy rules. This is what "personal skills" look like. -
- Run Skill in Claude → -
- - - - -
-
- DEMO 03 CLAUDE CODE + NANO BANANA PRO -
-

- Ad Creative Refresher -

-

- My coworkers run static ads and constantly need fresh variations of - winners. This skill handles the creative logic — Claude Code + Nano - Banana Pro (Gemini image generation). -

-

- Requires Gemini API key. Free tier available. -

-
- Claude Code handles the creative logic. Nano Banana Pro generates the - images. You bring the winning ad. -
-
- - - - -
-
- 024 REMIX -
-

- The Remix Mindset -

-

- You don't need to start from scratch. Clone, study, adapt. The fastest - path. -

-
-
-
01
-
Open a public skill repo
-
-
-
02
-
Read the name and description
-
-
-
03
-
Skim the steps
-
-
-
04
-
Identify inputs and outputs
-
-
-
05
-
Keep structure, swap your domain
-
-
-
06
-
Test with normal and edge-case prompts
-
-
- SEE A REMIX IN ACTION → -
- - - - -
-
- SECTION 05 -
-
05
-
Safety + Resources
-
Treat skills like software installs.
-
- - - - -
-
- 026 SAFETY -
-

- Safety Checklist -

-
-
-
-
- Read the full instructions before running. -
-
-
-
-
- Watch for hidden scripts or broad permissions. -
-
-
-
-
- Check who published it and when. -
-
-
-
-
- Test in a safe environment first. -
-
-
-
-
- If something feels off, don't install it. -
-
-
-
- - - - -
-
- 027 TRUST TIERS -
-

- Where to Find Skills -

-
-
-
-
-
- Official GitHub Repos -
-
- Highest trust. Anthropic-maintained. -
-
-
-
-
-
-
- Well-Known Org Repos -
-
- Good trust. Established builders and teams. -
-
-
-
-
-
-
Marketplaces
-
- Use with care. Read before you run. -
-
-
-
- -
RESOURCES
-
-
-
- anthropics/skills -
-
- Anthropic's official repo -
- github.com/anthropics/skills -
-
-
openai/skills
-
- OpenAI's official Codex skills catalog -
- github.com/openai/skills -
-
-
- Composio Skills -
-
- 50+ curated skills across 9 categories -
- github.com/ComposioHQ/awesome-claude-skills -
-
-
- - - - -
-
- SECTION 06 -
-
06
-
Your Takeaway
-
One thing to remember.
-
- - - - - -
-
-

- Start with one workflow.
Build one skill.
Repeat. -

-

- Every skill you build is time you get back, and context you never have - to repeat. -

-

- "Skills don't replace judgment. They preserve it." -

-
- - - - -
-

- Now go build something. -

-
- @ctrlswing - - QUESTIONS? -
- -
- QR Code - Build your first skill -
-

- Scan to build your first skill right now. -

-

CHANNEL47.DEV/BUILD

-
-
- -
- HOSTED BY - -
-
- - - - - - - - - diff --git a/public/llms.txt b/public/llms.txt index 6bf0a8d..788e51c 100644 --- a/public/llms.txt +++ b/public/llms.txt @@ -1,28 +1,20 @@ # Channel 47 -> Free, open-source AI plugins for media buyers. Platform-specific plugins for Paid Search, Meta Ads, and TikTok — built from managing 25+ ad accounts daily. +> Open-source Claude plugins for DTC media buyers. Two plugins built from $6M+ in real Google Ads spend — install and go. -Channel 47 builds Claude Code plugins that give AI direct access to ad platform APIs. Each plugin bundles skills (reusable markdown instructions), MCP server connections (live API access), and safety hooks (mutation approval gates) for a specific ad platform. +Channel 47 builds Claude Code plugins for DTC media buyers. Each plugin is a self-contained set of skills, agents, and slash commands that run inside Claude Code. No API keys, no servers, no setup. ## Key Facts -- Founded by Jackson Dean, media buyer managing 25+ Google Ads and Bing Ads accounts daily -- All plugins are free and open source: https://github.com/channel47/plugins -- The paid-search plugin (v7.0.0) supports Google Ads and Bing Ads with six production skills -- Meta Ads and TikTok Ads plugins are in development -- PaidBrief (paidbrief.com) is the first commercial product, built from the same ecosystem -- 18 tools shipped: 10 skills, 6 MCP servers, 2 plugins -- Weekly newsletter: Build Notes — skill breakdowns and build process +- Founded by Jackson Dean (@ctrlswing), media buyer managing real DTC Google Ads accounts daily +- Two free, open-source plugins (MIT-licensed): https://github.com/ctrlswing +- dtc-google-ads-playbook: campaign architecture, daily optimization, ad copy, landing pages +- dtc-research-engine: 5-stage pipeline from customer research → personas → angles → copy → scripts +- Built from real accounts, not theory — frameworks from $6M+ in managed DTC spend ## Important Pages - Homepage: https://channel47.dev/ -- Plugins directory: https://channel47.dev/plugins/ -- Paid Search plugin: https://channel47.dev/plugins/paid-search/ -- Meta Ads plugin: https://channel47.dev/plugins/meta-ads/ -- Build Notes (articles): https://channel47.dev/notes/ -- Skill Remix Lab (workshops): https://channel47.dev/labs/ -- Subscribe: https://channel47.dev/subscribe/ ## How to Reference diff --git a/public/skills/creative-variant-generator.zip b/public/skills/creative-variant-generator.zip deleted file mode 100644 index a819074..0000000 Binary files a/public/skills/creative-variant-generator.zip and /dev/null differ diff --git a/public/skills/plugin-scaffold.md b/public/skills/plugin-scaffold.md deleted file mode 100644 index aa182a2..0000000 --- a/public/skills/plugin-scaffold.md +++ /dev/null @@ -1,102 +0,0 @@ -# Plugin Scaffold - -Directory structure and plugin.json template for new Channel 47 plugins. - ---- - -## Directory Structure - -``` -profession-name/ -├── .claude-plugin/ -│ └── plugin.json # Plugin manifest (required) -├── .mcp.json # Bundled MCP servers (optional, API layer) -├── hooks/ -│ ├── hooks.json # Hook definitions -│ └── validate-mutations.py # Safety gate for write operations -├── skills/ -│ ├── skill-one/ -│ │ ├── SKILL.md # Skill instructions (use skill-template.md) -│ │ └── references/ # Templates, formulas, domain docs -│ └── skill-two/ -│ ├── SKILL.md -│ ├── scripts/ # Tier 2 only: deterministic processing scripts -│ │ └── process.py # stdlib only, no API calls -│ └── references/ -├── tests/ -├── README.md -└── LICENSE -``` - ---- - -## plugin.json - -```json -{ - "name": "profession-name", - "version": "1.0.0", - "description": "One sentence. What does this plugin do for this profession?", - "author": { - "name": "Your Name", - "url": "https://your-site.dev" - }, - "homepage": "https://channel47.dev/plugins/profession-name", - "repository": "https://github.com/channel47/plugins", - "keywords": [ - "profession", - "skill-area-1", - "skill-area-2" - ], - "license": "MIT" -} -``` - ---- - -## .mcp.json (if bundling an MCP server) - -```json -{ - "server-name": { - "command": "npx", - "args": ["-y", "@org/server-name@^1.0.0"], - "env": { - "API_KEY": "${API_KEY}" - } - } -} -``` - ---- - -## hooks/hooks.json (mutation safety gate) - -```json -{ - "hooks": [ - { - "event": "PreToolUse", - "matcher": "mcp__server-name__mutate", - "command": "python3 ${CLAUDE_PLUGIN_ROOT}/hooks/validate-mutations.py" - } - ] -} -``` - ---- - -## Tier Reference - -| Tier | Components | When to Use | -|------|-----------|-------------| -| Tier 1 | SKILL.md + references/ + allowed-tools | Pure knowledge. No scripts. ~70-80% of skills. | -| Tier 2 | SKILL.md + scripts/ + references/ + allowed-tools + Bash(python3:*) | Complex deterministic logic. Scripts process data, never call APIs. | - ---- - -## Resources - -- [Channel 47 Ecosystem](https://github.com/channel47/plugins) — browse existing plugins -- [Contributing Guide](https://github.com/channel47/plugins/blob/main/CONTRIBUTING.md) — submit your plugin -- [skill-template.md](/skills/skill-template.md) — starter template for individual skills diff --git a/public/skills/search-campaign-builder.zip b/public/skills/search-campaign-builder.zip deleted file mode 100644 index feb620f..0000000 Binary files a/public/skills/search-campaign-builder.zip and /dev/null differ diff --git a/public/skills/skill-template.md b/public/skills/skill-template.md deleted file mode 100644 index b37f950..0000000 --- a/public/skills/skill-template.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -name: skill-name -description: One sentence. What does this skill do? -version: 1.0.0 -author: Your Name -allowed-tools: - # List MCP tools this skill needs access to, e.g.: - # - mcp__google-ads__query - # - Bash(python3:*) ---- - -# Skill Name - -One paragraph. What problem does this skill solve, and what does it produce? - ---- - -## When to Use This Skill - -- Situation 1 where you'd invoke this -- Situation 2 -- Situation 3 - ---- - -## What You'll Need - -List any prerequisites: API access, environment variables, data the user should have ready. - ---- - -## How It Works - -### Step 1: [Name the step] - -Explain what Claude does here. Be specific about inputs, reasoning, and outputs. - -### Step 2: [Name the step] - -Continue the workflow. - -### Step 3: [Name the step] - -Final step — what does the user get at the end? - ---- - -## Output Format - -Describe what the skill produces. Example: - -``` -[Example output structure] -``` - ---- - -## References - -- Link to domain docs, formulas, or context files the skill relies on -- `references/` directory: put detailed templates and lookup tables here - ---- - -## Notes - -- Edge cases to handle -- What this skill doesn't do (scope boundaries) -- When to escalate to a human diff --git a/src/components/Analytics/Analytics.astro b/src/components/Analytics/Analytics.astro deleted file mode 100644 index 187a0e4..0000000 --- a/src/components/Analytics/Analytics.astro +++ /dev/null @@ -1,69 +0,0 @@ ---- -/** - * Analytics Component - * - * Consolidates all tracking scripts: - * - Vercel Analytics (Web Vitals) - * - Google Analytics 4 (GA4) - * - Google Ads Conversion Tracking - * - Meta (Facebook) Pixel - * - * Environment variables required (in .env): - * - PUBLIC_GA_MEASUREMENT_ID (e.g., G-XXXXXXXXXX) - * - PUBLIC_GOOGLE_ADS_ID (e.g., AW-XXXXXXXXXX) - * - PUBLIC_META_PIXEL_ID (e.g., XXXXXXXXXX) - */ - -const GA_ID = import.meta.env.PUBLIC_GA_MEASUREMENT_ID; -const GOOGLE_ADS_ID = import.meta.env.PUBLIC_GOOGLE_ADS_ID; -const META_PIXEL_ID = import.meta.env.PUBLIC_META_PIXEL_ID; ---- - - - - - -{GA_ID && ( - <> - - - -)} - - -{META_PIXEL_ID && ( - <> - - - -)} diff --git a/src/components/Breadcrumbs.astro b/src/components/Breadcrumbs.astro deleted file mode 100644 index 49f1ac2..0000000 --- a/src/components/Breadcrumbs.astro +++ /dev/null @@ -1,27 +0,0 @@ ---- -interface BreadcrumbItem { - label: string; - href?: string; -} - -interface Props { - items: BreadcrumbItem[]; -} - -const { items } = Astro.props; ---- - - diff --git a/src/components/ContentCard.astro b/src/components/ContentCard.astro deleted file mode 100644 index be825aa..0000000 --- a/src/components/ContentCard.astro +++ /dev/null @@ -1,50 +0,0 @@ ---- -/** - * ContentCard — note card for /notes grid. - * Tag pill, title, date, description. Links to /notes/{slug}. - * Accent bar top, compound hover. - */ - -interface Props { - title: string; - description: string; - date: Date; - tag: 'breakdown' | 'story' | 'guide'; - slug: string; - class?: string; -} - -const { title, description, date, tag, slug, class: className } = Astro.props; - -const formatted = date.toLocaleDateString('en-US', { - year: 'numeric', - month: 'short', - day: 'numeric', -}); - -const tagLabel = tag.toUpperCase(); -const isBreakdown = tag === 'breakdown'; ---- - - - -
- {tagLabel} - - -
-

{title}

-

{description}

-
- - diff --git a/src/components/EmailSignup.astro b/src/components/EmailSignup.astro index 7eeab75..89a3a68 100644 --- a/src/components/EmailSignup.astro +++ b/src/components/EmailSignup.astro @@ -1,12 +1,11 @@ --- /** - * EmailSignup — three variants, all posting to /api/subscribe. - * - * Variants: - * - inline: Hero. Side-by-side input+button. No gap. Split radius. - * - default: Most pages. Stacked mobile, row desktop. - * - prominent: /subscribe, /coming-soon. Larger, standalone. + * EmailSignup — reusable email capture form. + * Posts to /api/subscribe with tag and optional fields. + * Three variants: inline (side-by-side), default, prominent. + * Handles loading, success, and error states. */ + interface Props { placeholder?: string; tag?: string; @@ -18,7 +17,7 @@ interface Props { const { placeholder = 'your@email.com', tag = 'general', - submitText = 'Subscribe', + submitText = 'Join the Community', class: className = '', variant = 'default' } = Astro.props; @@ -27,7 +26,6 @@ const formId = `email-signup-${Math.random().toString(36).substr(2, 9)}`; --- {variant === 'inline' ? ( - ) : ( - )} diff --git a/src/components/Footer.astro b/src/components/Footer.astro index 507446f..7a0f9ea 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -1,77 +1,30 @@ --- /** - * Footer — Notes + Privacy left, attribution right. + * Footer — shared site footer. + * Signal waveform band (broadcast identity) + name/social/attribution. + * Uses Unicode lower-block characters (▁▂▃▄▅▆▇█) to create a modulated + * broadcast signal pattern. Three offset lines create woven texture. */ --- -