moving
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled

This commit is contained in:
Oleg Maslov
2026-09-02 10:10:29 +02:00
commit 0c3e2ead3b
3841 changed files with 970576 additions and 0 deletions

View 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
&ldquo;Allow anonymous product analytics.&rdquo; 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,
};

View 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. (&ldquo;we&rdquo;) publishes this statement to
describe how Waggle OS relates to Regulation (EU) 2024/1689
(&ldquo;EU AI Act&rdquo;). Our intent is to be a transparent
participant in the AI value chain, even as the EU AI Act&rsquo;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
&ldquo;deployer of AI systems&rdquo;) 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&rsquo;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&rsquo;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&rsquo;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',
};

View 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)',
};

View 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. (&ldquo;Egzakta&rdquo;,
&ldquo;we&rdquo;, &ldquo;us&rdquo;), 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&rsquo;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&rsquo;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&rsquo;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',
};

View 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 (&ldquo;Terms&rdquo;) govern your use of Waggle
OS (the &ldquo;Service&rdquo;), provided by Egzakta Group d.o.o.
(&ldquo;Egzakta&rdquo;, &ldquo;we&rdquo;, &ldquo;us&rdquo;). 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&rsquo;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 &ldquo;as is&rdquo; 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&rsquo;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',
};