This commit is contained in:
138
apps/www/app/(legal)/cookies/page.tsx
Normal file
138
apps/www/app/(legal)/cookies/page.tsx
Normal file
@@ -0,0 +1,138 @@
|
||||
import type { Metadata } from 'next';
|
||||
import type { CSSProperties } from 'react';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Cookie Policy — Waggle',
|
||||
description:
|
||||
'Cookie policy for Waggle OS by Egzakta Group d.o.o.',
|
||||
robots: { index: false, follow: false },
|
||||
};
|
||||
|
||||
export default function CookiesPage() {
|
||||
return (
|
||||
<article>
|
||||
<h1 style={h1Style}>Cookie Policy</h1>
|
||||
<p style={metaLineStyle}>
|
||||
<strong>Effective date:</strong> July 8, 2026 · <strong>Last updated:</strong> July 8, 2026
|
||||
</p>
|
||||
<p style={paragraphStyle}>
|
||||
This Cookie Policy explains how Waggle OS uses cookies and similar
|
||||
technologies on its web properties (the marketing site at
|
||||
waggle-os.ai and any in-product web views).
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>1. What cookies are</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Cookies are small text files stored by your browser when you visit a
|
||||
website. They allow the site to remember information about your
|
||||
visit (e.g., your login state). Similar technologies include local
|
||||
storage, session storage, and pixels.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>2. Cookies we use</h2>
|
||||
|
||||
<h3 style={h3Style}>Strictly necessary</h3>
|
||||
<p style={paragraphStyle}>
|
||||
These cookies are required for the Service to function and cannot be
|
||||
disabled.
|
||||
</p>
|
||||
<ul style={listStyle}>
|
||||
<li style={listItemStyle}>
|
||||
<strong>Clerk session cookies</strong> — keep you logged in. Set by{' '}
|
||||
<code>clerk.waggle-os.ai</code>. Cleared on logout.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
<strong>CSRF protection</strong> — prevents cross-site request
|
||||
forgery. Cleared on tab close.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3 style={h3Style}>Analytics (opt-in)</h3>
|
||||
<p style={paragraphStyle}>
|
||||
These cookies are loaded only if you opt in via Settings → Privacy →
|
||||
“Allow anonymous product analytics.” Default is opt-out.
|
||||
</p>
|
||||
<ul style={listStyle}>
|
||||
<li style={listItemStyle}>
|
||||
<strong>PostHog cookies</strong> (<code>ph_*</code>) — capture
|
||||
anonymous usage events for product improvement. We do not use
|
||||
PostHog session recordings, do not capture form inputs, and do not
|
||||
link analytics to your account email.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 style={h2Style}>3. No advertising or social-media tracking</h2>
|
||||
<p style={paragraphStyle}>
|
||||
We do not use third-party advertising networks, social-media pixels
|
||||
(Meta, TikTok, X), or cross-site tracking. We do not sell or share
|
||||
data with advertisers.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>4. Managing cookies</h2>
|
||||
<p style={paragraphStyle}>
|
||||
You can clear cookies through your browser settings. For granular
|
||||
control of the analytics cookie, use Settings → Privacy in the
|
||||
Waggle product.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>5. Changes to this policy</h2>
|
||||
<p style={paragraphStyle}>
|
||||
We may update this Cookie Policy. Material changes will be announced
|
||||
via the product and email.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>6. Contact</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Email: <strong>privacy@egzakta.com</strong>
|
||||
</p>
|
||||
</article>
|
||||
);
|
||||
}
|
||||
|
||||
const h1Style: CSSProperties = {
|
||||
fontSize: 'clamp(28px, 4vw, 36px)',
|
||||
fontWeight: 700,
|
||||
marginBottom: 24,
|
||||
color: 'var(--hive-50, #f6f1e4)',
|
||||
};
|
||||
|
||||
const h2Style: CSSProperties = {
|
||||
fontSize: 'clamp(18px, 2.4vw, 22px)',
|
||||
fontWeight: 600,
|
||||
marginTop: 32,
|
||||
marginBottom: 12,
|
||||
color: 'var(--hive-50, #f6f1e4)',
|
||||
};
|
||||
|
||||
const h3Style: CSSProperties = {
|
||||
fontSize: 16,
|
||||
fontWeight: 600,
|
||||
marginTop: 16,
|
||||
marginBottom: 8,
|
||||
color: 'var(--hive-100, #d8cfba)',
|
||||
};
|
||||
|
||||
const metaLineStyle: CSSProperties = {
|
||||
fontSize: 13,
|
||||
color: 'var(--hive-300, #948a73)',
|
||||
marginBottom: 24,
|
||||
};
|
||||
|
||||
const paragraphStyle: CSSProperties = {
|
||||
fontSize: 15,
|
||||
lineHeight: 1.7,
|
||||
color: 'var(--hive-200, #d8cfba)',
|
||||
marginBottom: 16,
|
||||
};
|
||||
|
||||
const listStyle: CSSProperties = {
|
||||
paddingLeft: 24,
|
||||
marginBottom: 16,
|
||||
color: 'var(--hive-200, #d8cfba)',
|
||||
};
|
||||
|
||||
const listItemStyle: CSSProperties = {
|
||||
fontSize: 15,
|
||||
lineHeight: 1.7,
|
||||
marginBottom: 8,
|
||||
};
|
||||
208
apps/www/app/(legal)/eu-ai-act/page.tsx
Normal file
208
apps/www/app/(legal)/eu-ai-act/page.tsx
Normal file
@@ -0,0 +1,208 @@
|
||||
import type { Metadata } from 'next';
|
||||
import type { CSSProperties } from 'react';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'EU AI Act Statement — Waggle',
|
||||
description:
|
||||
'EU AI Act compliance statement for Waggle OS by Egzakta Group d.o.o.',
|
||||
robots: { index: false, follow: false },
|
||||
};
|
||||
|
||||
export default function EuAiActPage() {
|
||||
return (
|
||||
<article>
|
||||
<h1 style={h1Style}>EU AI Act Statement</h1>
|
||||
<p style={metaLineStyle}>
|
||||
<strong>Effective date:</strong> July 8, 2026 · <strong>Last updated:</strong> July 8, 2026
|
||||
</p>
|
||||
<p style={paragraphStyle}>
|
||||
Egzakta Group d.o.o. (“we”) publishes this statement to
|
||||
describe how Waggle OS relates to Regulation (EU) 2024/1689
|
||||
(“EU AI Act”). Our intent is to be a transparent
|
||||
participant in the AI value chain, even as the EU AI Act’s
|
||||
provisions phase in through 2026.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>1. Our role in the AI value chain</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Waggle OS is a <strong>deployer</strong> (sometimes called
|
||||
“deployer of AI systems”) under EU AI Act terminology
|
||||
when end-users install the Waggle desktop application and use it
|
||||
for their own purposes. Egzakta is <strong>not</strong> a provider
|
||||
of general-purpose AI models (GPAI providers — defined in Article
|
||||
51). Waggle OS routes user requests to third-party AI providers
|
||||
(Anthropic, OpenAI, Mistral, and others). The underlying GPAI
|
||||
providers fulfill the obligations applicable to them.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>2. Article 50 — transparency obligations</h2>
|
||||
<p style={paragraphStyle}>
|
||||
We comply with the transparency obligations of Article 50 by:
|
||||
</p>
|
||||
<ul style={listStyle}>
|
||||
<li style={listItemStyle}>
|
||||
<strong>Clearly labeling AI-generated output</strong>: the Waggle
|
||||
UI marks AI-generated responses as such; the user always knows
|
||||
they are interacting with an AI system.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
<strong>Disclosing system prompts on request</strong>: users can
|
||||
view the active persona’s system prompt in Settings →
|
||||
Personas → selected persona → System Prompt.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
<strong>No deepfake generation</strong>: Waggle OS does not
|
||||
generate synthetic images, audio, or video that could be confused
|
||||
with authentic media.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 style={h2Style}>3. Article 5 — prohibited practices</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Waggle OS does not implement, encourage, or facilitate any
|
||||
prohibited AI practice under Article 5, including:
|
||||
</p>
|
||||
<ul style={listStyle}>
|
||||
<li style={listItemStyle}>
|
||||
Subliminal manipulation or exploitation of vulnerabilities.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Social scoring of natural persons.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Real-time remote biometric identification in publicly accessible
|
||||
spaces.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Emotion inference in workplace or education contexts.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 style={h2Style}>4. High-risk AI systems</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Waggle OS in its default consumer configuration is not a high-risk
|
||||
AI system under Annex III. If users deploy Waggle OS for high-risk
|
||||
purposes (e.g., employment screening, credit scoring), the deployer
|
||||
is responsible for fulfilling the obligations applicable to that
|
||||
high-risk system.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>5. General-purpose AI (GPAI) considerations</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Waggle OS depends on GPAI models provided by third parties. Those
|
||||
providers publish their own EU AI Act compliance information:
|
||||
</p>
|
||||
<ul style={listStyle}>
|
||||
<li style={listItemStyle}>
|
||||
Anthropic:{' '}
|
||||
<a href="https://www.anthropic.com/eu-ai-act" style={linkStyle}>
|
||||
anthropic.com/eu-ai-act
|
||||
</a>
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
OpenAI:{' '}
|
||||
<a href="https://openai.com/eu-ai-act" style={linkStyle}>
|
||||
openai.com/eu-ai-act
|
||||
</a>
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Mistral:{' '}
|
||||
<a href="https://mistral.ai/eu-ai-act" style={linkStyle}>
|
||||
mistral.ai/eu-ai-act
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 style={h2Style}>6. Risk management and documentation</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Egzakta maintains internal documentation of:
|
||||
</p>
|
||||
<ul style={listStyle}>
|
||||
<li style={listItemStyle}>
|
||||
Models routed to and their provenance.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Safety testing for the persona system and behavioral spec.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
The evolution subsystem (see arxiv paper, pending submission).
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
User-facing transparency mechanisms.
|
||||
</li>
|
||||
</ul>
|
||||
<p style={paragraphStyle}>
|
||||
We will publish a public AI risk management summary by Article
|
||||
50’s effective date (2026-08-02 for Article 50 obligations).
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>7. Data protection alignment</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Personal data handling is governed by our{' '}
|
||||
<a href="/privacy" style={linkStyle}>
|
||||
Privacy Policy
|
||||
</a>{' '}
|
||||
and the GDPR. We do not train AI models on user data without
|
||||
explicit consent. Local memory data never leaves the user’s
|
||||
device unless they explicitly enable team sharing (Teams tier).
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>
|
||||
8. Contact for data subject and EU AI Act inquiries
|
||||
</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Email: <strong>ai-compliance@egzakta.com</strong>
|
||||
<br />
|
||||
Data Protection Officer: <strong>dpo@egzakta.com</strong>
|
||||
<br />
|
||||
Representative inquiries under Article 25:{' '}
|
||||
<strong>ai-compliance@egzakta.com</strong>
|
||||
</p>
|
||||
</article>
|
||||
);
|
||||
}
|
||||
|
||||
const h1Style: CSSProperties = {
|
||||
fontSize: 'clamp(28px, 4vw, 36px)',
|
||||
fontWeight: 700,
|
||||
marginBottom: 24,
|
||||
color: 'var(--hive-50, #f6f1e4)',
|
||||
};
|
||||
|
||||
const h2Style: CSSProperties = {
|
||||
fontSize: 'clamp(18px, 2.4vw, 22px)',
|
||||
fontWeight: 600,
|
||||
marginTop: 32,
|
||||
marginBottom: 12,
|
||||
color: 'var(--hive-50, #f6f1e4)',
|
||||
};
|
||||
|
||||
const metaLineStyle: CSSProperties = {
|
||||
fontSize: 13,
|
||||
color: 'var(--hive-300, #948a73)',
|
||||
marginBottom: 24,
|
||||
};
|
||||
|
||||
const paragraphStyle: CSSProperties = {
|
||||
fontSize: 15,
|
||||
lineHeight: 1.7,
|
||||
color: 'var(--hive-200, #d8cfba)',
|
||||
marginBottom: 16,
|
||||
};
|
||||
|
||||
const listStyle: CSSProperties = {
|
||||
paddingLeft: 24,
|
||||
marginBottom: 16,
|
||||
color: 'var(--hive-200, #d8cfba)',
|
||||
};
|
||||
|
||||
const listItemStyle: CSSProperties = {
|
||||
fontSize: 15,
|
||||
lineHeight: 1.7,
|
||||
marginBottom: 8,
|
||||
};
|
||||
|
||||
const linkStyle: CSSProperties = {
|
||||
color: 'var(--honey-400, #f6c45a)',
|
||||
textDecoration: 'underline',
|
||||
};
|
||||
29
apps/www/app/(legal)/layout.tsx
Normal file
29
apps/www/app/(legal)/layout.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
import type { CSSProperties, ReactNode } from 'react';
|
||||
import Navbar from '../_components/Navbar';
|
||||
import Footer from '../_components/Footer';
|
||||
|
||||
/**
|
||||
* Layout for the legal route group: /privacy, /terms, /cookies, /eu-ai-act.
|
||||
*
|
||||
* Wraps each legal page with the same Navbar + Footer chrome as the landing
|
||||
* page so the legal pages don't feel like a separate microsite. The route
|
||||
* group `(legal)` is invisible in the URL — pages are reachable at their
|
||||
* top-level paths.
|
||||
*/
|
||||
export default function LegalLayout({ children }: { children: ReactNode }) {
|
||||
return (
|
||||
<>
|
||||
<Navbar />
|
||||
<main style={mainStyle}>{children}</main>
|
||||
<Footer />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
const mainStyle: CSSProperties = {
|
||||
maxWidth: 760,
|
||||
margin: '120px auto 96px',
|
||||
padding: '0 24px',
|
||||
fontFamily: "var(--sans)",
|
||||
color: 'var(--hive-100, #ece3d0)',
|
||||
};
|
||||
208
apps/www/app/(legal)/privacy/page.tsx
Normal file
208
apps/www/app/(legal)/privacy/page.tsx
Normal file
@@ -0,0 +1,208 @@
|
||||
import type { Metadata } from 'next';
|
||||
import type { CSSProperties } from 'react';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Privacy Policy — Waggle',
|
||||
description:
|
||||
'Privacy policy for Waggle OS by Egzakta Group d.o.o.',
|
||||
robots: { index: false, follow: false },
|
||||
};
|
||||
|
||||
export default function PrivacyPage() {
|
||||
return (
|
||||
<article>
|
||||
<h1 style={h1Style}>Privacy Policy</h1>
|
||||
<p style={metaLineStyle}>
|
||||
<strong>Effective date:</strong> July 8, 2026 · <strong>Last updated:</strong> July 8, 2026
|
||||
</p>
|
||||
<p style={paragraphStyle}>
|
||||
Waggle OS is provided by Egzakta Group d.o.o. (“Egzakta”,
|
||||
“we”, “us”), a company registered in the
|
||||
Republic of Serbia. This Privacy Policy explains what personal data
|
||||
we collect, how we use it, and your rights.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>1. Data we collect</h2>
|
||||
<ul style={listStyle}>
|
||||
<li style={listItemStyle}>
|
||||
<strong>Account data</strong>: when you sign up via Clerk, we collect
|
||||
your email address, display name, and optional profile information.
|
||||
Clerk Inc. processes this data as an authentication sub-processor
|
||||
under their own privacy policy (
|
||||
<a href="https://clerk.com/privacy" style={linkStyle}>
|
||||
clerk.com/privacy
|
||||
</a>
|
||||
).
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
<strong>Subscription data</strong>: when you upgrade to Team,
|
||||
Stripe Inc. processes your payment information. We never see or
|
||||
store your card details — Stripe returns only a customer ID and
|
||||
subscription status to us (
|
||||
<a href="https://stripe.com/privacy" style={linkStyle}>
|
||||
stripe.com/privacy
|
||||
</a>
|
||||
).
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
<strong>Product analytics</strong>: with your opt-in (default off),
|
||||
we collect anonymous usage events (onboarding completion, feature
|
||||
interactions) via PostHog Inc. to improve the product. You can opt
|
||||
out at any time in Settings → Privacy (
|
||||
<a href="https://posthog.com/privacy" style={linkStyle}>
|
||||
posthog.com/privacy
|
||||
</a>
|
||||
).
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
<strong>Local memory</strong>: Waggle OS stores your conversations,
|
||||
memories, and harvested content <strong>locally on your device</strong>{' '}
|
||||
in a SQLite database (the <code>.waggle/</code> directory). We do
|
||||
not transmit this data to our servers. If you choose to enable
|
||||
shared team workspaces (Teams tier), encrypted memory bundles are
|
||||
stored on our infrastructure for synchronization; you control which
|
||||
workspaces sync.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 style={h2Style}>2. How we use your data</h2>
|
||||
<ul style={listStyle}>
|
||||
<li style={listItemStyle}>
|
||||
Provide the Service (authentication, subscription management, support).
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Improve the Service (analytics where you’ve opted in).
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Comply with legal obligations (tax records, fraud prevention).
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
We do not sell your personal data and do not use it for advertising.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 style={h2Style}>3. Where your data lives</h2>
|
||||
<ul style={listStyle}>
|
||||
<li style={listItemStyle}>
|
||||
Account and subscription data: Clerk and Stripe (US- and EU-region
|
||||
processors).
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Analytics (opt-in only): PostHog (US-region).
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Memory and conversations: your device. Optionally your Teams
|
||||
workspace bundle.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Egzakta’s own systems: minimal account and billing metadata in
|
||||
encrypted storage.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 style={h2Style}>4. Your rights (GDPR and similar regimes)</h2>
|
||||
<p style={paragraphStyle}>
|
||||
You have the right to access, rectify, port, restrict, or delete your
|
||||
personal data, and to object to processing. To exercise these rights,
|
||||
email <strong>privacy@egzakta.com</strong>. We aim to respond within
|
||||
30 days.
|
||||
</p>
|
||||
<p style={paragraphStyle}>
|
||||
Local memory data: you can erase all locally-stored data at any time
|
||||
via Settings → Privacy → Erase All Data. This is irreversible and
|
||||
does not require contacting us.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>5. Retention</h2>
|
||||
<ul style={listStyle}>
|
||||
<li style={listItemStyle}>
|
||||
Account data: retained while your account is active plus 90 days
|
||||
after deletion for billing reconciliation.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Subscription data: retained per Stripe’s record-keeping
|
||||
requirements (typically 7 years for accounting).
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Analytics (opt-in only): retained 12 months.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Local memory: retained until you delete it. Egzakta has no access.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 style={h2Style}>6. Cookies and tracking</h2>
|
||||
<p style={paragraphStyle}>
|
||||
We use strictly-necessary cookies for authentication (Clerk session)
|
||||
and, with your opt-in, analytics cookies (PostHog). See our{' '}
|
||||
<a href="/cookies" style={linkStyle}>
|
||||
Cookie Policy
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>7. Changes to this policy</h2>
|
||||
<p style={paragraphStyle}>
|
||||
We may update this policy. Material changes will be announced via the
|
||||
product and email. Continued use after a change means you accept the
|
||||
updated terms.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>8. Contact</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Egzakta Group d.o.o.
|
||||
<br />
|
||||
Registered office: Belgrade, Republic of Serbia
|
||||
<br />
|
||||
Email: <strong>privacy@egzakta.com</strong>
|
||||
<br />
|
||||
Data Protection Officer: <strong>dpo@egzakta.com</strong>
|
||||
</p>
|
||||
</article>
|
||||
);
|
||||
}
|
||||
|
||||
const h1Style: CSSProperties = {
|
||||
fontSize: 'clamp(28px, 4vw, 36px)',
|
||||
fontWeight: 700,
|
||||
marginBottom: 24,
|
||||
color: 'var(--hive-50, #f6f1e4)',
|
||||
};
|
||||
|
||||
const h2Style: CSSProperties = {
|
||||
fontSize: 'clamp(18px, 2.4vw, 22px)',
|
||||
fontWeight: 600,
|
||||
marginTop: 32,
|
||||
marginBottom: 12,
|
||||
color: 'var(--hive-50, #f6f1e4)',
|
||||
};
|
||||
|
||||
const metaLineStyle: CSSProperties = {
|
||||
fontSize: 13,
|
||||
color: 'var(--hive-300, #948a73)',
|
||||
marginBottom: 24,
|
||||
};
|
||||
|
||||
const paragraphStyle: CSSProperties = {
|
||||
fontSize: 15,
|
||||
lineHeight: 1.7,
|
||||
color: 'var(--hive-200, #d8cfba)',
|
||||
marginBottom: 16,
|
||||
};
|
||||
|
||||
const listStyle: CSSProperties = {
|
||||
paddingLeft: 24,
|
||||
marginBottom: 16,
|
||||
color: 'var(--hive-200, #d8cfba)',
|
||||
};
|
||||
|
||||
const listItemStyle: CSSProperties = {
|
||||
fontSize: 15,
|
||||
lineHeight: 1.7,
|
||||
marginBottom: 8,
|
||||
};
|
||||
|
||||
const linkStyle: CSSProperties = {
|
||||
color: 'var(--honey-400, #f6c45a)',
|
||||
textDecoration: 'underline',
|
||||
};
|
||||
198
apps/www/app/(legal)/terms/page.tsx
Normal file
198
apps/www/app/(legal)/terms/page.tsx
Normal file
@@ -0,0 +1,198 @@
|
||||
import type { Metadata } from 'next';
|
||||
import type { CSSProperties } from 'react';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Terms of Service — Waggle',
|
||||
description:
|
||||
'Terms of Service for Waggle OS by Egzakta Group d.o.o.',
|
||||
robots: { index: false, follow: false },
|
||||
};
|
||||
|
||||
export default function TermsPage() {
|
||||
return (
|
||||
<article>
|
||||
<h1 style={h1Style}>Terms of Service</h1>
|
||||
<p style={metaLineStyle}>
|
||||
<strong>Effective date:</strong> July 8, 2026 · <strong>Last updated:</strong> July 8, 2026
|
||||
</p>
|
||||
<p style={paragraphStyle}>
|
||||
These Terms of Service (“Terms”) govern your use of Waggle
|
||||
OS (the “Service”), provided by Egzakta Group d.o.o.
|
||||
(“Egzakta”, “we”, “us”). By
|
||||
creating an account or installing the Waggle desktop application, you
|
||||
agree to these Terms.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>1. The Service</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Waggle OS is a desktop AI agent platform with persistent local memory.
|
||||
The Service includes the Waggle desktop application, the cloud-hosted
|
||||
account infrastructure, and optional team collaboration features.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>2. Account</h2>
|
||||
<p style={paragraphStyle}>
|
||||
You must be at least 16 years old to use the Service. You are
|
||||
responsible for maintaining the confidentiality of your account
|
||||
credentials. You agree to provide accurate and current information
|
||||
when creating an account.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>3. Acceptable use</h2>
|
||||
<p style={paragraphStyle}>You agree not to:</p>
|
||||
<ul style={listStyle}>
|
||||
<li style={listItemStyle}>
|
||||
Use the Service to violate any law or third-party rights.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Attempt to reverse-engineer, modify, or interfere with the
|
||||
Service’s protections.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Use the Service to generate content that infringes intellectual
|
||||
property, defames individuals, or violates privacy.
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Submit data you do not have the right to submit (including
|
||||
confidential or copyrighted third-party content).
|
||||
</li>
|
||||
<li style={listItemStyle}>
|
||||
Use the Service to develop or train competing AI products.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 style={h2Style}>4. Subscription and billing</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Solo tier: free, forever, for all personal use — full memory,
|
||||
Harvest import, unlimited workspaces, and any model with your own
|
||||
keys. Team tier (USD 49/seat/month): adds shared workspaces and team
|
||||
collaboration.
|
||||
</p>
|
||||
<p style={paragraphStyle}>
|
||||
Subscriptions are billed in advance through Stripe. Auto-renewal is
|
||||
on by default; you can cancel at any time in account settings.
|
||||
Cancellations take effect at the end of the current billing period.
|
||||
We do not refund partial periods except where required by law.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>5. Trial</h2>
|
||||
<p style={paragraphStyle}>
|
||||
A free 15-day trial of all features is available to new accounts. If
|
||||
you do not subscribe at trial end, your account converts to the Solo
|
||||
tier and trial features become inaccessible. Trial data is retained
|
||||
per the{' '}
|
||||
<a href="/privacy" style={linkStyle}>
|
||||
Privacy Policy
|
||||
</a>
|
||||
.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>6. Intellectual property</h2>
|
||||
<p style={paragraphStyle}>
|
||||
You retain ownership of content you create, store, or process via the
|
||||
Service. You grant Egzakta a limited license to host and process your
|
||||
content solely to provide the Service.
|
||||
</p>
|
||||
<p style={paragraphStyle}>
|
||||
Egzakta retains all rights in the Service, including source code,
|
||||
documentation, and marketing materials. Open-source components are
|
||||
governed by their respective licenses (notably Apache 2.0 for the
|
||||
hive-mind substrate).
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>7. Disclaimer of warranties</h2>
|
||||
<p style={paragraphStyle}>
|
||||
The Service is provided “as is” without warranties of any
|
||||
kind. We do not warrant that the Service will be uninterrupted,
|
||||
error-free, or that AI-generated outputs will be accurate, complete,
|
||||
or fit for any particular purpose. You are responsible for verifying
|
||||
AI-generated content before acting on it.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>8. Limitation of liability</h2>
|
||||
<p style={paragraphStyle}>
|
||||
To the maximum extent permitted by law, Egzakta’s total
|
||||
liability for any claim arising from the Service is limited to the
|
||||
fees you paid Egzakta in the 12 months preceding the claim. We are
|
||||
not liable for indirect, incidental, or consequential damages.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>9. Termination</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Either party may terminate at any time. We may suspend or terminate
|
||||
your account for material breach of these Terms. Upon termination,
|
||||
you may export your data for 30 days; after that, we may delete your
|
||||
account data in accordance with the Privacy Policy.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>10. Governing law</h2>
|
||||
<p style={paragraphStyle}>
|
||||
These Terms are governed by the laws of the Republic of Serbia.
|
||||
Disputes shall be resolved in the competent courts of Belgrade,
|
||||
Serbia, except where mandatory consumer protection laws in your
|
||||
jurisdiction provide otherwise.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>11. Changes to the Terms</h2>
|
||||
<p style={paragraphStyle}>
|
||||
We may update these Terms. Material changes will be announced at
|
||||
least 30 days in advance via the product and email. Continued use
|
||||
after the change means you accept the updated Terms.
|
||||
</p>
|
||||
|
||||
<h2 style={h2Style}>12. Contact</h2>
|
||||
<p style={paragraphStyle}>
|
||||
Egzakta Group d.o.o.
|
||||
<br />
|
||||
Registered office: Belgrade, Republic of Serbia
|
||||
<br />
|
||||
Email: <strong>legal@egzakta.com</strong>
|
||||
</p>
|
||||
</article>
|
||||
);
|
||||
}
|
||||
|
||||
const h1Style: CSSProperties = {
|
||||
fontSize: 'clamp(28px, 4vw, 36px)',
|
||||
fontWeight: 700,
|
||||
marginBottom: 24,
|
||||
color: 'var(--hive-50, #f6f1e4)',
|
||||
};
|
||||
|
||||
const h2Style: CSSProperties = {
|
||||
fontSize: 'clamp(18px, 2.4vw, 22px)',
|
||||
fontWeight: 600,
|
||||
marginTop: 32,
|
||||
marginBottom: 12,
|
||||
color: 'var(--hive-50, #f6f1e4)',
|
||||
};
|
||||
|
||||
const metaLineStyle: CSSProperties = {
|
||||
fontSize: 13,
|
||||
color: 'var(--hive-300, #948a73)',
|
||||
marginBottom: 24,
|
||||
};
|
||||
|
||||
const paragraphStyle: CSSProperties = {
|
||||
fontSize: 15,
|
||||
lineHeight: 1.7,
|
||||
color: 'var(--hive-200, #d8cfba)',
|
||||
marginBottom: 16,
|
||||
};
|
||||
|
||||
const listStyle: CSSProperties = {
|
||||
paddingLeft: 24,
|
||||
marginBottom: 16,
|
||||
color: 'var(--hive-200, #d8cfba)',
|
||||
};
|
||||
|
||||
const listItemStyle: CSSProperties = {
|
||||
fontSize: 15,
|
||||
lineHeight: 1.7,
|
||||
marginBottom: 8,
|
||||
};
|
||||
|
||||
const linkStyle: CSSProperties = {
|
||||
color: 'var(--honey-400, #f6c45a)',
|
||||
textDecoration: 'underline',
|
||||
};
|
||||
Reference in New Issue
Block a user