winter-super-cli 2026.6.20 → 2026.6.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/memories/readme.md +35 -0
- package/package.json +6 -1
- package/resources/local/agents.md/AGENTS.md +43 -0
- package/resources/local/agents.md/LICENSE +21 -0
- package/resources/local/agents.md/README.md +49 -0
- package/resources/local/agents.md/components/AboutSection.tsx +37 -0
- package/resources/local/agents.md/components/CodeExample.tsx +207 -0
- package/resources/local/agents.md/components/CompatibilitySection.tsx +378 -0
- package/resources/local/agents.md/components/ExampleListSection.tsx +188 -0
- package/resources/local/agents.md/components/ExamplesSection.tsx +22 -0
- package/resources/local/agents.md/components/FAQSection.tsx +113 -0
- package/resources/local/agents.md/components/Footer.tsx +17 -0
- package/resources/local/agents.md/components/Hero.tsx +230 -0
- package/resources/local/agents.md/components/HowToUseSection.tsx +66 -0
- package/resources/local/agents.md/components/Section.tsx +44 -0
- package/resources/local/agents.md/components/ThreeCanvas.tsx +240 -0
- package/resources/local/agents.md/components/WhySection.tsx +64 -0
- package/resources/local/agents.md/components/icons/ClipboardIcon.tsx +27 -0
- package/resources/local/agents.md/components/icons/CopyIcon.tsx +15 -0
- package/resources/local/agents.md/components/icons/GitHubIcon.tsx +24 -0
- package/resources/local/agents.md/components/icons/LinkIcon.tsx +27 -0
- package/resources/local/agents.md/components/icons/UserIcon.tsx +27 -0
- package/resources/local/agents.md/next.config.ts +8 -0
- package/resources/local/agents.md/package.json +27 -0
- package/resources/local/agents.md/pages/_app.tsx +24 -0
- package/resources/local/agents.md/pages/_document.tsx +24 -0
- package/resources/local/agents.md/pages/index.tsx +160 -0
- package/resources/local/agents.md/pnpm-lock.yaml +2782 -0
- package/resources/local/agents.md/postcss.config.mjs +5 -0
- package/resources/local/agents.md/public/favicon-dark.png +0 -0
- package/resources/local/agents.md/public/favicon-light.png +0 -0
- package/resources/local/agents.md/public/favicon.ico +0 -0
- package/resources/local/agents.md/public/logos/aider.svg +16 -0
- package/resources/local/agents.md/public/logos/amp.svg +5 -0
- package/resources/local/agents.md/public/logos/augment.svg +9 -0
- package/resources/local/agents.md/public/logos/codex.svg +3 -0
- package/resources/local/agents.md/public/logos/copilot.svg +1 -0
- package/resources/local/agents.md/public/logos/cursor.svg +15 -0
- package/resources/local/agents.md/public/logos/devin-dark.svg +1 -0
- package/resources/local/agents.md/public/logos/devin-light.svg +1 -0
- package/resources/local/agents.md/public/logos/factory.svg +3 -0
- package/resources/local/agents.md/public/logos/gemini.svg +27 -0
- package/resources/local/agents.md/public/logos/goose.svg +12 -0
- package/resources/local/agents.md/public/logos/jules.svg +3 -0
- package/resources/local/agents.md/public/logos/junie.svg +5 -0
- package/resources/local/agents.md/public/logos/kilo-code.svg +43 -0
- package/resources/local/agents.md/public/logos/ona-dark.svg +3 -0
- package/resources/local/agents.md/public/logos/ona-light.svg +3 -0
- package/resources/local/agents.md/public/logos/opencode.svg +40 -0
- package/resources/local/agents.md/public/logos/phoenix.svg +44 -0
- package/resources/local/agents.md/public/logos/roocode.svg +3 -0
- package/resources/local/agents.md/public/logos/semgrep.svg +7 -0
- package/resources/local/agents.md/public/logos/uipath.svg +6 -0
- package/resources/local/agents.md/public/logos/vscode-dark.svg +19 -0
- package/resources/local/agents.md/public/logos/vscode-light.svg +12 -0
- package/resources/local/agents.md/public/logos/warp.svg +7 -0
- package/resources/local/agents.md/public/logos/windsurf-dark.svg +3 -0
- package/resources/local/agents.md/public/logos/windsurf-light.svg +3 -0
- package/resources/local/agents.md/public/logos/zed.svg +3 -0
- package/resources/local/agents.md/public/og.png +0 -0
- package/resources/local/agents.md/styles/globals.css +415 -0
- package/resources/local/agents.md/tsconfig.json +34 -0
- package/resources/local/awesome-design-md/README.md +197 -0
- package/resources/local/awesome-design-md/design-md/airbnb/DESIGN.md +545 -0
- package/resources/local/awesome-design-md/design-md/airbnb/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/airtable/DESIGN.md +554 -0
- package/resources/local/awesome-design-md/design-md/airtable/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/apple/DESIGN.md +562 -0
- package/resources/local/awesome-design-md/design-md/apple/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/binance/DESIGN.md +634 -0
- package/resources/local/awesome-design-md/design-md/binance/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/bmw/DESIGN.md +544 -0
- package/resources/local/awesome-design-md/design-md/bmw/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/bmw-m/DESIGN.md +503 -0
- package/resources/local/awesome-design-md/design-md/bmw-m/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/bugatti/DESIGN.md +454 -0
- package/resources/local/awesome-design-md/design-md/bugatti/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/cal/DESIGN.md +542 -0
- package/resources/local/awesome-design-md/design-md/cal/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/claude/DESIGN.md +589 -0
- package/resources/local/awesome-design-md/design-md/claude/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/clay/DESIGN.md +541 -0
- package/resources/local/awesome-design-md/design-md/clay/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/clickhouse/DESIGN.md +544 -0
- package/resources/local/awesome-design-md/design-md/clickhouse/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/cohere/DESIGN.md +451 -0
- package/resources/local/awesome-design-md/design-md/cohere/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/coinbase/DESIGN.md +570 -0
- package/resources/local/awesome-design-md/design-md/coinbase/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/composio/DESIGN.md +506 -0
- package/resources/local/awesome-design-md/design-md/composio/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/cursor/DESIGN.md +537 -0
- package/resources/local/awesome-design-md/design-md/cursor/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/elevenlabs/DESIGN.md +504 -0
- package/resources/local/awesome-design-md/design-md/elevenlabs/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/expo/DESIGN.md +526 -0
- package/resources/local/awesome-design-md/design-md/expo/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/ferrari/DESIGN.md +531 -0
- package/resources/local/awesome-design-md/design-md/ferrari/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/figma/DESIGN.md +578 -0
- package/resources/local/awesome-design-md/design-md/figma/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/framer/DESIGN.md +544 -0
- package/resources/local/awesome-design-md/design-md/framer/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/hashicorp/DESIGN.md +575 -0
- package/resources/local/awesome-design-md/design-md/hashicorp/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/ibm/DESIGN.md +550 -0
- package/resources/local/awesome-design-md/design-md/ibm/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/intercom/DESIGN.md +546 -0
- package/resources/local/awesome-design-md/design-md/intercom/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/kraken/DESIGN.md +125 -0
- package/resources/local/awesome-design-md/design-md/kraken/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/lamborghini/DESIGN.md +288 -0
- package/resources/local/awesome-design-md/design-md/lamborghini/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/linear.app/DESIGN.md +548 -0
- package/resources/local/awesome-design-md/design-md/linear.app/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/lovable/DESIGN.md +298 -0
- package/resources/local/awesome-design-md/design-md/lovable/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/mastercard/DESIGN.md +365 -0
- package/resources/local/awesome-design-md/design-md/mastercard/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/meta/DESIGN.md +683 -0
- package/resources/local/awesome-design-md/design-md/meta/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/minimax/DESIGN.md +746 -0
- package/resources/local/awesome-design-md/design-md/minimax/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/mintlify/DESIGN.md +852 -0
- package/resources/local/awesome-design-md/design-md/mintlify/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/miro/DESIGN.md +825 -0
- package/resources/local/awesome-design-md/design-md/miro/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/mistral.ai/DESIGN.md +773 -0
- package/resources/local/awesome-design-md/design-md/mistral.ai/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/mongodb/DESIGN.md +767 -0
- package/resources/local/awesome-design-md/design-md/mongodb/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/nike/DESIGN.md +575 -0
- package/resources/local/awesome-design-md/design-md/nike/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/notion/DESIGN.md +821 -0
- package/resources/local/awesome-design-md/design-md/notion/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/nvidia/DESIGN.md +640 -0
- package/resources/local/awesome-design-md/design-md/nvidia/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/ollama/DESIGN.md +539 -0
- package/resources/local/awesome-design-md/design-md/ollama/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/opencode.ai/DESIGN.md +521 -0
- package/resources/local/awesome-design-md/design-md/opencode.ai/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/pinterest/DESIGN.md +597 -0
- package/resources/local/awesome-design-md/design-md/pinterest/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/playstation/DESIGN.md +661 -0
- package/resources/local/awesome-design-md/design-md/playstation/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/posthog/DESIGN.md +690 -0
- package/resources/local/awesome-design-md/design-md/posthog/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/raycast/DESIGN.md +669 -0
- package/resources/local/awesome-design-md/design-md/raycast/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/renault/DESIGN.md +589 -0
- package/resources/local/awesome-design-md/design-md/renault/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/replicate/DESIGN.md +616 -0
- package/resources/local/awesome-design-md/design-md/replicate/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/resend/DESIGN.md +585 -0
- package/resources/local/awesome-design-md/design-md/resend/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/revolut/DESIGN.md +636 -0
- package/resources/local/awesome-design-md/design-md/revolut/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/runwayml/DESIGN.md +244 -0
- package/resources/local/awesome-design-md/design-md/runwayml/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/sanity/DESIGN.md +357 -0
- package/resources/local/awesome-design-md/design-md/sanity/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/sentry/DESIGN.md +262 -0
- package/resources/local/awesome-design-md/design-md/sentry/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/shopify/DESIGN.md +350 -0
- package/resources/local/awesome-design-md/design-md/shopify/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/spacex/DESIGN.md +194 -0
- package/resources/local/awesome-design-md/design-md/spacex/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/spotify/DESIGN.md +246 -0
- package/resources/local/awesome-design-md/design-md/spotify/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/starbucks/DESIGN.md +580 -0
- package/resources/local/awesome-design-md/design-md/starbucks/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/stripe/DESIGN.md +322 -0
- package/resources/local/awesome-design-md/design-md/stripe/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/supabase/DESIGN.md +255 -0
- package/resources/local/awesome-design-md/design-md/supabase/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/superhuman/DESIGN.md +252 -0
- package/resources/local/awesome-design-md/design-md/superhuman/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/tesla/DESIGN.md +286 -0
- package/resources/local/awesome-design-md/design-md/tesla/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/theverge/DESIGN.md +339 -0
- package/resources/local/awesome-design-md/design-md/theverge/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/together.ai/DESIGN.md +263 -0
- package/resources/local/awesome-design-md/design-md/together.ai/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/uber/DESIGN.md +295 -0
- package/resources/local/awesome-design-md/design-md/uber/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/vercel/DESIGN.md +310 -0
- package/resources/local/awesome-design-md/design-md/vercel/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/vodafone/DESIGN.md +423 -0
- package/resources/local/awesome-design-md/design-md/vodafone/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/voltagent/DESIGN.md +323 -0
- package/resources/local/awesome-design-md/design-md/voltagent/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/warp/DESIGN.md +253 -0
- package/resources/local/awesome-design-md/design-md/warp/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/webflow/DESIGN.md +92 -0
- package/resources/local/awesome-design-md/design-md/webflow/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/wired/DESIGN.md +278 -0
- package/resources/local/awesome-design-md/design-md/wired/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/wise/DESIGN.md +173 -0
- package/resources/local/awesome-design-md/design-md/wise/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/x.ai/DESIGN.md +257 -0
- package/resources/local/awesome-design-md/design-md/x.ai/README.md +5 -0
- package/resources/local/awesome-design-md/design-md/zapier/DESIGN.md +328 -0
- package/resources/local/awesome-design-md/design-md/zapier/README.md +5 -0
- package/resources/local/awesome-design-md/design-md-cli.js +167 -0
- package/resources/local/karpathy-tools/CLAUDE.md +65 -0
- package/resources/local/karpathy-tools/karpathy-md.js +140 -0
- package/scripts/audit-pack.js +21 -0
- package/skills/coding.md +87 -0
- package/skills/debug.md +63 -0
- package/skills/test.md +64 -0
- package/src/cli/tool-call-adapter.js +24 -2
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
export default function Footer() {
|
|
4
|
+
return (
|
|
5
|
+
<footer className="px-6 py-12 text-center text-sm text-gray-600 dark:text-gray-400 mt-24 bg-gray-50 dark:bg-gray-900/40 border-t border-gray-100 dark:border-gray-800">
|
|
6
|
+
<p>
|
|
7
|
+
Copyright © AGENTS.md a Series of LF Projects, LLC
|
|
8
|
+
<br />
|
|
9
|
+
For web site terms of use, trademark policy and other project policies please see{" "}
|
|
10
|
+
<a href="https://lfprojects.org" target="_blank" className="underline hover:no-underline">
|
|
11
|
+
https://lfprojects.org
|
|
12
|
+
</a>
|
|
13
|
+
.
|
|
14
|
+
</p>
|
|
15
|
+
</footer>
|
|
16
|
+
);
|
|
17
|
+
}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
import dynamic from "next/dynamic";
|
|
5
|
+
|
|
6
|
+
const ThreeCanvas = dynamic(() => import("./ThreeCanvas"), { ssr: false });
|
|
7
|
+
|
|
8
|
+
export default function Hero() {
|
|
9
|
+
const [isVisible, setIsVisible] = useState(false);
|
|
10
|
+
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
setIsVisible(true);
|
|
13
|
+
}, []);
|
|
14
|
+
|
|
15
|
+
return (
|
|
16
|
+
<section className="relative min-h-screen flex items-center justify-center overflow-hidden">
|
|
17
|
+
{/* Three.js Background */}
|
|
18
|
+
<div className="three-canvas">
|
|
19
|
+
<ThreeCanvas />
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
{/* Spotlight Glow Effects */}
|
|
23
|
+
<div
|
|
24
|
+
className="absolute top-1/4 left-1/2 -translate-x-1/2 -translate-y-1/2"
|
|
25
|
+
style={{
|
|
26
|
+
width: "800px",
|
|
27
|
+
height: "800px",
|
|
28
|
+
background:
|
|
29
|
+
"radial-gradient(circle, rgba(26, 38, 255, 0.3) 0%, transparent 70%)",
|
|
30
|
+
filter: "blur(100px)",
|
|
31
|
+
animation: "pulse-glow 4s ease-in-out infinite",
|
|
32
|
+
}}
|
|
33
|
+
/>
|
|
34
|
+
<div
|
|
35
|
+
className="absolute bottom-1/4 right-1/4"
|
|
36
|
+
style={{
|
|
37
|
+
width: "400px",
|
|
38
|
+
height: "400px",
|
|
39
|
+
background:
|
|
40
|
+
"radial-gradient(circle, rgba(0, 212, 255, 0.2) 0%, transparent 70%)",
|
|
41
|
+
filter: "blur(80px)",
|
|
42
|
+
animation: "pulse-glow 5s ease-in-out infinite 1s",
|
|
43
|
+
}}
|
|
44
|
+
/>
|
|
45
|
+
|
|
46
|
+
{/* Main Content */}
|
|
47
|
+
<div className="relative z-10 text-center px-6 max-w-5xl mx-auto">
|
|
48
|
+
{/* Badge */}
|
|
49
|
+
<div
|
|
50
|
+
className={`inline-flex items-center gap-2 mb-8 ${
|
|
51
|
+
isVisible ? "fade-in-up" : "opacity-0"
|
|
52
|
+
}`}
|
|
53
|
+
>
|
|
54
|
+
<span className="w-2 h-2 bg-green-500 rounded-full animate-pulse" />
|
|
55
|
+
<span className="badge-pill">Available for opportunities</span>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
{/* Name with 3D Effect */}
|
|
59
|
+
<h1
|
|
60
|
+
className={`text-6xl md:text-8xl font-bold mb-6 tracking-tight ${
|
|
61
|
+
isVisible ? "fade-in-up stagger-1" : "opacity-0"
|
|
62
|
+
}`}
|
|
63
|
+
style={{
|
|
64
|
+
background: "linear-gradient(135deg, #ffffff 0%, #a8a8a8 100%)",
|
|
65
|
+
WebkitBackgroundClip: "text",
|
|
66
|
+
WebkitTextFillColor: "transparent",
|
|
67
|
+
textShadow: "0 0 60px rgba(26, 38, 255, 0.5)",
|
|
68
|
+
}}
|
|
69
|
+
>
|
|
70
|
+
Antony Nguyễn
|
|
71
|
+
</h1>
|
|
72
|
+
|
|
73
|
+
{/* Title */}
|
|
74
|
+
<p
|
|
75
|
+
className={`text-xl md:text-2xl text-[var(--color-body)] mb-4 ${
|
|
76
|
+
isVisible ? "fade-in-up stagger-2" : "opacity-0"
|
|
77
|
+
}`}
|
|
78
|
+
>
|
|
79
|
+
<span className="text-white">Staff Software Engineer</span>
|
|
80
|
+
<span className="mx-3 text-[var(--color-muted)]">•</span>
|
|
81
|
+
<span>8+ Years Experience</span>
|
|
82
|
+
</p>
|
|
83
|
+
|
|
84
|
+
{/* Tagline */}
|
|
85
|
+
<p
|
|
86
|
+
className={`text-lg text-[var(--color-muted)] mb-12 max-w-2xl mx-auto ${
|
|
87
|
+
isVisible ? "fade-in-up stagger-3" : "opacity-0"
|
|
88
|
+
}`}
|
|
89
|
+
>
|
|
90
|
+
Building scalable systems and leading high-performance teams.
|
|
91
|
+
Passionate about clean architecture and developer experience.
|
|
92
|
+
</p>
|
|
93
|
+
|
|
94
|
+
{/* Terminal Mockup */}
|
|
95
|
+
<div
|
|
96
|
+
className={`terminal-window max-w-3xl mx-auto mb-12 ${
|
|
97
|
+
isVisible ? "fade-in-up stagger-4" : "opacity-0"
|
|
98
|
+
}`}
|
|
99
|
+
>
|
|
100
|
+
<div className="terminal-header">
|
|
101
|
+
<div className="terminal-dot bg-red-500" />
|
|
102
|
+
<div className="terminal-dot bg-yellow-500" />
|
|
103
|
+
<div className="terminal-dot bg-green-500" />
|
|
104
|
+
<span className="ml-4 text-xs text-[var(--color-muted)] font-mono">
|
|
105
|
+
antony@portfolio ~ bash
|
|
106
|
+
</span>
|
|
107
|
+
</div>
|
|
108
|
+
<div className="terminal-content text-left">
|
|
109
|
+
<p>
|
|
110
|
+
<span className="code-comment"># Welcome to my digital space</span>
|
|
111
|
+
</p>
|
|
112
|
+
<p className="mt-2">
|
|
113
|
+
<span className="text-[var(--color-accent-cyan)]">❯</span>{" "}
|
|
114
|
+
<span className="code-function">whoami</span>
|
|
115
|
+
</p>
|
|
116
|
+
<p className="text-white">antony-nguyen</p>
|
|
117
|
+
<p className="mt-2">
|
|
118
|
+
<span className="text-[var(--color-accent-cyan)]">❯</span>{" "}
|
|
119
|
+
<span className="code-function">cat</span>{" "}
|
|
120
|
+
<span className="code-string">skills.json</span>
|
|
121
|
+
</p>
|
|
122
|
+
<p>
|
|
123
|
+
<span className="code-variable">"expertise"</span>:{" "}
|
|
124
|
+
<span className="code-string">
|
|
125
|
+
["System Design", "TypeScript", "React",
|
|
126
|
+
"Node.js", "AWS", "Leadership"]
|
|
127
|
+
</span>
|
|
128
|
+
</p>
|
|
129
|
+
<p className="mt-2">
|
|
130
|
+
<span className="text-[var(--color-accent-cyan)]">❯</span>{" "}
|
|
131
|
+
<span className="code-function">cat</span>{" "}
|
|
132
|
+
<span className="code-string">achievements.md</span>
|
|
133
|
+
</p>
|
|
134
|
+
<p>
|
|
135
|
+
<span className="text-[var(--color-success)]">✓</span> Built
|
|
136
|
+
systems serving{" "}
|
|
137
|
+
<span className="code-number">10M+</span> users
|
|
138
|
+
</p>
|
|
139
|
+
<p>
|
|
140
|
+
<span className="text-[var(--color-success)]">✓</span> Led teams
|
|
141
|
+
of{" "}
|
|
142
|
+
<span className="code-number">15+</span> engineers
|
|
143
|
+
</p>
|
|
144
|
+
<p>
|
|
145
|
+
<span className="text-[var(--color-success)]">✓</span> Open source
|
|
146
|
+
contributor with{" "}
|
|
147
|
+
<span className="code-number">2.5k+</span> stars
|
|
148
|
+
</p>
|
|
149
|
+
<p className="mt-2">
|
|
150
|
+
<span className="text-[var(--color-accent-cyan)]">❯</span>{" "}
|
|
151
|
+
<span className="animate-pulse">_</span>
|
|
152
|
+
</p>
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
|
|
156
|
+
{/* CTA Buttons */}
|
|
157
|
+
<div
|
|
158
|
+
className={`flex flex-wrap justify-center gap-4 ${
|
|
159
|
+
isVisible ? "fade-in-up stagger-5" : "opacity-0"
|
|
160
|
+
}`}
|
|
161
|
+
>
|
|
162
|
+
<a href="#projects" className="btn-primary">
|
|
163
|
+
<svg
|
|
164
|
+
className="w-5 h-5"
|
|
165
|
+
fill="none"
|
|
166
|
+
stroke="currentColor"
|
|
167
|
+
viewBox="0 0 24 24"
|
|
168
|
+
>
|
|
169
|
+
<path
|
|
170
|
+
strokeLinecap="round"
|
|
171
|
+
strokeLinejoin="round"
|
|
172
|
+
strokeWidth={2}
|
|
173
|
+
d="M19 14l-7 7m0 0l-7-7m7 7V3"
|
|
174
|
+
/>
|
|
175
|
+
</svg>
|
|
176
|
+
View Projects
|
|
177
|
+
</a>
|
|
178
|
+
<a href="#contact" className="btn-secondary">
|
|
179
|
+
<svg
|
|
180
|
+
className="w-5 h-5"
|
|
181
|
+
fill="none"
|
|
182
|
+
stroke="currentColor"
|
|
183
|
+
viewBox="0 0 24 24"
|
|
184
|
+
>
|
|
185
|
+
<path
|
|
186
|
+
strokeLinecap="round"
|
|
187
|
+
strokeLinejoin="round"
|
|
188
|
+
strokeWidth={2}
|
|
189
|
+
d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
|
|
190
|
+
/>
|
|
191
|
+
</svg>
|
|
192
|
+
Get in Touch
|
|
193
|
+
</a>
|
|
194
|
+
<a
|
|
195
|
+
href="https://github.com/antony-nguyen"
|
|
196
|
+
target="_blank"
|
|
197
|
+
rel="noopener noreferrer"
|
|
198
|
+
className="btn-outline"
|
|
199
|
+
>
|
|
200
|
+
<svg
|
|
201
|
+
className="w-5 h-5"
|
|
202
|
+
fill="currentColor"
|
|
203
|
+
viewBox="0 0 24 24"
|
|
204
|
+
>
|
|
205
|
+
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" />
|
|
206
|
+
</svg>
|
|
207
|
+
GitHub
|
|
208
|
+
</a>
|
|
209
|
+
</div>
|
|
210
|
+
|
|
211
|
+
{/* Scroll Indicator */}
|
|
212
|
+
<div
|
|
213
|
+
className={`absolute bottom-8 left-1/2 -translate-x-1/2 ${
|
|
214
|
+
isVisible ? "fade-in-up stagger-6" : "opacity-0"
|
|
215
|
+
}`}
|
|
216
|
+
>
|
|
217
|
+
<div className="flex flex-col items-center gap-2 text-[var(--color-muted)]">
|
|
218
|
+
<span className="text-xs uppercase tracking-widest">Scroll</span>
|
|
219
|
+
<div className="w-6 h-10 border-2 border-[var(--color-muted)] rounded-full flex justify-center pt-2">
|
|
220
|
+
<div
|
|
221
|
+
className="w-1.5 h-3 bg-[var(--color-primary)] rounded-full animate-bounce"
|
|
222
|
+
style={{ animationDuration: "1.5s" }}
|
|
223
|
+
/>
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
</div>
|
|
227
|
+
</div>
|
|
228
|
+
</section>
|
|
229
|
+
);
|
|
230
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import Section from "@/components/Section";
|
|
2
|
+
import React from "react";
|
|
3
|
+
|
|
4
|
+
export default function HowToUseSection() {
|
|
5
|
+
const steps = [
|
|
6
|
+
{
|
|
7
|
+
title: "Add AGENTS.md",
|
|
8
|
+
body: (
|
|
9
|
+
<>
|
|
10
|
+
Create an AGENTS.md file at the root of the repository. Most
|
|
11
|
+
coding agents can even scaffold one for you if you ask nicely.
|
|
12
|
+
</>
|
|
13
|
+
),
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
title: "Cover what matters",
|
|
17
|
+
body: (
|
|
18
|
+
<>
|
|
19
|
+
<p className="mb-2">Add sections that help an agent work effectively with your project. Popular choices:</p>
|
|
20
|
+
<ul className="list-disc list-inside ml-4 space-y-1">
|
|
21
|
+
<li>Project overview</li>
|
|
22
|
+
<li>Build and test commands</li>
|
|
23
|
+
<li>Code style guidelines</li>
|
|
24
|
+
<li>Testing instructions</li>
|
|
25
|
+
<li>Security considerations</li>
|
|
26
|
+
</ul>
|
|
27
|
+
</>
|
|
28
|
+
),
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
title: "Add extra instructions",
|
|
32
|
+
body: "Commit messages or pull request guidelines, security gotchas, large datasets, deployment steps: anything you’d tell a new teammate belongs here too.",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
title: "Large monorepo? Use nested AGENTS.md files for subprojects",
|
|
36
|
+
body: (
|
|
37
|
+
<>
|
|
38
|
+
Place another AGENTS.md inside each package. Agents automatically read the nearest file in the directory tree, so the closest one takes precedence and every subproject can ship tailored instructions. For example, at time of writing the main OpenAI repo has 88 AGENTS.md files.
|
|
39
|
+
</>
|
|
40
|
+
),
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
<Section
|
|
47
|
+
title="How to use AGENTS.md?"
|
|
48
|
+
className="py-12"
|
|
49
|
+
center
|
|
50
|
+
maxWidthClass="max-w-3xl"
|
|
51
|
+
>
|
|
52
|
+
<div className="space-y-6 text-left">
|
|
53
|
+
{steps.map((s, idx) => (
|
|
54
|
+
<div key={idx}>
|
|
55
|
+
<h3 className="text-xl font-semibold text-gray-900 dark:text-white mb-2">
|
|
56
|
+
{idx + 1}. {s.title}
|
|
57
|
+
</h3>
|
|
58
|
+
<div className="text-gray-700 dark:text-gray-300">
|
|
59
|
+
{s.body}
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
))}
|
|
63
|
+
</div>
|
|
64
|
+
</Section>
|
|
65
|
+
);
|
|
66
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
export type SectionProps = React.PropsWithChildren<{
|
|
4
|
+
id?: string;
|
|
5
|
+
className?: string;
|
|
6
|
+
title: string;
|
|
7
|
+
/**
|
|
8
|
+
* Center the heading and inner content horizontally (text-center).
|
|
9
|
+
*/
|
|
10
|
+
center?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Tailwind max-width utility to override the default container width.
|
|
13
|
+
* e.g. "max-w-4xl". Defaults to "max-w-6xl".
|
|
14
|
+
*/
|
|
15
|
+
maxWidthClass?: string;
|
|
16
|
+
}>;
|
|
17
|
+
|
|
18
|
+
export default function Section({
|
|
19
|
+
className = "",
|
|
20
|
+
id,
|
|
21
|
+
title,
|
|
22
|
+
children,
|
|
23
|
+
center = false,
|
|
24
|
+
maxWidthClass = "max-w-6xl",
|
|
25
|
+
}: SectionProps) {
|
|
26
|
+
const containerClasses = `${maxWidthClass} mx-auto flex flex-col gap-6`;
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<section id={id} className={className + " px-6"}>
|
|
30
|
+
<div className={containerClasses}>
|
|
31
|
+
<h2
|
|
32
|
+
className={`text-3xl font-semibold tracking-tight ${center ? "mx-auto text-center" : ""}`}
|
|
33
|
+
>
|
|
34
|
+
{title}
|
|
35
|
+
</h2>
|
|
36
|
+
{/* prose class is useful for markdown-like content. For centered sections we don't want automatic left
|
|
37
|
+
margin on headings, so we keep it unconditionally; centering is handled by parent flex alignment. */}
|
|
38
|
+
<div className="prose prose-neutral dark:prose-invert max-w-none">
|
|
39
|
+
{children}
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</section>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef } from "react";
|
|
4
|
+
import * as THREE from "three";
|
|
5
|
+
import { FontLoader } from "three/examples/jsm/loaders/FontLoader.js";
|
|
6
|
+
import { TextGeometry } from "three/examples/jsm/geometries/TextGeometry.js";
|
|
7
|
+
|
|
8
|
+
export default function ThreeCanvas() {
|
|
9
|
+
const containerRef = useRef<HTMLDivElement>(null);
|
|
10
|
+
const sceneRef = useRef<THREE.Scene | null>(null);
|
|
11
|
+
const rendererRef = useRef<THREE.WebGLRenderer | null>(null);
|
|
12
|
+
const animationIdRef = useRef<number | null>(null);
|
|
13
|
+
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (!containerRef.current) return;
|
|
16
|
+
|
|
17
|
+
// Scene setup
|
|
18
|
+
const scene = new THREE.Scene();
|
|
19
|
+
sceneRef.current = scene;
|
|
20
|
+
|
|
21
|
+
// Camera
|
|
22
|
+
const camera = new THREE.PerspectiveCamera(
|
|
23
|
+
75,
|
|
24
|
+
window.innerWidth / window.innerHeight,
|
|
25
|
+
0.1,
|
|
26
|
+
1000
|
|
27
|
+
);
|
|
28
|
+
camera.position.z = 30;
|
|
29
|
+
|
|
30
|
+
// Renderer
|
|
31
|
+
const renderer = new THREE.WebGLRenderer({
|
|
32
|
+
alpha: true,
|
|
33
|
+
antialias: true,
|
|
34
|
+
});
|
|
35
|
+
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
36
|
+
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
|
|
37
|
+
containerRef.current.appendChild(renderer.domElement);
|
|
38
|
+
rendererRef.current = renderer;
|
|
39
|
+
|
|
40
|
+
// Particles
|
|
41
|
+
const particlesGeometry = new THREE.BufferGeometry();
|
|
42
|
+
const particlesCount = 3000;
|
|
43
|
+
const positions = new Float32Array(particlesCount * 3);
|
|
44
|
+
const colors = new Float32Array(particlesCount * 3);
|
|
45
|
+
|
|
46
|
+
const colorBlue = new THREE.Color(0x0007cd);
|
|
47
|
+
const colorCyan = new THREE.Color(0x00d4ff);
|
|
48
|
+
const colorWhite = new THREE.Color(0xffffff);
|
|
49
|
+
|
|
50
|
+
for (let i = 0; i < particlesCount; i++) {
|
|
51
|
+
const i3 = i * 3;
|
|
52
|
+
positions[i3] = (Math.random() - 0.5) * 100;
|
|
53
|
+
positions[i3 + 1] = (Math.random() - 0.5) * 100;
|
|
54
|
+
positions[i3 + 2] = (Math.random() - 0.5) * 100;
|
|
55
|
+
|
|
56
|
+
const mixColor =
|
|
57
|
+
Math.random() > 0.5 ? colorBlue : Math.random() > 0.5 ? colorCyan : colorWhite;
|
|
58
|
+
colors[i3] = mixColor.r;
|
|
59
|
+
colors[i3 + 1] = mixColor.g;
|
|
60
|
+
colors[i3 + 2] = mixColor.b;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
particlesGeometry.setAttribute(
|
|
64
|
+
"position",
|
|
65
|
+
new THREE.BufferAttribute(positions, 3)
|
|
66
|
+
);
|
|
67
|
+
particlesGeometry.setAttribute("color", new THREE.BufferAttribute(colors, 3));
|
|
68
|
+
|
|
69
|
+
const particlesMaterial = new THREE.PointsMaterial({
|
|
70
|
+
size: 0.15,
|
|
71
|
+
vertexColors: true,
|
|
72
|
+
transparent: true,
|
|
73
|
+
opacity: 0.6,
|
|
74
|
+
blending: THREE.AdditiveBlending,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const particlesMesh = new THREE.Points(
|
|
78
|
+
particlesGeometry,
|
|
79
|
+
particlesMaterial
|
|
80
|
+
);
|
|
81
|
+
scene.add(particlesMesh);
|
|
82
|
+
|
|
83
|
+
// Floating geometric shapes
|
|
84
|
+
const shapes: THREE.Mesh[] = [];
|
|
85
|
+
const geometries = [
|
|
86
|
+
new THREE.IcosahedronGeometry(1, 0),
|
|
87
|
+
new THREE.OctahedronGeometry(1, 0),
|
|
88
|
+
new THREE.TetrahedronGeometry(1, 0),
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
const material = new THREE.MeshBasicMaterial({
|
|
92
|
+
color: 0x0007cd,
|
|
93
|
+
wireframe: true,
|
|
94
|
+
transparent: true,
|
|
95
|
+
opacity: 0.3,
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
for (let i = 0; i < 15; i++) {
|
|
99
|
+
const geometry =
|
|
100
|
+
geometries[Math.floor(Math.random() * geometries.length)];
|
|
101
|
+
const mesh = new THREE.Mesh(geometry, material.clone());
|
|
102
|
+
mesh.position.set(
|
|
103
|
+
(Math.random() - 0.5) * 60,
|
|
104
|
+
(Math.random() - 0.5) * 60,
|
|
105
|
+
(Math.random() - 0.5) * 40
|
|
106
|
+
);
|
|
107
|
+
mesh.rotation.set(
|
|
108
|
+
Math.random() * Math.PI,
|
|
109
|
+
Math.random() * Math.PI,
|
|
110
|
+
Math.random() * Math.PI
|
|
111
|
+
);
|
|
112
|
+
mesh.userData = {
|
|
113
|
+
rotationSpeed: {
|
|
114
|
+
x: (Math.random() - 0.5) * 0.01,
|
|
115
|
+
y: (Math.random() - 0.5) * 0.01,
|
|
116
|
+
z: (Math.random() - 0.5) * 0.01,
|
|
117
|
+
},
|
|
118
|
+
floatSpeed: Math.random() * 0.5 + 0.5,
|
|
119
|
+
floatOffset: Math.random() * Math.PI * 2,
|
|
120
|
+
};
|
|
121
|
+
shapes.push(mesh);
|
|
122
|
+
scene.add(mesh);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Text "Antony Nguyễn" - loaded asynchronously
|
|
126
|
+
let textMesh: THREE.Mesh | null = null;
|
|
127
|
+
let textLoaded = false;
|
|
128
|
+
|
|
129
|
+
const loadFont = () => {
|
|
130
|
+
const loader = new FontLoader();
|
|
131
|
+
loader.load(
|
|
132
|
+
"https://threejs.org/examples/fonts/helvetiker_bold.typeface.json",
|
|
133
|
+
(font) => {
|
|
134
|
+
const textGeometry = new TextGeometry("Antony Nguyễn", {
|
|
135
|
+
font: font,
|
|
136
|
+
size: 3,
|
|
137
|
+
height: 0.5,
|
|
138
|
+
curveSegments: 12,
|
|
139
|
+
bevelEnabled: true,
|
|
140
|
+
bevelThickness: 0.03,
|
|
141
|
+
bevelSize: 0.02,
|
|
142
|
+
bevelSegments: 5,
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
textGeometry.computeBoundingBox();
|
|
146
|
+
const centerOffset = new THREE.Vector3();
|
|
147
|
+
textGeometry.boundingBox?.getCenter(centerOffset);
|
|
148
|
+
textGeometry.translate(-centerOffset.x, -centerOffset.y, -centerOffset.z);
|
|
149
|
+
|
|
150
|
+
const textMaterial = new THREE.MeshPhongMaterial({
|
|
151
|
+
color: 0xffffff,
|
|
152
|
+
specular: 0x0007cd,
|
|
153
|
+
shininess: 100,
|
|
154
|
+
transparent: true,
|
|
155
|
+
opacity: 0.9,
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
textMesh = new THREE.Mesh(textGeometry, textMaterial);
|
|
159
|
+
textMesh.position.set(0, 8, 0);
|
|
160
|
+
scene.add(textMesh);
|
|
161
|
+
textLoaded = true;
|
|
162
|
+
},
|
|
163
|
+
undefined,
|
|
164
|
+
(error) => {
|
|
165
|
+
console.log("Font loading failed, using fallback text");
|
|
166
|
+
textLoaded = true;
|
|
167
|
+
}
|
|
168
|
+
);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
loadFont();
|
|
172
|
+
|
|
173
|
+
// Mouse interaction
|
|
174
|
+
const mouse = { x: 0, y: 0 };
|
|
175
|
+
const handleMouseMove = (event: MouseEvent) => {
|
|
176
|
+
mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
|
|
177
|
+
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
|
|
178
|
+
};
|
|
179
|
+
window.addEventListener("mousemove", handleMouseMove);
|
|
180
|
+
|
|
181
|
+
// Resize handler
|
|
182
|
+
const handleResize = () => {
|
|
183
|
+
camera.aspect = window.innerWidth / window.innerHeight;
|
|
184
|
+
camera.updateProjectionMatrix();
|
|
185
|
+
renderer.setSize(window.innerWidth, window.innerHeight);
|
|
186
|
+
};
|
|
187
|
+
window.addEventListener("resize", handleResize);
|
|
188
|
+
|
|
189
|
+
// Animation
|
|
190
|
+
let time = 0;
|
|
191
|
+
const animate = () => {
|
|
192
|
+
animationIdRef.current = requestAnimationFrame(animate);
|
|
193
|
+
time += 0.01;
|
|
194
|
+
|
|
195
|
+
// Rotate particles
|
|
196
|
+
particlesMesh.rotation.y += 0.0005;
|
|
197
|
+
particlesMesh.rotation.x += 0.0002;
|
|
198
|
+
|
|
199
|
+
// Animate shapes
|
|
200
|
+
shapes.forEach((shape) => {
|
|
201
|
+
shape.rotation.x += shape.userData.rotationSpeed.x;
|
|
202
|
+
shape.rotation.y += shape.userData.rotationSpeed.y;
|
|
203
|
+
shape.rotation.z += shape.userData.rotationSpeed.z;
|
|
204
|
+
|
|
205
|
+
const floatY = Math.sin(time * shape.userData.floatSpeed + shape.userData.floatOffset) * 0.5;
|
|
206
|
+
shape.position.y += floatY * 0.01;
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
// Camera follows mouse slightly
|
|
210
|
+
camera.position.x += (mouse.x * 5 - camera.position.x) * 0.02;
|
|
211
|
+
camera.position.y += (mouse.y * 5 - camera.position.y) * 0.02;
|
|
212
|
+
camera.lookAt(scene.position);
|
|
213
|
+
|
|
214
|
+
// Text rotation
|
|
215
|
+
if (textMesh) {
|
|
216
|
+
textMesh.rotation.y = Math.sin(time * 0.5) * 0.3;
|
|
217
|
+
textMesh.position.y = 8 + Math.sin(time) * 0.5;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
renderer.render(scene, camera);
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
animate();
|
|
224
|
+
|
|
225
|
+
// Cleanup
|
|
226
|
+
return () => {
|
|
227
|
+
window.removeEventListener("mousemove", handleMouseMove);
|
|
228
|
+
window.removeEventListener("resize", handleResize);
|
|
229
|
+
if (animationIdRef.current) {
|
|
230
|
+
cancelAnimationFrame(animationIdRef.current);
|
|
231
|
+
}
|
|
232
|
+
renderer.dispose();
|
|
233
|
+
if (containerRef.current && renderer.domElement) {
|
|
234
|
+
containerRef.current.removeChild(renderer.domElement);
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
}, []);
|
|
238
|
+
|
|
239
|
+
return <div ref={containerRef} className="three-canvas" />;
|
|
240
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import Section from "@/components/Section";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import ClipboardIcon from "@/components/icons/ClipboardIcon";
|
|
4
|
+
import UserIcon from "@/components/icons/UserIcon";
|
|
5
|
+
import LinkIcon from "@/components/icons/LinkIcon";
|
|
6
|
+
|
|
7
|
+
export default function WhySection() {
|
|
8
|
+
return (
|
|
9
|
+
<Section
|
|
10
|
+
id="why"
|
|
11
|
+
title="Why AGENTS.md?"
|
|
12
|
+
className="pt-24 pb-12"
|
|
13
|
+
center
|
|
14
|
+
maxWidthClass="max-w-3xl"
|
|
15
|
+
>
|
|
16
|
+
<div className="space-y-4">
|
|
17
|
+
<p className="mb-4">
|
|
18
|
+
README.md files are for humans: quick starts, project descriptions,
|
|
19
|
+
and contribution guidelines.
|
|
20
|
+
</p>
|
|
21
|
+
<p className="mb-4">
|
|
22
|
+
AGENTS.md complements this by containing the extra, sometimes detailed
|
|
23
|
+
context coding agents need: build steps, tests, and conventions that
|
|
24
|
+
might clutter a README or aren’t relevant to human contributors.
|
|
25
|
+
</p>
|
|
26
|
+
<p className="mb-4">We intentionally kept it separate to:</p>
|
|
27
|
+
<div className="flex flex-col gap-4">
|
|
28
|
+
<div className="flex items-center gap-3">
|
|
29
|
+
<ClipboardIcon />
|
|
30
|
+
<p>
|
|
31
|
+
<span className="font-semibold block">
|
|
32
|
+
Give agents a clear, predictable place for instructions.
|
|
33
|
+
</span>
|
|
34
|
+
</p>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<div className="flex items-center gap-3">
|
|
38
|
+
<UserIcon />
|
|
39
|
+
<p>
|
|
40
|
+
<span className="font-semibold block">
|
|
41
|
+
Keep READMEs concise and focused on human contributors.
|
|
42
|
+
</span>
|
|
43
|
+
</p>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
<div className="flex items-center gap-3">
|
|
47
|
+
<LinkIcon />
|
|
48
|
+
<p>
|
|
49
|
+
<span className="font-semibold block">
|
|
50
|
+
Provide precise, agent-focused guidance that complements
|
|
51
|
+
existing README and docs.
|
|
52
|
+
</span>
|
|
53
|
+
</p>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
<p>
|
|
57
|
+
Rather than introducing another proprietary file, we chose a name and
|
|
58
|
+
format that could work for anyone. If you’re building or using
|
|
59
|
+
coding agents and find this helpful, feel free to adopt it.
|
|
60
|
+
</p>
|
|
61
|
+
</div>
|
|
62
|
+
</Section>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
export default function ClipboardIcon({ className = "w-6 h-6 flex-shrink-0" }) {
|
|
4
|
+
return (
|
|
5
|
+
<svg
|
|
6
|
+
className={className}
|
|
7
|
+
fill="none"
|
|
8
|
+
stroke="currentColor"
|
|
9
|
+
strokeWidth={1.8}
|
|
10
|
+
viewBox="0 0 24 24"
|
|
11
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
12
|
+
aria-hidden="true"
|
|
13
|
+
>
|
|
14
|
+
<path
|
|
15
|
+
strokeLinecap="round"
|
|
16
|
+
strokeLinejoin="round"
|
|
17
|
+
d="M9 2.25h6a.75.75 0 01.75.75v1.5h1.5A2.25 2.25 0 0120.25 6.75v12A2.25 2.25 0 0118 21h-12a2.25 2.25 0 01-2.25-2.25v-12A2.25 2.25 0 016 4.5h1.5V3a.75.75 0 01.75-.75z"
|
|
18
|
+
/>
|
|
19
|
+
<path
|
|
20
|
+
strokeLinecap="round"
|
|
21
|
+
strokeLinejoin="round"
|
|
22
|
+
d="M9 12h6m-6 4h6"
|
|
23
|
+
/>
|
|
24
|
+
</svg>
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
|