kaddidlehopper 0.3.1 → 0.5.0

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.
Files changed (37) hide show
  1. package/.claude/settings.local.json +7 -0
  2. package/add-ons/ai/assets/AGENTS.md.append +24 -0
  3. package/add-ons/ai/info.json +12 -17
  4. package/add-ons/db/assets/AGENTS.md.append +22 -0
  5. package/add-ons/db/info.json +11 -10
  6. package/add-ons/forms/assets/AGENTS.md.append +13 -0
  7. package/add-ons/forms/info.json +7 -10
  8. package/dist/agents-md.js +103 -0
  9. package/dist/cli.js +4 -0
  10. package/dist/types/agents-md.d.ts +5 -0
  11. package/examples/ai-chat/assets/AGENTS.md.append +24 -0
  12. package/examples/ai-chat/info.json +12 -11
  13. package/examples/blog/assets/AGENTS.md.append +18 -0
  14. package/examples/blog/info.json +26 -29
  15. package/examples/calculator/assets/AGENTS.md.append +9 -0
  16. package/examples/calculator/info.json +9 -8
  17. package/examples/dashboard/assets/AGENTS.md.append +12 -0
  18. package/examples/dashboard/info.json +8 -8
  19. package/examples/ecommerce/assets/AGENTS.md.append +22 -0
  20. package/examples/ecommerce/info.json +25 -27
  21. package/examples/events/assets/AGENTS.md.append +21 -0
  22. package/examples/events/info.json +47 -60
  23. package/examples/marketing/assets/AGENTS.md.append +15 -0
  24. package/examples/marketing/info.json +18 -23
  25. package/examples/portfolio/assets/AGENTS.md.append +21 -0
  26. package/examples/portfolio/info.json +38 -44
  27. package/examples/resume/assets/AGENTS.md.append +19 -0
  28. package/examples/resume/info.json +25 -15
  29. package/examples/saas/assets/AGENTS.md.append +9 -0
  30. package/examples/saas/info.json +10 -13
  31. package/examples/survey/assets/AGENTS.md.append +9 -0
  32. package/examples/survey/info.json +8 -8
  33. package/package.json +1 -1
  34. package/project/base/AGENTS.md +86 -0
  35. package/project/info.json +17 -0
  36. package/src/agents-md.ts +139 -0
  37. package/src/cli.ts +5 -0
@@ -7,68 +7,55 @@
7
7
  "priority": 10,
8
8
  "link": "",
9
9
  "routes": [
10
- {
11
- "url": "/",
12
- "path": "src/routes/index.tsx",
13
- "jsName": "EventsHome"
14
- },
15
- {
16
- "url": "/schedule",
17
- "path": "src/routes/schedule.index.tsx",
18
- "jsName": "SchedulePage"
19
- },
20
- {
21
- "url": "/speakers",
22
- "path": "src/routes/speakers.index.tsx",
23
- "jsName": "SpeakersPage"
24
- },
25
- {
26
- "url": "/speakers/$slug",
27
- "path": "src/routes/speakers.$slug.tsx",
28
- "jsName": "SpeakerDetail"
29
- },
30
- {
31
- "url": "/talks",
32
- "path": "src/routes/talks.index.tsx",
33
- "jsName": "TalksPage"
34
- },
35
- {
36
- "url": "/talks/$slug",
37
- "path": "src/routes/talks.$slug.tsx",
38
- "jsName": "TalkDetail"
39
- },
40
- {
41
- "url": "/api/remy-chat",
42
- "path": "src/routes/api.remy-chat.ts",
43
- "jsName": "RemyChatAPI"
44
- }
45
- ],
46
- "integrations": [
47
- {
48
- "type": "vite-plugin",
49
- "import": "import contentCollections from '@content-collections/vite'",
50
- "code": "contentCollections()"
51
- }
10
+ {"url": "/", "path": "src/routes/index.tsx", "jsName": "EventsHome"},
11
+ {"url": "/schedule", "path": "src/routes/schedule.index.tsx", "jsName": "SchedulePage"},
12
+ {"url": "/speakers", "path": "src/routes/speakers.index.tsx", "jsName": "SpeakersPage"},
13
+ {"url": "/speakers/$slug", "path": "src/routes/speakers.$slug.tsx", "jsName": "SpeakerDetail"},
14
+ {"url": "/talks", "path": "src/routes/talks.index.tsx", "jsName": "TalksPage"},
15
+ {"url": "/talks/$slug", "path": "src/routes/talks.$slug.tsx", "jsName": "TalkDetail"},
16
+ {"url": "/api/remy-chat", "path": "src/routes/api.remy-chat.ts", "jsName": "RemyChatAPI"}
52
17
  ],
18
+ "features": ["tanstack-start", "content-collections", "tanstack-ai"],
19
+ "integrations": [{"type": "vite-plugin", "import": "import contentCollections from '@content-collections/vite'", "code": "contentCollections()"}],
53
20
  "dependsOn": [],
54
21
  "variables": [],
55
- "bareBones": {
56
- "deleteFiles": [
57
- "public/background-2.jpg",
58
- "public/background-3.jpg",
59
- "public/background-4.jpg",
60
- "public/speakers/hans-mueller.jpg",
61
- "public/speakers/isabella-martinez.jpg",
62
- "public/speakers/kenji-nakamura.jpg",
63
- "public/speakers/marie-dubois.jpg",
64
- "public/speakers/priya-sharma.jpg",
65
- "public/talks/french-macaron-mastery.jpg",
66
- "public/talks/neapolitan-pizza-tradition-meets-innovation.jpg",
67
- "public/talks/savory-breads-of-the-mediterranean.jpg",
68
- "public/talks/sourdough-from-starter-to-masterpiece.jpg",
69
- "public/talks/the-art-of-the-perfect-tart.jpg",
70
- "public/talks/the-science-of-sugar.jpg",
71
- "public/talks/umami-in-pastry-east-meets-west.jpg"
72
- ]
22
+ "bareBones": {"deleteFiles": ["public/background-2.jpg", "public/background-3.jpg", "public/background-4.jpg", "public/speakers/hans-mueller.jpg", "public/speakers/isabella-martinez.jpg", "public/speakers/kenji-nakamura.jpg", "public/speakers/marie-dubois.jpg", "public/speakers/priya-sharma.jpg", "public/talks/french-macaron-mastery.jpg", "public/talks/neapolitan-pizza-tradition-meets-innovation.jpg", "public/talks/savory-breads-of-the-mediterranean.jpg", "public/talks/sourdough-from-starter-to-masterpiece.jpg", "public/talks/the-art-of-the-perfect-tart.jpg", "public/talks/the-science-of-sugar.jpg", "public/talks/umami-in-pastry-east-meets-west.jpg"]},
23
+ "packageFileDescriptions": {
24
+ "content-collections.ts": "Content Collections: speakers, talks schemas.",
25
+ "content/speakers/andre-costa.md": "Speaker content: Andre Costa.",
26
+ "content/speakers/hans-mueller.md.ejs": "Speaker template: Hans Mueller.",
27
+ "content/speakers/isabella-martinez.md.ejs": "Speaker template: Isabella Martinez.",
28
+ "content/speakers/kenji-nakamura.md.ejs": "Speaker template: Kenji Nakamura.",
29
+ "content/speakers/marie-dubois.md.ejs": "Speaker template: Marie Dubois.",
30
+ "content/speakers/priya-sharma.md.ejs": "Speaker template: Priya Sharma.",
31
+ "content/talks/croissant-lamination-secrets.md": "Talk content: Croissant Lamination Secrets.",
32
+ "content/talks/french-macaron-mastery.md.ejs": "Talk template: French Macaron Mastery.",
33
+ "content/talks/neapolitan-pizza-tradition-meets-innovation.md.ejs": "Talk template.",
34
+ "content/talks/savory-breads-of-the-mediterranean.md.ejs": "Talk template.",
35
+ "content/talks/sourdough-from-starter-to-masterpiece.md.ejs": "Talk template.",
36
+ "content/talks/the-art-of-the-perfect-tart.md.ejs": "Talk template.",
37
+ "content/talks/the-science-of-sugar.md.ejs": "Talk template.",
38
+ "content/talks/umami-in-pastry-east-meets-west.md.ejs": "Talk template.",
39
+ "src/styles.css": "Global styles: Tailwind, prose.",
40
+ "src/routes/index.tsx": "Conference home: hero carousel, RemyAssistant.",
41
+ "src/routes/schedule.index.tsx": "Schedule page.",
42
+ "src/routes/speakers.index.tsx": "Speakers list.",
43
+ "src/routes/speakers.$slug.tsx": "Speaker detail by slug.",
44
+ "src/routes/talks.index.tsx": "Talks list.",
45
+ "src/routes/talks.$slug.tsx": "Talk detail by slug.",
46
+ "src/routes/api.remy-chat.ts": "POST handler for Remy AI chat with conference tools.",
47
+ "src/routes/__root.tsx": "Root layout: HeaderNav, styles.",
48
+ "src/lib/utils.ts": "cn() helper.",
49
+ "src/lib/model-selection.ts": "AI model selection utilities.",
50
+ "src/lib/conference-tools.ts": "AI tools for speakers, talks, schedule.",
51
+ "src/lib/conference-ai-hook.ts": "useRemyChat hook.",
52
+ "src/components/Header.tsx": "Header component.",
53
+ "src/components/HeaderNav.tsx": "Navigation component.",
54
+ "src/components/HeroCarousel.tsx": "Hero image carousel.",
55
+ "src/components/RemyAssistant.tsx": "Remy AI assistant for conference Q&A.",
56
+ "src/components/SpeakerCard.tsx": "Speaker card display.",
57
+ "src/components/TalkCard.tsx": "Talk card display.",
58
+ "src/components/ui/card.tsx": "Card UI component.",
59
+ "public/tanstack-word-logo-white.svg": "TanStack logo."
73
60
  }
74
61
  }
@@ -0,0 +1,15 @@
1
+ ### Marketing Site with AI Assistant
2
+
3
+ Motorcycle marketing site with TanStack AI chat assistant. No Stripe checkout.
4
+
5
+ **AI tools available:**
6
+ - `getMotorcycles` - Get all motorcycles from catalog
7
+ - `recommendMotorcycle` - Display motorcycle recommendation card (MUST use for recommendations)
8
+
9
+ **Components:** MotorcycleAIAssistant, MotorcycleRecommendation
10
+
11
+ **Dependencies:** @tanstack/ai, streamdown
12
+
13
+ ## Environment Variables
14
+
15
+ For AI: ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, or OLLAMA_BASE_URL (same as ai add-on).
@@ -7,32 +7,27 @@
7
7
  "priority": 10,
8
8
  "link": "",
9
9
  "routes": [
10
- {
11
- "url": "/",
12
- "name": "Home",
13
- "path": "src/routes/index.tsx",
14
- "jsName": "MotorcyclesIndex"
15
- },
16
- {
17
- "url": "/motorcycles/$motorcycleId",
18
- "path": "src/routes/motorcycles/$motorcycleId.tsx",
19
- "jsName": "MotorcycleDetail"
20
- },
21
- {
22
- "url": "/api/motorcycle-chat",
23
- "path": "src/routes/api.motorcycle-chat.ts",
24
- "jsName": "MotorcycleChatAPI"
25
- }
10
+ {"url": "/", "name": "Home", "path": "src/routes/index.tsx", "jsName": "MotorcyclesIndex"},
11
+ {"url": "/motorcycles/$motorcycleId", "path": "src/routes/motorcycles/$motorcycleId.tsx", "jsName": "MotorcycleDetail"},
12
+ {"url": "/api/motorcycle-chat", "path": "src/routes/api.motorcycle-chat.ts", "jsName": "MotorcycleChatAPI"}
26
13
  ],
14
+ "features": ["tanstack-start", "tanstack-ai"],
27
15
  "integrations": [],
28
16
  "dependsOn": [],
29
17
  "variables": [],
30
- "bareBones": {
31
- "deleteFiles": [
32
- "public/motorcycle-adventure.jpg",
33
- "public/motorcycle-cruiser.jpg",
34
- "public/motorcycle-sport.jpg",
35
- "public/motorcycle-supersport.jpg"
36
- ]
18
+ "bareBones": {"deleteFiles": ["public/motorcycle-adventure.jpg", "public/motorcycle-cruiser.jpg", "public/motorcycle-sport.jpg", "public/motorcycle-supersport.jpg"]},
19
+ "packageFileDescriptions": {
20
+ "src/routes/index.tsx": "Marketing home: motorcycle showcase, MotorcycleAIAssistant.",
21
+ "src/routes/motorcycles/$motorcycleId.tsx": "Motorcycle detail page with recommendation.",
22
+ "src/routes/api.motorcycle-chat.ts": "POST handler for motorcycle AI chat.",
23
+ "src/routes/__root.tsx": "Root layout: Header, styles.",
24
+ "src/styles.css": "Global styles.",
25
+ "src/data/motorcycles.ts.ejs": "Motorcycle catalog data template.",
26
+ "src/lib/motorcycle-tools.ts": "AI tools: getMotorcycles, recommendMotorcycle.",
27
+ "src/lib/motorcycle-ai-hook.ts": "useMotorcycleChat hook.",
28
+ "src/store/motorcycle-assistant.ts": "Zustand store for assistant state.",
29
+ "src/components/Header.tsx": "Header.",
30
+ "src/components/MotorcycleAIAssistant.tsx": "AI marketing assistant.",
31
+ "src/components/MotorcycleRecommendation.tsx": "Motorcycle recommendation card."
37
32
  }
38
33
  }
@@ -0,0 +1,21 @@
1
+ ### Portfolio Integration
2
+
3
+ Developer portfolio with Content Collections (jobs, education, blog, projects) and ResumeAssistant.
4
+
5
+ **Content Collections:**
6
+ - `jobs` - jobTitle, company, startDate, endDate, location, tags, content
7
+ - `education` - school, summary, startDate, endDate, tags, content
8
+ - `blog` - title, date, summary, tags, author, content
9
+ - `projects` - title, description, tags, github, liveUrl, image, content
10
+
11
+ **AI tools available (ResumeAssistant):**
12
+ - `getJobsBySkill` - Query jobs by skill tag
13
+ - `getAllJobs` - Get all work experience
14
+ - `getAllEducation` - Get education history
15
+ - `searchExperience` - Full-text search across resume
16
+
17
+ **Routes:** /, /resume, /projects, /contact, /blog/$slug
18
+
19
+ ## Environment Variables
20
+
21
+ For AI: ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, or OLLAMA_BASE_URL (same as ai add-on).
@@ -7,50 +7,44 @@
7
7
  "priority": 10,
8
8
  "link": "",
9
9
  "routes": [
10
- {
11
- "url": "/",
12
- "path": "src/routes/index.tsx",
13
- "jsName": "BlogIndex"
14
- },
15
- {
16
- "url": "/resume",
17
- "name": "Resume",
18
- "icon": "FileText",
19
- "path": "src/routes/resume.tsx",
20
- "jsName": "Resume"
21
- },
22
- {
23
- "url": "/projects",
24
- "name": "Projects",
25
- "icon": "FolderGit2",
26
- "path": "src/routes/projects.tsx",
27
- "jsName": "Projects"
28
- },
29
- {
30
- "url": "/contact",
31
- "name": "Contact",
32
- "icon": "Mail",
33
- "path": "src/routes/contact.tsx",
34
- "jsName": "Contact"
35
- },
36
- {
37
- "url": "/blog/$slug",
38
- "path": "src/routes/blog/$slug.tsx",
39
- "jsName": "BlogPost"
40
- },
41
- {
42
- "url": "/api/resume-chat",
43
- "path": "src/routes/api.resume-chat.ts",
44
- "jsName": "ResumeChatAPI"
45
- }
46
- ],
47
- "integrations": [
48
- {
49
- "type": "vite-plugin",
50
- "import": "import contentCollections from '@content-collections/vite'",
51
- "code": "contentCollections()"
52
- }
10
+ {"url": "/", "path": "src/routes/index.tsx", "jsName": "BlogIndex"},
11
+ {"url": "/resume", "name": "Resume", "icon": "FileText", "path": "src/routes/resume.tsx", "jsName": "Resume"},
12
+ {"url": "/projects", "name": "Projects", "icon": "FolderGit2", "path": "src/routes/projects.tsx", "jsName": "Projects"},
13
+ {"url": "/contact", "name": "Contact", "icon": "Mail", "path": "src/routes/contact.tsx", "jsName": "Contact"},
14
+ {"url": "/blog/$slug", "path": "src/routes/blog/$slug.tsx", "jsName": "BlogPost"},
15
+ {"url": "/api/resume-chat", "path": "src/routes/api.resume-chat.ts", "jsName": "ResumeChatAPI"}
53
16
  ],
17
+ "features": ["tanstack-start", "content-collections", "netlify-forms"],
18
+ "integrations": [{"type": "vite-plugin", "import": "import contentCollections from '@content-collections/vite'", "code": "contentCollections()"}],
54
19
  "dependsOn": [],
55
- "variables": []
20
+ "variables": [],
21
+ "packageFileDescriptions": {
22
+ "content-collections.ts": "Content Collections: jobs, education, blog, projects schemas.",
23
+ "content/jobs/initech-junior.md": "Job content: Initech Junior.",
24
+ "content/education/code-school.md": "Education content: Code School.",
25
+ "content/blog/getting-started-with-tanstack.md": "Blog post.",
26
+ "content/blog/react-19-features.md": "Blog post.",
27
+ "content/blog/tailwind-css-v4-guide.md": "Blog post.",
28
+ "content/projects/portfolio-site.md": "Project content.",
29
+ "content/projects/task-manager.md": "Project content.",
30
+ "src/styles.css": "Global styles.",
31
+ "src/routes/index.tsx": "Portfolio home: blog index.",
32
+ "src/routes/resume.tsx": "Resume page with ResumeAssistant.",
33
+ "src/routes/projects.tsx": "Projects page.",
34
+ "src/routes/contact.tsx": "Contact page.",
35
+ "src/routes/blog/$slug.tsx": "Blog post detail.",
36
+ "src/routes/api.resume-chat.ts": "POST handler for resume AI chat with getJobsBySkill, getAllJobs, etc.",
37
+ "src/routes/__root.tsx": "Root layout.",
38
+ "src/lib/utils.ts": "cn() helper.",
39
+ "src/lib/resume-tools.ts": "AI tools: getJobsBySkill, getAllJobs, getAllEducation, searchExperience.",
40
+ "src/lib/resume-ai-hook.ts": "useResumeChat hook.",
41
+ "src/components/Header.tsx": "Header.",
42
+ "src/components/ResumeAssistant.tsx": "Resume AI assistant.",
43
+ "src/components/ui/badge.tsx": "Badge component.",
44
+ "src/components/ui/card.tsx": "Card component.",
45
+ "src/components/ui/checkbox.tsx": "Checkbox component.",
46
+ "src/components/ui/hover-card.tsx": "HoverCard component.",
47
+ "src/components/ui/separator.tsx": "Separator component.",
48
+ "public/contact.html": "Static contact form."
49
+ }
56
50
  }
@@ -0,0 +1,19 @@
1
+ ### Resume Integration
2
+
3
+ Professional resume template with Content Collections and shadcn-style Radix UI.
4
+
5
+ **Content Collections:**
6
+ - `jobs` - jobTitle, company, startDate, endDate, location, tags, content
7
+ - `education` - school, summary, startDate, endDate, tags, content
8
+
9
+ **AI tools available (ResumeAssistant):**
10
+ - `getJobsBySkill` - Query jobs by skill tag
11
+ - `getAllJobs` - Get all work experience
12
+ - `getAllEducation` - Get education history
13
+ - `searchExperience` - Full-text search across resume
14
+
15
+ **UI components:** Radix Checkbox, HoverCard, Separator, Badge, Card
16
+
17
+ ## Environment Variables
18
+
19
+ For AI: ANTHROPIC_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, or OLLAMA_BASE_URL (same as ai add-on).
@@ -6,20 +6,30 @@
6
6
  "type": "example",
7
7
  "priority": 10,
8
8
  "link": "",
9
- "routes": [
10
- {
11
- "url": "/",
12
- "path": "src/routes/index.tsx",
13
- "jsName": "ResumeHome"
14
- }
15
- ],
16
- "integrations": [
17
- {
18
- "type": "vite-plugin",
19
- "import": "import contentCollections from '@content-collections/vite'",
20
- "code": "contentCollections()"
21
- }
22
- ],
9
+ "routes": [{"url": "/", "path": "src/routes/index.tsx", "jsName": "ResumeHome"}],
10
+ "features": ["tanstack-start", "content-collections", "tanstack-ai"],
11
+ "integrations": [{"type": "vite-plugin", "import": "import contentCollections from '@content-collections/vite'", "code": "contentCollections()"}],
23
12
  "dependsOn": [],
24
- "variables": []
13
+ "variables": [],
14
+ "packageFileDescriptions": {
15
+ "content-collections.ts": "Content Collections: jobs, education schemas.",
16
+ "content/jobs/initech-junior.md": "Job content: Initech Junior.",
17
+ "content/jobs/freelance.md.ejs": "Job template: Freelance.",
18
+ "content/jobs/initech-lead.md.ejs": "Job template: Initech Lead.",
19
+ "content/jobs/initrode-senior.md.ejs": "Job template: Initrode Senior.",
20
+ "content/education/code-school.md": "Education content: Code School.",
21
+ "src/styles.css": "Global styles.",
22
+ "src/routes/index.tsx": "Resume home: full resume with ResumeAssistant.",
23
+ "src/routes/api.resume-chat.ts": "POST handler for resume AI chat.",
24
+ "src/lib/utils.ts": "cn() helper.",
25
+ "src/lib/resume-tools.ts": "AI tools: getJobsBySkill, getAllJobs, getAllEducation, searchExperience.",
26
+ "src/lib/resume-ai-hook.ts": "useResumeChat hook.",
27
+ "src/components/Header.tsx": "Header.",
28
+ "src/components/ResumeAssistant.tsx": "Resume AI assistant.",
29
+ "src/components/ui/badge.tsx": "Badge component.",
30
+ "src/components/ui/card.tsx": "Card component.",
31
+ "src/components/ui/checkbox.tsx": "Checkbox component.",
32
+ "src/components/ui/hover-card.tsx": "HoverCard component.",
33
+ "src/components/ui/separator.tsx": "Separator component."
34
+ }
25
35
  }
@@ -0,0 +1,9 @@
1
+ ### SaaS Landing Page
2
+
3
+ Landing page with pricing tiers, features section, and FAQ accordion.
4
+
5
+ **Routes:** / (hero, pricing, features), /faq (accordion Q&A)
6
+
7
+ **FAQ:** ChevronDown accordion with expand/collapse; pricing tiers: Starter (free), Pro, Enterprise
8
+
9
+ No special dependencies or environment variables beyond base TanStack Start.
@@ -7,20 +7,17 @@
7
7
  "priority": 10,
8
8
  "link": "",
9
9
  "routes": [
10
- {
11
- "url": "/",
12
- "path": "src/routes/index.tsx",
13
- "jsName": "Home"
14
- },
15
- {
16
- "url": "/faq",
17
- "name": "FAQ",
18
- "icon": "HelpCircle",
19
- "path": "src/routes/faq.tsx",
20
- "jsName": "FAQ"
21
- }
10
+ {"url": "/", "path": "src/routes/index.tsx", "jsName": "Home"},
11
+ {"url": "/faq", "name": "FAQ", "icon": "HelpCircle", "path": "src/routes/faq.tsx", "jsName": "FAQ"}
22
12
  ],
13
+ "features": ["tanstack-start"],
23
14
  "integrations": [],
24
15
  "dependsOn": [],
25
- "variables": []
16
+ "variables": [],
17
+ "packageFileDescriptions": {
18
+ "src/routes/index.tsx": "Landing page: hero, pricing, features.",
19
+ "src/routes/faq.tsx": "FAQ page: accordion with Acme SaaS Q&A.",
20
+ "src/routes/__root.tsx": "Root layout: Header, styles.",
21
+ "src/components/Header.tsx": "Header with nav links."
22
+ }
26
23
  }
@@ -0,0 +1,9 @@
1
+ ### Netlify Forms Survey
2
+
3
+ Movie survey form using Netlify Forms.
4
+
5
+ **Form:** `best-movie-survey` - name, movie select, reason textarea
6
+ **Spam protection:** `netlify-honeypot="bot-field"` + hidden bot-field input
7
+ **Detection:** `public/form-survey.html` declares the form (hidden) for Netlify build detection
8
+
9
+ No environment variables. Works after deploy to Netlify.
@@ -6,14 +6,14 @@
6
6
  "type": "example",
7
7
  "priority": 10,
8
8
  "link": "",
9
- "routes": [
10
- {
11
- "url": "/",
12
- "path": "src/routes/index.tsx",
13
- "jsName": "Home"
14
- }
15
- ],
9
+ "routes": [{"url": "/", "path": "src/routes/index.tsx", "jsName": "Home"}],
10
+ "features": ["tanstack-start", "netlify-forms"],
16
11
  "integrations": [],
17
12
  "dependsOn": [],
18
- "variables": []
13
+ "variables": [],
14
+ "packageFileDescriptions": {
15
+ "src/routes/index.tsx": "Survey home: renders SurveyForm.",
16
+ "src/components/SurveyForm.tsx": "Movie survey: favorite pick, Netlify Forms with honeypot.",
17
+ "public/form-survey.html": "Static HTML form declaration for Netlify Forms."
18
+ }
19
19
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kaddidlehopper",
3
- "version": "0.3.1",
3
+ "version": "0.5.0",
4
4
  "description": "Create TanStack Start applications for Netlify",
5
5
  "bin": "./dist/index.js",
6
6
  "type": "module",
@@ -0,0 +1,86 @@
1
+ # AGENTS.md
2
+
3
+ This document provides an overview of the project structure for developers and AI agents working on this codebase.
4
+
5
+ ## Project Overview
6
+
7
+ An interactive resume/portfolio application with an AI-powered assistant. Built with TanStack Start and deployed on Netlify.
8
+
9
+ ### Tech Stack
10
+
11
+ | Layer | Technology |
12
+ |-------|------------|
13
+ | Framework | TanStack Start |
14
+ | Frontend | React 19, TanStack Router v1 |
15
+ | Build | Vite 7 |
16
+ | Styling | Tailwind CSS 4 |
17
+ | UI Components | Radix UI + custom components |
18
+ | Content | Content Collections (type-safe markdown) |
19
+ | AI | TanStack AI with multi-provider support |
20
+ | Language | TypeScript 5.7 (strict mode) |
21
+ | Deployment | Netlify |
22
+
23
+ ## Directory Structure
24
+
25
+ ```
26
+ [[[DIRECTORY STRUCTURE]]]
27
+ ```
28
+
29
+ ## Key Concepts
30
+
31
+ ### File-Based Routing (TanStack Router)
32
+
33
+ Routes are defined by files in `src/routes/`:
34
+
35
+ - `__root.tsx` - Root layout wrapping all pages
36
+ - `index.tsx` - Route for `/`
37
+ - `api.*.ts` - Server API endpoints (e.g., `api.resume-chat.ts` → `/api/resume-chat`)
38
+
39
+ ### Component Architecture
40
+
41
+ **UI Primitives** (`src/components/ui/`):
42
+ - Radix UI-based, Tailwind-styled
43
+ - Card, Badge, Checkbox, Separator, HoverCard
44
+
45
+ **Feature Components** (`src/components/`):
46
+ - Header, HeaderNav, ResumeAssistant
47
+
48
+ ## Configuration Files
49
+
50
+ | File | Purpose |
51
+ |------|---------|
52
+ | `vite.config.ts` | Vite plugins: TanStack Start, Netlify, Tailwind, Content Collections |
53
+ | `tsconfig.json` | TypeScript config with `@/*` path alias for `src/*` |
54
+ | `netlify.toml` | Build command, output directory, dev server settings |
55
+ | `content-collections.ts` | Zod schemas for jobs and education frontmatter |
56
+ | `styles.css` | Tailwind imports + CSS custom properties (oklch colors) |
57
+
58
+ ## Development Commands
59
+
60
+ ```bash
61
+ npm run dev # Start dev server
62
+ npm run build # Production build
63
+ npm run preview # Preview production build
64
+ ```
65
+
66
+ ## Conventions
67
+
68
+ ### Naming
69
+ - Components: PascalCase
70
+ - Utilities/hooks: camelCase
71
+ - Routes: kebab-case files
72
+
73
+ ### Styling
74
+ - Tailwind CSS utility classes
75
+ - `cn()` helper for conditional class merging
76
+ - CSS variables for theme tokens in `styles.css`
77
+
78
+ ### TypeScript
79
+ - Strict mode enabled
80
+ - Import paths use `@/` alias
81
+ - Zod for runtime validation
82
+ - Type-only imports with `type` keyword
83
+
84
+ ### State Management
85
+ - React hooks for local state
86
+ - Zustand if you need it for global state
@@ -0,0 +1,17 @@
1
+ {
2
+ "packageFileDescriptions": {
3
+ "AGENTS.md": "This document provides an overview of the project structure for developers and AI agents working on this codebase.",
4
+ "netlify.toml": "Netlify deployment config: build command (vite build), publish directory (dist/client), and dev server settings (port 8888, target 3000).",
5
+ "package.json": "Project manifest with TanStack Start, React 19, Vite 7, Tailwind CSS 4, and Netlify plugin dependencies; defines dev and build scripts.",
6
+ "vite.config.ts.ejs": "Vite config template: TanStack Start, React, Tailwind, Netlify plugin, and optional add-on integrations; processed by EJS.",
7
+ "tsconfig.json": "TypeScript config: ES2022 target, strict mode, @/* path alias for src/*, bundler module resolution.",
8
+ "src/styles.css": "Global styles: Tailwind import plus base body/code font styling.",
9
+ "src/routes/index.tsx": "Home route (/) with TanStack Start welcome/landing page and links to docs.",
10
+ "src/routes/__root.tsx": "Root layout: HTML shell, HeadContent, Header, styles, TanStack Devtools, and child route outlet.",
11
+ "src/router.tsx": "TanStack Router setup: creates router from generated routeTree with scroll restoration.",
12
+ "src/components/HeaderNav.tsx.ejs": "Navigation sidebar template: mobile menu, Home link, add-on routes; EJS-driven for dynamic route generation.",
13
+ "src/components/Header.tsx": "Header component wrapping HeaderNav and site title link.",
14
+ "public/tanstack-word-logo-white.svg": "TanStack wordmark logo (white) used in header/nav.",
15
+ "_dot_gitignore": "Template for .gitignore: node_modules, dist, .env, .netlify, .tanstack, etc."
16
+ }
17
+ }