@rubytech/create-maxy 1.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/dist/index.js +428 -0
- package/package.json +31 -0
- package/payload/maxy/.env.example +12 -0
- package/payload/maxy/app/admin/components/ActivityTimeline.tsx +348 -0
- package/payload/maxy/app/admin/components/MarkdownMessage.tsx +40 -0
- package/payload/maxy/app/api/admin/chat/route.ts +72 -0
- package/payload/maxy/app/api/admin/logs/route.ts +40 -0
- package/payload/maxy/app/api/admin/session/route.ts +74 -0
- package/payload/maxy/app/api/chat/route.ts +72 -0
- package/payload/maxy/app/api/health/route.ts +26 -0
- package/payload/maxy/app/api/onboarding/claude-auth/route.ts +216 -0
- package/payload/maxy/app/api/onboarding/set-pin/route.ts +44 -0
- package/payload/maxy/app/api/session/route.ts +51 -0
- package/payload/maxy/app/api/telegram/webhook/route.ts +107 -0
- package/payload/maxy/app/apple-icon.png +0 -0
- package/payload/maxy/app/bot/page.tsx +373 -0
- package/payload/maxy/app/favicon.ico +0 -0
- package/payload/maxy/app/globals.css +1681 -0
- package/payload/maxy/app/layout.tsx +58 -0
- package/payload/maxy/app/lib/claude-agent.ts +503 -0
- package/payload/maxy/app/og/layout.tsx +15 -0
- package/payload/maxy/app/og/page.tsx +252 -0
- package/payload/maxy/app/page.tsx +594 -0
- package/payload/maxy/app/privacy/page.tsx +72 -0
- package/payload/maxy/app/public/page.tsx +266 -0
- package/payload/maxy/next.config.mjs +26 -0
- package/payload/maxy/package-lock.json +2198 -0
- package/payload/maxy/package.json +25 -0
- package/payload/maxy/proxy.ts +41 -0
- package/payload/maxy/public/brand/claude.png +0 -0
- package/payload/maxy/public/brand/maxy-black.png +0 -0
- package/payload/maxy/public/brand/maxy.png +0 -0
- package/payload/maxy/public/favicon.ico +0 -0
- package/payload/maxy/public/og-landscape.png +0 -0
- package/payload/maxy/public/og-portrait.png +0 -0
- package/payload/maxy/public/og-square.png +0 -0
- package/payload/maxy/public/pi-5.jpg +0 -0
- package/payload/maxy/public/robots.txt +5 -0
- package/payload/maxy/tsconfig.json +41 -0
- package/payload/maxy/tsconfig.tsbuildinfo +1 -0
- package/payload/maxy/ui.md +28 -0
- package/payload/platform/config/cloudflared.yml +17 -0
- package/payload/platform/knowledge/maxy.md +161 -0
- package/payload/platform/neo4j/schema.cypher +108 -0
- package/payload/platform/package-lock.json +1835 -0
- package/payload/platform/package.json +17 -0
- package/payload/platform/plugins/admin/PLUGIN.md +24 -0
- package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +56 -0
- package/payload/platform/plugins/admin/hooks/session-start.sh +20 -0
- package/payload/platform/plugins/admin/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/admin/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js +149 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/package.json +18 -0
- package/payload/platform/plugins/anthropic/PLUGIN.md +30 -0
- package/payload/platform/plugins/anthropic/references/setup-guide.md +146 -0
- package/payload/platform/plugins/business-assistant/PLUGIN.md +46 -0
- package/payload/platform/plugins/business-assistant/references/crm.md +112 -0
- package/payload/platform/plugins/business-assistant/references/document-management.md +96 -0
- package/payload/platform/plugins/business-assistant/references/escalation.md +126 -0
- package/payload/platform/plugins/business-assistant/references/invoicing.md +163 -0
- package/payload/platform/plugins/business-assistant/references/quoting.md +56 -0
- package/payload/platform/plugins/business-assistant/references/scheduling.md +127 -0
- package/payload/platform/plugins/cloudflare/PLUGIN.md +31 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js +174 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +45 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +256 -0
- package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -0
- package/payload/platform/plugins/cloudflare/mcp/package.json +18 -0
- package/payload/platform/plugins/cloudflare/references/setup-guide.md +110 -0
- package/payload/platform/plugins/contacts/PLUGIN.md +18 -0
- package/payload/platform/plugins/contacts/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/contacts/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/index.js +182 -0
- package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +34 -0
- package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts +19 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +68 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts +22 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js +46 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts +20 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js +56 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.d.ts +13 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.d.ts.map +1 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.js +54 -0
- package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.js.map +1 -0
- package/payload/platform/plugins/contacts/mcp/package.json +19 -0
- package/payload/platform/plugins/documents/PLUGIN.md +12 -0
- package/payload/platform/plugins/documents/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/documents/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/documents/mcp/dist/index.js +82 -0
- package/payload/platform/plugins/documents/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/documents/mcp/package.json +20 -0
- package/payload/platform/plugins/memory/PLUGIN.md +17 -0
- package/payload/platform/plugins/memory/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/index.js +164 -0
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts +3 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js +29 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +34 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts +8 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js +71 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts +24 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +125 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +18 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +56 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/package.json +19 -0
- package/payload/platform/plugins/sales/PLUGIN.md +65 -0
- package/payload/platform/plugins/sales/references/close-tracking.md +76 -0
- package/payload/platform/plugins/sales/references/closing-framework.md +108 -0
- package/payload/platform/plugins/sales/references/comparisons.md +99 -0
- package/payload/platform/plugins/sales/references/competitive-positioning.md +51 -0
- package/payload/platform/plugins/sales/references/faq.md +62 -0
- package/payload/platform/plugins/sales/references/objection-handling.md +157 -0
- package/payload/platform/plugins/sales/references/pricing.md +71 -0
- package/payload/platform/plugins/sales/references/waitlist.md +23 -0
- package/payload/platform/plugins/scheduling/PLUGIN.md +12 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +13 -0
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/package.json +18 -0
- package/payload/platform/plugins/telegram/PLUGIN.md +31 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.js +101 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.d.ts +27 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.js +41 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts +16 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +62 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.d.ts +20 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.js +34 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/message.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/package.json +19 -0
- package/payload/platform/plugins/telegram/references/setup-guide.md +50 -0
- package/payload/platform/plugins/web/PLUGIN.md +12 -0
- package/payload/platform/plugins/web/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/web/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/web/mcp/dist/index.js +12 -0
- package/payload/platform/plugins/web/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/web/mcp/package.json +18 -0
- package/payload/platform/scripts/seed-neo4j.sh +73 -0
- package/payload/platform/scripts/setup.sh +177 -0
- package/payload/platform/scripts/start.sh +62 -0
- package/payload/platform/templates/account.json +4 -0
- package/payload/platform/templates/agents/admin/IDENTITY.md +28 -0
- package/payload/platform/templates/agents/admin/SOUL.md +1 -0
- package/payload/platform/templates/agents/public/IDENTITY.md +21 -0
- package/payload/platform/templates/agents/public/SOUL.md +1 -0
- package/payload/platform/tsconfig.base.json +18 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect, useRef } from 'react'
|
|
4
|
+
import {
|
|
5
|
+
Home, Wallet, HeartPulse, Briefcase, Users, Plane,
|
|
6
|
+
Search,
|
|
7
|
+
} from 'lucide-react'
|
|
8
|
+
|
|
9
|
+
function useReveal() {
|
|
10
|
+
const ref = useRef<HTMLDivElement>(null)
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const el = ref.current
|
|
13
|
+
if (!el) return
|
|
14
|
+
const observer = new IntersectionObserver(
|
|
15
|
+
([entry]) => {
|
|
16
|
+
if (entry.isIntersecting) {
|
|
17
|
+
el.classList.add('visible')
|
|
18
|
+
observer.unobserve(el)
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
{ threshold: 0.1 }
|
|
22
|
+
)
|
|
23
|
+
observer.observe(el)
|
|
24
|
+
return () => observer.disconnect()
|
|
25
|
+
}, [])
|
|
26
|
+
return ref
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function Section({ children, className = '' }: { children: React.ReactNode; className?: string }) {
|
|
30
|
+
const ref = useReveal()
|
|
31
|
+
return (
|
|
32
|
+
<section ref={ref} className={`section reveal ${className}`}>
|
|
33
|
+
{children}
|
|
34
|
+
</section>
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const skills = [
|
|
39
|
+
{
|
|
40
|
+
name: 'Home',
|
|
41
|
+
icon: Home,
|
|
42
|
+
price: '\u00A35',
|
|
43
|
+
description: 'Coordinates tradespeople, tracks maintenance schedules, manages home insurance renewals, and keeps your household running without you chasing it.',
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'Finance',
|
|
47
|
+
icon: Wallet,
|
|
48
|
+
price: '\u00A35',
|
|
49
|
+
description: 'Catches subscription renewals before they charge, tracks bills and due dates, flags unusual spending, and reminds you about things that need cancelling.',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'Wellness',
|
|
53
|
+
icon: HeartPulse,
|
|
54
|
+
price: '\u00A35',
|
|
55
|
+
description: 'Manages medication reminders, books and tracks medical appointments, stores health notes, and keeps your family\u2019s wellness information in one place.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'Professional',
|
|
59
|
+
icon: Briefcase,
|
|
60
|
+
price: '\u00A35',
|
|
61
|
+
description: 'Handles work admin \u2014 meeting prep, expense tracking, deadline reminders, and email triage so you start each day knowing what actually matters.',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
name: 'Family',
|
|
65
|
+
icon: Users,
|
|
66
|
+
price: '\u00A35',
|
|
67
|
+
description: 'Coordinates schedules across the household, tracks kids\u2019 activities, manages school communications, and makes sure nothing falls through the cracks.',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'Travel',
|
|
71
|
+
icon: Plane,
|
|
72
|
+
price: '\u00A35',
|
|
73
|
+
description: 'Plans trips, tracks bookings and confirmations, manages itineraries, reminds you about passport renewals, and handles the admin side of getting away.',
|
|
74
|
+
},
|
|
75
|
+
]
|
|
76
|
+
|
|
77
|
+
function SkillModal({ skill, onClose }: { skill: typeof skills[number]; onClose: () => void }) {
|
|
78
|
+
const Icon = skill.icon
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
function onKey(e: KeyboardEvent) { if (e.key === 'Escape') onClose() }
|
|
81
|
+
document.addEventListener('keydown', onKey)
|
|
82
|
+
return () => document.removeEventListener('keydown', onKey)
|
|
83
|
+
}, [onClose])
|
|
84
|
+
return (
|
|
85
|
+
<div className="skill-modal-backdrop" onClick={onClose}>
|
|
86
|
+
<div className="skill-modal" onClick={e => e.stopPropagation()}>
|
|
87
|
+
<button className="skill-modal-close" onClick={onClose} aria-label="Close">×</button>
|
|
88
|
+
<div className="skill-modal-icon"><Icon size={36} strokeWidth={1.5} /></div>
|
|
89
|
+
<h3 className="skill-modal-name">{skill.name}</h3>
|
|
90
|
+
<p className="skill-modal-price">{skill.price}</p>
|
|
91
|
+
<p className="skill-modal-desc">{skill.description}</p>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export default function ProductPage() {
|
|
98
|
+
const [activeSkill, setActiveSkill] = useState<string | null>(null)
|
|
99
|
+
const activeSkillData = skills.find(s => s.name === activeSkill)
|
|
100
|
+
|
|
101
|
+
return (
|
|
102
|
+
<div className="product-page">
|
|
103
|
+
{/* Hero */}
|
|
104
|
+
<div className="hero-section">
|
|
105
|
+
<div className="hero">
|
|
106
|
+
<img src="/brand/maxy-black.png" alt="Maxy" className="hero-logo" />
|
|
107
|
+
<h1 className="hero-tagline">No Stress. Quiet Life.</h1>
|
|
108
|
+
<p className="hero-description">
|
|
109
|
+
Maxy is a personal AI assistant that lives in your home.
|
|
110
|
+
It handles the stress — bills, appointments, coordination, the
|
|
111
|
+
endless admin — so you can be present instead of managing.
|
|
112
|
+
</p>
|
|
113
|
+
<p className="hero-description" style={{ marginBottom: 0, fontSize: '15px' }}>
|
|
114
|
+
Your data never leaves your house.
|
|
115
|
+
</p>
|
|
116
|
+
<div className="hero-ctas" style={{ marginTop: '32px' }}>
|
|
117
|
+
<a href="https://maxy.chat" className="btn btn-primary">Chat with Maxy first</a>
|
|
118
|
+
<a href="#pricing" className="btn btn-secondary">See pricing</a>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
<div className="hero-image">
|
|
122
|
+
<img src="/marketing/maxy-family.png" alt="A family interacting with Maxy" />
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
|
|
126
|
+
{/* How it works */}
|
|
127
|
+
<Section>
|
|
128
|
+
<p className="section-label">How it works</p>
|
|
129
|
+
<h2 className="section-heading">Four steps. That’s it.</h2>
|
|
130
|
+
<div className="steps">
|
|
131
|
+
<div className="step">
|
|
132
|
+
<div className="step-number">1</div>
|
|
133
|
+
<div className="step-content">
|
|
134
|
+
<h3>Plug in your Maxy</h3>
|
|
135
|
+
<p>A small device that sits next to your router. Power and Wi-Fi — nothing else needed.</p>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
<div className="step">
|
|
139
|
+
<div className="step-number">2</div>
|
|
140
|
+
<div className="step-content">
|
|
141
|
+
<h3>Set a PIN and connect Claude</h3>
|
|
142
|
+
<p>Claude is the AI that powers Maxy. You need your own subscription — like a Netflix account for AI.</p>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
<div className="step">
|
|
146
|
+
<div className="step-number">3</div>
|
|
147
|
+
<div className="step-content">
|
|
148
|
+
<h3>Open your browser and start talking</h3>
|
|
149
|
+
<p>Maxy has its own chat interface on your home network — just open a browser on any device. For when you’re out, connect WhatsApp, Signal, or Telegram too.</p>
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
<div className="step">
|
|
153
|
+
<div className="step-number">4</div>
|
|
154
|
+
<div className="step-content">
|
|
155
|
+
<h3>Tell Maxy about your life</h3>
|
|
156
|
+
<p>It learns as you go. The more you share, the more it can handle for you.</p>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
</Section>
|
|
161
|
+
|
|
162
|
+
{/* Before / After */}
|
|
163
|
+
<Section>
|
|
164
|
+
<p className="section-label">What changes</p>
|
|
165
|
+
<h2 className="section-heading">Before and after Maxy.</h2>
|
|
166
|
+
<div className="before-after-layout">
|
|
167
|
+
<div className="section-image">
|
|
168
|
+
<img src="/marketing/maxy-woman.png" alt="A woman relaxing at home with Maxy" />
|
|
169
|
+
</div>
|
|
170
|
+
<div className="scenarios">
|
|
171
|
+
<div className="scenario">
|
|
172
|
+
<div className="scenario-before">
|
|
173
|
+
<p className="scenario-label">Before</p>
|
|
174
|
+
<p className="scenario-text">You miss a renewal notice. Charged £120 for something you don’t use.</p>
|
|
175
|
+
</div>
|
|
176
|
+
<div className="scenario-after">
|
|
177
|
+
<p className="scenario-label">After</p>
|
|
178
|
+
<p className="scenario-text">Maxy caught it, asked if you wanted to cancel, and handled it.</p>
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
<div className="scenario">
|
|
182
|
+
<div className="scenario-before">
|
|
183
|
+
<p className="scenario-label">Before</p>
|
|
184
|
+
<p className="scenario-text">Sunday spent coordinating next week — kids, dentist, groceries, car service.</p>
|
|
185
|
+
</div>
|
|
186
|
+
<div className="scenario-after">
|
|
187
|
+
<p className="scenario-label">After</p>
|
|
188
|
+
<p className="scenario-text">Maxy already sorted it. Dentist reminded, groceries listed, car booked.</p>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
<div className="scenario">
|
|
192
|
+
<div className="scenario-before">
|
|
193
|
+
<p className="scenario-label">Before</p>
|
|
194
|
+
<p className="scenario-text">Mum needs help with a form. You forget to call back.</p>
|
|
195
|
+
</div>
|
|
196
|
+
<div className="scenario-after">
|
|
197
|
+
<p className="scenario-label">After</p>
|
|
198
|
+
<p className="scenario-text">Maxy reminded you at 7pm. You called her back that evening.</p>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
</Section>
|
|
204
|
+
|
|
205
|
+
{/* Hardware */}
|
|
206
|
+
<Section>
|
|
207
|
+
<p className="section-label">Choose your Maxy</p>
|
|
208
|
+
<h2 className="section-heading">Two ways to bring Maxy home.</h2>
|
|
209
|
+
<div className="hardware-options">
|
|
210
|
+
<div className="hardware-card">
|
|
211
|
+
<div className="hardware-image">
|
|
212
|
+
<img src="/marketing/maxy-pi.png" alt="Maxy Pi device" />
|
|
213
|
+
</div>
|
|
214
|
+
<h3>Maxy Pi</h3>
|
|
215
|
+
<p className="hardware-price">From £125</p>
|
|
216
|
+
<p className="hardware-desc">
|
|
217
|
+
A compact, silent device that sits next to your router. Everything Maxy can do,
|
|
218
|
+
in a box the size of a deck of cards. Available in 4 GB, 8 GB or 16 GB RAM
|
|
219
|
+
— 4 GB handles one person comfortably, 16 GB is recommended
|
|
220
|
+
for families. Built on the Raspberry Pi 5, included at cost with your order.
|
|
221
|
+
</p>
|
|
222
|
+
</div>
|
|
223
|
+
<div className="hardware-card featured">
|
|
224
|
+
<div className="hardware-image">
|
|
225
|
+
<img src="/marketing/maxy-girl.png" alt="A girl chatting with Maxy Mini" />
|
|
226
|
+
</div>
|
|
227
|
+
<h3>Maxy Mini</h3>
|
|
228
|
+
<p className="hardware-price">
|
|
229
|
+
Powered by{' '}
|
|
230
|
+
<a href="https://huggingface.co/blog/reachy-mini" target="_blank" rel="noopener noreferrer">Reachy Mini</a>
|
|
231
|
+
</p>
|
|
232
|
+
<p className="hardware-desc">
|
|
233
|
+
A tabletop companion with a built-in camera, expressive movements, and personality.
|
|
234
|
+
Everything the Pi does, plus it sees you, reacts, and feels present.
|
|
235
|
+
Reachy Mini is a separate purchase — we provide the brain,
|
|
236
|
+
see their site for hardware details and pricing.
|
|
237
|
+
</p>
|
|
238
|
+
</div>
|
|
239
|
+
</div>
|
|
240
|
+
</Section>
|
|
241
|
+
|
|
242
|
+
{/* Pricing */}
|
|
243
|
+
<Section>
|
|
244
|
+
<div id="pricing" style={{ position: 'relative', top: '-80px' }} />
|
|
245
|
+
<p className="section-label">Pricing</p>
|
|
246
|
+
<h2 className="section-heading">Simple, honest pricing.</h2>
|
|
247
|
+
<div className="pricing-cards">
|
|
248
|
+
<div className="pricing-card">
|
|
249
|
+
<p className="pricing-tier">Solo</p>
|
|
250
|
+
<p className="pricing-price">£20</p>
|
|
251
|
+
<p className="pricing-period">per month</p>
|
|
252
|
+
<ul className="pricing-features">
|
|
253
|
+
<li>Everything for one person</li>
|
|
254
|
+
<li>Web chat on your home network</li>
|
|
255
|
+
<li>WhatsApp, Signal, or Telegram when you’re out</li>
|
|
256
|
+
<li>Email integration</li>
|
|
257
|
+
<li>All base capabilities</li>
|
|
258
|
+
<li>Pi device: £125 (one-time)</li>
|
|
259
|
+
<li>Claude Pro (£16/mo, paid direct to Anthropic)</li>
|
|
260
|
+
</ul>
|
|
261
|
+
</div>
|
|
262
|
+
<div className="pricing-card featured">
|
|
263
|
+
<p className="pricing-tier">Family</p>
|
|
264
|
+
<p className="pricing-price">£60</p>
|
|
265
|
+
<p className="pricing-period">per month</p>
|
|
266
|
+
<ul className="pricing-features">
|
|
267
|
+
<li>Up to 6 people</li>
|
|
268
|
+
<li>Each person gets their own private space</li>
|
|
269
|
+
<li>Web chat on your home network</li>
|
|
270
|
+
<li>WhatsApp, Signal, or Telegram when you’re out</li>
|
|
271
|
+
<li>Family coordination features</li>
|
|
272
|
+
<li>Pi device: £180 (one-time)</li>
|
|
273
|
+
<li>Claude Max (£80/mo, paid direct to Anthropic)</li>
|
|
274
|
+
</ul>
|
|
275
|
+
</div>
|
|
276
|
+
</div>
|
|
277
|
+
</Section>
|
|
278
|
+
|
|
279
|
+
{/* Skill packs */}
|
|
280
|
+
<Section>
|
|
281
|
+
<p className="section-label">Plugin packs</p>
|
|
282
|
+
<h2 className="section-heading">Teach Maxy what you need.</h2>
|
|
283
|
+
<p className="section-text">
|
|
284
|
+
Everyone’s life is different. Plugin packs let you add exactly the capabilities
|
|
285
|
+
you need — nothing you don’t. Tap a plugin to see what it does.
|
|
286
|
+
</p>
|
|
287
|
+
<div className="skill-grid">
|
|
288
|
+
{skills.map(skill => {
|
|
289
|
+
const Icon = skill.icon
|
|
290
|
+
return (
|
|
291
|
+
<button
|
|
292
|
+
key={skill.name}
|
|
293
|
+
className="skill-card"
|
|
294
|
+
onClick={() => setActiveSkill(skill.name)}
|
|
295
|
+
>
|
|
296
|
+
<div className="skill-card-icon">
|
|
297
|
+
<Icon size={28} strokeWidth={1.5} />
|
|
298
|
+
</div>
|
|
299
|
+
<div className="skill-card-name">{skill.name}</div>
|
|
300
|
+
<div className="skill-card-price">{skill.price}</div>
|
|
301
|
+
</button>
|
|
302
|
+
)
|
|
303
|
+
})}
|
|
304
|
+
</div>
|
|
305
|
+
{activeSkillData && (
|
|
306
|
+
<SkillModal skill={activeSkillData} onClose={() => setActiveSkill(null)} />
|
|
307
|
+
)}
|
|
308
|
+
<p className="pricing-note">
|
|
309
|
+
Or get all 6 for £20. More packs added based on what people actually ask for.
|
|
310
|
+
</p>
|
|
311
|
+
|
|
312
|
+
<div className="premium-skills">
|
|
313
|
+
<h3 className="premium-skills-heading">Premium plugins</h3>
|
|
314
|
+
<p className="section-text">
|
|
315
|
+
Capabilities that go beyond reminders and organisation — Maxy takes action on your behalf.
|
|
316
|
+
</p>
|
|
317
|
+
<a href="https://beagle.bot" target="_blank" rel="noopener noreferrer" className="premium-card">
|
|
318
|
+
<div className="premium-card-header">
|
|
319
|
+
<div className="premium-card-icon"><Search size={28} strokeWidth={1.5} /></div>
|
|
320
|
+
<div>
|
|
321
|
+
<div className="premium-card-name">Beagle</div>
|
|
322
|
+
<div className="premium-card-tag">AI Booking Agent</div>
|
|
323
|
+
</div>
|
|
324
|
+
</div>
|
|
325
|
+
<p className="premium-card-desc">
|
|
326
|
+
Tell Maxy what you need done — leaking tap, end-of-tenancy clean, boiler repair.
|
|
327
|
+
Beagle contacts local professionals, compares quotes, and books the best one in.
|
|
328
|
+
Within 4 hours, via WhatsApp, with nothing to pay upfront.
|
|
329
|
+
</p>
|
|
330
|
+
<span className="premium-card-link">
|
|
331
|
+
Learn more at beagle.bot →
|
|
332
|
+
</span>
|
|
333
|
+
</a>
|
|
334
|
+
</div>
|
|
335
|
+
</Section>
|
|
336
|
+
|
|
337
|
+
{/* Privacy */}
|
|
338
|
+
<Section className="privacy-section">
|
|
339
|
+
<p className="section-label">Privacy</p>
|
|
340
|
+
<h2 className="section-heading">Your data lives in your home.</h2>
|
|
341
|
+
<div className="privacy-block">
|
|
342
|
+
<p>
|
|
343
|
+
Maxy runs on a small device you own. Your conversations,
|
|
344
|
+
your family’s details, your bills, your appointments — none
|
|
345
|
+
of it leaves your house. No cloud. No data centre. No ads.
|
|
346
|
+
</p>
|
|
347
|
+
<p>
|
|
348
|
+
We can’t see your data. We don’t want to.
|
|
349
|
+
</p>
|
|
350
|
+
</div>
|
|
351
|
+
</Section>
|
|
352
|
+
|
|
353
|
+
{/* Final CTA */}
|
|
354
|
+
<div className="final-cta">
|
|
355
|
+
<p className="final-tagline">No Stress. Quiet Life.</p>
|
|
356
|
+
<div className="hero-ctas">
|
|
357
|
+
<a href="https://maxy.chat" className="btn btn-primary">Chat with Maxy</a>
|
|
358
|
+
</div>
|
|
359
|
+
</div>
|
|
360
|
+
|
|
361
|
+
{/* Footer */}
|
|
362
|
+
<footer className="product-footer">
|
|
363
|
+
<p>
|
|
364
|
+
Maxy by <a href="https://rubytech.co" target="_blank" rel="noopener noreferrer">Rubytech</a>
|
|
365
|
+
{' '}·{' '}
|
|
366
|
+
<a href="/privacy">Privacy</a>
|
|
367
|
+
{' '}·{' '}
|
|
368
|
+
<a href="https://maxy.chat">maxy.chat</a>
|
|
369
|
+
</p>
|
|
370
|
+
</footer>
|
|
371
|
+
</div>
|
|
372
|
+
)
|
|
373
|
+
}
|
|
Binary file
|