diff --git a/apps/landing-page/__tests__/__helpers__/mock-translations.ts b/apps/landing-page/__tests__/__helpers__/mock-translations.ts index 2e011251..4af3721f 100644 --- a/apps/landing-page/__tests__/__helpers__/mock-translations.ts +++ b/apps/landing-page/__tests__/__helpers__/mock-translations.ts @@ -4,26 +4,37 @@ */ export const mockTranslations: Record> = { hero: { - title: 'Multi-AI Rules for Consistent Coding', - subtitle: 'One ruleset for Cursor, Claude Code, Codex, Antigravity, Q, and Kiro.', + title: 'Prove Your AI Coding Is Actually Improving', + subtitle: 'One command. 9 AI tools. Measurable impact on every session.', cta: 'Get Started', github: 'Star on GitHub', terminalTitle: '~/your-project', terminalCmd: 'npx codingbuddy init', terminalInstalling: 'Installing codingbuddy-rules...', - terminalRulesSynced: 'Rules synced to 6 AI tools', - terminalAgents: '35 specialist agents activated', + terminalRulesSynced: 'Rules synced to 9 AI tools', + terminalAgents: '37 specialist agents activated', terminalWorkflow: 'PLAN → ACT → EVAL workflow ready', + terminalSkills: '50 built-in skills loaded', terminalCursorrules: '.cursorrules', terminalClaudeMd: 'CLAUDE.md', terminalCodex: '.codex/', terminalAntigravity: '.antigravity/', terminalQ: '.q/', terminalKiro: '.kiro/', + terminalWindsurf: '.windsurfrules', + terminalAider: '.aider.conf.yml', + terminalOpenCode: '.opencode/', terminalReady: 'Ready! One source, all tools.', }, + socialProof: { + agents: '37 Agents', + tools: '9 AI Tools', + skills: '50 Skills', + checklists: '9 Checklists', + languages: '8 Languages', + }, agents: { - title: '35 Specialist Agents', + title: '37 Specialist Agents', subtitle: 'Focused expertise for every aspect of development', filter: 'Filter by category', allCategories: 'All', @@ -36,6 +47,14 @@ export const mockTranslations: Record> = { 'categories.Security': 'Security', 'categories.UX': 'UX', count: '{count} agents', + stacks: 'Agent Stacks', + stacksSubtitle: 'Pre-built teams for common workflows', + fullStack: 'Full-Stack', + apiDev: 'API Development', + dataPipeline: 'Data Pipeline', + frontendPolish: 'Frontend Polish', + mlInfra: 'ML Infrastructure', + securityAudit: 'Security Audit', }, quickStart: { title: 'Quick Start', @@ -48,6 +67,9 @@ export const mockTranslations: Record> = { step3Desc: 'Use PLAN, ACT, EVAL modes with specialist agents', copy: 'Copy', copied: 'Copied!', + tab_claude: 'Claude Code', + tab_cursor: 'Cursor', + tab_codex: 'Codex', }, header: { 'nav.features': 'Features', @@ -77,14 +99,15 @@ export const mockTranslations: Record> = { decline: 'Decline', }, metadata: { - title: 'Codingbuddy - Multi-AI Rules for Consistent Coding', - description: 'One ruleset for Cursor, Claude Code, Codex, Antigravity, Q, and Kiro.', + title: 'Codingbuddy - Prove Your AI Coding Is Actually Improving', + description: + 'One command for 9 AI tools. 37 specialist agents. Measurable impact on every session.', }, beforeAfter: { title: 'The Problem & Solution', beforeLabel: 'Before', afterLabel: 'After', - beforeFiles: '6 config files. Always out of sync.', + beforeFiles: '9 config files. Always out of sync.', afterFiles: 'Single source. Auto-synced to all tools.', cursorrules: '.cursorrules', claudeMd: 'CLAUDE.md', @@ -92,9 +115,13 @@ export const mockTranslations: Record> = { antigravityRules: '.antigravity/rules.md', qRules: '.q/rules.md', kiroRules: '.kiro/rules.md', + windsurfRules: '.windsurfrules', + aiderRules: '.aider.conf.yml', + opencodeRules: '.opencode/rules.md', singleSource: 'codingbuddy-rules/.ai-rules/', autoSynced: 'Auto-synced', alwaysCurrent: 'Always current', + impactTracked: 'Impact tracked', }, supportedTools: { title: 'Works with your favorite AI tools', @@ -105,6 +132,9 @@ export const mockTranslations: Record> = { antigravity: 'Antigravity', amazonQ: 'Amazon Q', kiro: 'Kiro', + windsurf: 'Windsurf', + aider: 'Aider', + opencode: 'OpenCode', }, tuiDashboard: { title: 'Real-Time Agent Dashboard', @@ -126,26 +156,100 @@ export const mockTranslations: Record> = { features: { title: 'What You Get', universalRulesTitle: 'Universal Rules', - universalRulesDesc: 'One source of truth automatically applied to all 6 AI coding tools.', - agentsTitle: '35 AI Agents', + universalRulesDesc: 'One source of truth automatically applied to all 9 AI coding tools.', + agentsTitle: '37 Specialist Agents', agentsDesc: - 'Specialist agents for architecture, security, testing, performance, and accessibility.', + 'Domain experts for architecture, security, testing, performance, and accessibility.', workflowTitle: 'Structured Workflow', workflowDesc: 'PLAN → ACT → EVAL cycle ensures consistent quality across all development.', qualityTitle: 'Quality Built-in', qualityDesc: 'TDD, SOLID principles, and 90%+ test coverage enforced as standard practice.', - mcpTitle: 'MCP Protocol', - mcpDesc: 'Standard Model Context Protocol for seamless AI tool integration.', + impactTitle: 'Session Impact Reports', + impactDesc: + 'Measurable proof that AI coding is improving — issues prevented, agents dispatched, rules enforced.', + selfEvolvingTitle: 'Self-Evolving Rules', + selfEvolvingDesc: + 'Rules that learn from repeated failure patterns and suggest improvements automatically.', + skillsTitle: '50 Built-in Skills', + skillsDesc: 'Reusable workflows for TDD, shipping, code review, debugging, and more.', zeroConfigTitle: 'Zero Config', zeroConfigDesc: 'One command to install. Works out of the box with all supported tools.', }, + workflowDemo: { + title: 'Your AI Coding Workflow, Supercharged', + subtitle: 'Four modes that take AI-assisted development from chaos to production-ready.', + planTitle: 'PLAN', + planDesc: + 'Question-first planning with intelligent clarification. Specialists recommend architecture before a single line of code.', + planDetail1: 'Clarification gate catches ambiguity', + planDetail2: 'Specialists recommend architecture', + planDetail3: 'Permission forecast before execution', + actTitle: 'ACT', + actDesc: + 'Execute with TDD discipline. Real-time rule enforcement prevents drift. Quality gates block bad patterns.', + actDetail1: 'TDD Red → Green → Refactor cycle', + actDetail2: 'Live rule enforcement', + actDetail3: 'Dynamic checklists per domain', + evalTitle: 'EVAL', + evalDesc: + 'Specialist council independently reviews. Cross-review findings. Consensus-driven approval.', + evalDetail1: 'Parallel specialist review', + evalDetail2: 'Cross-review and debate', + evalDetail3: 'Consensus: approve / concern / reject', + autoTitle: 'AUTO', + autoDesc: + 'Fully autonomous cycle. Iterates PLAN → ACT → EVAL until zero critical issues. Ship with confidence.', + autoDetail1: 'Autonomous iteration', + autoDetail2: 'Quality gate: Critical=0, High=0', + autoDetail3: 'Production-ready guarantee', + }, + hudShowcase: { + title: 'Intelligence at a Glance', + subtitle: + 'A living statusbar that breathes with your session — cost tracking, cache savings, and mode awareness built in.', + buddyTitle: 'Breathing Buddy', + buddyDesc: + 'Animated avatar reacts to session phase — idle, thinking, active, blocked, victory.', + costTitle: 'Cost Velocity', + costDesc: + 'Real-time spend-rate tracking with trend indicators so you never get a billing surprise.', + cacheTitle: 'Cache Savings', + cacheDesc: 'See exactly how much prompt caching saves you per session.', + modeTitle: 'Mode Rainbow', + modeDesc: + 'Per-mode color gradients — blue for PLAN, green for ACT, purple for EVAL, rainbow for AUTO.', + contextTitle: 'Context Bar', + contextDesc: 'Visual progress bar shows context window usage with warning thresholds.', + screenshotAlt: + 'Codingbuddy HUD Statusbar showing buddy face, cost velocity, cache savings, and mode indicator', + }, + skillsLibrary: { + title: '50 Built-in Skills', + subtitle: 'Reusable workflows that codify best practices into repeatable actions', + development: 'Development', + teamGit: 'Team & Git', + review: 'Review & Code', + intelligence: 'Intelligence', + specialized: 'Specialized', + developmentSkills: + 'TDD, Refactoring, Debugging, Performance Optimization, Brainstorming, Legacy Modernization, Database Migration, API Design, Frontend Design, MCP Builder', + teamGitSkills: 'Ship, Git Master, Worktrees, Parallel Agents, Subagent Dev, Cross-Repo Issues', + reviewSkills: + 'PR Review, PR All-in-One, Code Review, Code Explanation, Error Analysis, Build Fix, Verification', + intelligenceSkills: + 'Retrospective, Security Audit, Tech Debt, Rule Authoring, Skill Creator, Prompt Engineering', + specializedSkills: + 'Incident Response, Onboard, Deployment Checklist, Cost Budget, Widget Architecture, Agent Design', + }, ctaFooter: { - title: 'Ready to unify your AI coding?', + title: 'Ready to prove your AI coding works?', command: 'npx codingbuddy init', - github: 'GitHub', + github: 'Star on GitHub', docs: 'Documentation', - copyright: `© {year} Codingbuddy. All rights reserved.`, - madeWith: 'Made for developers who ship with AI', + copy: 'Copy', + copied: 'Copied!', + copyright: `© {year} Codingbuddy. MIT License.`, + madeWith: '37 agents. 9 tools. 50 skills. One command.', }, }; diff --git a/apps/landing-page/__tests__/i18n/request.test.ts b/apps/landing-page/__tests__/i18n/request.test.ts index 2d0754cf..ffb7d10a 100644 --- a/apps/landing-page/__tests__/i18n/request.test.ts +++ b/apps/landing-page/__tests__/i18n/request.test.ts @@ -48,11 +48,15 @@ describe('i18n request config logic', () => { expect(messages).toBeDefined(); expect(Object.keys(messages)).toEqual([ 'hero', + 'socialProof', 'beforeAfter', 'features', + 'workflowDemo', 'supportedTools', + 'hudShowcase', 'tuiDashboard', 'agents', + 'skillsLibrary', 'quickStart', 'ctaFooter', 'header', diff --git a/apps/landing-page/__tests__/widgets/AgentsShowcase.test.tsx b/apps/landing-page/__tests__/widgets/AgentsShowcase.test.tsx index 3574360e..4c959d87 100644 --- a/apps/landing-page/__tests__/widgets/AgentsShowcase.test.tsx +++ b/apps/landing-page/__tests__/widgets/AgentsShowcase.test.tsx @@ -21,7 +21,7 @@ describe('AgentsShowcase', () => { it('should display section heading', () => { render(); - expect(screen.getByRole('heading', { level: 2 })).toHaveTextContent('35 Specialist Agents'); + expect(screen.getByRole('heading', { level: 2 })).toHaveTextContent('37 Specialist Agents'); }); it('should have id attribute for anchor navigation', () => { @@ -42,8 +42,8 @@ describe('AgentsShowcase', () => { it('should render agent cards up to max 8', () => { render(); - // Total agents is 29, but only 8 should be visible - expect(screen.getByText('Frontend Developer')).toBeInTheDocument(); + // Total agents is 37, but only 8 should be visible + expect(screen.getByText('Plan Mode Agent')).toBeInTheDocument(); // Count visible agent cards (each has role="img" for the emoji) const agentIcons = screen.getAllByRole('img', { hidden: true }); expect(agentIcons.length).toBeLessThanOrEqual(8); @@ -51,7 +51,7 @@ describe('AgentsShowcase', () => { it('should display agent count for all agents', () => { render(); - expect(screen.getByText('29 agents')).toBeInTheDocument(); + expect(screen.getByText('37 agents')).toBeInTheDocument(); }); it('should not render a search input', () => { diff --git a/apps/landing-page/__tests__/widgets/CTAFooter.test.tsx b/apps/landing-page/__tests__/widgets/CTAFooter.test.tsx index 9629f381..879202aa 100644 --- a/apps/landing-page/__tests__/widgets/CTAFooter.test.tsx +++ b/apps/landing-page/__tests__/widgets/CTAFooter.test.tsx @@ -12,7 +12,7 @@ describe('CTAFooter', () => { it('should render CTA heading', async () => { render(await CTAFooter({ locale: 'en' })); expect( - screen.getByRole('heading', { level: 2, name: /Ready to unify your AI coding/i }), + screen.getByRole('heading', { level: 2, name: /Ready to prove your AI coding works/i }), ).toBeInTheDocument(); }); @@ -45,7 +45,7 @@ describe('CTAFooter', () => { it('should render made for developers text', async () => { render(await CTAFooter({ locale: 'en' })); - expect(screen.getByText(/Made for developers who ship with AI/)).toBeInTheDocument(); + expect(screen.getByText(/37 agents\. 9 tools\. 50 skills\. One command\./)).toBeInTheDocument(); }); it('should have CTA section with data-testid', async () => { diff --git a/apps/landing-page/__tests__/widgets/Features.test.tsx b/apps/landing-page/__tests__/widgets/Features.test.tsx index 2bbe7c6e..90608823 100644 --- a/apps/landing-page/__tests__/widgets/Features.test.tsx +++ b/apps/landing-page/__tests__/widgets/Features.test.tsx @@ -31,23 +31,25 @@ describe('Features', () => { expect(section).toHaveAttribute('id', 'features'); }); - it('should render 6 feature cards', async () => { + it('should render 8 feature cards', async () => { render(await Features({ locale: 'en' })); expect(screen.getByText('Universal Rules')).toBeInTheDocument(); - expect(screen.getByText('35 AI Agents')).toBeInTheDocument(); + expect(screen.getByText('37 Specialist Agents')).toBeInTheDocument(); expect(screen.getByText('Structured Workflow')).toBeInTheDocument(); expect(screen.getByText('Quality Built-in')).toBeInTheDocument(); - expect(screen.getByText('MCP Protocol')).toBeInTheDocument(); + expect(screen.getByText('Session Impact Reports')).toBeInTheDocument(); + expect(screen.getByText('Self-Evolving Rules')).toBeInTheDocument(); + expect(screen.getByText('50 Built-in Skills')).toBeInTheDocument(); expect(screen.getByText('Zero Config')).toBeInTheDocument(); }); it('should render feature descriptions', async () => { render(await Features({ locale: 'en' })); expect(screen.getByText(/One source of truth automatically applied/)).toBeInTheDocument(); - expect(screen.getByText(/Specialist agents for architecture/)).toBeInTheDocument(); + expect(screen.getByText(/Domain experts for architecture/)).toBeInTheDocument(); expect(screen.getByText(/PLAN → ACT → EVAL cycle/)).toBeInTheDocument(); expect(screen.getByText(/TDD, SOLID principles/)).toBeInTheDocument(); - expect(screen.getByText(/Standard Model Context Protocol/)).toBeInTheDocument(); + expect(screen.getByText(/Measurable proof that AI coding/)).toBeInTheDocument(); expect(screen.getByText(/One command to install/)).toBeInTheDocument(); }); }); diff --git a/apps/landing-page/__tests__/widgets/Hero.test.tsx b/apps/landing-page/__tests__/widgets/Hero.test.tsx index b502acf3..0b02c958 100644 --- a/apps/landing-page/__tests__/widgets/Hero.test.tsx +++ b/apps/landing-page/__tests__/widgets/Hero.test.tsx @@ -17,7 +17,7 @@ describe('Hero', () => { it('should display h1 heading', async () => { render(await Hero({ locale: 'en' })); expect(screen.getByRole('heading', { level: 1 })).toHaveTextContent( - 'Multi-AI Rules for Consistent Coding', + 'Prove Your AI Coding Is Actually Improving', ); }); @@ -30,7 +30,7 @@ describe('Hero', () => { it('should display subtitle', async () => { render(await Hero({ locale: 'en' })); expect( - screen.getByText('One ruleset for Cursor, Claude Code, Codex, Antigravity, Q, and Kiro.'), + screen.getByText('One command. 9 AI tools. Measurable impact on every session.'), ).toBeInTheDocument(); }); diff --git a/apps/landing-page/__tests__/widgets/HudShowcase.test.tsx b/apps/landing-page/__tests__/widgets/HudShowcase.test.tsx new file mode 100644 index 00000000..b2005e84 --- /dev/null +++ b/apps/landing-page/__tests__/widgets/HudShowcase.test.tsx @@ -0,0 +1,45 @@ +import { describe, it, expect } from 'vitest'; +import { render, screen } from '@testing-library/react'; +import '@/__tests__/__helpers__/next-intl-server-mock'; +import { HudShowcase } from '@/widgets/HudShowcase'; + +describe('HudShowcase', () => { + it('should render with locale prop', async () => { + render(await HudShowcase({ locale: 'en' })); + expect(screen.getByTestId('hud-showcase')).toBeInTheDocument(); + }); + + it('should set lang attribute matching locale', async () => { + render(await HudShowcase({ locale: 'ko' })); + expect(screen.getByTestId('hud-showcase')).toHaveAttribute('lang', 'ko'); + }); + + it('should display section heading', async () => { + render(await HudShowcase({ locale: 'en' })); + expect(screen.getByRole('heading', { level: 2 })).toHaveTextContent('Intelligence at a Glance'); + }); + + it('should have aria-labelledby linking to heading', async () => { + render(await HudShowcase({ locale: 'en' })); + expect(screen.getByTestId('hud-showcase')).toHaveAttribute( + 'aria-labelledby', + 'hud-showcase-heading', + ); + }); + + it('should render simulated HUD statusbar with all segments', async () => { + render(await HudShowcase({ locale: 'en' })); + expect(screen.getByText('buddy')).toBeInTheDocument(); + expect(screen.getByText('PLAN')).toBeInTheDocument(); + expect(screen.getByText('$0.47 saved')).toBeInTheDocument(); + }); + + it('should render all 5 feature cards', async () => { + render(await HudShowcase({ locale: 'en' })); + expect(screen.getByText('Breathing Buddy')).toBeInTheDocument(); + expect(screen.getByText('Cost Velocity')).toBeInTheDocument(); + expect(screen.getByText('Cache Savings')).toBeInTheDocument(); + expect(screen.getByText('Mode Rainbow')).toBeInTheDocument(); + expect(screen.getByText('Context Bar')).toBeInTheDocument(); + }); +}); diff --git a/apps/landing-page/__tests__/widgets/SkillsLibrary.test.tsx b/apps/landing-page/__tests__/widgets/SkillsLibrary.test.tsx new file mode 100644 index 00000000..c6c53a2b --- /dev/null +++ b/apps/landing-page/__tests__/widgets/SkillsLibrary.test.tsx @@ -0,0 +1,65 @@ +import { describe, it, expect } from 'vitest'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import '@/__tests__/__helpers__/next-intl-mock'; +import { SkillsLibrary } from '@/widgets/SkillsLibrary'; + +describe('SkillsLibrary', () => { + it('should render with locale prop', () => { + render(); + expect(screen.getByTestId('skills-library')).toBeInTheDocument(); + }); + + it('should set lang attribute matching locale', () => { + render(); + expect(screen.getByTestId('skills-library')).toHaveAttribute('lang', 'ko'); + }); + + it('should display section heading', () => { + render(); + expect(screen.getByRole('heading', { level: 2 })).toHaveTextContent('50 Built-in Skills'); + }); + + it('should render all 5 category tabs', () => { + render(); + expect(screen.getByRole('tab', { name: /Development/ })).toBeInTheDocument(); + expect(screen.getByRole('tab', { name: /Team & Git/ })).toBeInTheDocument(); + expect(screen.getByRole('tab', { name: /Review & Code/ })).toBeInTheDocument(); + expect(screen.getByRole('tab', { name: /Intelligence/ })).toBeInTheDocument(); + expect(screen.getByRole('tab', { name: /Specialized/ })).toBeInTheDocument(); + }); + + it('should select Development tab by default', () => { + render(); + expect(screen.getByRole('tab', { name: /Development/ })).toHaveAttribute( + 'aria-selected', + 'true', + ); + }); + + it('should display Development skills by default', () => { + render(); + expect(screen.getByText('TDD')).toBeInTheDocument(); + expect(screen.getByText('Refactoring')).toBeInTheDocument(); + }); + + it('should switch category when tab is clicked', async () => { + const user = userEvent.setup(); + render(); + + await user.click(screen.getByRole('tab', { name: /Team & Git/ })); + expect(screen.getByRole('tab', { name: /Team & Git/ })).toHaveAttribute( + 'aria-selected', + 'true', + ); + expect(screen.getByText('Ship')).toBeInTheDocument(); + }); + + it('should render tabpanel with proper id', async () => { + const user = userEvent.setup(); + render(); + + await user.click(screen.getByRole('tab', { name: /Intelligence/ })); + expect(screen.getByRole('tabpanel')).toHaveAttribute('id', 'skills-panel-intelligence'); + }); +}); diff --git a/apps/landing-page/__tests__/widgets/SocialProof.test.tsx b/apps/landing-page/__tests__/widgets/SocialProof.test.tsx new file mode 100644 index 00000000..89b1fb0b --- /dev/null +++ b/apps/landing-page/__tests__/widgets/SocialProof.test.tsx @@ -0,0 +1,30 @@ +import { describe, it, expect } from 'vitest'; +import { render, screen } from '@testing-library/react'; +import '@/__tests__/__helpers__/next-intl-server-mock'; +import { SocialProof } from '@/widgets/SocialProof'; + +describe('SocialProof', () => { + it('should render with locale prop', async () => { + render(await SocialProof({ locale: 'en' })); + expect(screen.getByTestId('social-proof')).toBeInTheDocument(); + }); + + it('should set lang attribute matching locale', async () => { + render(await SocialProof({ locale: 'ko' })); + expect(screen.getByTestId('social-proof')).toHaveAttribute('lang', 'ko'); + }); + + it('should have aria-label for stats', async () => { + render(await SocialProof({ locale: 'en' })); + expect(screen.getByTestId('social-proof')).toHaveAttribute('aria-label', 'Project statistics'); + }); + + it('should render all 5 stat items', async () => { + render(await SocialProof({ locale: 'en' })); + expect(screen.getByText('37 Agents')).toBeInTheDocument(); + expect(screen.getByText('9 AI Tools')).toBeInTheDocument(); + expect(screen.getByText('50 Skills')).toBeInTheDocument(); + expect(screen.getByText('9 Checklists')).toBeInTheDocument(); + expect(screen.getByText('8 Languages')).toBeInTheDocument(); + }); +}); diff --git a/apps/landing-page/__tests__/widgets/TerminalDemo.test.tsx b/apps/landing-page/__tests__/widgets/TerminalDemo.test.tsx index 7c26ebe0..ecd5145d 100644 --- a/apps/landing-page/__tests__/widgets/TerminalDemo.test.tsx +++ b/apps/landing-page/__tests__/widgets/TerminalDemo.test.tsx @@ -7,14 +7,18 @@ const mockMessages: TerminalMessages = { terminalCmd: 'npx codingbuddy init', terminalInstalling: 'Installing codingbuddy...', terminalRulesSynced: 'Rules synced', - terminalAgents: '35 agents loaded', + terminalAgents: '37 agents loaded', terminalWorkflow: 'PLAN → ACT → EVAL workflow ready', + terminalSkills: '50 built-in skills loaded', terminalCursorrules: '.cursorrules', terminalClaudeMd: 'CLAUDE.md', terminalCodex: '.codex/', terminalAntigravity: '.antigravity/', terminalQ: '.q/', terminalKiro: '.kiro/', + terminalWindsurf: '.windsurfrules', + terminalAider: '.aider.conf.yml', + terminalOpenCode: '.opencode/', terminalReady: 'Ready to code!', }; @@ -33,8 +37,9 @@ describe('TerminalDemo', () => { render(); expect(screen.getByText('Installing codingbuddy...')).toBeInTheDocument(); expect(screen.getByText('Rules synced')).toBeInTheDocument(); - expect(screen.getByText('35 agents loaded')).toBeInTheDocument(); + expect(screen.getByText('37 agents loaded')).toBeInTheDocument(); expect(screen.getByText('PLAN → ACT → EVAL workflow ready')).toBeInTheDocument(); + expect(screen.getByText('50 built-in skills loaded')).toBeInTheDocument(); }); it('should render tool file list', () => { @@ -45,6 +50,9 @@ describe('TerminalDemo', () => { expect(screen.getByText('.antigravity/')).toBeInTheDocument(); expect(screen.getByText('.q/')).toBeInTheDocument(); expect(screen.getByText('.kiro/')).toBeInTheDocument(); + expect(screen.getByText('.windsurfrules')).toBeInTheDocument(); + expect(screen.getByText('.aider.conf.yml')).toBeInTheDocument(); + expect(screen.getByText('.opencode/')).toBeInTheDocument(); }); it('should have appropriate aria attributes', () => { diff --git a/apps/landing-page/__tests__/widgets/WorkflowDemo.test.tsx b/apps/landing-page/__tests__/widgets/WorkflowDemo.test.tsx new file mode 100644 index 00000000..c4a29562 --- /dev/null +++ b/apps/landing-page/__tests__/widgets/WorkflowDemo.test.tsx @@ -0,0 +1,62 @@ +import { describe, it, expect } from 'vitest'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import '@/__tests__/__helpers__/next-intl-mock'; +import { WorkflowDemo } from '@/widgets/WorkflowDemo'; + +describe('WorkflowDemo', () => { + it('should render with locale prop', () => { + render(); + expect(screen.getByTestId('workflow-demo')).toBeInTheDocument(); + }); + + it('should set lang attribute matching locale', () => { + render(); + expect(screen.getByTestId('workflow-demo')).toHaveAttribute('lang', 'ko'); + }); + + it('should display section heading', () => { + render(); + expect(screen.getByRole('heading', { level: 2 })).toHaveTextContent( + 'Your AI Coding Workflow, Supercharged', + ); + }); + + it('should render all 4 mode tabs', () => { + render(); + expect(screen.getByRole('tab', { name: /PLAN/ })).toBeInTheDocument(); + expect(screen.getByRole('tab', { name: /ACT/ })).toBeInTheDocument(); + expect(screen.getByRole('tab', { name: /EVAL/ })).toBeInTheDocument(); + expect(screen.getByRole('tab', { name: /AUTO/ })).toBeInTheDocument(); + }); + + it('should select PLAN tab by default', () => { + render(); + expect(screen.getByRole('tab', { name: /PLAN/ })).toHaveAttribute('aria-selected', 'true'); + }); + + it('should switch to ACT tab when clicked', async () => { + const user = userEvent.setup(); + render(); + + await user.click(screen.getByRole('tab', { name: /ACT/ })); + expect(screen.getByRole('tab', { name: /ACT/ })).toHaveAttribute('aria-selected', 'true'); + expect(screen.getByRole('tab', { name: /PLAN/ })).toHaveAttribute('aria-selected', 'false'); + }); + + it('should display mode-specific content when switching tabs', async () => { + const user = userEvent.setup(); + render(); + + await user.click(screen.getByRole('tab', { name: /EVAL/ })); + expect(screen.getByText(/Specialist council/)).toBeInTheDocument(); + }); + + it('should render tabpanel with proper id', async () => { + const user = userEvent.setup(); + render(); + + await user.click(screen.getByRole('tab', { name: /AUTO/ })); + expect(screen.getByRole('tabpanel')).toHaveAttribute('id', 'panel-auto'); + }); +}); diff --git a/apps/landing-page/components/SlotError.tsx b/apps/landing-page/components/SlotError.tsx index 6144ed6d..aeb101e8 100644 --- a/apps/landing-page/components/SlotError.tsx +++ b/apps/landing-page/components/SlotError.tsx @@ -12,7 +12,11 @@ interface SlotErrorProps { | 'features' | 'supported tools' | 'tui-dashboard' - | 'footer'; + | 'footer' + | 'social-proof' + | 'workflow-demo' + | 'hud-showcase' + | 'skills-library'; } export const SlotError = ({ reset, slotName }: SlotErrorProps) => { diff --git a/apps/landing-page/messages/en.json b/apps/landing-page/messages/en.json index ce7e3c18..c5153398 100644 --- a/apps/landing-page/messages/en.json +++ b/apps/landing-page/messages/en.json @@ -1,28 +1,39 @@ { "hero": { - "title": "Multi-AI Rules for Consistent Coding", - "subtitle": "One ruleset for Cursor, Claude Code, Codex, Antigravity, Q, and Kiro.", + "title": "Prove Your AI Coding Is Actually Improving", + "subtitle": "One command. 9 AI tools. Measurable impact on every session.", "cta": "Get Started", "github": "Star on GitHub", "terminalTitle": "~/your-project", "terminalCmd": "npx codingbuddy init", "terminalInstalling": "Installing codingbuddy-rules...", - "terminalRulesSynced": "Rules synced to 6 AI tools", - "terminalAgents": "35 specialist agents activated", + "terminalRulesSynced": "Rules synced to 9 AI tools", + "terminalAgents": "37 specialist agents activated", "terminalWorkflow": "PLAN → ACT → EVAL workflow ready", + "terminalSkills": "50 built-in skills loaded", "terminalCursorrules": ".cursorrules", "terminalClaudeMd": "CLAUDE.md", "terminalCodex": ".codex/", "terminalAntigravity": ".antigravity/", "terminalQ": ".q/", "terminalKiro": ".kiro/", + "terminalWindsurf": ".windsurfrules", + "terminalAider": ".aider.conf.yml", + "terminalOpenCode": ".opencode/", "terminalReady": "Ready! One source, all tools." }, + "socialProof": { + "agents": "37 Agents", + "tools": "9 AI Tools", + "skills": "50 Skills", + "checklists": "9 Checklists", + "languages": "8 Languages" + }, "beforeAfter": { "title": "The Problem & Solution", "beforeLabel": "Before", "afterLabel": "After", - "beforeFiles": "6 config files. Always out of sync.", + "beforeFiles": "9 config files. Always out of sync.", "afterFiles": "Single source. Auto-synced to all tools.", "cursorrules": ".cursorrules", "claudeMd": "CLAUDE.md", @@ -30,25 +41,57 @@ "antigravityRules": ".antigravity/rules.md", "qRules": ".q/rules.md", "kiroRules": ".kiro/rules.md", + "windsurfRules": ".windsurfrules", + "aiderRules": ".aider.conf.yml", + "opencodeRules": ".opencode/rules.md", "singleSource": "codingbuddy-rules/.ai-rules/", "autoSynced": "Auto-synced", - "alwaysCurrent": "Always current" + "alwaysCurrent": "Always current", + "impactTracked": "Impact tracked" }, "features": { "title": "What You Get", "universalRulesTitle": "Universal Rules", - "universalRulesDesc": "One source of truth automatically applied to all 6 AI coding tools.", - "agentsTitle": "35 AI Agents", - "agentsDesc": "Specialist agents for architecture, security, testing, performance, and accessibility.", + "universalRulesDesc": "One source of truth automatically applied to all 9 AI coding tools.", + "agentsTitle": "37 Specialist Agents", + "agentsDesc": "Domain experts for architecture, security, testing, performance, and accessibility.", "workflowTitle": "Structured Workflow", "workflowDesc": "PLAN → ACT → EVAL cycle ensures consistent quality across all development.", "qualityTitle": "Quality Built-in", "qualityDesc": "TDD, SOLID principles, and 90%+ test coverage enforced as standard practice.", - "mcpTitle": "MCP Protocol", - "mcpDesc": "Standard Model Context Protocol for seamless AI tool integration.", + "impactTitle": "Session Impact Reports", + "impactDesc": "Measurable proof that AI coding is improving — issues prevented, agents dispatched, rules enforced.", + "selfEvolvingTitle": "Self-Evolving Rules", + "selfEvolvingDesc": "Rules that learn from repeated failure patterns and suggest improvements automatically.", + "skillsTitle": "50 Built-in Skills", + "skillsDesc": "Reusable workflows for TDD, shipping, code review, debugging, and more.", "zeroConfigTitle": "Zero Config", "zeroConfigDesc": "One command to install. Works out of the box with all supported tools." }, + "workflowDemo": { + "title": "Your AI Coding Workflow, Supercharged", + "subtitle": "Four modes that take AI-assisted development from chaos to production-ready.", + "planTitle": "PLAN", + "planDesc": "Question-first planning with intelligent clarification. Specialists recommend architecture before a single line of code.", + "planDetail1": "Clarification gate catches ambiguity", + "planDetail2": "Specialists recommend architecture", + "planDetail3": "Permission forecast before execution", + "actTitle": "ACT", + "actDesc": "Execute with TDD discipline. Real-time rule enforcement prevents drift. Quality gates block bad patterns.", + "actDetail1": "TDD Red → Green → Refactor cycle", + "actDetail2": "Live rule enforcement", + "actDetail3": "Dynamic checklists per domain", + "evalTitle": "EVAL", + "evalDesc": "Specialist council independently reviews. Cross-review findings. Consensus-driven approval.", + "evalDetail1": "Parallel specialist review", + "evalDetail2": "Cross-review and debate", + "evalDetail3": "Consensus: approve / concern / reject", + "autoTitle": "AUTO", + "autoDesc": "Fully autonomous cycle. Iterates PLAN → ACT → EVAL until zero critical issues. Ship with confidence.", + "autoDetail1": "Autonomous iteration", + "autoDetail2": "Quality gate: Critical=0, High=0", + "autoDetail3": "Production-ready guarantee" + }, "supportedTools": { "title": "Works with your favorite AI tools", "plus": "+ any MCP-compatible tool", @@ -57,7 +100,25 @@ "codex": "Codex", "antigravity": "Antigravity", "amazonQ": "Amazon Q", - "kiro": "Kiro" + "kiro": "Kiro", + "windsurf": "Windsurf", + "aider": "Aider", + "opencode": "OpenCode" + }, + "hudShowcase": { + "title": "Intelligence at a Glance", + "subtitle": "A living statusbar that breathes with your session — cost tracking, cache savings, and mode awareness built in.", + "buddyTitle": "Breathing Buddy", + "buddyDesc": "Animated avatar reacts to session phase — idle, thinking, active, blocked, victory.", + "costTitle": "Cost Velocity", + "costDesc": "Real-time spend-rate tracking with trend indicators so you never get a billing surprise.", + "cacheTitle": "Cache Savings", + "cacheDesc": "See exactly how much prompt caching saves you per session.", + "modeTitle": "Mode Rainbow", + "modeDesc": "Per-mode color gradients — blue for PLAN, green for ACT, purple for EVAL, rainbow for AUTO.", + "contextTitle": "Context Bar", + "contextDesc": "Visual progress bar shows context window usage with warning thresholds.", + "screenshotAlt": "Codingbuddy HUD Statusbar showing buddy face, cost velocity, cache savings, and mode indicator" }, "tuiDashboard": { "title": "Real-Time Agent Dashboard", @@ -76,7 +137,7 @@ "multiSession": "Multiple Claude Code sessions share a single TUI window via IPC" }, "agents": { - "title": "35 Specialist Agents", + "title": "37 Specialist Agents", "subtitle": "Focused expertise for every aspect of development", "filter": "Filter by category", "allCategories": "All", @@ -90,7 +151,29 @@ "Security": "Security", "UX": "UX" }, - "count": "{count} agents" + "count": "{count} agents", + "stacks": "Agent Stacks", + "stacksSubtitle": "Pre-built teams for common workflows", + "fullStack": "Full-Stack", + "apiDev": "API Development", + "dataPipeline": "Data Pipeline", + "frontendPolish": "Frontend Polish", + "mlInfra": "ML Infrastructure", + "securityAudit": "Security Audit" + }, + "skillsLibrary": { + "title": "50 Built-in Skills", + "subtitle": "Reusable workflows that codify best practices into repeatable actions", + "development": "Development", + "teamGit": "Team & Git", + "review": "Review & Code", + "intelligence": "Intelligence", + "specialized": "Specialized", + "developmentSkills": "TDD, Refactoring, Debugging, Performance Optimization, Brainstorming, Legacy Modernization, Database Migration, API Design, Frontend Design, MCP Builder", + "teamGitSkills": "Ship, Git Master, Worktrees, Parallel Agents, Subagent Dev, Cross-Repo Issues", + "reviewSkills": "PR Review, PR All-in-One, Code Review, Code Explanation, Error Analysis, Build Fix, Verification", + "intelligenceSkills": "Retrospective, Security Audit, Tech Debt, Rule Authoring, Skill Creator, Prompt Engineering", + "specializedSkills": "Incident Response, Onboard, Deployment Checklist, Cost Budget, Widget Architecture, Agent Design" }, "quickStart": { "title": "Quick Start", @@ -102,17 +185,20 @@ "step3": "Code", "step3Desc": "Use PLAN, ACT, EVAL modes with specialist agents", "copy": "Copy", - "copied": "Copied!" + "copied": "Copied!", + "tab_claude": "Claude Code", + "tab_cursor": "Cursor", + "tab_codex": "Codex" }, "ctaFooter": { - "title": "Ready to unify your AI coding?", + "title": "Ready to prove your AI coding works?", "command": "npx codingbuddy init", "github": "Star on GitHub", "docs": "Documentation", "copy": "Copy", "copied": "Copied!", "copyright": "© {year} Codingbuddy. MIT License.", - "madeWith": "Made for developers, by developers." + "madeWith": "37 agents. 9 tools. 50 skills. One command." }, "header": { "nav": { @@ -151,8 +237,8 @@ "decline": "Decline" }, "metadata": { - "title": "Codingbuddy - Multi-AI Rules for Consistent Coding", - "description": "One ruleset for Cursor, Claude Code, Codex, Antigravity, Q, and Kiro. Consistent AI-assisted coding across all your tools." + "title": "Codingbuddy - Prove Your AI Coding Is Actually Improving", + "description": "One command for 9 AI tools. 37 specialist agents. Measurable impact on every session. Works with Cursor, Claude Code, Codex, Windsurf, and more." }, "i18n": {} } diff --git a/apps/landing-page/messages/es.json b/apps/landing-page/messages/es.json index b6febd33..43004516 100644 --- a/apps/landing-page/messages/es.json +++ b/apps/landing-page/messages/es.json @@ -1,28 +1,39 @@ { "hero": { - "title": "Reglas Multi-IA para Codificación Consistente", - "subtitle": "Un conjunto de reglas para Cursor, Claude Code, Codex, Antigravity, Q y Kiro.", + "title": "Demuestra que tu codificación con IA realmente mejora", + "subtitle": "Un comando. 9 herramientas IA. Impacto medible en cada sesión.", "cta": "Comenzar", "github": "Star en GitHub", "terminalTitle": "~/your-project", "terminalCmd": "npx codingbuddy init", "terminalInstalling": "Instalando codingbuddy-rules...", - "terminalRulesSynced": "Reglas sincronizadas en 6 herramientas IA", - "terminalAgents": "35 agentes especialistas activados", + "terminalRulesSynced": "Reglas sincronizadas en 9 herramientas IA", + "terminalAgents": "37 agentes especialistas activados", "terminalWorkflow": "Flujo PLAN → ACT → EVAL listo", + "terminalSkills": "50 habilidades integradas cargadas", "terminalCursorrules": ".cursorrules", "terminalClaudeMd": "CLAUDE.md", "terminalCodex": ".codex/", "terminalAntigravity": ".antigravity/", "terminalQ": ".q/", "terminalKiro": ".kiro/", + "terminalWindsurf": ".windsurfrules", + "terminalAider": ".aider.conf.yml", + "terminalOpenCode": ".opencode/", "terminalReady": "¡Listo! Una fuente, todas las herramientas." }, + "socialProof": { + "agents": "37 Agentes", + "tools": "9 Herramientas IA", + "skills": "50 Habilidades", + "checklists": "9 Listas de verificación", + "languages": "8 Idiomas" + }, "beforeAfter": { "title": "El Problema y la Solución", "beforeLabel": "Antes", "afterLabel": "Después", - "beforeFiles": "6 archivos de configuración. Siempre desincronizados.", + "beforeFiles": "9 archivos de configuración. Siempre desincronizados.", "afterFiles": "Una sola fuente. Auto-sincronizada con todas las herramientas.", "cursorrules": ".cursorrules", "claudeMd": "CLAUDE.md", @@ -30,25 +41,57 @@ "antigravityRules": ".antigravity/rules.md", "qRules": ".q/rules.md", "kiroRules": ".kiro/rules.md", + "windsurfRules": ".windsurfrules", + "aiderRules": ".aider.conf.yml", + "opencodeRules": ".opencode/rules.md", "singleSource": "codingbuddy-rules/.ai-rules/", "autoSynced": "Auto-sincronizado", - "alwaysCurrent": "Siempre actualizado" + "alwaysCurrent": "Siempre actualizado", + "impactTracked": "Impacto rastreado" }, "features": { "title": "Lo Que Obtienes", "universalRulesTitle": "Reglas Universales", - "universalRulesDesc": "Una fuente de verdad aplicada automáticamente a las 6 herramientas de codificación IA.", - "agentsTitle": "35 Agentes IA", - "agentsDesc": "Agentes especialistas en arquitectura, seguridad, testing, rendimiento y accesibilidad.", + "universalRulesDesc": "Una fuente de verdad aplicada automáticamente a las 9 herramientas de codificación IA.", + "agentsTitle": "37 Agentes Especialistas", + "agentsDesc": "Expertos de dominio en arquitectura, seguridad, testing, rendimiento y accesibilidad.", "workflowTitle": "Flujo de Trabajo Estructurado", "workflowDesc": "El ciclo PLAN → ACT → EVAL asegura calidad consistente en todo el desarrollo.", "qualityTitle": "Calidad Incorporada", "qualityDesc": "TDD, principios SOLID y cobertura de tests del 90%+ aplicados como práctica estándar.", - "mcpTitle": "Protocolo MCP", - "mcpDesc": "Model Context Protocol estándar para integración fluida de herramientas IA.", + "impactTitle": "Informes de Impacto de Sesión", + "impactDesc": "Evidencia medible de que la codificación IA está mejorando — problemas prevenidos, agentes desplegados, reglas aplicadas.", + "selfEvolvingTitle": "Reglas Auto-evolutivas", + "selfEvolvingDesc": "Reglas que aprenden de patrones de fallo repetidos y sugieren mejoras automáticamente.", + "skillsTitle": "50 Habilidades Integradas", + "skillsDesc": "Flujos de trabajo reutilizables para TDD, despliegue, revisión de código, depuración y más.", "zeroConfigTitle": "Sin Configuración", "zeroConfigDesc": "Un comando para instalar. Funciona de inmediato con todas las herramientas compatibles." }, + "workflowDemo": { + "title": "Tu flujo de trabajo IA, potenciado", + "subtitle": "Cuatro modos que llevan el desarrollo asistido por IA del caos a producción.", + "planTitle": "PLAN", + "planDesc": "Planificación con preguntas primero y aclaración inteligente. Los especialistas recomiendan arquitectura antes de una línea de código.", + "planDetail1": "La puerta de aclaración detecta ambigüedad", + "planDetail2": "Los especialistas recomiendan arquitectura", + "planDetail3": "Previsión de permisos antes de la ejecución", + "actTitle": "ACT", + "actDesc": "Ejecución con disciplina TDD. Aplicación de reglas en tiempo real previene desviaciones. Las puertas de calidad bloquean malos patrones.", + "actDetail1": "Ciclo TDD Red → Green → Refactor", + "actDetail2": "Aplicación de reglas en tiempo real", + "actDetail3": "Listas de verificación dinámicas por dominio", + "evalTitle": "EVAL", + "evalDesc": "El consejo de especialistas revisa independientemente. Revisión cruzada de hallazgos. Aprobación basada en consenso.", + "evalDetail1": "Revisión paralela de especialistas", + "evalDetail2": "Revisión cruzada y debate", + "evalDetail3": "Consenso: aprobar / preocupación / rechazar", + "autoTitle": "AUTO", + "autoDesc": "Ciclo totalmente autónomo. Itera PLAN → ACT → EVAL hasta cero problemas críticos. Despliega con confianza.", + "autoDetail1": "Iteración autónoma", + "autoDetail2": "Puerta de calidad: Critical=0, High=0", + "autoDetail3": "Garantía de producción" + }, "supportedTools": { "title": "Compatible con tus herramientas IA favoritas", "plus": "+ cualquier herramienta compatible con MCP", @@ -57,7 +100,25 @@ "codex": "Codex", "antigravity": "Antigravity", "amazonQ": "Amazon Q", - "kiro": "Kiro" + "kiro": "Kiro", + "windsurf": "Windsurf", + "aider": "Aider", + "opencode": "OpenCode" + }, + "hudShowcase": { + "title": "Inteligencia de un vistazo", + "subtitle": "Una barra de estado viva que respira con tu sesión — seguimiento de costos, ahorro de caché y reconocimiento de modo integrados.", + "buddyTitle": "Compañero Respirante", + "buddyDesc": "Avatar animado que reacciona a la fase de la sesión — inactivo, pensando, activo, bloqueado, victoria.", + "costTitle": "Velocidad de Costo", + "costDesc": "Seguimiento de tasa de gasto en tiempo real con indicadores de tendencia para evitar sorpresas en la facturación.", + "cacheTitle": "Ahorro de Caché", + "cacheDesc": "Ve exactamente cuánto te ahorra el caché de prompts por sesión.", + "modeTitle": "Arcoíris de Modo", + "modeDesc": "Gradientes de color por modo — azul para PLAN, verde para ACT, púrpura para EVAL, arcoíris para AUTO.", + "contextTitle": "Barra de Contexto", + "contextDesc": "Barra de progreso visual que muestra el uso de la ventana de contexto con umbrales de advertencia.", + "screenshotAlt": "Barra de estado HUD de Codingbuddy mostrando cara del compañero, velocidad de costo, ahorro de caché e indicador de modo" }, "tuiDashboard": { "title": "Panel de Agentes en Tiempo Real", @@ -76,7 +137,7 @@ "multiSession": "Múltiples sesiones de Claude Code comparten una sola ventana TUI a través de IPC" }, "agents": { - "title": "35 Agentes Especialistas", + "title": "37 Agentes Especialistas", "subtitle": "Experiencia enfocada para cada aspecto del desarrollo", "filter": "Filtrar por categoría", "allCategories": "Todos", @@ -90,7 +151,29 @@ "Security": "Seguridad", "UX": "UX" }, - "count": "{count} agentes" + "count": "{count} agentes", + "stacks": "Stacks de Agentes", + "stacksSubtitle": "Equipos preconstruidos para flujos de trabajo comunes", + "fullStack": "Full-Stack", + "apiDev": "Desarrollo API", + "dataPipeline": "Pipeline de Datos", + "frontendPolish": "Pulido Frontend", + "mlInfra": "Infraestructura ML", + "securityAudit": "Auditoría de Seguridad" + }, + "skillsLibrary": { + "title": "50 Habilidades Integradas", + "subtitle": "Flujos de trabajo reutilizables que codifican las mejores prácticas en acciones repetibles", + "development": "Desarrollo", + "teamGit": "Equipo & Git", + "review": "Revisión & Código", + "intelligence": "Inteligencia", + "specialized": "Especializado", + "developmentSkills": "TDD, Refactorización, Depuración, Optimización de Rendimiento, Lluvia de Ideas, Modernización Legacy, Migración DB, Diseño API, Diseño Frontend, Constructor MCP", + "teamGitSkills": "Ship, Git Master, Worktrees, Agentes Paralelos, Desarrollo Subagente, Issues Cross-Repo", + "reviewSkills": "Revisión PR, PR Todo-en-Uno, Revisión de Código, Explicación de Código, Análisis de Errores, Corrección de Build, Verificación", + "intelligenceSkills": "Retrospectiva, Auditoría de Seguridad, Deuda Técnica, Autoría de Reglas, Creador de Skills, Ingeniería de Prompts", + "specializedSkills": "Respuesta a Incidentes, Onboarding, Lista de Despliegue, Presupuesto de Costos, Arquitectura de Widgets, Diseño de Agentes" }, "quickStart": { "title": "Inicio Rápido", @@ -102,17 +185,20 @@ "step3": "Codificar", "step3Desc": "Usa los modos PLAN, ACT, EVAL con agentes especialistas", "copy": "Copiar", - "copied": "¡Copiado!" + "copied": "¡Copiado!", + "tab_claude": "Claude Code", + "tab_cursor": "Cursor", + "tab_codex": "Codex" }, "ctaFooter": { - "title": "¿Listo para unificar tu codificación IA?", + "title": "¿Listo para demostrar que tu codificación IA funciona?", "command": "npx codingbuddy init", "github": "Star en GitHub", "docs": "Documentación", "copy": "Copiar", "copied": "¡Copiado!", "copyright": "© {year} Codingbuddy. Licencia MIT.", - "madeWith": "Hecho para desarrolladores, por desarrolladores." + "madeWith": "37 agentes. 9 herramientas. 50 habilidades. Un comando." }, "header": { "nav": { @@ -151,8 +237,8 @@ "decline": "Rechazar" }, "metadata": { - "title": "Codingbuddy - Reglas Multi-IA para Codificación Consistente", - "description": "Un conjunto de reglas para Cursor, Claude Code, Codex, Antigravity, Q y Kiro. Codificación asistida por IA consistente en todas tus herramientas." + "title": "Codingbuddy - Demuestra que tu codificación con IA realmente mejora", + "description": "Un comando para 9 herramientas IA. 37 agentes especialistas. Impacto medible en cada sesión. Funciona con Cursor, Claude Code, Codex, Windsurf y más." }, "i18n": {} } diff --git a/apps/landing-page/messages/ja.json b/apps/landing-page/messages/ja.json index ba7744b0..4f4ef9ec 100644 --- a/apps/landing-page/messages/ja.json +++ b/apps/landing-page/messages/ja.json @@ -1,28 +1,39 @@ { "hero": { - "title": "一貫したコーディングのためのマルチAIルール", - "subtitle": "Cursor、Claude Code、Codex、Antigravity、Q、Kiro対応の統一ルールセット。", + "title": "AIコーディングが本当に改善されていることを証明しよう", + "subtitle": "1つのコマンド。9つのAIツール。毎セッション測定可能なインパクト。", "cta": "始める", "github": "GitHubでStarする", "terminalTitle": "~/your-project", "terminalCmd": "npx codingbuddy init", "terminalInstalling": "codingbuddy-rulesをインストール中...", - "terminalRulesSynced": "6つのAIツールにルールを同期", - "terminalAgents": "35の専門エージェントを有効化", + "terminalRulesSynced": "9つのAIツールにルールを同期", + "terminalAgents": "37の専門エージェントを有効化", "terminalWorkflow": "PLAN → ACT → EVALワークフロー準備完了", + "terminalSkills": "50の組み込みスキルをロード", "terminalCursorrules": ".cursorrules", "terminalClaudeMd": "CLAUDE.md", "terminalCodex": ".codex/", "terminalAntigravity": ".antigravity/", "terminalQ": ".q/", "terminalKiro": ".kiro/", + "terminalWindsurf": ".windsurfrules", + "terminalAider": ".aider.conf.yml", + "terminalOpenCode": ".opencode/", "terminalReady": "準備完了!1つのソース、すべてのツール。" }, + "socialProof": { + "agents": "37 エージェント", + "tools": "9 AIツール", + "skills": "50 スキル", + "checklists": "9 チェックリスト", + "languages": "8 言語" + }, "beforeAfter": { "title": "問題と解決策", "beforeLabel": "導入前", "afterLabel": "導入後", - "beforeFiles": "6つの設定ファイル。常に同期が崩れる。", + "beforeFiles": "9つの設定ファイル。常に同期が崩れる。", "afterFiles": "単一ソース。すべてのツールに自動同期。", "cursorrules": ".cursorrules", "claudeMd": "CLAUDE.md", @@ -30,25 +41,57 @@ "antigravityRules": ".antigravity/rules.md", "qRules": ".q/rules.md", "kiroRules": ".kiro/rules.md", + "windsurfRules": ".windsurfrules", + "aiderRules": ".aider.conf.yml", + "opencodeRules": ".opencode/rules.md", "singleSource": "codingbuddy-rules/.ai-rules/", "autoSynced": "自動同期", - "alwaysCurrent": "常に最新" + "alwaysCurrent": "常に最新", + "impactTracked": "インパクト追跡" }, "features": { "title": "提供する機能", "universalRulesTitle": "統一ルール", - "universalRulesDesc": "1つの信頼できるソースが6つのAIコーディングツールに自動適用されます。", - "agentsTitle": "35のAIエージェント", - "agentsDesc": "アーキテクチャ、セキュリティ、テスト、パフォーマンス、アクセシビリティの専門エージェント。", + "universalRulesDesc": "1つの信頼できるソースが9つのAIコーディングツールに自動適用されます。", + "agentsTitle": "37の専門エージェント", + "agentsDesc": "アーキテクチャ、セキュリティ、テスト、パフォーマンス、アクセシビリティのドメイン専門家。", "workflowTitle": "構造化されたワークフロー", "workflowDesc": "PLAN → ACT → EVALサイクルで、すべての開発で一貫した品質を保証します。", "qualityTitle": "組み込みの品質基準", "qualityDesc": "TDD、SOLID原則、90%以上のテストカバレッジが標準プラクティスとして適用されます。", - "mcpTitle": "MCPプロトコル", - "mcpDesc": "シームレスなAIツール統合のための標準Model Context Protocol。", + "impactTitle": "セッションインパクトレポート", + "impactDesc": "AIコーディングが改善されている測定可能な証拠 — 防止された問題、投入されたエージェント、適用されたルール。", + "selfEvolvingTitle": "自己進化ルール", + "selfEvolvingDesc": "繰り返される失敗パターンから学習し、自動的に改善を提案するルール。", + "skillsTitle": "50の組み込みスキル", + "skillsDesc": "TDD、デプロイ、コードレビュー、デバッグなどの再利用可能なワークフロー。", "zeroConfigTitle": "設定不要", "zeroConfigDesc": "1つのコマンドでインストール。対応するすべてのツールですぐに使えます。" }, + "workflowDemo": { + "title": "AIコーディングワークフローをスーパーチャージ", + "subtitle": "AI支援開発を混沌からプロダクション対応に変える4つのモード。", + "planTitle": "PLAN", + "planDesc": "質問優先の計画とインテリジェントな明確化。コード1行書く前に専門家がアーキテクチャを推薦。", + "planDetail1": "明確化ゲートが曖昧さをキャッチ", + "planDetail2": "専門家がアーキテクチャを推薦", + "planDetail3": "実行前の権限予測", + "actTitle": "ACT", + "actDesc": "TDD規律で実行。リアルタイムルール適用でドリフトを防止。品質ゲートが悪いパターンをブロック。", + "actDetail1": "TDD Red → Green → Refactorサイクル", + "actDetail2": "リアルタイムルール適用", + "actDetail3": "ドメイン別動的チェックリスト", + "evalTitle": "EVAL", + "evalDesc": "専門家評議会が独立してレビュー。クロスレビュー。コンセンサス駆動の承認。", + "evalDetail1": "並列専門家レビュー", + "evalDetail2": "クロスレビューと議論", + "evalDetail3": "コンセンサス: 承認 / 懸念 / 却下", + "autoTitle": "AUTO", + "autoDesc": "完全自律サイクル。クリティカル問題ゼロまでPLAN → ACT → EVALを反復。自信を持ってデプロイ。", + "autoDetail1": "自律反復", + "autoDetail2": "品質ゲート: Critical=0, High=0", + "autoDetail3": "プロダクション対応保証" + }, "supportedTools": { "title": "お使いのAIツールに対応しています", "plus": "+ すべてのMCP対応ツール", @@ -57,7 +100,25 @@ "codex": "Codex", "antigravity": "Antigravity", "amazonQ": "Amazon Q", - "kiro": "Kiro" + "kiro": "Kiro", + "windsurf": "Windsurf", + "aider": "Aider", + "opencode": "OpenCode" + }, + "hudShowcase": { + "title": "一目でわかるインテリジェンス", + "subtitle": "セッションとともに呼吸する生きたステータスバー — コスト追跡、キャッシュ節約、モード認識が内蔵。", + "buddyTitle": "ブリージングバディ", + "buddyDesc": "セッションフェーズに反応するアニメーションアバター — アイドル、思考、アクティブ、ブロック、勝利。", + "costTitle": "コスト速度", + "costDesc": "リアルタイム支出レート追跡とトレンド指標で請求サプライズを防止。", + "cacheTitle": "キャッシュ節約", + "cacheDesc": "セッションごとのプロンプトキャッシュ節約額を正確に確認。", + "modeTitle": "モードレインボー", + "modeDesc": "モード別カラーグラデーション — PLANは青、ACTは緑、EVALは紫、AUTOはレインボー。", + "contextTitle": "コンテキストバー", + "contextDesc": "警告しきい値付きのビジュアルプログレスバーでコンテキストウィンドウ使用量を表示。", + "screenshotAlt": "バディフェイス、コスト速度、キャッシュ節約、モードインジケーターを表示するCodingbuddy HUDステータスバー" }, "tuiDashboard": { "title": "リアルタイムエージェントダッシュボード", @@ -76,7 +137,7 @@ "multiSession": "複数のClaude CodeセッションがIPCを通じて1つのTUIウィンドウを共有します" }, "agents": { - "title": "35の専門エージェント", + "title": "37の専門エージェント", "subtitle": "開発のあらゆる側面に特化した専門知識", "filter": "カテゴリで絞り込み", "allCategories": "すべて", @@ -90,7 +151,29 @@ "Security": "セキュリティ", "UX": "UX" }, - "count": "{count}エージェント" + "count": "{count}エージェント", + "stacks": "エージェントスタック", + "stacksSubtitle": "一般的なワークフロー向けプリビルトチーム", + "fullStack": "フルスタック", + "apiDev": "API開発", + "dataPipeline": "データパイプライン", + "frontendPolish": "フロントエンドポリッシュ", + "mlInfra": "MLインフラ", + "securityAudit": "セキュリティ監査" + }, + "skillsLibrary": { + "title": "50の組み込みスキル", + "subtitle": "ベストプラクティスを再現可能なアクションに体系化した再利用ワークフロー", + "development": "開発", + "teamGit": "チーム & Git", + "review": "レビュー & コード", + "intelligence": "インテリジェンス", + "specialized": "専門分野", + "developmentSkills": "TDD, リファクタリング, デバッグ, パフォーマンス最適化, ブレインストーミング, レガシーモダナイゼーション, DBマイグレーション, APIデザイン, フロントエンドデザイン, MCPビルダー", + "teamGitSkills": "Ship, Git Master, ワークツリー, 並列エージェント, サブエージェント開発, クロスリポイシュー", + "reviewSkills": "PRレビュー, PRオールインワン, コードレビュー, コード説明, エラー分析, ビルドフィックス, 検証", + "intelligenceSkills": "振り返り, セキュリティ監査, 技術的負債, ルール作成, スキルクリエイター, プロンプトエンジニアリング", + "specializedSkills": "インシデント対応, オンボーディング, デプロイチェックリスト, コスト予算, ウィジェットアーキテクチャ, エージェントデザイン" }, "quickStart": { "title": "クイックスタート", @@ -102,17 +185,20 @@ "step3": "コーディング", "step3Desc": "専門エージェントとPLAN、ACT、EVALモードを活用", "copy": "コピー", - "copied": "コピーしました!" + "copied": "コピーしました!", + "tab_claude": "Claude Code", + "tab_cursor": "Cursor", + "tab_codex": "Codex" }, "ctaFooter": { - "title": "AIコーディングを統一する準備はできましたか?", + "title": "AIコーディングが効果的だと証明する準備はできましたか?", "command": "npx codingbuddy init", "github": "GitHubでStarする", "docs": "ドキュメント", "copy": "コピー", "copied": "コピーしました!", "copyright": "© {year} Codingbuddy. MITライセンス。", - "madeWith": "開発者のために、開発者が作りました。" + "madeWith": "37エージェント。9ツール。50スキル。1コマンド。" }, "header": { "nav": { @@ -151,8 +237,8 @@ "decline": "拒否" }, "metadata": { - "title": "Codingbuddy - 一貫したコーディングのためのマルチAIルール", - "description": "Cursor、Claude Code、Codex、Antigravity、Q、Kiro対応の統一ルールセット。すべてのツールで一貫したAI支援コーディング。" + "title": "Codingbuddy - AIコーディングが本当に改善されていることを証明", + "description": "1つのコマンドで9つのAIツール。37の専門エージェント。毎セッション測定可能なインパクト。Cursor、Claude Code、Codex、Windsurfなどに対応。" }, "i18n": {} } diff --git a/apps/landing-page/messages/ko.json b/apps/landing-page/messages/ko.json index 90228e9b..7ebd21f3 100644 --- a/apps/landing-page/messages/ko.json +++ b/apps/landing-page/messages/ko.json @@ -1,28 +1,39 @@ { "hero": { - "title": "일관된 코딩을 위한 멀티 AI 규칙", - "subtitle": "Cursor, Claude Code, Codex, Antigravity, Q, Kiro를 위한 하나의 규칙 세트.", + "title": "AI 코딩이 진짜 나아지고 있다는 걸 증명하세요", + "subtitle": "하나의 명령어. 9개 AI 도구. 매 세션마다 측정 가능한 임팩트.", "cta": "시작하기", "github": "GitHub에서 Star", "terminalTitle": "~/your-project", "terminalCmd": "npx codingbuddy init", "terminalInstalling": "codingbuddy-rules 설치 중...", - "terminalRulesSynced": "6개 AI 도구에 규칙 동기화 완료", - "terminalAgents": "35개 전문 에이전트 활성화", + "terminalRulesSynced": "9개 AI 도구에 규칙 동기화 완료", + "terminalAgents": "37개 전문 에이전트 활성화", "terminalWorkflow": "PLAN → ACT → EVAL 워크플로우 준비 완료", + "terminalSkills": "50개 내장 스킬 로드 완료", "terminalCursorrules": ".cursorrules", "terminalClaudeMd": "CLAUDE.md", "terminalCodex": ".codex/", "terminalAntigravity": ".antigravity/", "terminalQ": ".q/", "terminalKiro": ".kiro/", + "terminalWindsurf": ".windsurfrules", + "terminalAider": ".aider.conf.yml", + "terminalOpenCode": ".opencode/", "terminalReady": "준비 완료! 하나의 소스, 모든 도구." }, + "socialProof": { + "agents": "37개 에이전트", + "tools": "9개 AI 도구", + "skills": "50개 스킬", + "checklists": "9개 체크리스트", + "languages": "8개 언어" + }, "beforeAfter": { "title": "문제와 해결책", "beforeLabel": "이전", "afterLabel": "이후", - "beforeFiles": "6개의 설정 파일. 항상 동기화되지 않음.", + "beforeFiles": "9개의 설정 파일. 항상 동기화되지 않음.", "afterFiles": "단일 소스. 모든 도구에 자동 동기화.", "cursorrules": ".cursorrules", "claudeMd": "CLAUDE.md", @@ -30,25 +41,57 @@ "antigravityRules": ".antigravity/rules.md", "qRules": ".q/rules.md", "kiroRules": ".kiro/rules.md", + "windsurfRules": ".windsurfrules", + "aiderRules": ".aider.conf.yml", + "opencodeRules": ".opencode/rules.md", "singleSource": "codingbuddy-rules/.ai-rules/", "autoSynced": "자동 동기화", - "alwaysCurrent": "항상 최신" + "alwaysCurrent": "항상 최신", + "impactTracked": "임팩트 추적" }, "features": { "title": "제공하는 기능", "universalRulesTitle": "통합 규칙", - "universalRulesDesc": "하나의 진실 공급원이 6개 AI 코딩 도구에 자동으로 적용됩니다.", - "agentsTitle": "35개 AI 에이전트", - "agentsDesc": "아키텍처, 보안, 테스팅, 성능, 접근성을 위한 전문 에이전트.", + "universalRulesDesc": "하나의 진실 공급원이 9개 AI 코딩 도구에 자동으로 적용됩니다.", + "agentsTitle": "37개 전문 에이전트", + "agentsDesc": "아키텍처, 보안, 테스팅, 성능, 접근성을 위한 도메인 전문가.", "workflowTitle": "구조화된 워크플로우", "workflowDesc": "PLAN → ACT → EVAL 사이클로 모든 개발에서 일관된 품질을 보장합니다.", "qualityTitle": "내장된 품질 기준", "qualityDesc": "TDD, SOLID 원칙, 90% 이상 테스트 커버리지가 표준 관행으로 적용됩니다.", - "mcpTitle": "MCP 프로토콜", - "mcpDesc": "원활한 AI 도구 통합을 위한 표준 Model Context Protocol.", + "impactTitle": "세션 임팩트 리포트", + "impactDesc": "AI 코딩이 개선되고 있다는 측정 가능한 증거 — 방지된 이슈, 투입된 에이전트, 적용된 규칙.", + "selfEvolvingTitle": "자기 진화 규칙", + "selfEvolvingDesc": "반복되는 실패 패턴을 학습하고 자동으로 개선을 제안하는 규칙.", + "skillsTitle": "50개 내장 스킬", + "skillsDesc": "TDD, 배포, 코드 리뷰, 디버깅 등을 위한 재사용 가능한 워크플로우.", "zeroConfigTitle": "설정 불필요", "zeroConfigDesc": "하나의 명령어로 설치. 지원하는 모든 도구에서 바로 사용 가능." }, + "workflowDemo": { + "title": "AI 코딩 워크플로우, 슈퍼차지", + "subtitle": "AI 지원 개발을 혼돈에서 프로덕션 레디로 만드는 네 가지 모드.", + "planTitle": "PLAN", + "planDesc": "질문 우선 기획과 지능형 명확화. 코드 한 줄 쓰기 전에 전문가가 아키텍처를 추천합니다.", + "planDetail1": "명확화 게이트가 모호성을 잡아냄", + "planDetail2": "전문가가 아키텍처 추천", + "planDetail3": "실행 전 권한 예측", + "actTitle": "ACT", + "actDesc": "TDD 규율로 실행. 실시간 규칙 적용이 드리프트를 방지. 품질 게이트가 나쁜 패턴을 차단.", + "actDetail1": "TDD Red → Green → Refactor 사이클", + "actDetail2": "실시간 규칙 적용", + "actDetail3": "도메인별 동적 체크리스트", + "evalTitle": "EVAL", + "evalDesc": "전문가 위원회가 독립적으로 리뷰. 교차 리뷰. 합의 기반 승인.", + "evalDetail1": "병렬 전문가 리뷰", + "evalDetail2": "교차 리뷰 및 토론", + "evalDetail3": "합의: 승인 / 우려 / 거부", + "autoTitle": "AUTO", + "autoDesc": "완전 자율 사이클. Critical 이슈 0이 될 때까지 PLAN → ACT → EVAL 반복. 확신을 갖고 배포.", + "autoDetail1": "자율 반복", + "autoDetail2": "품질 게이트: Critical=0, High=0", + "autoDetail3": "프로덕션 레디 보장" + }, "supportedTools": { "title": "즐겨 사용하는 AI 도구와 함께 작동합니다", "plus": "+ 모든 MCP 호환 도구", @@ -57,7 +100,25 @@ "codex": "Codex", "antigravity": "Antigravity", "amazonQ": "Amazon Q", - "kiro": "Kiro" + "kiro": "Kiro", + "windsurf": "Windsurf", + "aider": "Aider", + "opencode": "OpenCode" + }, + "hudShowcase": { + "title": "한눈에 보는 인텔리전스", + "subtitle": "세션과 함께 숨쉬는 살아있는 상태바 — 비용 추적, 캐시 절감, 모드 인식이 내장되어 있습니다.", + "buddyTitle": "브리딩 버디", + "buddyDesc": "세션 단계에 따라 반응하는 애니메이션 아바타 — 대기, 사고, 활성, 차단, 승리.", + "costTitle": "비용 속도", + "costDesc": "실시간 지출률 추적과 트렌드 지표로 빌링 서프라이즈를 방지합니다.", + "cacheTitle": "캐시 절감", + "cacheDesc": "세션별 프롬프트 캐싱 절감액을 정확히 확인합니다.", + "modeTitle": "모드 레인보우", + "modeDesc": "모드별 컬러 그라데이션 — PLAN은 파랑, ACT는 초록, EVAL은 보라, AUTO는 레인보우.", + "contextTitle": "컨텍스트 바", + "contextDesc": "경고 임계값이 있는 시각적 프로그레스 바로 컨텍스트 윈도우 사용량을 표시합니다.", + "screenshotAlt": "버디 페이스, 비용 속도, 캐시 절감, 모드 인디케이터를 보여주는 Codingbuddy HUD 상태바" }, "tuiDashboard": { "title": "실시간 에이전트 대시보드", @@ -76,7 +137,7 @@ "multiSession": "여러 Claude Code 세션이 IPC를 통해 하나의 TUI 창을 공유합니다" }, "agents": { - "title": "35개 전문 에이전트", + "title": "37개 전문 에이전트", "subtitle": "개발의 모든 측면을 위한 전문 지식", "filter": "카테고리별 필터", "allCategories": "전체", @@ -90,7 +151,29 @@ "Security": "보안", "UX": "UX" }, - "count": "{count}개 에이전트" + "count": "{count}개 에이전트", + "stacks": "에이전트 스택", + "stacksSubtitle": "일반적인 워크플로우를 위한 사전 구성 팀", + "fullStack": "풀스택", + "apiDev": "API 개발", + "dataPipeline": "데이터 파이프라인", + "frontendPolish": "프론트엔드 폴리시", + "mlInfra": "ML 인프라", + "securityAudit": "보안 감사" + }, + "skillsLibrary": { + "title": "50개 내장 스킬", + "subtitle": "모범 사례를 반복 가능한 액션으로 체계화한 재사용 워크플로우", + "development": "개발", + "teamGit": "팀 & Git", + "review": "리뷰 & 코드", + "intelligence": "인텔리전스", + "specialized": "전문 분야", + "developmentSkills": "TDD, 리팩토링, 디버깅, 성능 최적화, 브레인스토밍, 레거시 모더나이제이션, DB 마이그레이션, API 디자인, 프론트엔드 디자인, MCP 빌더", + "teamGitSkills": "Ship, Git Master, 워크트리, 병렬 에이전트, 서브에이전트 개발, 크로스 레포 이슈", + "reviewSkills": "PR 리뷰, PR 올인원, 코드 리뷰, 코드 설명, 에러 분석, 빌드 픽스, 검증", + "intelligenceSkills": "회고, 보안 감사, 기술 부채, 규칙 작성, 스킬 크리에이터, 프롬프트 엔지니어링", + "specializedSkills": "인시던트 대응, 온보딩, 배포 체크리스트, 비용 예산, 위젯 아키텍처, 에이전트 디자인" }, "quickStart": { "title": "빠른 시작", @@ -102,17 +185,20 @@ "step3": "코딩", "step3Desc": "전문 에이전트와 함께 PLAN, ACT, EVAL 모드를 사용하세요", "copy": "복사", - "copied": "복사 완료!" + "copied": "복사 완료!", + "tab_claude": "Claude Code", + "tab_cursor": "Cursor", + "tab_codex": "Codex" }, "ctaFooter": { - "title": "AI 코딩을 통합할 준비가 되셨나요?", + "title": "AI 코딩이 효과가 있다는 걸 증명할 준비가 되셨나요?", "command": "npx codingbuddy init", "github": "GitHub에서 Star", "docs": "문서", "copy": "복사", "copied": "복사 완료!", "copyright": "© {year} Codingbuddy. MIT 라이선스.", - "madeWith": "개발자를 위해, 개발자가 만들었습니다." + "madeWith": "37개 에이전트. 9개 도구. 50개 스킬. 하나의 명령어." }, "header": { "nav": { @@ -151,8 +237,8 @@ "decline": "거부" }, "metadata": { - "title": "Codingbuddy - 일관된 코딩을 위한 멀티 AI 규칙", - "description": "Cursor, Claude Code, Codex, Antigravity, Q, Kiro를 위한 하나의 규칙 세트. 모든 도구에서 일관된 AI 지원 코딩." + "title": "Codingbuddy - AI 코딩이 진짜 나아지고 있다는 걸 증명하세요", + "description": "하나의 명령어로 9개 AI 도구. 37개 전문 에이전트. 매 세션마다 측정 가능한 임팩트. Cursor, Claude Code, Codex, Windsurf 등과 함께." }, "i18n": {} } diff --git a/apps/landing-page/messages/zh-CN.json b/apps/landing-page/messages/zh-CN.json index d2dcf71c..b586bb93 100644 --- a/apps/landing-page/messages/zh-CN.json +++ b/apps/landing-page/messages/zh-CN.json @@ -1,28 +1,39 @@ { "hero": { - "title": "统一 AI 编码规则", - "subtitle": "一套规则适用于 Cursor、Claude Code、Codex、Antigravity、Q 和 Kiro。", + "title": "证明你的 AI 编码确实在改进", + "subtitle": "一条命令。9 个 AI 工具。每次会话可衡量的影响。", "cta": "开始使用", "github": "在 GitHub 上 Star", "terminalTitle": "~/your-project", "terminalCmd": "npx codingbuddy init", "terminalInstalling": "正在安装 codingbuddy-rules...", - "terminalRulesSynced": "规则已同步到 6 个 AI 工具", - "terminalAgents": "35 个专家代理已激活", + "terminalRulesSynced": "规则已同步到 9 个 AI 工具", + "terminalAgents": "37 个专家代理已激活", "terminalWorkflow": "PLAN → ACT → EVAL 工作流已就绪", + "terminalSkills": "50 个内置技能已加载", "terminalCursorrules": ".cursorrules", "terminalClaudeMd": "CLAUDE.md", "terminalCodex": ".codex/", "terminalAntigravity": ".antigravity/", "terminalQ": ".q/", "terminalKiro": ".kiro/", + "terminalWindsurf": ".windsurfrules", + "terminalAider": ".aider.conf.yml", + "terminalOpenCode": ".opencode/", "terminalReady": "准备就绪!一个源头,所有工具。" }, + "socialProof": { + "agents": "37 个代理", + "tools": "9 个 AI 工具", + "skills": "50 个技能", + "checklists": "9 个检查清单", + "languages": "8 种语言" + }, "beforeAfter": { "title": "问题与解决方案", "beforeLabel": "之前", "afterLabel": "之后", - "beforeFiles": "6 个配置文件,始终不同步。", + "beforeFiles": "9 个配置文件,始终不同步。", "afterFiles": "单一源头,自动同步到所有工具。", "cursorrules": ".cursorrules", "claudeMd": "CLAUDE.md", @@ -30,25 +41,57 @@ "antigravityRules": ".antigravity/rules.md", "qRules": ".q/rules.md", "kiroRules": ".kiro/rules.md", + "windsurfRules": ".windsurfrules", + "aiderRules": ".aider.conf.yml", + "opencodeRules": ".opencode/rules.md", "singleSource": "codingbuddy-rules/.ai-rules/", "autoSynced": "自动同步", - "alwaysCurrent": "始终最新" + "alwaysCurrent": "始终最新", + "impactTracked": "影响追踪" }, "features": { "title": "您将获得", "universalRulesTitle": "统一规则", - "universalRulesDesc": "一个真实来源自动应用于所有 6 个 AI 编码工具。", - "agentsTitle": "35 个 AI 代理", - "agentsDesc": "为架构、安全、测试、性能和可访问性提供专业代理。", + "universalRulesDesc": "一个真实来源自动应用于所有 9 个 AI 编码工具。", + "agentsTitle": "37 个专家代理", + "agentsDesc": "为架构、安全、测试、性能和可访问性提供的领域专家。", "workflowTitle": "结构化工作流", "workflowDesc": "PLAN → ACT → EVAL 循环确保所有开发中的一致质量。", "qualityTitle": "内置质量标准", "qualityDesc": "TDD、SOLID 原则和 90% 以上测试覆盖率作为标准实践执行。", - "mcpTitle": "MCP 协议", - "mcpDesc": "标准 Model Context Protocol,实现无缝 AI 工具集成。", + "impactTitle": "会话影响报告", + "impactDesc": "AI 编码正在改进的可衡量证据 — 预防的问题、投入的代理、执行的规则。", + "selfEvolvingTitle": "自进化规则", + "selfEvolvingDesc": "从重复失败模式中学习并自动建议改进的规则。", + "skillsTitle": "50 个内置技能", + "skillsDesc": "用于 TDD、部署、代码审查、调试等的可重用工作流。", "zeroConfigTitle": "零配置", "zeroConfigDesc": "一条命令即可安装。所有支持的工具开箱即用。" }, + "workflowDemo": { + "title": "AI 编码工作流,全面增强", + "subtitle": "四种模式将 AI 辅助开发从混乱变为生产就绪。", + "planTitle": "PLAN", + "planDesc": "问题优先的规划和智能澄清。一行代码之前,专家推荐架构。", + "planDetail1": "澄清门控捕获歧义", + "planDetail2": "专家推荐架构", + "planDetail3": "执行前权限预测", + "actTitle": "ACT", + "actDesc": "以 TDD 纪律执行。实时规则执行防止偏移。质量门控阻止不良模式。", + "actDetail1": "TDD Red → Green → Refactor 循环", + "actDetail2": "实时规则执行", + "actDetail3": "按领域动态检查清单", + "evalTitle": "EVAL", + "evalDesc": "专家委员会独立审查。交叉审查发现。共识驱动的批准。", + "evalDetail1": "并行专家审查", + "evalDetail2": "交叉审查和讨论", + "evalDetail3": "共识:批准 / 关注 / 拒绝", + "autoTitle": "AUTO", + "autoDesc": "完全自主循环。迭代 PLAN → ACT → EVAL 直到零关键问题。自信地部署。", + "autoDetail1": "自主迭代", + "autoDetail2": "质量门控:Critical=0, High=0", + "autoDetail3": "生产就绪保证" + }, "supportedTools": { "title": "支持您喜爱的 AI 工具", "plus": "+ 所有 MCP 兼容工具", @@ -57,26 +100,44 @@ "codex": "Codex", "antigravity": "Antigravity", "amazonQ": "Amazon Q", - "kiro": "Kiro" + "kiro": "Kiro", + "windsurf": "Windsurf", + "aider": "Aider", + "opencode": "OpenCode" + }, + "hudShowcase": { + "title": "一目了然的智能", + "subtitle": "与会话一起呼吸的活状态栏 — 内置成本追踪、缓存节省和模式感知。", + "buddyTitle": "呼吸伙伴", + "buddyDesc": "根据会话阶段反应的动画头像 — 空闲、思考、活跃、阻塞、胜利。", + "costTitle": "成本速度", + "costDesc": "实时支出率追踪和趋势指标,防止账单惊喜。", + "cacheTitle": "缓存节省", + "cacheDesc": "准确查看每次会话的提示缓存节省金额。", + "modeTitle": "模式彩虹", + "modeDesc": "按模式的颜色渐变 — PLAN 蓝色、ACT 绿色、EVAL 紫色、AUTO 彩虹。", + "contextTitle": "上下文栏", + "contextDesc": "带警告阈值的可视进度条显示上下文窗口使用情况。", + "screenshotAlt": "显示伙伴头像、成本速度、缓存节省和模式指示器的 Codingbuddy HUD 状态栏" }, "tuiDashboard": { "title": "实时代理仪表板", - "subtitle": "通过内置终端UI实时监控AI代理的工作状态。", - "screenshotAlt": "显示代理流水线、活动图表和任务进度的Codingbuddy TUI仪表板", + "subtitle": "通过内置终端 UI 实时监控 AI 代理的工作状态。", + "screenshotAlt": "显示代理流水线、活动图表和任务进度的 Codingbuddy TUI 仪表板", "feature1Title": "FlowMap", "feature1Desc": "显示活跃代理、阶段和实时进度的可视化流水线", "feature2Title": "Focused Agent", "feature2Desc": "带有迷你活动图和进度条的活跃代理实时视图", "feature3Title": "Checklist", - "feature3Desc": "与PLAN/ACT/EVAL上下文同步的任务完成跟踪", + "feature3Desc": "与 PLAN/ACT/EVAL 上下文同步的任务完成跟踪", "feature4Title": "Activity Chart", "feature4Desc": "代理工作时实时更新的工具调用条形图", "command": "npx codingbuddy tui", "commandLabel": "在单独终端中启动", - "multiSession": "多个Claude Code会话通过IPC共享同一个TUI窗口" + "multiSession": "多个 Claude Code 会话通过 IPC 共享同一个 TUI 窗口" }, "agents": { - "title": "35 个专家代理", + "title": "37 个专家代理", "subtitle": "为开发的各个方面提供专业知识", "filter": "按类别筛选", "allCategories": "全部", @@ -90,7 +151,29 @@ "Security": "安全", "UX": "用户体验" }, - "count": "{count} 个代理" + "count": "{count} 个代理", + "stacks": "代理栈", + "stacksSubtitle": "常见工作流的预构建团队", + "fullStack": "全栈", + "apiDev": "API 开发", + "dataPipeline": "数据管道", + "frontendPolish": "前端打磨", + "mlInfra": "ML 基础设施", + "securityAudit": "安全审计" + }, + "skillsLibrary": { + "title": "50 个内置技能", + "subtitle": "将最佳实践体系化为可重复操作的可重用工作流", + "development": "开发", + "teamGit": "团队 & Git", + "review": "审查 & 代码", + "intelligence": "智能", + "specialized": "专业领域", + "developmentSkills": "TDD, 重构, 调试, 性能优化, 头脑风暴, 遗留系统现代化, 数据库迁移, API 设计, 前端设计, MCP 构建器", + "teamGitSkills": "Ship, Git Master, 工作树, 并行代理, 子代理开发, 跨仓库问题", + "reviewSkills": "PR 审查, PR 一体化, 代码审查, 代码说明, 错误分析, 构建修复, 验证", + "intelligenceSkills": "回顾, 安全审计, 技术债务, 规则编写, 技能创建器, 提示工程", + "specializedSkills": "事件响应, 入职, 部署检查清单, 成本预算, 组件架构, 代理设计" }, "quickStart": { "title": "快速入门", @@ -102,17 +185,20 @@ "step3": "编码", "step3Desc": "使用 PLAN、ACT、EVAL 模式和专业代理", "copy": "复制", - "copied": "已复制!" + "copied": "已复制!", + "tab_claude": "Claude Code", + "tab_cursor": "Cursor", + "tab_codex": "Codex" }, "ctaFooter": { - "title": "准备好统一您的 AI 编码了吗?", + "title": "准备好证明你的 AI 编码有效了吗?", "command": "npx codingbuddy init", "github": "在 GitHub 上 Star", "docs": "文档", "copy": "复制", "copied": "已复制!", "copyright": "© {year} Codingbuddy. MIT 许可证。", - "madeWith": "为开发者打造,由开发者创建。" + "madeWith": "37 个代理。9 个工具。50 个技能。一条命令。" }, "header": { "nav": { @@ -151,8 +237,8 @@ "decline": "拒绝" }, "metadata": { - "title": "Codingbuddy - 统一 AI 编码规则", - "description": "一套规则适用于 Cursor、Claude Code、Codex、Antigravity、Q 和 Kiro。所有工具中一致的 AI 辅助编码。" + "title": "Codingbuddy - 证明你的 AI 编码确实在改进", + "description": "一条命令适配 9 个 AI 工具。37 个专家代理。每次会话可衡量的影响。支持 Cursor、Claude Code、Codex、Windsurf 等。" }, "i18n": {} } diff --git a/apps/landing-page/src/app/[locale]/@hud_showcase/default.tsx b/apps/landing-page/src/app/[locale]/@hud_showcase/default.tsx new file mode 100644 index 00000000..d2a72a76 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@hud_showcase/default.tsx @@ -0,0 +1,2 @@ +const Default = () => null; +export default Default; diff --git a/apps/landing-page/src/app/[locale]/@hud_showcase/error.tsx b/apps/landing-page/src/app/[locale]/@hud_showcase/error.tsx new file mode 100644 index 00000000..419fd055 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@hud_showcase/error.tsx @@ -0,0 +1,14 @@ +'use client'; + +import { SlotError } from '@/components/SlotError'; + +interface HudShowcaseErrorProps { + error: Error & { digest?: string }; + reset: () => void; +} + +const HudShowcaseError = ({ reset }: HudShowcaseErrorProps) => ( + +); + +export default HudShowcaseError; diff --git a/apps/landing-page/src/app/[locale]/@hud_showcase/loading.tsx b/apps/landing-page/src/app/[locale]/@hud_showcase/loading.tsx new file mode 100644 index 00000000..e6a22ce9 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@hud_showcase/loading.tsx @@ -0,0 +1,18 @@ +import { Skeleton } from '@/components/ui/skeleton'; + +const Loading = () => ( +
+
+ + + +
+ {Array.from({ length: 5 }).map((_, i) => ( + + ))} +
+
+
+); + +export default Loading; diff --git a/apps/landing-page/src/app/[locale]/@hud_showcase/page.tsx b/apps/landing-page/src/app/[locale]/@hud_showcase/page.tsx new file mode 100644 index 00000000..7df536f3 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@hud_showcase/page.tsx @@ -0,0 +1,9 @@ +import { HudShowcase } from '@/widgets/HudShowcase'; +import type { SlotProps } from '@/types'; + +const HudShowcaseSlot = async ({ params }: SlotProps) => { + const { locale } = await params; + return ; +}; + +export default HudShowcaseSlot; diff --git a/apps/landing-page/src/app/[locale]/@skills_library/default.tsx b/apps/landing-page/src/app/[locale]/@skills_library/default.tsx new file mode 100644 index 00000000..d2a72a76 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@skills_library/default.tsx @@ -0,0 +1,2 @@ +const Default = () => null; +export default Default; diff --git a/apps/landing-page/src/app/[locale]/@skills_library/error.tsx b/apps/landing-page/src/app/[locale]/@skills_library/error.tsx new file mode 100644 index 00000000..52d51698 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@skills_library/error.tsx @@ -0,0 +1,14 @@ +'use client'; + +import { SlotError } from '@/components/SlotError'; + +interface SkillsLibraryErrorProps { + error: Error & { digest?: string }; + reset: () => void; +} + +const SkillsLibraryError = ({ reset }: SkillsLibraryErrorProps) => ( + +); + +export default SkillsLibraryError; diff --git a/apps/landing-page/src/app/[locale]/@skills_library/loading.tsx b/apps/landing-page/src/app/[locale]/@skills_library/loading.tsx new file mode 100644 index 00000000..07937be7 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@skills_library/loading.tsx @@ -0,0 +1,18 @@ +import { Skeleton } from '@/components/ui/skeleton'; + +const Loading = () => ( +
+
+ + +
+ {Array.from({ length: 5 }).map((_, i) => ( + + ))} +
+ +
+
+); + +export default Loading; diff --git a/apps/landing-page/src/app/[locale]/@skills_library/page.tsx b/apps/landing-page/src/app/[locale]/@skills_library/page.tsx new file mode 100644 index 00000000..c9994b29 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@skills_library/page.tsx @@ -0,0 +1,9 @@ +import { SkillsLibrary } from '@/widgets/SkillsLibrary'; +import type { SlotProps } from '@/types'; + +const SkillsLibrarySlot = async ({ params }: SlotProps) => { + const { locale } = await params; + return ; +}; + +export default SkillsLibrarySlot; diff --git a/apps/landing-page/src/app/[locale]/@social_proof/default.tsx b/apps/landing-page/src/app/[locale]/@social_proof/default.tsx new file mode 100644 index 00000000..d2a72a76 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@social_proof/default.tsx @@ -0,0 +1,2 @@ +const Default = () => null; +export default Default; diff --git a/apps/landing-page/src/app/[locale]/@social_proof/error.tsx b/apps/landing-page/src/app/[locale]/@social_proof/error.tsx new file mode 100644 index 00000000..750858a6 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@social_proof/error.tsx @@ -0,0 +1,14 @@ +'use client'; + +import { SlotError } from '@/components/SlotError'; + +interface SocialProofErrorProps { + error: Error & { digest?: string }; + reset: () => void; +} + +const SocialProofError = ({ reset }: SocialProofErrorProps) => ( + +); + +export default SocialProofError; diff --git a/apps/landing-page/src/app/[locale]/@social_proof/loading.tsx b/apps/landing-page/src/app/[locale]/@social_proof/loading.tsx new file mode 100644 index 00000000..63bf9356 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@social_proof/loading.tsx @@ -0,0 +1,13 @@ +import { Skeleton } from '@/components/ui/skeleton'; + +const Loading = () => ( +
+
+ {Array.from({ length: 5 }).map((_, i) => ( + + ))} +
+
+); + +export default Loading; diff --git a/apps/landing-page/src/app/[locale]/@social_proof/page.tsx b/apps/landing-page/src/app/[locale]/@social_proof/page.tsx new file mode 100644 index 00000000..edbea9ab --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@social_proof/page.tsx @@ -0,0 +1,9 @@ +import { SocialProof } from '@/widgets/SocialProof'; +import type { SlotProps } from '@/types'; + +const SocialProofSlot = async ({ params }: SlotProps) => { + const { locale } = await params; + return ; +}; + +export default SocialProofSlot; diff --git a/apps/landing-page/src/app/[locale]/@workflow_demo/default.tsx b/apps/landing-page/src/app/[locale]/@workflow_demo/default.tsx new file mode 100644 index 00000000..d2a72a76 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@workflow_demo/default.tsx @@ -0,0 +1,2 @@ +const Default = () => null; +export default Default; diff --git a/apps/landing-page/src/app/[locale]/@workflow_demo/error.tsx b/apps/landing-page/src/app/[locale]/@workflow_demo/error.tsx new file mode 100644 index 00000000..07f090c9 --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@workflow_demo/error.tsx @@ -0,0 +1,14 @@ +'use client'; + +import { SlotError } from '@/components/SlotError'; + +interface WorkflowDemoErrorProps { + error: Error & { digest?: string }; + reset: () => void; +} + +const WorkflowDemoError = ({ reset }: WorkflowDemoErrorProps) => ( + +); + +export default WorkflowDemoError; diff --git a/apps/landing-page/src/app/[locale]/@workflow_demo/loading.tsx b/apps/landing-page/src/app/[locale]/@workflow_demo/loading.tsx new file mode 100644 index 00000000..dc17303b --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@workflow_demo/loading.tsx @@ -0,0 +1,18 @@ +import { Skeleton } from '@/components/ui/skeleton'; + +const Loading = () => ( +
+
+ + +
+ {Array.from({ length: 4 }).map((_, i) => ( + + ))} +
+ +
+
+); + +export default Loading; diff --git a/apps/landing-page/src/app/[locale]/@workflow_demo/page.tsx b/apps/landing-page/src/app/[locale]/@workflow_demo/page.tsx new file mode 100644 index 00000000..be9c045f --- /dev/null +++ b/apps/landing-page/src/app/[locale]/@workflow_demo/page.tsx @@ -0,0 +1,9 @@ +import { WorkflowDemo } from '@/widgets/WorkflowDemo'; +import type { SlotProps } from '@/types'; + +const WorkflowDemoSlot = async ({ params }: SlotProps) => { + const { locale } = await params; + return ; +}; + +export default WorkflowDemoSlot; diff --git a/apps/landing-page/src/app/[locale]/layout.tsx b/apps/landing-page/src/app/[locale]/layout.tsx index 9f2042f2..fa3cdf3c 100644 --- a/apps/landing-page/src/app/[locale]/layout.tsx +++ b/apps/landing-page/src/app/[locale]/layout.tsx @@ -28,7 +28,14 @@ const jetbrainsMono = JetBrains_Mono({ adjustFontFallback: true, }); -const CLIENT_NAMESPACES = ['header', 'cookieConsent', 'agents', 'quickStart'] as const; +const CLIENT_NAMESPACES = [ + 'header', + 'cookieConsent', + 'agents', + 'quickStart', + 'workflowDemo', + 'skillsLibrary', +] as const; const pickClientMessages = (messages: AbstractIntlMessages): AbstractIntlMessages => Object.fromEntries(CLIENT_NAMESPACES.filter(ns => ns in messages).map(ns => [ns, messages[ns]])); @@ -69,11 +76,15 @@ export const generateMetadata = async ({ interface LocaleLayoutProps { children: ReactNode; hero: ReactNode; + social_proof: ReactNode; before_after: ReactNode; features: ReactNode; + workflow_demo: ReactNode; supported_tools: ReactNode; + hud_showcase: ReactNode; tui_dashboard: ReactNode; agents: ReactNode; + skills_library: ReactNode; quick_start: ReactNode; cta_footer: ReactNode; params: Promise<{ locale: string }>; @@ -82,11 +93,15 @@ interface LocaleLayoutProps { const LocaleLayout = async ({ children, hero, + social_proof, before_after, features, + workflow_demo, supported_tools, + hud_showcase, tui_dashboard, agents, + skills_library, quick_start, cta_footer, params, @@ -132,11 +147,15 @@ const LocaleLayout = async ({
{children} {hero} + {social_proof} {before_after} {features} + {workflow_demo} {supported_tools} + {hud_showcase} {tui_dashboard} {agents} + {skills_library} {quick_start}
{cta_footer} diff --git a/apps/landing-page/widgets/AgentsShowcase/data/agents.ts b/apps/landing-page/widgets/AgentsShowcase/data/agents.ts index 3e1db99e..58f20df7 100644 --- a/apps/landing-page/widgets/AgentsShowcase/data/agents.ts +++ b/apps/landing-page/widgets/AgentsShowcase/data/agents.ts @@ -1,7 +1,7 @@ import type { Agent } from '@/types'; export const agents: Agent[] = [ - // === Planning (5) === + // === Planning (6) === { id: 'plan-mode', name: 'Plan Mode Agent', @@ -47,8 +47,17 @@ export const agents: Agent[] = [ tags: ['Migration', 'Modernization'], expertise: ['Legacy Migration', 'Framework Upgrades', 'Data Migration'], }, + { + id: 'plan-reviewer', + name: 'Plan Reviewer', + description: 'Reviews and validates implementation plans before execution', + category: 'Planning', + icon: '📐', + tags: ['Review', 'Validation'], + expertise: ['Plan Review', 'Risk Assessment', 'Feasibility Analysis'], + }, - // === Development (12) === + // === Development (15) === { id: 'act-mode', name: 'Act Mode Agent', @@ -58,6 +67,15 @@ export const agents: Agent[] = [ tags: ['Implementation', 'Execution'], expertise: ['Code Implementation', 'TDD Execution'], }, + { + id: 'auto-mode', + name: 'Auto Mode Agent', + description: 'Autonomous PLAN → ACT → EVAL cycling until quality targets met', + category: 'Development', + icon: '🔁', + tags: ['Autonomous', 'Full Cycle'], + expertise: ['Autonomous Execution', 'Quality Gates', 'Iteration'], + }, { id: 'frontend-developer', name: 'Frontend Developer', @@ -85,6 +103,24 @@ export const agents: Agent[] = [ tags: ['React Native', 'Flutter', 'iOS'], expertise: ['React Native', 'Flutter', 'iOS', 'Android'], }, + { + id: 'software-engineer', + name: 'Software Engineer', + description: 'Full-stack generalist for end-to-end feature implementation', + category: 'Development', + icon: '💻', + tags: ['Full-Stack', 'Generalist'], + expertise: ['Full-Stack Development', 'System Design', 'Code Quality'], + }, + { + id: 'systems-developer', + name: 'Systems Developer', + description: 'Low-level systems programming and infrastructure specialist', + category: 'Development', + icon: '🔩', + tags: ['Systems', 'Infrastructure'], + expertise: ['Systems Programming', 'Performance', 'Infrastructure'], + }, { id: 'data-engineer', name: 'Data Engineer', @@ -94,6 +130,15 @@ export const agents: Agent[] = [ tags: ['Database', 'Schema', 'Migration'], expertise: ['Database Design', 'Schema Optimization', 'Data Migration'], }, + { + id: 'data-scientist', + name: 'Data Scientist', + description: 'Statistical analysis, data modeling, and visualization specialist', + category: 'Development', + icon: '📈', + tags: ['Data', 'Analytics', 'Visualization'], + expertise: ['Statistical Analysis', 'Data Modeling', 'Visualization'], + }, { id: 'devops-engineer', name: 'DevOps Engineer', @@ -157,8 +202,17 @@ export const agents: Agent[] = [ tags: ['API', 'Integration', 'Third-Party'], expertise: ['API Integration', 'Third-Party Services', 'OAuth'], }, + { + id: 'parallel-orchestrator', + name: 'Parallel Orchestrator', + description: 'Coordinates parallel agent execution with file-overlap validation', + category: 'Development', + icon: '🎛️', + tags: ['Parallel', 'Orchestration'], + expertise: ['Parallel Execution', 'Task Distribution', 'Conflict Prevention'], + }, - // === Review (5) === + // === Review (6) === { id: 'eval-mode', name: 'Eval Mode Agent', @@ -195,6 +249,15 @@ export const agents: Agent[] = [ tags: ['Testing', 'TDD', 'Strategy'], expertise: ['Test Strategy', 'TDD', 'Integration Testing'], }, + { + id: 'test-engineer', + name: 'Test Engineer', + description: 'Hands-on test implementation specialist for unit, integration, and e2e testing', + category: 'Review', + icon: '🧬', + tags: ['Testing', 'Implementation', 'E2E'], + expertise: ['Test Implementation', 'E2E Testing', 'Test Automation'], + }, { id: 'documentation-specialist', name: 'Documentation Specialist', @@ -205,7 +268,7 @@ export const agents: Agent[] = [ expertise: ['Technical Writing', 'API Documentation', 'README'], }, - // === Security (2) === + // === Security (3) === { id: 'security-specialist', name: 'Security Specialist', @@ -215,6 +278,15 @@ export const agents: Agent[] = [ tags: ['Security', 'OWASP', 'Audit'], expertise: ['Security Audit', 'OWASP', 'Secure Coding'], }, + { + id: 'security-engineer', + name: 'Security Engineer', + description: 'Hands-on security implementation specialist for auth, encryption, and hardening', + category: 'Security', + icon: '🛡️', + tags: ['Auth', 'Encryption', 'Hardening'], + expertise: ['Authentication', 'Encryption', 'Security Hardening'], + }, { id: 'observability-specialist', name: 'Observability Specialist', diff --git a/apps/landing-page/widgets/BeforeAfter/index.tsx b/apps/landing-page/widgets/BeforeAfter/index.tsx index efb885b6..88206f6e 100644 --- a/apps/landing-page/widgets/BeforeAfter/index.tsx +++ b/apps/landing-page/widgets/BeforeAfter/index.tsx @@ -9,6 +9,9 @@ const beforeFiles = [ 'antigravityRules', 'qRules', 'kiroRules', + 'windsurfRules', + 'aiderRules', + 'opencodeRules', ] as const; export const BeforeAfter = async ({ locale }: WidgetProps) => { @@ -79,6 +82,10 @@ export const BeforeAfter = async ({ locale }: WidgetProps) => {