agentvibes 1.1.3 → 2.0.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.
- package/.claude/commands/agent-vibes/provider.md +54 -0
- package/.claude/hooks/piper-download-voices.sh +133 -0
- package/.claude/hooks/piper-voice-manager.sh +194 -0
- package/.claude/hooks/play-tts-elevenlabs.sh +201 -0
- package/.claude/hooks/play-tts-piper.sh +175 -0
- package/.claude/hooks/play-tts.sh.backup-20251005-163851 +138 -0
- package/.claude/hooks/provider-commands.sh +374 -0
- package/.claude/hooks/provider-manager.sh +196 -0
- package/.claude/language-voices.yaml +372 -0
- package/.claude/personalities/backups/angry.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/annoying.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/crass.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/dramatic.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/dry-humor.md.backup-20251005 +52 -0
- package/.claude/personalities/backups/flirty.md.backup-20251005 +22 -0
- package/.claude/personalities/backups/funny.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/grandpa.md.backup-20251005 +34 -0
- package/.claude/personalities/backups/millennial.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/moody.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/normal.md.backup-20251005 +18 -0
- package/.claude/personalities/backups/pirate.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/poetic.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/professional.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/robot.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/sarcastic.md.backup-20251005 +40 -0
- package/.claude/personalities/backups/sassy.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/surfer-dude.md.backup-20251005 +16 -0
- package/.claude/personalities/backups/zen.md.backup-20251005 +16 -0
- package/.claude/piper-voices/en_US-lessac-medium.onnx +0 -0
- package/.claude/piper-voices/en_US-lessac-medium.onnx.json +493 -0
- package/.mcp-minimal.json +53 -0
- package/README.md +228 -27
- package/RELEASE_NOTES_V2.md +482 -0
- package/agentvibes.org/.mcp-minimal.json +60 -0
- package/agentvibes.org/CHANGELOG.md +56 -0
- package/agentvibes.org/README.md +93 -0
- package/agentvibes.org/app/(auth)/layout.tsx +15 -0
- package/agentvibes.org/app/(auth)/reset-password/page.tsx +45 -0
- package/agentvibes.org/app/(auth)/signin/page.tsx +82 -0
- package/agentvibes.org/app/(auth)/signup/page.tsx +104 -0
- package/agentvibes.org/app/(default)/layout.tsx +31 -0
- package/agentvibes.org/app/(default)/page.tsx +20 -0
- package/agentvibes.org/app/api/hello/route.ts +3 -0
- package/agentvibes.org/app/css/additional-styles/theme.css +82 -0
- package/agentvibes.org/app/css/additional-styles/utility-patterns.css +55 -0
- package/agentvibes.org/app/css/style.css +100 -0
- package/agentvibes.org/app/layout.tsx +63 -0
- package/agentvibes.org/components/cta.tsx +58 -0
- package/agentvibes.org/components/features.tsx +256 -0
- package/agentvibes.org/components/hero-home.tsx +97 -0
- package/agentvibes.org/components/modal-video.tsx +137 -0
- package/agentvibes.org/components/page-illustration.tsx +55 -0
- package/agentvibes.org/components/spotlight.tsx +77 -0
- package/agentvibes.org/components/testimonials.tsx +282 -0
- package/agentvibes.org/components/ui/footer.tsx +82 -0
- package/agentvibes.org/components/ui/header.tsx +44 -0
- package/agentvibes.org/components/ui/logo.tsx +10 -0
- package/agentvibes.org/components/workflows.tsx +176 -0
- package/agentvibes.org/next.config.js +4 -0
- package/agentvibes.org/package-lock.json +1974 -0
- package/agentvibes.org/package.json +30 -0
- package/agentvibes.org/pnpm-lock.yaml +1141 -0
- package/agentvibes.org/postcss.config.js +5 -0
- 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/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 +1 -0
- package/agentvibes.org/public/images/blurred-shape.svg +1 -0
- package/agentvibes.org/public/images/client-logo-01.svg +1 -0
- package/agentvibes.org/public/images/client-logo-02.svg +1 -0
- package/agentvibes.org/public/images/client-logo-03.svg +1 -0
- package/agentvibes.org/public/images/client-logo-04.svg +1 -0
- package/agentvibes.org/public/images/client-logo-05.svg +1 -0
- package/agentvibes.org/public/images/client-logo-06.svg +1 -0
- package/agentvibes.org/public/images/client-logo-07.svg +1 -0
- package/agentvibes.org/public/images/client-logo-08.svg +1 -0
- package/agentvibes.org/public/images/client-logo-09.svg +1 -0
- package/agentvibes.org/public/images/features.png +0 -0
- package/agentvibes.org/public/images/footer-illustration.svg +1 -0
- package/agentvibes.org/public/images/hero-image-01.jpg +0 -0
- package/agentvibes.org/public/images/logo.svg +1 -0
- package/agentvibes.org/public/images/page-illustration.svg +1 -0
- package/agentvibes.org/public/images/secondary-illustration.svg +1 -0
- 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 +28 -0
- package/agentvibes.org/utils/useMasonry.tsx +67 -0
- package/agentvibes.org/utils/useMousePosition.tsx +27 -0
- package/docs/ai-optimized-documentation-standards.md +306 -0
- package/docs/architecture/provider-system.md +574 -0
- package/docs/voice-mapping-format.md +218 -0
- package/package.json +3 -2
- package/scripts/piper-voice/README.md +145 -0
- package/scripts/piper-voice/wsl-install.sh +193 -0
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/* Custom AOS animations */
|
|
2
|
+
@media screen {
|
|
3
|
+
html:not(.no-js) body [data-aos="fade-up"] {
|
|
4
|
+
-webkit-transform: translate3d(0, 10px, 0);
|
|
5
|
+
transform: translate3d(0, 10px, 0);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
html:not(.no-js) body [data-aos="fade-down"] {
|
|
9
|
+
-webkit-transform: translate3d(0, -10px, 0);
|
|
10
|
+
transform: translate3d(0, -10px, 0);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
html:not(.no-js) body [data-aos="fade-right"] {
|
|
14
|
+
-webkit-transform: translate3d(-10px, 0, 0);
|
|
15
|
+
transform: translate3d(-10px, 0, 0);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
html:not(.no-js) body [data-aos="fade-left"] {
|
|
19
|
+
-webkit-transform: translate3d(10px, 0, 0);
|
|
20
|
+
transform: translate3d(10px, 0, 0);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
html:not(.no-js) body [data-aos="fade-up-right"] {
|
|
24
|
+
-webkit-transform: translate3d(-10px, 10px, 0);
|
|
25
|
+
transform: translate3d(-10px, 10px, 0);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
html:not(.no-js) body [data-aos="fade-up-left"] {
|
|
29
|
+
-webkit-transform: translate3d(10px, 10px, 0);
|
|
30
|
+
transform: translate3d(10px, 10px, 0);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
html:not(.no-js) body [data-aos="fade-down-right"] {
|
|
34
|
+
-webkit-transform: translate3d(-10px, -10px, 0);
|
|
35
|
+
transform: translate3d(-10px, -10px, 0);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
html:not(.no-js) body [data-aos="fade-down-left"] {
|
|
39
|
+
-webkit-transform: translate3d(10px, -10px, 0);
|
|
40
|
+
transform: translate3d(10px, -10px, 0);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
html:not(.no-js) body [data-aos="zoom-in-up"] {
|
|
44
|
+
-webkit-transform: translate3d(0, 10px, 0) scale(0.6);
|
|
45
|
+
transform: translate3d(0, 10px, 0) scale(0.6);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
html:not(.no-js) body [data-aos="zoom-in-down"] {
|
|
49
|
+
-webkit-transform: translate3d(0, -10px, 0) scale(0.6);
|
|
50
|
+
transform: translate3d(0, -10px, 0) scale(0.6);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
html:not(.no-js) body [data-aos="zoom-in-right"] {
|
|
54
|
+
-webkit-transform: translate3d(-10px, 0, 0) scale(0.6);
|
|
55
|
+
transform: translate3d(-10px, 0, 0) scale(0.6);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
html:not(.no-js) body [data-aos="zoom-in-left"] {
|
|
59
|
+
-webkit-transform: translate3d(10px, 0, 0) scale(0.6);
|
|
60
|
+
transform: translate3d(10px, 0, 0) scale(0.6);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
html:not(.no-js) body [data-aos="zoom-out-up"] {
|
|
64
|
+
-webkit-transform: translate3d(0, 10px, 0) scale(1.2);
|
|
65
|
+
transform: translate3d(0, 10px, 0) scale(1.2);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
html:not(.no-js) body [data-aos="zoom-out-down"] {
|
|
69
|
+
-webkit-transform: translate3d(0, -10px, 0) scale(1.2);
|
|
70
|
+
transform: translate3d(0, -10px, 0) scale(1.2);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
html:not(.no-js) body [data-aos="zoom-out-right"] {
|
|
74
|
+
-webkit-transform: translate3d(-10px, 0, 0) scale(1.2);
|
|
75
|
+
transform: translate3d(-10px, 0, 0) scale(1.2);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
html:not(.no-js) body [data-aos="zoom-out-left"] {
|
|
79
|
+
-webkit-transform: translate3d(10px, 0, 0) scale(1.2);
|
|
80
|
+
transform: translate3d(10px, 0, 0) scale(1.2);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* Buttons */
|
|
2
|
+
.btn,
|
|
3
|
+
.btn-sm {
|
|
4
|
+
@apply inline-flex items-center justify-center whitespace-nowrap rounded-lg text-sm font-medium transition-all;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.btn {
|
|
8
|
+
@apply px-4 py-[11px];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.btn-sm {
|
|
12
|
+
@apply px-3 py-[7px];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* Forms */
|
|
16
|
+
input[type='search']::-webkit-search-decoration,
|
|
17
|
+
input[type='search']::-webkit-search-cancel-button,
|
|
18
|
+
input[type='search']::-webkit-search-results-button,
|
|
19
|
+
input[type='search']::-webkit-search-results-decoration {
|
|
20
|
+
-webkit-appearance: none;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.form-input,
|
|
24
|
+
.form-textarea,
|
|
25
|
+
.form-multiselect,
|
|
26
|
+
.form-select,
|
|
27
|
+
.form-checkbox,
|
|
28
|
+
.form-radio {
|
|
29
|
+
@apply border border-gray-700 bg-gray-900/50 focus:border-gray-600 focus:ring-0 focus:ring-offset-0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.form-input,
|
|
33
|
+
.form-textarea,
|
|
34
|
+
.form-multiselect,
|
|
35
|
+
.form-select {
|
|
36
|
+
@apply rounded-lg px-4 py-2.5 text-sm text-gray-200;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.form-input,
|
|
40
|
+
.form-textarea {
|
|
41
|
+
@apply placeholder-gray-600;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.form-select {
|
|
45
|
+
@apply pr-10;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.form-checkbox,
|
|
49
|
+
.form-radio {
|
|
50
|
+
@apply text-indigo-500;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.form-checkbox {
|
|
54
|
+
@apply rounded-xs;
|
|
55
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
@import 'tailwindcss';
|
|
2
|
+
|
|
3
|
+
/* Additional styles */
|
|
4
|
+
@import './additional-styles/utility-patterns.css' layer(components);
|
|
5
|
+
@import './additional-styles/theme.css';
|
|
6
|
+
|
|
7
|
+
@plugin "@tailwindcss/forms" {
|
|
8
|
+
strategy: base;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
@theme {
|
|
12
|
+
/* AgentVibes Brand Colors */
|
|
13
|
+
--color-agent-cyan: #00d9ff;
|
|
14
|
+
--color-agent-magenta: #ff00ff;
|
|
15
|
+
--color-agent-dark: #1a1a1a;
|
|
16
|
+
--color-agent-cyan-light: #5ce1e6;
|
|
17
|
+
--color-agent-magenta-light: #ff66ff;
|
|
18
|
+
|
|
19
|
+
--font-inter: var(--font-inter), sans-serif;
|
|
20
|
+
--font-nacelle: var(--font-nacelle), sans-serif;
|
|
21
|
+
|
|
22
|
+
--text-xs: 0.8125rem;
|
|
23
|
+
--text-xs--line-height: 1.5384;
|
|
24
|
+
--text-sm: 0.875rem;
|
|
25
|
+
--text-sm--line-height: 1.5715;
|
|
26
|
+
--text-base: 0.9375rem;
|
|
27
|
+
--text-base--line-height: 1.5333;
|
|
28
|
+
--text-base--letter-spacing: -0.0125em;
|
|
29
|
+
--text-lg: 1.125rem;
|
|
30
|
+
--text-lg--line-height: 1.5;
|
|
31
|
+
--text-lg--letter-spacing: -0.0125em;
|
|
32
|
+
--text-xl: 1.25rem;
|
|
33
|
+
--text-xl--line-height: 1.5;
|
|
34
|
+
--text-xl--letter-spacing: -0.0125em;
|
|
35
|
+
--text-2xl: 1.5rem;
|
|
36
|
+
--text-2xl--line-height: 1.415;
|
|
37
|
+
--text-2xl--letter-spacing: -0.0268em;
|
|
38
|
+
--text-3xl: 1.75rem;
|
|
39
|
+
--text-3xl--line-height: 1.3571;
|
|
40
|
+
--text-3xl--letter-spacing: -0.0268em;
|
|
41
|
+
--text-4xl: 2.5rem;
|
|
42
|
+
--text-4xl--line-height: 1.1;
|
|
43
|
+
--text-4xl--letter-spacing: -0.0268em;
|
|
44
|
+
--text-5xl: 3.5rem;
|
|
45
|
+
--text-5xl--line-height: 1;
|
|
46
|
+
--text-5xl--letter-spacing: -0.0268em;
|
|
47
|
+
--text-6xl: 4rem;
|
|
48
|
+
--text-6xl--line-height: 1;
|
|
49
|
+
--text-6xl--letter-spacing: -0.0268em;
|
|
50
|
+
--text-7xl: 4.5rem;
|
|
51
|
+
--text-7xl--line-height: 1;
|
|
52
|
+
--text-7xl--letter-spacing: -0.0268em;
|
|
53
|
+
|
|
54
|
+
--animate-shine: shine 5s ease-in-out 500ms infinite;
|
|
55
|
+
--animate-gradient: gradient 6s linear infinite;
|
|
56
|
+
|
|
57
|
+
@keyframes shine {
|
|
58
|
+
0% {
|
|
59
|
+
top: 0;
|
|
60
|
+
transform: scaleY(5);
|
|
61
|
+
opacity: 0;
|
|
62
|
+
}
|
|
63
|
+
10% {
|
|
64
|
+
opacity: 0.8;
|
|
65
|
+
}
|
|
66
|
+
20% {
|
|
67
|
+
top: 100%;
|
|
68
|
+
transform: scaleY(10);
|
|
69
|
+
opacity: 0;
|
|
70
|
+
}
|
|
71
|
+
100% {
|
|
72
|
+
top: 100%;
|
|
73
|
+
transform: scaleY(1);
|
|
74
|
+
opacity: 0;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
@keyframes gradient {
|
|
78
|
+
to {
|
|
79
|
+
background-position: 200% center;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/*
|
|
85
|
+
The default border color has changed to `currentColor` in Tailwind CSS v4,
|
|
86
|
+
so we've added these compatibility styles to make sure everything still
|
|
87
|
+
looks the same as it did with Tailwind CSS v3.
|
|
88
|
+
|
|
89
|
+
If we ever want to remove these styles, we need to add an explicit border
|
|
90
|
+
color utility to any element that depends on these defaults.
|
|
91
|
+
*/
|
|
92
|
+
@layer base {
|
|
93
|
+
*,
|
|
94
|
+
::after,
|
|
95
|
+
::before,
|
|
96
|
+
::backdrop,
|
|
97
|
+
::file-selector-button {
|
|
98
|
+
border-color: var(--color-gray-200, currentColor);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import "./css/style.css";
|
|
2
|
+
|
|
3
|
+
import { Inter } from "next/font/google";
|
|
4
|
+
import localFont from "next/font/local";
|
|
5
|
+
|
|
6
|
+
import Header from "@/components/ui/header";
|
|
7
|
+
|
|
8
|
+
const inter = Inter({
|
|
9
|
+
subsets: ["latin"],
|
|
10
|
+
variable: "--font-inter",
|
|
11
|
+
display: "swap",
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const nacelle = localFont({
|
|
15
|
+
src: [
|
|
16
|
+
{
|
|
17
|
+
path: "../public/fonts/nacelle-regular.woff2",
|
|
18
|
+
weight: "400",
|
|
19
|
+
style: "normal",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
path: "../public/fonts/nacelle-italic.woff2",
|
|
23
|
+
weight: "400",
|
|
24
|
+
style: "italic",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
path: "../public/fonts/nacelle-semibold.woff2",
|
|
28
|
+
weight: "600",
|
|
29
|
+
style: "normal",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
path: "../public/fonts/nacelle-semibolditalic.woff2",
|
|
33
|
+
weight: "600",
|
|
34
|
+
style: "italic",
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
variable: "--font-nacelle",
|
|
38
|
+
display: "swap",
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
export const metadata = {
|
|
42
|
+
title: "Create Next App",
|
|
43
|
+
description: "Generated by create next app",
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export default function RootLayout({
|
|
47
|
+
children,
|
|
48
|
+
}: {
|
|
49
|
+
children: React.ReactNode;
|
|
50
|
+
}) {
|
|
51
|
+
return (
|
|
52
|
+
<html lang="en">
|
|
53
|
+
<body
|
|
54
|
+
className={`${inter.variable} ${nacelle.variable} bg-gray-950 font-inter text-base text-gray-200 antialiased`}
|
|
55
|
+
>
|
|
56
|
+
<div className="flex min-h-screen flex-col overflow-hidden supports-[overflow:clip]:overflow-clip">
|
|
57
|
+
<Header />
|
|
58
|
+
{children}
|
|
59
|
+
</div>
|
|
60
|
+
</body>
|
|
61
|
+
</html>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import Image from "next/image";
|
|
2
|
+
import BlurredShape from "@/public/images/blurred-shape.svg";
|
|
3
|
+
|
|
4
|
+
export default function Cta() {
|
|
5
|
+
return (
|
|
6
|
+
<section className="relative overflow-hidden">
|
|
7
|
+
<div
|
|
8
|
+
className="pointer-events-none absolute bottom-0 left-1/2 -z-10 -mb-24 ml-20 -translate-x-1/2"
|
|
9
|
+
aria-hidden="true"
|
|
10
|
+
>
|
|
11
|
+
<Image
|
|
12
|
+
className="max-w-none"
|
|
13
|
+
src={BlurredShape}
|
|
14
|
+
width={760}
|
|
15
|
+
height={668}
|
|
16
|
+
alt="Blurred shape"
|
|
17
|
+
/>
|
|
18
|
+
</div>
|
|
19
|
+
<div className="max-w6xl mx-auto px-4 sm:px-6">
|
|
20
|
+
<div className="bg-linear-to-r from-transparent via-gray-800/50 py-12 md:py-20">
|
|
21
|
+
<div className="mx-auto max-w-3xl text-center">
|
|
22
|
+
<h2
|
|
23
|
+
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 pb-8 font-nacelle text-3xl font-semibold text-transparent md:text-4xl"
|
|
24
|
+
data-aos="fade-up"
|
|
25
|
+
>
|
|
26
|
+
Join the Discussion
|
|
27
|
+
</h2>
|
|
28
|
+
<div className="mx-auto max-w-xs sm:flex sm:max-w-none sm:justify-center">
|
|
29
|
+
<div data-aos="fade-up" data-aos-delay={400}>
|
|
30
|
+
<a
|
|
31
|
+
className="btn group mb-4 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%] sm:mb-0 sm:w-auto"
|
|
32
|
+
href="https://github.com/paulpreibisch/AgentVibes/discussions"
|
|
33
|
+
target="_blank"
|
|
34
|
+
rel="noopener noreferrer"
|
|
35
|
+
>
|
|
36
|
+
<span className="relative inline-flex items-center">
|
|
37
|
+
GitHub Discussions
|
|
38
|
+
<span className="ml-1 tracking-normal text-white/50 transition-transform group-hover:translate-x-0.5">
|
|
39
|
+
->
|
|
40
|
+
</span>
|
|
41
|
+
</span>
|
|
42
|
+
</a>
|
|
43
|
+
</div>
|
|
44
|
+
<div data-aos="fade-up" data-aos-delay={600}>
|
|
45
|
+
<a
|
|
46
|
+
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%] sm:ml-4 sm:w-auto"
|
|
47
|
+
href="mailto:paul@agentvibes.org"
|
|
48
|
+
>
|
|
49
|
+
Contact paul@agentvibes.org
|
|
50
|
+
</a>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
</section>
|
|
57
|
+
);
|
|
58
|
+
}
|