Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 10 additions & 12 deletions app/about/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@ import { professionals } from '@/data/professionals';

export default function About() {
return (
<div className="min-h-screen bg-gradient-to-br from-slate-50 via-white to-blue-50">
<div className="min-h-screen bg-gradient-to-br from-slate-50 via-white to-action-tint">
{/* Hero */}
<section className="max-w-4xl mx-auto px-6 pt-20 pb-16">
<h1 className="text-4xl md:text-5xl font-bold mb-6">
<span className="bg-gradient-to-r from-gray-900 via-blue-900 to-purple-900 bg-clip-text text-transparent">
Expert Advice for Everyone
</span>
<span className="text-ink">Expert Advice for Everyone</span>
</h1>
<p className="text-xl text-gray-600 leading-relaxed max-w-3xl">
Botsmann brings AI-powered professionals to your fingertips. Get guidance from specialized
Expand Down Expand Up @@ -66,7 +64,7 @@ export default function About() {
{/* Privacy First */}
<section className="max-w-4xl mx-auto px-6 py-12">
<h2 className="text-2xl font-bold mb-6 text-gray-900">Privacy First</h2>
<div className="bg-gradient-to-br from-blue-50 to-indigo-50 rounded-2xl p-8 border border-blue-100">
<div className="bg-action-tint rounded-2xl p-8 border border-edge">
<p className="text-lg text-gray-700 mb-6">
Your conversations with our AI professionals are private. We do not use your data to
train models. We do not share your information with third parties. Your health
Expand Down Expand Up @@ -100,7 +98,7 @@ export default function About() {
{/* The Future: Embodied AI */}
<section className="max-w-4xl mx-auto px-6 py-12">
<h2 className="text-2xl font-bold mb-6 text-gray-900">The Future: Embodied AI</h2>
<div className="bg-gradient-to-br from-purple-50 to-pink-50 rounded-2xl p-8 border border-purple-100">
<div className="bg-action-tint rounded-2xl p-8 border border-edge">
<p className="text-lg text-gray-700 mb-6">
We envision a future where AI professionals are not just on your screen but present in
your world. Imagine a health advisor that monitors your wellbeing through wearables. A
Expand Down Expand Up @@ -130,25 +128,25 @@ export default function About() {
</p>
<ul className="space-y-3 mb-8">
<li className="flex items-center gap-3">
<span className="text-blue-600">&#10140;</span>
<span className="text-action">&#10140;</span>
<span className="text-gray-700">On-premises deployment options</span>
</li>
<li className="flex items-center gap-3">
<span className="text-blue-600">&#10140;</span>
<span className="text-action">&#10140;</span>
<span className="text-gray-700">SSO and team management</span>
</li>
<li className="flex items-center gap-3">
<span className="text-blue-600">&#10140;</span>
<span className="text-action">&#10140;</span>
<span className="text-gray-700">HIPAA and GDPR compliance</span>
</li>
<li className="flex items-center gap-3">
<span className="text-blue-600">&#10140;</span>
<span className="text-action">&#10140;</span>
<span className="text-gray-700">Custom training on your knowledge base</span>
</li>
</ul>
<Link
href="/enterprise"
className="inline-flex items-center gap-2 bg-blue-600 text-white px-6 py-3 rounded-xl font-semibold hover:bg-blue-700 transition-colors"
className="inline-flex items-center gap-2 bg-action text-white px-6 py-3 rounded-xl font-semibold hover:bg-action-hover transition-colors"
>
Learn About Enterprise
<svg className="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
Expand All @@ -165,7 +163,7 @@ export default function About() {

{/* CTA */}
<section className="max-w-4xl mx-auto px-6 py-16">
<div className="bg-gradient-to-r from-blue-600 to-purple-600 rounded-2xl p-8 md:p-12 text-white text-center">
<div className="bg-action rounded-2xl p-8 md:p-12 text-white text-center">
<h2 className="text-2xl md:text-3xl font-bold mb-4">
Ready to Meet Your AI Professional?
</h2>
Expand Down
4 changes: 2 additions & 2 deletions app/auth/callback/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ function AuthCallbackContent() {
<div className="space-y-3">
<Link
href={ROUTES.AUTH.SIGNIN}
className="block w-full py-3 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 transition-colors text-center"
className="block w-full py-3 bg-action text-white rounded-lg font-medium hover:bg-action-hover transition-colors text-center"
>
Go to Sign In
</Link>
Expand Down Expand Up @@ -200,7 +200,7 @@ function LoadingFallback() {
*/
export default function AuthCallbackPage() {
return (
<div className="min-h-screen bg-gradient-to-b from-blue-50 to-white flex items-center justify-center px-4">
<div className="min-h-screen bg-gradient-to-b from-action-tint to-white flex items-center justify-center px-4">
<div className="max-w-md w-full">
<div className="text-center mb-8">
<Link href="/" className="text-3xl font-bold text-gray-900">
Expand Down
10 changes: 5 additions & 5 deletions app/auth/forgot-password/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ export default function ForgotPasswordPage() {
const isRateLimited = rateLimitSeconds > 0;

return (
<div className="min-h-screen bg-gradient-to-b from-blue-50 to-white flex items-center justify-center px-4">
<div className="min-h-screen bg-gradient-to-b from-action-tint to-white flex items-center justify-center px-4">
<div className="max-w-md w-full">
<div className="text-center mb-8">
<Link href="/" className="text-3xl font-bold text-gray-900">
Expand All @@ -106,7 +106,7 @@ export default function ForgotPasswordPage() {
<p className="text-sm text-gray-500 mb-6">
Didn&apos;t receive the email? Check your spam folder or try again.
</p>
<Link href={ROUTES.AUTH.SIGNIN} className="text-blue-600 hover:underline">
<Link href={ROUTES.AUTH.SIGNIN} className="text-action hover:underline">
Back to Sign In
</Link>
</div>
Expand Down Expand Up @@ -154,15 +154,15 @@ export default function ForgotPasswordPage() {
onChange={(e) => setEmail(e.target.value)}
required
disabled={isRateLimited}
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:bg-gray-50 disabled:text-gray-500"
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-action disabled:bg-gray-50 disabled:text-gray-500"
placeholder="you@example.com"
/>
</div>

<button
type="submit"
disabled={loading || isRateLimited}
className="w-full py-3 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 disabled:opacity-50 transition-colors"
className="w-full py-3 bg-action text-white rounded-lg font-medium hover:bg-action-hover disabled:opacity-50 transition-colors"
>
{loading
? 'Sending...'
Expand All @@ -176,7 +176,7 @@ export default function ForgotPasswordPage() {
{!success && (
<div className="mt-6 text-center text-sm text-gray-600">
Remember your password?{' '}
<Link href={ROUTES.AUTH.SIGNIN} className="text-blue-600 hover:underline">
<Link href={ROUTES.AUTH.SIGNIN} className="text-action hover:underline">
Sign in
</Link>
</div>
Expand Down
14 changes: 7 additions & 7 deletions app/auth/reset-password/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ export default function ResetPasswordPage() {
// Invalid or expired link
if (!isValidSession) {
return (
<div className="min-h-screen bg-gradient-to-b from-blue-50 to-white flex items-center justify-center px-4">
<div className="min-h-screen bg-gradient-to-b from-action-tint to-white flex items-center justify-center px-4">
<div className="max-w-md w-full">
<div className="text-center mb-8">
<Link href="/" className="text-3xl font-bold text-gray-900">
Expand All @@ -83,7 +83,7 @@ export default function ResetPasswordPage() {
</p>
<Link
href={ROUTES.AUTH.FORGOT_PASSWORD}
className="inline-block px-6 py-3 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 transition-colors"
className="inline-block px-6 py-3 bg-action text-white rounded-lg font-medium hover:bg-action-hover transition-colors"
>
Request New Link
</Link>
Expand All @@ -101,7 +101,7 @@ export default function ResetPasswordPage() {
}

return (
<div className="min-h-screen bg-gradient-to-b from-blue-50 to-white flex items-center justify-center px-4">
<div className="min-h-screen bg-gradient-to-b from-action-tint to-white flex items-center justify-center px-4">
<div className="max-w-md w-full">
<div className="text-center mb-8">
<Link href="/" className="text-3xl font-bold text-gray-900">
Expand All @@ -121,7 +121,7 @@ export default function ResetPasswordPage() {
</p>
<Link
href={ROUTES.AUTH.SIGNIN}
className="inline-block px-6 py-3 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 transition-colors"
className="inline-block px-6 py-3 bg-action text-white rounded-lg font-medium hover:bg-action-hover transition-colors"
>
Sign In
</Link>
Expand All @@ -143,7 +143,7 @@ export default function ResetPasswordPage() {
onChange={(e) => setPassword(e.target.value)}
required
minLength={PASSWORD_MIN_LENGTH}
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-action"
placeholder={`At least ${PASSWORD_MIN_LENGTH} characters`}
/>
</div>
Expand All @@ -162,15 +162,15 @@ export default function ResetPasswordPage() {
onChange={(e) => setConfirmPassword(e.target.value)}
required
minLength={PASSWORD_MIN_LENGTH}
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-action"
placeholder="Confirm your new password"
/>
</div>

<button
type="submit"
disabled={loading}
className="w-full py-3 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 disabled:opacity-50 transition-colors"
className="w-full py-3 bg-action text-white rounded-lg font-medium hover:bg-action-hover disabled:opacity-50 transition-colors"
>
{loading ? 'Updating...' : 'Update Password'}
</button>
Expand Down
12 changes: 6 additions & 6 deletions app/auth/signin/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ export default function SignInPage() {
const isRateLimited = rateLimitSeconds > 0;

return (
<div className="min-h-screen bg-gradient-to-b from-blue-50 to-white flex items-center justify-center px-4">
<div className="min-h-screen bg-gradient-to-b from-action-tint to-white flex items-center justify-center px-4">
<div className="max-w-md w-full">
<div className="text-center mb-8">
<Link href="/" className="text-3xl font-bold text-gray-900">
Expand Down Expand Up @@ -122,7 +122,7 @@ export default function SignInPage() {
onChange={(e) => setEmail(e.target.value)}
required
disabled={isRateLimited}
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:bg-gray-50 disabled:text-gray-500"
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-action disabled:bg-gray-50 disabled:text-gray-500"
placeholder="you@example.com"
/>
</div>
Expand All @@ -134,7 +134,7 @@ export default function SignInPage() {
</label>
<Link
href={ROUTES.AUTH.FORGOT_PASSWORD}
className="text-sm text-blue-600 hover:underline"
className="text-sm text-action hover:underline"
>
Forgot password?
</Link>
Expand All @@ -147,23 +147,23 @@ export default function SignInPage() {
required
disabled={isRateLimited}
minLength={6}
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:bg-gray-50 disabled:text-gray-500"
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-action disabled:bg-gray-50 disabled:text-gray-500"
placeholder="Enter your password"
/>
</div>

<button
type="submit"
disabled={loading || isRateLimited}
className="w-full py-3 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 disabled:opacity-50 transition-colors"
className="w-full py-3 bg-action text-white rounded-lg font-medium hover:bg-action-hover disabled:opacity-50 transition-colors"
>
{loading ? 'Signing in...' : isRateLimited ? `Wait ${rateLimitSeconds}s` : 'Sign In'}
</button>
</form>

<div className="mt-6 text-center text-sm text-gray-600">
Don&apos;t have an account?{' '}
<Link href={ROUTES.AUTH.SIGNUP} className="text-blue-600 hover:underline">
<Link href={ROUTES.AUTH.SIGNUP} className="text-action hover:underline">
Sign up
</Link>
</div>
Expand Down
14 changes: 7 additions & 7 deletions app/auth/signup/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ export default function SignUpPage() {
const isRateLimited = rateLimitSeconds > 0;

return (
<div className="min-h-screen bg-gradient-to-b from-blue-50 to-white flex items-center justify-center px-4">
<div className="min-h-screen bg-gradient-to-b from-action-tint to-white flex items-center justify-center px-4">
<div className="max-w-md w-full">
<div className="text-center mb-8">
<Link href="/" className="text-3xl font-bold text-gray-900">
Expand All @@ -105,7 +105,7 @@ export default function SignUpPage() {
We sent a confirmation link to <strong>{email}</strong>. Click the link to activate
your account.
</p>
<Link href={ROUTES.AUTH.SIGNIN} className="text-blue-600 hover:underline">
<Link href={ROUTES.AUTH.SIGNIN} className="text-action hover:underline">
Back to Sign In
</Link>
</div>
Expand Down Expand Up @@ -149,7 +149,7 @@ export default function SignUpPage() {
onChange={(e) => setEmail(e.target.value)}
required
disabled={isRateLimited}
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:bg-gray-50 disabled:text-gray-500"
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-action disabled:bg-gray-50 disabled:text-gray-500"
placeholder="you@example.com"
/>
</div>
Expand All @@ -166,7 +166,7 @@ export default function SignUpPage() {
required
disabled={isRateLimited}
minLength={PASSWORD_MIN_LENGTH}
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:bg-gray-50 disabled:text-gray-500"
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-action disabled:bg-gray-50 disabled:text-gray-500"
placeholder={`At least ${PASSWORD_MIN_LENGTH} characters`}
/>
</div>
Expand All @@ -186,15 +186,15 @@ export default function SignUpPage() {
required
disabled={isRateLimited}
minLength={PASSWORD_MIN_LENGTH}
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 disabled:bg-gray-50 disabled:text-gray-500"
className="w-full px-4 py-3 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-action disabled:bg-gray-50 disabled:text-gray-500"
placeholder="Confirm your password"
/>
</div>

<button
type="submit"
disabled={loading || isRateLimited}
className="w-full py-3 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 disabled:opacity-50 transition-colors"
className="w-full py-3 bg-action text-white rounded-lg font-medium hover:bg-action-hover disabled:opacity-50 transition-colors"
>
{loading
? 'Creating account...'
Expand All @@ -208,7 +208,7 @@ export default function SignUpPage() {
{!success && (
<div className="mt-6 text-center text-sm text-gray-600">
Already have an account?{' '}
<Link href={ROUTES.AUTH.SIGNIN} className="text-blue-600 hover:underline">
<Link href={ROUTES.AUTH.SIGNIN} className="text-action hover:underline">
Sign in
</Link>
</div>
Expand Down
Loading
Loading