agentvibes 2.0.20 → 2.0.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/.claude/agents/health-coach.md +154 -0
- package/.claude/agents/motivator.md +171 -0
- package/.claude/agents/negotiator.md +97 -0
- package/.claude/commands/agent-vibes/agent-health-coach.md +15 -0
- package/.claude/commands/agent-vibes/agent-motivator.md +15 -0
- package/.claude/commands/agent-vibes/agent-negotiator.md +15 -0
- package/.claude/commands/agent-vibes/agent.md +79 -0
- package/.claude/commands/agent-vibes/commands.json +4 -0
- package/.claude/commands/agent-vibes/set-favorite-voice.md +84 -0
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/download-extra-voices.sh +244 -0
- package/.claude/hooks/personality-manager.sh +81 -0
- package/.claude/hooks/piper-download-voices.sh +3 -93
- package/.claude/hooks/piper-multispeaker-registry.sh +165 -0
- package/.claude/hooks/play-tts-elevenlabs.sh +5 -3
- package/.claude/hooks/play-tts-piper.sh +27 -44
- package/.claude/hooks/provider-manager.sh +24 -5
- package/.claude/hooks/speed-manager.sh +10 -12
- package/.claude/hooks/voice-manager.sh +94 -56
- package/README.md +0 -3
- package/RELEASE_NOTES.md +40 -247
- package/docs/agents.md +485 -0
- package/docs/commands.md +1 -21
- package/docs/extra-voices-implementation-summary.md +235 -0
- package/docs/voice-registration-fix.md +254 -0
- package/fix-vscode-colors.sh +88 -0
- package/fixcolors +88 -0
- package/generate-all-agent-voices.sh +174 -0
- package/generate-missing-elevenlabs-complete.sh +236 -0
- package/generate-missing-elevenlabs.sh +110 -0
- package/generate-new-voices.sh +108 -0
- package/generate-piper-agent-intros.sh +85 -0
- package/generate-provider-and-agent-intros.sh +136 -0
- package/logo/fav_icon_128x128.png +0 -0
- package/logo/fav_icon_128x128.png:Zone.Identifier +4 -0
- package/logo/logo1.webp +0 -0
- package/logo/logo1.webp:Zone.Identifier +4 -0
- package/logo/social.png +0 -0
- package/logo/social.png:Zone.Identifier +4 -0
- package/mcp-server/agentvibes.db +0 -0
- package/mcp-server/server.py +47 -14
- package/package.json +3 -3
- package/regenerate-agent-voices.sh +79 -0
- package/test/unit/provider-manager.bats +8 -5
- package/test/unit/speed-manager.bats +4 -4
- package/agentvibes.org/.claude/audio/tts-padded-1760744118.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760748535.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760748676.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760750748.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760750947.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760752718.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760752907.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753017.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753045.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753241.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753315.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753382.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753408.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753426.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753446.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753541.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753553.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753577.mp3 +0 -0
- package/agentvibes.org/.claude/commands/agent-vibes/add.md +0 -21
- package/agentvibes.org/.claude/commands/agent-vibes/agent-vibes.md +0 -68
- package/agentvibes.org/.claude/commands/agent-vibes/bmad.md +0 -196
- package/agentvibes.org/.claude/commands/agent-vibes/commands.json +0 -77
- package/agentvibes.org/.claude/commands/agent-vibes/get.md +0 -9
- package/agentvibes.org/.claude/commands/agent-vibes/language.md +0 -23
- package/agentvibes.org/.claude/commands/agent-vibes/learn.md +0 -67
- package/agentvibes.org/.claude/commands/agent-vibes/list.md +0 -13
- package/agentvibes.org/.claude/commands/agent-vibes/personality.md +0 -79
- package/agentvibes.org/.claude/commands/agent-vibes/preview.md +0 -17
- package/agentvibes.org/.claude/commands/agent-vibes/provider.md +0 -54
- package/agentvibes.org/.claude/commands/agent-vibes/replay-target.md +0 -14
- package/agentvibes.org/.claude/commands/agent-vibes/replay.md +0 -19
- package/agentvibes.org/.claude/commands/agent-vibes/sample.md +0 -12
- package/agentvibes.org/.claude/commands/agent-vibes/sentiment.md +0 -52
- package/agentvibes.org/.claude/commands/agent-vibes/set-language.md +0 -47
- package/agentvibes.org/.claude/commands/agent-vibes/set-pretext.md +0 -65
- package/agentvibes.org/.claude/commands/agent-vibes/set-speed.md +0 -41
- package/agentvibes.org/.claude/commands/agent-vibes/switch.md +0 -53
- package/agentvibes.org/.claude/commands/agent-vibes/target-voice.md +0 -26
- package/agentvibes.org/.claude/commands/agent-vibes/target.md +0 -30
- package/agentvibes.org/.claude/commands/agent-vibes/update.md +0 -20
- package/agentvibes.org/.claude/commands/agent-vibes/version.md +0 -10
- package/agentvibes.org/.claude/commands/agent-vibes/whoami.md +0 -7
- package/agentvibes.org/.claude/hooks/bmad-tts-injector.sh +0 -386
- package/agentvibes.org/.claude/hooks/bmad-voice-manager.sh +0 -375
- package/agentvibes.org/.claude/hooks/check-output-style.sh +0 -60
- package/agentvibes.org/.claude/hooks/github-star-reminder.sh +0 -94
- package/agentvibes.org/.claude/hooks/language-manager.sh +0 -360
- package/agentvibes.org/.claude/hooks/learn-manager.sh +0 -443
- package/agentvibes.org/.claude/hooks/personality-manager.sh +0 -324
- package/agentvibes.org/.claude/hooks/piper-download-voices.sh +0 -133
- package/agentvibes.org/.claude/hooks/piper-installer.sh +0 -144
- package/agentvibes.org/.claude/hooks/piper-voice-manager.sh +0 -227
- package/agentvibes.org/.claude/hooks/play-tts-elevenlabs.sh +0 -376
- package/agentvibes.org/.claude/hooks/play-tts-piper.sh +0 -281
- package/agentvibes.org/.claude/hooks/play-tts.sh +0 -69
- package/agentvibes.org/.claude/hooks/provider-commands.sh +0 -505
- package/agentvibes.org/.claude/hooks/provider-manager.sh +0 -248
- package/agentvibes.org/.claude/hooks/replay-target-audio.sh +0 -64
- package/agentvibes.org/.claude/hooks/sentiment-manager.sh +0 -163
- package/agentvibes.org/.claude/hooks/speed-manager.sh +0 -259
- package/agentvibes.org/.claude/hooks/voice-manager.sh +0 -477
- package/agentvibes.org/.claude/hooks/voices-config.sh +0 -33
- package/agentvibes.org/.claude/journal/2025-10-07.html +0 -373
- package/agentvibes.org/.claude/journal/index.html +0 -91
- package/agentvibes.org/.claude/output-styles/agent-vibes.md +0 -203
- package/agentvibes.org/.claude/personalities/angry.md +0 -17
- package/agentvibes.org/.claude/personalities/annoying.md +0 -17
- package/agentvibes.org/.claude/personalities/crass.md +0 -17
- package/agentvibes.org/.claude/personalities/dramatic.md +0 -17
- package/agentvibes.org/.claude/personalities/dry-humor.md +0 -53
- package/agentvibes.org/.claude/personalities/flirty.md +0 -23
- package/agentvibes.org/.claude/personalities/funny.md +0 -17
- package/agentvibes.org/.claude/personalities/grandpa.md +0 -35
- package/agentvibes.org/.claude/personalities/millennial.md +0 -17
- package/agentvibes.org/.claude/personalities/moody.md +0 -17
- package/agentvibes.org/.claude/personalities/normal.md +0 -19
- package/agentvibes.org/.claude/personalities/pirate.md +0 -17
- package/agentvibes.org/.claude/personalities/poetic.md +0 -17
- package/agentvibes.org/.claude/personalities/professional.md +0 -17
- package/agentvibes.org/.claude/personalities/robot.md +0 -17
- package/agentvibes.org/.claude/personalities/sarcastic.md +0 -41
- package/agentvibes.org/.claude/personalities/sassy.md +0 -17
- package/agentvibes.org/.claude/personalities/surfer-dude.md +0 -17
- package/agentvibes.org/.claude/personalities/zen.md +0 -17
- package/agentvibes.org/.claude/piper-voices-dir.txt +0 -1
- package/agentvibes.org/.claude/plugins/bmad-voices.md +0 -42
- package/agentvibes.org/.claude/tts-provider.txt +0 -1
- package/agentvibes.org/.mcp-minimal.json +0 -60
- package/agentvibes.org/CHANGELOG.md +0 -56
- package/agentvibes.org/README.md +0 -93
- package/agentvibes.org/app/(auth)/layout.tsx +0 -15
- package/agentvibes.org/app/(auth)/reset-password/page.tsx +0 -45
- package/agentvibes.org/app/(auth)/signin/page.tsx +0 -82
- package/agentvibes.org/app/(auth)/signup/page.tsx +0 -104
- package/agentvibes.org/app/(default)/blog/[slug]/page.tsx +0 -128
- package/agentvibes.org/app/(default)/blog/page.tsx +0 -95
- package/agentvibes.org/app/(default)/layout.tsx +0 -31
- package/agentvibes.org/app/(default)/page.tsx +0 -20
- package/agentvibes.org/app/api/hello/route.ts +0 -3
- package/agentvibes.org/app/css/additional-styles/theme.css +0 -82
- package/agentvibes.org/app/css/additional-styles/utility-patterns.css +0 -55
- package/agentvibes.org/app/css/style.css +0 -100
- package/agentvibes.org/app/layout.tsx +0 -63
- package/agentvibes.org/components/code-block.tsx +0 -27
- package/agentvibes.org/components/cta.tsx +0 -58
- package/agentvibes.org/components/features.tsx +0 -256
- package/agentvibes.org/components/hero-home.tsx +0 -133
- package/agentvibes.org/components/mdx-components.tsx +0 -128
- package/agentvibes.org/components/modal-video.tsx +0 -137
- package/agentvibes.org/components/page-illustration.tsx +0 -55
- package/agentvibes.org/components/spotlight.tsx +0 -77
- package/agentvibes.org/components/testimonials.tsx +0 -282
- package/agentvibes.org/components/ui/footer.tsx +0 -82
- package/agentvibes.org/components/ui/header.tsx +0 -68
- package/agentvibes.org/components/ui/logo.tsx +0 -10
- package/agentvibes.org/components/workflows.tsx +0 -176
- package/agentvibes.org/content/blog/discovering-new-piper-voices.mdx +0 -253
- package/agentvibes.org/content/blog/getting-started-agentvibes.mdx +0 -228
- package/agentvibes.org/content/blog/introducing-agentvibes-v2.mdx +0 -250
- package/agentvibes.org/content/blog/language-learning-with-agentvibes.mdx +0 -142
- package/agentvibes.org/content/blog/voice-personalities-guide.mdx +0 -119
- package/agentvibes.org/lib/blog.ts +0 -73
- package/agentvibes.org/next.config.js +0 -6
- package/agentvibes.org/package-lock.json +0 -4285
- package/agentvibes.org/package.json +0 -40
- package/agentvibes.org/pnpm-lock.yaml +0 -1141
- package/agentvibes.org/postcss.config.js +0 -5
- package/agentvibes.org/public/audio/02-sarcastic.mp3 +0 -0
- package/agentvibes.org/public/audio/03-angry.mp3 +0 -0
- package/agentvibes.org/public/audio/04-grandpa.mp3 +0 -0
- package/agentvibes.org/public/audio/05-sarcastic-example2.mp3 +0 -0
- package/agentvibes.org/public/audio/french-rachel.mp3 +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_0_Cori_Samuel.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_10_Steve_C.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_11_Owlivia.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_12_Paul_Hampton.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_13_Jennifer_Dorr.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_14_Emily_Cripps.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_15_Martin_Clifton.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_1_Kara_Shallenberg.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_2_Kristin_Hughes.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_3_Maria_Kasper.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_4_Mike_Pelton.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_5_Mark_Nelson.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_6_Michael_Scherer.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_7_James_K_White.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_8_Rose_Ibex.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_9_progressingamerica.wav +0 -0
- package/agentvibes.org/public/audio/spanish-antoni.mp3 +0 -0
- package/agentvibes.org/public/favicon.ico +0 -0
- package/agentvibes.org/public/fonts/nacelle-italic.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-regular.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-semibold.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-semibolditalic.woff2 +0 -0
- package/agentvibes.org/public/images/blurred-shape-gray.svg +0 -1
- package/agentvibes.org/public/images/blurred-shape.svg +0 -1
- package/agentvibes.org/public/images/client-logo-01.svg +0 -1
- package/agentvibes.org/public/images/client-logo-02.svg +0 -1
- package/agentvibes.org/public/images/client-logo-03.svg +0 -1
- package/agentvibes.org/public/images/client-logo-04.svg +0 -1
- package/agentvibes.org/public/images/client-logo-05.svg +0 -1
- package/agentvibes.org/public/images/client-logo-06.svg +0 -1
- package/agentvibes.org/public/images/client-logo-07.svg +0 -1
- package/agentvibes.org/public/images/client-logo-08.svg +0 -1
- package/agentvibes.org/public/images/client-logo-09.svg +0 -1
- package/agentvibes.org/public/images/features.png +0 -0
- package/agentvibes.org/public/images/footer-illustration.svg +0 -1
- package/agentvibes.org/public/images/hero-image-01.jpg +0 -0
- package/agentvibes.org/public/images/logo.svg +0 -1
- package/agentvibes.org/public/images/page-illustration.svg +0 -1
- package/agentvibes.org/public/images/secondary-illustration.svg +0 -1
- package/agentvibes.org/public/images/testimonial-01.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-02.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-03.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-04.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-05.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-06.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-07.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-08.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-09.jpg +0 -0
- package/agentvibes.org/public/images/workflow-01.png +0 -0
- package/agentvibes.org/public/images/workflow-02.png +0 -0
- package/agentvibes.org/public/images/workflow-03.png +0 -0
- package/agentvibes.org/public/videos/video.mp4 +0 -0
- package/agentvibes.org/tsconfig.json +0 -28
- package/agentvibes.org/utils/useMasonry.tsx +0 -67
- package/agentvibes.org/utils/useMousePosition.tsx +0 -27
- package/docs/bryce-beattie-voice-licensing.md +0 -131
package/agentvibes.org/README.md
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
# Free React / Next.js landing page template
|
|
2
|
-
|
|
3
|
-

|
|
4
|
-
|
|
5
|
-
**Open** is a **free React / Next.js landing page template built with Tailwind CSS** for developers/makers who want to create a quick and professional landing page for their open source projects, SaaS products, online services, and more.
|
|
6
|
-
|
|
7
|
-
**UPDATE 2025-02-04** Added Tailwind v4 support!
|
|
8
|
-
|
|
9
|
-
Use it for whatever you want, and be sure to reach us out on [Twitter](https://twitter.com/Cruip_com) if you build anything cool/useful with it.
|
|
10
|
-
|
|
11
|
-
Created and maintained with ❤️ by [Cruip.com](https://cruip.com).
|
|
12
|
-
|
|
13
|
-
_Version 1.0.0 built with the Cruip CSS is available [here](https://github.com/cruip/open-react-template/releases/tag/1.0.0)._
|
|
14
|
-
_Version 2.0.3 built with Tailwind CSS and React + Vite is available [here](https://github.com/cruip/open-react-template/releases/tag/2.0.3)._
|
|
15
|
-
_Version 3.3.0 (before redesign) built with Tailwind CSS and Next.js is available [here](https://github.com/cruip/open-react-template/releases/tag/3.3.0)._
|
|
16
|
-
|
|
17
|
-
## Live demo
|
|
18
|
-
|
|
19
|
-
Check the live demo here 👉️ [https://open.cruip.com/](https://open.cruip.com/)
|
|
20
|
-
|
|
21
|
-
## Open PRO
|
|
22
|
-
|
|
23
|
-
[](https://cruip.com/)
|
|
24
|
-
|
|
25
|
-
## Design files
|
|
26
|
-
|
|
27
|
-
If you need the design files, you can download them from Figma's Community 👉 https://bit.ly/401KSUS
|
|
28
|
-
|
|
29
|
-
## Usage
|
|
30
|
-
|
|
31
|
-
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
|
|
32
|
-
|
|
33
|
-
### Getting Started
|
|
34
|
-
|
|
35
|
-
First, run the development server:
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
npm run dev
|
|
39
|
-
# or
|
|
40
|
-
pnpm dev (recommended)
|
|
41
|
-
# or
|
|
42
|
-
yarn dev
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
|
46
|
-
|
|
47
|
-
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
|
|
48
|
-
|
|
49
|
-
[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
|
|
50
|
-
|
|
51
|
-
The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
|
|
52
|
-
|
|
53
|
-
This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
|
|
54
|
-
|
|
55
|
-
### Learn More
|
|
56
|
-
|
|
57
|
-
To learn more about Next.js, take a look at the following resources:
|
|
58
|
-
|
|
59
|
-
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
|
60
|
-
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
|
61
|
-
|
|
62
|
-
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
|
|
63
|
-
|
|
64
|
-
### Deploy on Vercel
|
|
65
|
-
|
|
66
|
-
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
|
67
|
-
|
|
68
|
-
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
|
|
69
|
-
|
|
70
|
-
### Support notes
|
|
71
|
-
|
|
72
|
-
This template has been developed with the App Router (`app`) and React Server Components. If you’re unfamiliar with these beta features, you can find more information about them on the Next.js beta documentation page. So, please note that any request dealing with React (e.g. extra features, customisations, et cetera) is to be considered out of the support scope.
|
|
73
|
-
|
|
74
|
-
For more information about what support covers, please see our (FAQs)[https://cruip.com/faq/].
|
|
75
|
-
|
|
76
|
-
## Credits
|
|
77
|
-
|
|
78
|
-
- [Nucleo](https://nucleoapp.com/)
|
|
79
|
-
|
|
80
|
-
## Terms and License
|
|
81
|
-
|
|
82
|
-
- Released under the [GPL](https://www.gnu.org/licenses/gpl-3.0.html).
|
|
83
|
-
- Copyright 2024 [Cruip](https://cruip.com/).
|
|
84
|
-
- Use it for personal and commercial projects, but please don’t republish, redistribute, or resell the template.
|
|
85
|
-
- Attribution is not required, although it is really appreciated.
|
|
86
|
-
|
|
87
|
-
## About Us
|
|
88
|
-
|
|
89
|
-
We're an Italian developer/designer duo creating high-quality design/code resources for developers, makers, and startups.
|
|
90
|
-
|
|
91
|
-
## Stay in the loop
|
|
92
|
-
|
|
93
|
-
If you would like to know when we release new resources, you can follow [@pacovitiello](https://x.com/pacovitiello) and [@DavidePacilio](https://x.com/DavidePacilio) on X, or you can subscribe to our [newsletter](https://cruip.com/newsletter/).
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import PageIllustration from "@/components/page-illustration";
|
|
2
|
-
|
|
3
|
-
export default function AuthLayout({
|
|
4
|
-
children,
|
|
5
|
-
}: {
|
|
6
|
-
children: React.ReactNode;
|
|
7
|
-
}) {
|
|
8
|
-
return (
|
|
9
|
-
<main className="relative flex grow flex-col">
|
|
10
|
-
<PageIllustration multiple />
|
|
11
|
-
|
|
12
|
-
{children}
|
|
13
|
-
</main>
|
|
14
|
-
);
|
|
15
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
export const metadata = {
|
|
2
|
-
title: "Reset Password - Open PRO",
|
|
3
|
-
description: "Page description",
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
import Link from "next/link";
|
|
7
|
-
|
|
8
|
-
export default function ResetPassword() {
|
|
9
|
-
return (
|
|
10
|
-
<section>
|
|
11
|
-
<div className="mx-auto max-w-6xl px-4 sm:px-6">
|
|
12
|
-
<div className="py-12 md:py-20">
|
|
13
|
-
{/* Section header */}
|
|
14
|
-
<div className="pb-12 text-center">
|
|
15
|
-
<h1 className="animate-[gradient_6s_linear_infinite] bg-[linear-gradient(to_right,var(--color-gray-200),var(--color-indigo-200),var(--color-gray-50),var(--color-indigo-300),var(--color-gray-200))] bg-[length:200%_auto] bg-clip-text font-nacelle text-3xl font-semibold text-transparent md:text-4xl">
|
|
16
|
-
Reset your password
|
|
17
|
-
</h1>
|
|
18
|
-
</div>
|
|
19
|
-
{/* Contact form */}
|
|
20
|
-
<form className="mx-auto max-w-[400px]">
|
|
21
|
-
<div>
|
|
22
|
-
<label
|
|
23
|
-
className="mb-1 block text-sm font-medium text-indigo-200/65"
|
|
24
|
-
htmlFor="email"
|
|
25
|
-
>
|
|
26
|
-
Email
|
|
27
|
-
</label>
|
|
28
|
-
<input
|
|
29
|
-
id="email"
|
|
30
|
-
type="email"
|
|
31
|
-
className="form-input w-full"
|
|
32
|
-
placeholder="Your email"
|
|
33
|
-
/>
|
|
34
|
-
</div>
|
|
35
|
-
<div className="mt-6">
|
|
36
|
-
<button className="btn w-full bg-linear-to-t from-indigo-600 to-indigo-500 bg-[length:100%_100%] bg-[bottom] text-white shadow-[inset_0px_1px_0px_0px_--theme(--color-white/.16)] hover:bg-[length:100%_150%]">
|
|
37
|
-
Reset Password
|
|
38
|
-
</button>
|
|
39
|
-
</div>
|
|
40
|
-
</form>
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
</section>
|
|
44
|
-
);
|
|
45
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
export const metadata = {
|
|
2
|
-
title: "Sign In - Open PRO",
|
|
3
|
-
description: "Page description",
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
import Link from "next/link";
|
|
7
|
-
|
|
8
|
-
export default function SignIn() {
|
|
9
|
-
return (
|
|
10
|
-
<section>
|
|
11
|
-
<div className="mx-auto max-w-6xl px-4 sm:px-6">
|
|
12
|
-
<div className="py-12 md:py-20">
|
|
13
|
-
{/* Section header */}
|
|
14
|
-
<div className="pb-12 text-center">
|
|
15
|
-
<h1 className="animate-[gradient_6s_linear_infinite] bg-[linear-gradient(to_right,var(--color-gray-200),var(--color-indigo-200),var(--color-gray-50),var(--color-indigo-300),var(--color-gray-200))] bg-[length:200%_auto] bg-clip-text font-nacelle text-3xl font-semibold text-transparent md:text-4xl">
|
|
16
|
-
Welcome back
|
|
17
|
-
</h1>
|
|
18
|
-
</div>
|
|
19
|
-
{/* Contact form */}
|
|
20
|
-
<form className="mx-auto max-w-[400px]">
|
|
21
|
-
<div className="space-y-5">
|
|
22
|
-
<div>
|
|
23
|
-
<label
|
|
24
|
-
className="mb-1 block text-sm font-medium text-indigo-200/65"
|
|
25
|
-
htmlFor="email"
|
|
26
|
-
>
|
|
27
|
-
Email
|
|
28
|
-
</label>
|
|
29
|
-
<input
|
|
30
|
-
id="email"
|
|
31
|
-
type="email"
|
|
32
|
-
className="form-input w-full"
|
|
33
|
-
placeholder="Your email"
|
|
34
|
-
/>
|
|
35
|
-
</div>
|
|
36
|
-
<div>
|
|
37
|
-
<div className="mb-1 flex items-center justify-between gap-3">
|
|
38
|
-
<label
|
|
39
|
-
className="block text-sm font-medium text-indigo-200/65"
|
|
40
|
-
htmlFor="password"
|
|
41
|
-
>
|
|
42
|
-
Password
|
|
43
|
-
</label>
|
|
44
|
-
<Link
|
|
45
|
-
className="text-sm text-gray-600 hover:underline"
|
|
46
|
-
href="/reset-password"
|
|
47
|
-
>
|
|
48
|
-
Forgot?
|
|
49
|
-
</Link>
|
|
50
|
-
</div>
|
|
51
|
-
<input
|
|
52
|
-
id="password"
|
|
53
|
-
type="password"
|
|
54
|
-
className="form-input w-full"
|
|
55
|
-
placeholder="Your password"
|
|
56
|
-
/>
|
|
57
|
-
</div>
|
|
58
|
-
</div>
|
|
59
|
-
<div className="mt-6 space-y-5">
|
|
60
|
-
<button className="btn w-full bg-linear-to-t from-indigo-600 to-indigo-500 bg-[length:100%_100%] bg-[bottom] text-white shadow-[inset_0px_1px_0px_0px_--theme(--color-white/.16)] hover:bg-[length:100%_150%]">
|
|
61
|
-
Sign in
|
|
62
|
-
</button>
|
|
63
|
-
<div className="flex items-center gap-3 text-center text-sm italic text-gray-600 before:h-px before:flex-1 before:bg-linear-to-r before:from-transparent before:via-gray-400/25 after:h-px after:flex-1 after:bg-linear-to-r after:from-transparent after:via-gray-400/25">
|
|
64
|
-
or
|
|
65
|
-
</div>
|
|
66
|
-
<button className="btn relative w-full bg-linear-to-b from-gray-800 to-gray-800/60 bg-[length:100%_100%] bg-[bottom] text-gray-300 before:pointer-events-none before:absolute before:inset-0 before:rounded-[inherit] before:border before:border-transparent before:[background:linear-gradient(to_right,var(--color-gray-800),var(--color-gray-700),var(--color-gray-800))_border-box] before:[mask-composite:exclude_!important] before:[mask:linear-gradient(white_0_0)_padding-box,_linear-gradient(white_0_0)] hover:bg-[length:100%_150%]">
|
|
67
|
-
Sign In with Google
|
|
68
|
-
</button>
|
|
69
|
-
</div>
|
|
70
|
-
</form>
|
|
71
|
-
{/* Bottom link */}
|
|
72
|
-
<div className="mt-6 text-center text-sm text-indigo-200/65">
|
|
73
|
-
Don't you have an account?{" "}
|
|
74
|
-
<Link className="font-medium text-indigo-500" href="/signup">
|
|
75
|
-
Sign Up
|
|
76
|
-
</Link>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
</div>
|
|
80
|
-
</section>
|
|
81
|
-
);
|
|
82
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
export const metadata = {
|
|
2
|
-
title: "Sign Up - Open PRO",
|
|
3
|
-
description: "Page description",
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
import Link from "next/link";
|
|
7
|
-
|
|
8
|
-
export default function SignUp() {
|
|
9
|
-
return (
|
|
10
|
-
<section>
|
|
11
|
-
<div className="mx-auto max-w-6xl px-4 sm:px-6">
|
|
12
|
-
<div className="py-12 md:py-20">
|
|
13
|
-
{/* Section header */}
|
|
14
|
-
<div className="pb-12 text-center">
|
|
15
|
-
<h1 className="animate-[gradient_6s_linear_infinite] bg-[linear-gradient(to_right,var(--color-gray-200),var(--color-indigo-200),var(--color-gray-50),var(--color-indigo-300),var(--color-gray-200))] bg-[length:200%_auto] bg-clip-text font-nacelle text-3xl font-semibold text-transparent md:text-4xl">
|
|
16
|
-
Create an account
|
|
17
|
-
</h1>
|
|
18
|
-
</div>
|
|
19
|
-
{/* Contact form */}
|
|
20
|
-
<form className="mx-auto max-w-[400px]">
|
|
21
|
-
<div className="space-y-5">
|
|
22
|
-
<div>
|
|
23
|
-
<label
|
|
24
|
-
className="mb-1 block text-sm font-medium text-indigo-200/65"
|
|
25
|
-
htmlFor="name"
|
|
26
|
-
>
|
|
27
|
-
Name <span className="text-red-500">*</span>
|
|
28
|
-
</label>
|
|
29
|
-
<input
|
|
30
|
-
id="name"
|
|
31
|
-
type="text"
|
|
32
|
-
className="form-input w-full"
|
|
33
|
-
placeholder="Your full name"
|
|
34
|
-
required
|
|
35
|
-
/>
|
|
36
|
-
</div>
|
|
37
|
-
<div>
|
|
38
|
-
<label
|
|
39
|
-
className="mb-1 block text-sm font-medium text-indigo-200/65"
|
|
40
|
-
htmlFor="name"
|
|
41
|
-
>
|
|
42
|
-
Company Name <span className="text-red-500">*</span>
|
|
43
|
-
</label>
|
|
44
|
-
<input
|
|
45
|
-
id="company"
|
|
46
|
-
type="text"
|
|
47
|
-
className="form-input w-full"
|
|
48
|
-
placeholder="Your company name"
|
|
49
|
-
required
|
|
50
|
-
/>
|
|
51
|
-
</div>
|
|
52
|
-
<div>
|
|
53
|
-
<label
|
|
54
|
-
className="mb-1 block text-sm font-medium text-indigo-200/65"
|
|
55
|
-
htmlFor="email"
|
|
56
|
-
>
|
|
57
|
-
Work Email <span className="text-red-500">*</span>
|
|
58
|
-
</label>
|
|
59
|
-
<input
|
|
60
|
-
id="email"
|
|
61
|
-
type="email"
|
|
62
|
-
className="form-input w-full"
|
|
63
|
-
placeholder="Your work email"
|
|
64
|
-
/>
|
|
65
|
-
</div>
|
|
66
|
-
<div>
|
|
67
|
-
<label
|
|
68
|
-
className="block text-sm font-medium text-indigo-200/65"
|
|
69
|
-
htmlFor="password"
|
|
70
|
-
>
|
|
71
|
-
Password <span className="text-red-500">*</span>
|
|
72
|
-
</label>
|
|
73
|
-
<input
|
|
74
|
-
id="password"
|
|
75
|
-
type="password"
|
|
76
|
-
className="form-input w-full"
|
|
77
|
-
placeholder="Password (at least 10 characters)"
|
|
78
|
-
/>
|
|
79
|
-
</div>
|
|
80
|
-
</div>
|
|
81
|
-
<div className="mt-6 space-y-5">
|
|
82
|
-
<button className="btn w-full bg-linear-to-t from-indigo-600 to-indigo-500 bg-[length:100%_100%] bg-[bottom] text-white shadow-[inset_0px_1px_0px_0px_--theme(--color-white/.16)] hover:bg-[length:100%_150%]">
|
|
83
|
-
Register
|
|
84
|
-
</button>
|
|
85
|
-
<div className="flex items-center gap-3 text-center text-sm italic text-gray-600 before:h-px before:flex-1 before:bg-linear-to-r before:from-transparent before:via-gray-400/25 after:h-px after:flex-1 after:bg-linear-to-r after:from-transparent after:via-gray-400/25">
|
|
86
|
-
or
|
|
87
|
-
</div>
|
|
88
|
-
<button className="btn relative w-full bg-linear-to-b from-gray-800 to-gray-800/60 bg-[length:100%_100%] bg-[bottom] text-gray-300 before:pointer-events-none before:absolute before:inset-0 before:rounded-[inherit] before:border before:border-transparent before:[background:linear-gradient(to_right,var(--color-gray-800),var(--color-gray-700),var(--color-gray-800))_border-box] before:[mask-composite:exclude_!important] before:[mask:linear-gradient(white_0_0)_padding-box,_linear-gradient(white_0_0)] hover:bg-[length:100%_150%]">
|
|
89
|
-
Sign In with Google
|
|
90
|
-
</button>
|
|
91
|
-
</div>
|
|
92
|
-
</form>
|
|
93
|
-
{/* Bottom link */}
|
|
94
|
-
<div className="mt-6 text-center text-sm text-indigo-200/65">
|
|
95
|
-
Already have an account?{" "}
|
|
96
|
-
<Link className="font-medium text-indigo-500" href="/signin">
|
|
97
|
-
Sign in
|
|
98
|
-
</Link>
|
|
99
|
-
</div>
|
|
100
|
-
</div>
|
|
101
|
-
</div>
|
|
102
|
-
</section>
|
|
103
|
-
);
|
|
104
|
-
}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { notFound } from 'next/navigation';
|
|
2
|
-
import Link from 'next/link';
|
|
3
|
-
import { getPostBySlug, getAllSlugs } from '@/lib/blog';
|
|
4
|
-
import { MDXRemote } from 'next-mdx-remote/rsc';
|
|
5
|
-
import { MDXComponents } from '@/components/mdx-components';
|
|
6
|
-
|
|
7
|
-
export async function generateStaticParams() {
|
|
8
|
-
const slugs = getAllSlugs();
|
|
9
|
-
return slugs.map((slug) => ({
|
|
10
|
-
slug,
|
|
11
|
-
}));
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export async function generateMetadata({ params }: { params: Promise<{ slug: string }> }) {
|
|
15
|
-
const { slug } = await params;
|
|
16
|
-
const post = getPostBySlug(slug);
|
|
17
|
-
|
|
18
|
-
if (!post) {
|
|
19
|
-
return {
|
|
20
|
-
title: 'Post Not Found',
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return {
|
|
25
|
-
title: `${post.title} - AgentVibes Blog`,
|
|
26
|
-
description: post.description,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export default async function BlogPostPage({ params }: { params: Promise<{ slug: string }> }) {
|
|
31
|
-
const { slug } = await params;
|
|
32
|
-
const post = getPostBySlug(slug);
|
|
33
|
-
|
|
34
|
-
if (!post) {
|
|
35
|
-
notFound();
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
<div className="mx-auto max-w-4xl px-4 sm:px-6">
|
|
40
|
-
<div className="pb-12 pt-32 md:pb-20 md:pt-40">
|
|
41
|
-
{/* Back link */}
|
|
42
|
-
<Link
|
|
43
|
-
href="/blog"
|
|
44
|
-
className="mb-8 inline-flex items-center text-sm text-indigo-400 transition-colors hover:text-indigo-300"
|
|
45
|
-
>
|
|
46
|
-
<svg
|
|
47
|
-
className="mr-2 h-4 w-4"
|
|
48
|
-
fill="none"
|
|
49
|
-
stroke="currentColor"
|
|
50
|
-
viewBox="0 0 24 24"
|
|
51
|
-
>
|
|
52
|
-
<path
|
|
53
|
-
strokeLinecap="round"
|
|
54
|
-
strokeLinejoin="round"
|
|
55
|
-
strokeWidth={2}
|
|
56
|
-
d="M15 19l-7-7 7-7"
|
|
57
|
-
/>
|
|
58
|
-
</svg>
|
|
59
|
-
Back to Blog
|
|
60
|
-
</Link>
|
|
61
|
-
|
|
62
|
-
{/* Article header */}
|
|
63
|
-
<article className="prose prose-invert mx-auto max-w-none">
|
|
64
|
-
<header className="mb-8 border-b border-gray-800 pb-8">
|
|
65
|
-
<time className="mb-3 block text-sm text-indigo-400">
|
|
66
|
-
{new Date(post.date).toLocaleDateString('en-US', {
|
|
67
|
-
year: 'numeric',
|
|
68
|
-
month: 'long',
|
|
69
|
-
day: 'numeric',
|
|
70
|
-
})}
|
|
71
|
-
</time>
|
|
72
|
-
|
|
73
|
-
<h1 className="mb-4 font-nacelle text-4xl font-bold text-gray-100 md:text-5xl">
|
|
74
|
-
{post.title}
|
|
75
|
-
</h1>
|
|
76
|
-
|
|
77
|
-
<p className="text-xl text-gray-400">{post.description}</p>
|
|
78
|
-
|
|
79
|
-
{/* Tags */}
|
|
80
|
-
<div className="mt-4 flex flex-wrap gap-2">
|
|
81
|
-
{post.tags.map((tag) => (
|
|
82
|
-
<span
|
|
83
|
-
key={tag}
|
|
84
|
-
className="rounded-full bg-indigo-500/10 px-3 py-1 text-xs text-indigo-300"
|
|
85
|
-
>
|
|
86
|
-
{tag}
|
|
87
|
-
</span>
|
|
88
|
-
))}
|
|
89
|
-
</div>
|
|
90
|
-
|
|
91
|
-
<p className="mt-4 text-sm text-gray-500">By {post.author}</p>
|
|
92
|
-
</header>
|
|
93
|
-
|
|
94
|
-
{/* Article content */}
|
|
95
|
-
<div className="mdx-content">
|
|
96
|
-
<MDXRemote source={post.content} components={MDXComponents} />
|
|
97
|
-
</div>
|
|
98
|
-
</article>
|
|
99
|
-
|
|
100
|
-
{/* Footer CTA */}
|
|
101
|
-
<div className="mt-12 rounded-2xl border border-gray-800 bg-gradient-to-b from-indigo-500/10 to-indigo-500/5 p-8 text-center">
|
|
102
|
-
<h3 className="mb-4 font-nacelle text-2xl font-semibold text-gray-100">
|
|
103
|
-
Ready to give your AI a voice?
|
|
104
|
-
</h3>
|
|
105
|
-
<p className="mb-6 text-gray-400">
|
|
106
|
-
Install AgentVibes in seconds and start coding with personality
|
|
107
|
-
</p>
|
|
108
|
-
<div className="flex flex-wrap justify-center gap-4">
|
|
109
|
-
<a
|
|
110
|
-
href="https://github.com/paulpreibisch/AgentVibes"
|
|
111
|
-
target="_blank"
|
|
112
|
-
rel="noopener noreferrer"
|
|
113
|
-
className="btn-sm bg-linear-to-t from-indigo-600 to-indigo-500 bg-[length:100%_100%] bg-[bottom] py-[5px] text-white shadow-[inset_0px_1px_0px_0px_--theme(--color-white/.16)] hover:bg-[length:100%_150%]"
|
|
114
|
-
>
|
|
115
|
-
Get Started
|
|
116
|
-
</a>
|
|
117
|
-
<Link
|
|
118
|
-
href="/blog"
|
|
119
|
-
className="btn-sm relative bg-linear-to-b from-gray-800 to-gray-800/60 bg-[length:100%_100%] bg-[bottom] py-[5px] text-gray-300 hover:bg-[length:100%_150%]"
|
|
120
|
-
>
|
|
121
|
-
Read More Posts
|
|
122
|
-
</Link>
|
|
123
|
-
</div>
|
|
124
|
-
</div>
|
|
125
|
-
</div>
|
|
126
|
-
</div>
|
|
127
|
-
);
|
|
128
|
-
}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import Link from 'next/link';
|
|
2
|
-
import { getAllPosts } from '@/lib/blog';
|
|
3
|
-
|
|
4
|
-
export const metadata = {
|
|
5
|
-
title: 'Blog - AgentVibes',
|
|
6
|
-
description: 'Latest updates, guides, and tutorials for AgentVibes - Voice-powered AI assistants',
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
export default function BlogPage() {
|
|
10
|
-
const posts = getAllPosts();
|
|
11
|
-
|
|
12
|
-
return (
|
|
13
|
-
<div className="mx-auto max-w-6xl px-4 sm:px-6">
|
|
14
|
-
<div className="pb-12 pt-32 md:pb-20 md:pt-40">
|
|
15
|
-
{/* Page header */}
|
|
16
|
-
<div className="pb-12 text-center md:pb-16">
|
|
17
|
-
<h1 className="animate-[gradient_6s_linear_infinite] bg-[linear-gradient(to_right,theme(colors.gray.200),theme(colors.indigo.200),theme(colors.gray.50),theme(colors.indigo.300),theme(colors.gray.200))] bg-[length:200%_auto] bg-clip-text pb-4 font-nacelle text-3xl font-semibold text-transparent md:text-4xl">
|
|
18
|
-
AgentVibes Blog
|
|
19
|
-
</h1>
|
|
20
|
-
<p className="text-lg text-gray-400">
|
|
21
|
-
Latest updates, guides, and tutorials for voice-powered AI assistants
|
|
22
|
-
</p>
|
|
23
|
-
</div>
|
|
24
|
-
|
|
25
|
-
{/* Blog posts grid */}
|
|
26
|
-
<div className="grid gap-8 md:grid-cols-2 lg:grid-cols-3">
|
|
27
|
-
{posts.map((post) => (
|
|
28
|
-
<article
|
|
29
|
-
key={post.slug}
|
|
30
|
-
className="group relative flex flex-col rounded-2xl border border-gray-800 bg-gradient-to-b from-gray-800/50 to-gray-800/20 p-6 transition-all duration-300 hover:border-gray-700"
|
|
31
|
-
>
|
|
32
|
-
{/* Date */}
|
|
33
|
-
<time className="mb-3 text-sm text-indigo-400">
|
|
34
|
-
{new Date(post.date).toLocaleDateString('en-US', {
|
|
35
|
-
year: 'numeric',
|
|
36
|
-
month: 'long',
|
|
37
|
-
day: 'numeric',
|
|
38
|
-
})}
|
|
39
|
-
</time>
|
|
40
|
-
|
|
41
|
-
{/* Title */}
|
|
42
|
-
<h2 className="mb-3 font-nacelle text-xl font-semibold text-gray-100 transition-colors group-hover:text-indigo-300">
|
|
43
|
-
<Link href={`/blog/${post.slug}`} className="before:absolute before:inset-0">
|
|
44
|
-
{post.title}
|
|
45
|
-
</Link>
|
|
46
|
-
</h2>
|
|
47
|
-
|
|
48
|
-
{/* Description */}
|
|
49
|
-
<p className="mb-4 flex-grow text-sm text-gray-400">
|
|
50
|
-
{post.description}
|
|
51
|
-
</p>
|
|
52
|
-
|
|
53
|
-
{/* Tags */}
|
|
54
|
-
<div className="flex flex-wrap gap-2">
|
|
55
|
-
{post.tags.map((tag) => (
|
|
56
|
-
<span
|
|
57
|
-
key={tag}
|
|
58
|
-
className="rounded-full bg-indigo-500/10 px-3 py-1 text-xs text-indigo-300"
|
|
59
|
-
>
|
|
60
|
-
{tag}
|
|
61
|
-
</span>
|
|
62
|
-
))}
|
|
63
|
-
</div>
|
|
64
|
-
|
|
65
|
-
{/* Read more indicator */}
|
|
66
|
-
<div className="mt-4 flex items-center text-sm text-indigo-400 transition-transform group-hover:translate-x-1">
|
|
67
|
-
Read more
|
|
68
|
-
<svg
|
|
69
|
-
className="ml-1 h-4 w-4"
|
|
70
|
-
fill="none"
|
|
71
|
-
stroke="currentColor"
|
|
72
|
-
viewBox="0 0 24 24"
|
|
73
|
-
>
|
|
74
|
-
<path
|
|
75
|
-
strokeLinecap="round"
|
|
76
|
-
strokeLinejoin="round"
|
|
77
|
-
strokeWidth={2}
|
|
78
|
-
d="M9 5l7 7-7 7"
|
|
79
|
-
/>
|
|
80
|
-
</svg>
|
|
81
|
-
</div>
|
|
82
|
-
</article>
|
|
83
|
-
))}
|
|
84
|
-
</div>
|
|
85
|
-
|
|
86
|
-
{/* Empty state */}
|
|
87
|
-
{posts.length === 0 && (
|
|
88
|
-
<div className="rounded-2xl border border-gray-800 bg-gradient-to-b from-gray-800/50 to-gray-800/20 p-12 text-center">
|
|
89
|
-
<p className="text-gray-400">No blog posts yet. Check back soon!</p>
|
|
90
|
-
</div>
|
|
91
|
-
)}
|
|
92
|
-
</div>
|
|
93
|
-
</div>
|
|
94
|
-
);
|
|
95
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { useEffect } from "react";
|
|
4
|
-
|
|
5
|
-
import AOS from "aos";
|
|
6
|
-
import "aos/dist/aos.css";
|
|
7
|
-
|
|
8
|
-
import Footer from "@/components/ui/footer";
|
|
9
|
-
|
|
10
|
-
export default function DefaultLayout({
|
|
11
|
-
children,
|
|
12
|
-
}: {
|
|
13
|
-
children: React.ReactNode;
|
|
14
|
-
}) {
|
|
15
|
-
useEffect(() => {
|
|
16
|
-
AOS.init({
|
|
17
|
-
once: true,
|
|
18
|
-
disable: "phone",
|
|
19
|
-
duration: 600,
|
|
20
|
-
easing: "ease-out-sine",
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
return (
|
|
25
|
-
<>
|
|
26
|
-
<main className="relative flex grow flex-col">{children}</main>
|
|
27
|
-
|
|
28
|
-
<Footer />
|
|
29
|
-
</>
|
|
30
|
-
);
|
|
31
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export const metadata = {
|
|
2
|
-
title: "AgentVibes - Bring Your Claude Code Sessions to Life",
|
|
3
|
-
description: "Professional text-to-speech narration for Claude Code with 150+ voices, multiple providers, and 30+ languages.",
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
import PageIllustration from "@/components/page-illustration";
|
|
7
|
-
import Hero from "@/components/hero-home";
|
|
8
|
-
import Features from "@/components/features";
|
|
9
|
-
import Cta from "@/components/cta";
|
|
10
|
-
|
|
11
|
-
export default function Home() {
|
|
12
|
-
return (
|
|
13
|
-
<>
|
|
14
|
-
<PageIllustration />
|
|
15
|
-
<Hero />
|
|
16
|
-
<Features />
|
|
17
|
-
<Cta />
|
|
18
|
-
</>
|
|
19
|
-
);
|
|
20
|
-
}
|