This commit is contained in:
123
docs/launch/drafts/2026-05-10-day-0-linkedin-post.md
Normal file
123
docs/launch/drafts/2026-05-10-day-0-linkedin-post.md
Normal file
@@ -0,0 +1,123 @@
|
||||
# CONT-02-day0 — Day-0 LinkedIn Launch Post (DRAFT)
|
||||
|
||||
**Author:** Marko Marković (Marko publishes; I draft)
|
||||
**Audience:** LinkedIn network — founders, AI/ML community, enterprise contacts, Egzakta network
|
||||
**Length target:** ≤ 1,300 chars (per M-32 + LinkedIn-native cap before "see more" fold)
|
||||
**Tone:** Confident, evidence-led, NOT hype
|
||||
**Zone (per 2026-04-19-launch-copy-variants.md):** Zone B — Matches/Marginal Beat (LoCoMo 74% vs Mem0 66.9% is +7.1pp but framed as "apples-to-apples methodology" rather than "SOTA dominance")
|
||||
**Status:** READY-TO-PUBLISH. Marko reviews + posts on Day-0 morning.
|
||||
**Pre-publish coordination:** waggle-os.ai/blog technical post live first (linked from this), arxiv preprint live if Path A succeeded, otherwise methodology.md link.
|
||||
|
||||
---
|
||||
|
||||
## Version A — Sovereignty-led (RECOMMENDED)
|
||||
|
||||
> 🐝 Today we're launching Waggle OS — and I want to share why.
|
||||
>
|
||||
> Every AI assistant forgets you exist between sessions. Every chat starts from zero. That's not memory; that's amnesia.
|
||||
>
|
||||
> We built a different layer:
|
||||
>
|
||||
> 🔹 **Memory that persists** — local-first, bitemporal knowledge graph, audit-trail grade.
|
||||
> 🔹 **Harvest from where you already work** — ChatGPT, Claude, Gemini, Perplexity exports → one unified memory.
|
||||
> 🔹 **Agents that get smarter the longer you use them** — categorized decisions, preferences, corrections.
|
||||
>
|
||||
> On the LoCoMo long-context memory benchmark — apples-to-apples methodology — Waggle's substrate scores **74%** vs Mem0's published **66.9%**. Same fixture, same model class, transparent judge ensemble. The +7.1pp is real. The methodology is reproducible.
|
||||
>
|
||||
> The architecture is sovereign by default — your data never leaves your machine unless you choose. EU AI Act Article 13 audit triggers ship by default. Apache 2.0 hive-mind core is on GitHub today.
|
||||
>
|
||||
> Try it free: [waggle-os.ai](https://waggle-os.ai)
|
||||
> Read the methodology: [waggle-os.ai/docs/methodology](https://waggle-os.ai/docs/methodology)
|
||||
> Open source: [github.com/marolinik/hive-mind](https://github.com/marolinik/hive-mind)
|
||||
>
|
||||
> Egzakta Group's KVARK enterprise platform builds on this same substrate — same numbers, sovereign deployment, customer-perimeter.
|
||||
>
|
||||
> #AIagents #Memory #Sovereignty #LocalFirst #EUAIAct
|
||||
|
||||
**Char count:** ~1,250 (under cap; leaves 50 chars buffer for line break artifacts)
|
||||
|
||||
---
|
||||
|
||||
## Version B — Methodology-led (academic-leaning)
|
||||
|
||||
> Today we're publishing Waggle — and the methodology paper behind it.
|
||||
>
|
||||
> Most "AI memory" benchmarks compare apples to oranges: different judge ensembles, different cell definitions, no pre-registration. We built one that doesn't:
|
||||
>
|
||||
> 🔹 **Pre-registered manifest** with SHA-pinned protocol
|
||||
> 🔹 **Multi-jurisdictional judge trio** (Opus 4.7 + GPT-5.4 + Gemini 3.1, κ=0.7878)
|
||||
> 🔹 **5-cell ablation** (no-context, oracle-context, full-context, retrieval, agentic)
|
||||
>
|
||||
> On LoCoMo with this methodology, our substrate scores **74%** vs Mem0's published **66.9%**. The +7.1pp gap traces partly to architecture (bitemporal KG, IPB compression) and partly to methodology choices the field hasn't standardized.
|
||||
>
|
||||
> Why this matters: memory is the moat. Not training, not parameters. The AI that remembers you, your preferences, your decisions — that's the one you'll keep. And that memory has to be auditable for EU AI Act and SOC 2 to even start the enterprise conversation.
|
||||
>
|
||||
> Local-first by default. Apache 2.0 hive-mind core. Tauri desktop binary. MCP-native.
|
||||
>
|
||||
> Paper: [arxiv link OR methodology.md]
|
||||
> Try free: [waggle-os.ai](https://waggle-os.ai)
|
||||
> OSS: [github.com/marolinik/hive-mind](https://github.com/marolinik/hive-mind)
|
||||
>
|
||||
> #AIMemory #Benchmarks #Reproducibility #EUAIAct #LocalFirst
|
||||
|
||||
**Char count:** ~1,290 (within cap)
|
||||
|
||||
---
|
||||
|
||||
## Version C — Founder-voice / honest (alternative)
|
||||
|
||||
> Six months ago I told my co-founders I was going to build "the memory layer for AI." They thought I was insane.
|
||||
>
|
||||
> Today we're shipping it.
|
||||
>
|
||||
> Waggle OS is a desktop app + open-source substrate. It does three things most AI assistants don't:
|
||||
>
|
||||
> 🔹 Remembers what you decided, preferred, and corrected — across all your sessions, across all your AI tools.
|
||||
> 🔹 Pulls memory FROM your existing AI exports (ChatGPT, Claude, Gemini, Perplexity) — you don't have to "start fresh."
|
||||
> 🔹 Stays on your machine unless you choose otherwise. EU AI Act audit trail built-in.
|
||||
>
|
||||
> Benchmark: LoCoMo apples-to-apples, **74%** vs Mem0's **66.9%**. The methodology paper is live. The substrate is Apache 2.0. The hive-mind core is on npm and GitHub today.
|
||||
>
|
||||
> If you're a founder, consultant, or researcher who wishes your AI tools remembered you: try it. Free tier exists forever.
|
||||
>
|
||||
> If you're an enterprise looking at memory + AI Act audit trail + sovereignty as a 2026 priority: KVARK (Egzakta Group) is built on this same substrate. Same numbers, customer-perimeter deployment.
|
||||
>
|
||||
> [waggle-os.ai](https://waggle-os.ai) — try free
|
||||
> [marolinik/hive-mind](https://github.com/marolinik/hive-mind) — Apache 2.0 OSS
|
||||
>
|
||||
> #AI #Memory #FounderJourney #EUAIAct #Sovereignty
|
||||
|
||||
**Char count:** ~1,260 (within cap)
|
||||
|
||||
---
|
||||
|
||||
## Recommendation
|
||||
|
||||
**Version A — sovereignty-led.** Reasons:
|
||||
1. Sovereignty is the differentiator Hermes Agent (110K stars Feb 2026) doesn't have — per Track H Hermes canonical integration, this is the load-bearing positioning angle.
|
||||
2. Concrete benchmark number (74% vs 66.9%) anchors the credibility but isn't the lead.
|
||||
3. EU AI Act mention plants the enterprise seed (KVARK funnel) without making the post enterprise-flavored.
|
||||
4. Three concrete things (memory, harvest, agents) is the most cognitively-accessible structure for a launch post.
|
||||
5. Personal voice (🐝 + "I want to share why") balances the technical claims.
|
||||
|
||||
**When to use Version B:** if Pavlukhin endorsement succeeds and arxiv preprint goes live alongside, the methodology-led framing leverages that credibility chain.
|
||||
|
||||
**When to use Version C:** if the founder narrative matters more for this audience and we want to seed "KVARK as enterprise path" without pushing it.
|
||||
|
||||
## Pre-publish checklist
|
||||
|
||||
- [ ] Day-0 actual achieved (signed binary downloadable from waggle-os.ai)
|
||||
- [ ] Landing page Day-0 CTA active (sign-up flow live, Stripe live keys flipped per DAY0-02)
|
||||
- [ ] OSS hive-mind v0.2.0 republished (per push-gate ceremony §2.5)
|
||||
- [ ] Arxiv preprint live (Path A) OR methodology.md route confirmed live (Path D)
|
||||
- [ ] Demo video (90s) URL accessible (CR-4 / CONT-01) — even if "coming soon" is acceptable per Phase 3
|
||||
- [ ] Warm list 5-10 names pre-emailed T-72h per M-32 (Marko-side action; not gating but helpful)
|
||||
|
||||
## Post-publish actions (Marko)
|
||||
|
||||
1. Pin to LinkedIn profile for 24h
|
||||
2. Cross-post to X (adapted to 280-char + thread format)
|
||||
3. Reply to first 10 comments within 1h to seed engagement
|
||||
4. Monitor PostHog dashboard for landing→signup conversion in first 4h
|
||||
5. T+5d: post "It's been a week" follow-up (CONT-02-followup, separate draft)
|
||||
6. T+10d: post "What we learned" reflection
|
||||
@@ -0,0 +1,70 @@
|
||||
# DAY0-CRED-05 / CONT-03 — Pavlukhin EVOLVESCHEMA arxiv submission email (DRAFT)
|
||||
|
||||
**Target:** Mikhail Pavlukhin
|
||||
**Author:** Marko Marković (Marko sends; I draft)
|
||||
**Purpose:** Path A endorsement chain — request standalone EVOLVESCHEMA arxiv preprint so Marko's LoCoMo paper can cite it + benefit from Pavlukhin's existing arxiv-author status for endorsement.
|
||||
**Status:** READY-TO-SEND. Marko reviews + adjusts tone, then sends.
|
||||
**Reply window:** 24-72h. Path D fallback (methodology.md in OSS repo) already live if Pavlukhin doesn't respond.
|
||||
**Authority:** PM master §3a — Path A primary; v1.0 Phase 2 DAY0-CRED-05.
|
||||
|
||||
---
|
||||
|
||||
## Subject line options (pick one)
|
||||
|
||||
- **A (direct):** "Quick ask: standalone EVOLVESCHEMA arxiv preprint for Waggle paper citation"
|
||||
- **B (relational):** "Following up on EVOLVESCHEMA — quick arxiv coordination request"
|
||||
- **C (concise):** "EVOLVESCHEMA arxiv question — 5 min read"
|
||||
|
||||
**Recommend A** — sets clear expectation in the inbox preview.
|
||||
|
||||
---
|
||||
|
||||
## Email body (DRAFT — Marko reviews + sends)
|
||||
|
||||
> Hi Mikhail,
|
||||
>
|
||||
> Hope you're well. Brief context + a coordination ask.
|
||||
>
|
||||
> We're publishing a Waggle/hive-mind paper next week on apples-to-apples methodology for LoCoMo (long-context memory benchmark). Our substrate score is 74% on the canonical fixture vs Mem0's published 66.9% — a +7.1pp gap that we trace partly to methodology choices (judge ensemble, no-context vs full-context cell definitions) and partly to the substrate architecture (bitemporal KG + IPB compression).
|
||||
>
|
||||
> The architecture relies on a prompt-evolution component that descends directly from your EVOLVESCHEMA work. We're citing you in §3.2 and §5.3 of the paper, and the lineage attribution is unambiguous — your name is in the paper either as a co-author candidate or as a strong primary citation, your call.
|
||||
>
|
||||
> **The ask:** Would you consider submitting a standalone EVOLVESCHEMA preprint to arxiv (cs.AI) in the next 1-2 weeks? Even a 4-6 page write-up of the core method, separate from any longer paper you're working on, would be enormously helpful because:
|
||||
>
|
||||
> 1. It lets our Waggle paper cite an arxiv ID rather than an informal lineage reference.
|
||||
> 2. As an existing arxiv author, you could endorse our submission, which gates first-time submissions to cs.AI.
|
||||
>
|
||||
> If you're already planning a fuller EVOLVESCHEMA paper, even a placeholder/draft preprint would work for both purposes — the endorsement chain only needs the arxiv-author status to exist, not the final version.
|
||||
>
|
||||
> Happy to share our paper draft if helpful (currently at the methodology-doc stage; the LoCoMo numbers are pre-registered + reproducible). And of course we can coordinate authorship/citation framing whichever way suits you best.
|
||||
>
|
||||
> No pressure if the timing doesn't work — we have a fallback path that doesn't require arxiv coordination. But Path A (your standalone preprint) is materially stronger for the paper, and I wanted to offer it first.
|
||||
>
|
||||
> Quick yes/no/maybe in a few days would help us calibrate the Day-0 sequencing.
|
||||
>
|
||||
> Thanks,
|
||||
> Marko
|
||||
|
||||
---
|
||||
|
||||
## Tone calibration (for Marko's review)
|
||||
|
||||
- **Specific number:** "74% vs Mem0's 66.9%" is concrete; signals we're serious about evidence.
|
||||
- **Attribution latitude:** "co-author candidate or primary citation, your call" — flexible without being pushy.
|
||||
- **Time-bounded but not pressuring:** "next 1-2 weeks" + "Quick yes/no/maybe in a few days" — clear window but no urgency.
|
||||
- **Path D acknowledged:** "we have a fallback path" — signals this isn't blocking the launch (per PM master §3a) and respects his time.
|
||||
- **Length:** ~310 words. Within "5 min read" framing of subject C.
|
||||
|
||||
## Send mechanics
|
||||
|
||||
1. Marko reviews + adjusts tone (especially the "your name is in the paper either as a co-author candidate or as a strong primary citation" framing — this depends on M-04 strategic decision pending on attribution).
|
||||
2. Marko sends from his personal email (not company; lineage is academic).
|
||||
3. Marko marks calendar reminder for T+72h to chase if no reply.
|
||||
4. Path D activation: if no reply by 2026-05-17 (T+7d), pivot to methodology.md citation in OSS repo per `decisions/2026-05-02-track-e-arxiv-7-decisions.md` Path D fallback.
|
||||
|
||||
## Reply handling
|
||||
|
||||
- **YES:** Marko replies with paper draft + arxiv submission timeline coordination. CONT-03 closes.
|
||||
- **MAYBE / "let me think":** Marko gives him 72h. Pre-schedule a chase email.
|
||||
- **NO:** Marko thanks him + activates Path D. No bridge burned; attribution remains in paper.
|
||||
- **NO REPLY 7d:** Path D auto-activates. No further follow-up.
|
||||
239
docs/launch/drafts/2026-05-12-apps-www-deployment-readiness.md
Normal file
239
docs/launch/drafts/2026-05-12-apps-www-deployment-readiness.md
Normal file
@@ -0,0 +1,239 @@
|
||||
# apps/www Deployment Readiness — Day-0 Plan
|
||||
|
||||
**Status:** DRAFT — what's needed to deploy `apps/www` to `https://waggle-os.ai`
|
||||
**Authoring:** CC, 2026-05-12 (Phase 2 Wave 3 prep)
|
||||
**Gates:** Wave 3 / C2 (Stripe live smoke) is blocked until apps/www is live at a real URL
|
||||
|
||||
---
|
||||
|
||||
## Why this matters
|
||||
|
||||
The Stripe webhook endpoint `we_1TVt5qCNCrMQy1f7Zl5ujKSC` (created during Wave 2 PG3
|
||||
prep) is configured to POST to `https://waggle-os.ai/api/webhooks/stripe`. Without a
|
||||
live deployment at that URL:
|
||||
- Stripe webhook deliveries fail (5xx or DNS fail) — won't trigger tier upgrades.
|
||||
- Marketing CTAs ("Start free trial") have nowhere to land.
|
||||
- Day-0 LinkedIn post can't link to a real domain.
|
||||
|
||||
The Day-0 ETA target (2026-05-15) requires this resolved.
|
||||
|
||||
---
|
||||
|
||||
## Existing deploy automation: broken
|
||||
|
||||
`.github/workflows/deploy-www.yml` targets **GitHub Pages** and expects
|
||||
`apps/www/dist` (static output). Two problems:
|
||||
|
||||
1. `next build` outputs `.next/`, NOT `dist/` — the workflow's artifact upload path is wrong.
|
||||
2. GitHub Pages only serves **static files** — it cannot run:
|
||||
- The `/api/webhooks/stripe` route (needs serverless)
|
||||
- The Clerk middleware (needs Node runtime)
|
||||
- Server Actions / dynamic rendering
|
||||
|
||||
This workflow either needs full rewrite OR a different host. **Recommendation: switch to Vercel.**
|
||||
|
||||
---
|
||||
|
||||
## Recommended path: Vercel
|
||||
|
||||
### Why Vercel
|
||||
|
||||
- **Native Next.js hosting** — zero config; auto-detects `apps/www/next.config.mjs`
|
||||
- **Server Actions + API routes + middleware** all work without translation
|
||||
- **Free tier** sufficient for pilot traffic; auto-scaling on Pro
|
||||
- **Native Clerk + Stripe + PostHog integrations** documented
|
||||
- **DNS-by-CNAME** straightforward to point `waggle-os.ai` at Vercel
|
||||
|
||||
### Step 1 — Vercel project setup
|
||||
|
||||
```powershell
|
||||
# Install Vercel CLI (one-time)
|
||||
npm i -g vercel
|
||||
|
||||
# Link the apps/www directory to a new Vercel project
|
||||
cd D:\Projects\waggle-os\apps\www
|
||||
vercel login # browser OAuth, uses Marko's account
|
||||
vercel link # creates .vercel/ folder (gitignored)
|
||||
# When prompted: "Set up apps/www?" → Yes
|
||||
# Project name: waggle-www (or your choice)
|
||||
# Framework: Next.js (auto-detected)
|
||||
# Build command: leave default (npm run build)
|
||||
# Output directory: leave default (.next)
|
||||
# Root directory: ./ (already in apps/www)
|
||||
```
|
||||
|
||||
### Step 2 — Set production environment variables
|
||||
|
||||
13 env vars from `apps/www/.env.local` need to land in Vercel. Use the CLI for atomicity:
|
||||
|
||||
```powershell
|
||||
cd D:\Projects\waggle-os\apps\www
|
||||
|
||||
# Bulk-add all 13 prod env vars to Vercel (production environment)
|
||||
# Reads from .env.local and pushes each to Vercel.
|
||||
$envFile = ".env.local"
|
||||
Get-Content $envFile | ForEach-Object {
|
||||
if ($_ -match "^([A-Z_]+)=(.+)$") {
|
||||
$key = $matches[1]
|
||||
$val = $matches[2]
|
||||
# Skip lines that are template/example values
|
||||
if ($val -notmatch "REPLACE_ME") {
|
||||
Write-Host "Setting $key in Vercel production..."
|
||||
$val | vercel env add $key production
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Verification:**
|
||||
```powershell
|
||||
vercel env ls production
|
||||
# Should list all 13 keys (no values displayed; just names).
|
||||
```
|
||||
|
||||
### Step 3 — First deploy (preview)
|
||||
|
||||
```powershell
|
||||
cd D:\Projects\waggle-os\apps\www
|
||||
vercel
|
||||
# Deploys to a preview URL like https://waggle-www-<hash>.vercel.app
|
||||
# Capture this URL — use for smoke test before production
|
||||
```
|
||||
|
||||
### Step 4 — Preview smoke test
|
||||
|
||||
```powershell
|
||||
# Open the preview URL in browser:
|
||||
# 1. Landing page renders (no Clerk crash, no 500)
|
||||
# 2. /sign-up loads the Clerk widget
|
||||
# 3. /pricing renders Pro + Teams cards
|
||||
# 4. /privacy + /terms + /cookies + /eu-ai-act render legal pages
|
||||
# 5. Hit /api/webhooks/stripe with a curl POST (should reject without signature):
|
||||
curl -X POST https://waggle-www-<hash>.vercel.app/api/webhooks/stripe -d '{}'
|
||||
# Expected: 400 "Missing stripe-signature header" or similar
|
||||
```
|
||||
|
||||
### Step 5 — Promote to production at waggle-os.ai
|
||||
|
||||
```powershell
|
||||
vercel --prod
|
||||
# Promotes the last preview to production at https://<project>.vercel.app
|
||||
```
|
||||
|
||||
Now point `waggle-os.ai` DNS:
|
||||
- Vercel dashboard → project → Domains → Add `waggle-os.ai`
|
||||
- Vercel shows the CNAME/A record values to set at your DNS registrar
|
||||
- At the registrar (whoever hosts waggle-os.ai DNS), add the records
|
||||
- Verify with `nslookup waggle-os.ai` — should resolve to Vercel's IP
|
||||
- SSL cert auto-provisions via Let's Encrypt within ~5 min of DNS pointing
|
||||
|
||||
### Step 6 — Production smoke test
|
||||
|
||||
```powershell
|
||||
# Once https://waggle-os.ai resolves to Vercel:
|
||||
# 1. Browser: load https://waggle-os.ai — landing renders
|
||||
# 2. curl Stripe webhook endpoint (should 400, not 404 or 5xx):
|
||||
curl -X POST https://waggle-os.ai/api/webhooks/stripe -d '{}'
|
||||
# Expected: 400 — endpoint reachable, just rejected for missing signature
|
||||
|
||||
# 3. Test Stripe webhook delivery FROM Stripe side:
|
||||
# Stripe Dashboard → Developers → Webhooks → endpoint we_1TVt5qCNCrMQy1f7Zl5ujKSC
|
||||
# → "Send test webhook" → checkout.session.completed event
|
||||
# Look for 200 response in Stripe's recent deliveries panel.
|
||||
```
|
||||
|
||||
### Step 7 — Update Day-0 ETA marker
|
||||
|
||||
After production smoke passes, Wave 3 / C2 (Stripe live smoke) can fire — that's the
|
||||
real Pro Checkout test with a card 4242, watching webhook arrive + Clerk publicMetadata
|
||||
update + tier flip in the UI.
|
||||
|
||||
---
|
||||
|
||||
## Env var checklist (the 13)
|
||||
|
||||
Order matches `apps/www/.env.local` line-by-line. Each must be in Vercel "Production"
|
||||
environment before deploy.
|
||||
|
||||
| Variable | Notes |
|
||||
|---|---|
|
||||
| `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` | Clerk dashboard, "live" mode key (`pk_live_*` or `pk_test_*`) |
|
||||
| `CLERK_SECRET_KEY` | Server-side Clerk auth. **Rotated 2026-05-12** ✓ |
|
||||
| `NEXT_PUBLIC_CLERK_SIGN_IN_URL` | Default `/sign-in` |
|
||||
| `NEXT_PUBLIC_CLERK_SIGN_UP_URL` | Default `/sign-up` |
|
||||
| `NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL` | Where to send post-signin (e.g. `/`) |
|
||||
| `NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL` | Where to send post-signup (e.g. `/`) |
|
||||
| `CLERK_WEBHOOK_SECRET` | For Clerk → tier publicMetadata sync; set if using Clerk webhooks (else can defer) |
|
||||
| `STRIPE_SECRET_KEY` | Live key, on Egzakta account (`CNCrMQy1f7`). **Marko declined rotation per session call** — left in chat log; consider rotating post-Day-0. |
|
||||
| `STRIPE_WEBHOOK_SECRET` | `whsec_smwv4fInMEzJ3NSj3AwcNY2pz21eVrBu` (live endpoint created Wave 2 PG3 prep) |
|
||||
| `STRIPE_PRICE_PRO_MONTHLY` | `price_1TVsaMCNCrMQy1f7KwImpxA4` (Pro $19/mo) |
|
||||
| `STRIPE_PRICE_PRO_ANNUAL` | `price_1TVsaLCNCrMQy1f7YhQGDH2o` (Pro $190/yr) |
|
||||
| `STRIPE_PRICE_TEAMS_MONTHLY` | `price_1TVsaLCNCrMQy1f7WUhtbZ88` (Teams $49/seat/mo) |
|
||||
| `STRIPE_PRICE_TEAMS_ANNUAL` | `price_1TVsaLCNCrMQy1f75lmMHMTj` (Teams $490/seat/yr) |
|
||||
|
||||
**Note:** `.env.example` is missing 10 of these 13. Update `.env.example` to include
|
||||
all key names (no values; just placeholders) so onboarding contributors know what's needed.
|
||||
|
||||
---
|
||||
|
||||
## Alternative paths (if Vercel doesn't fit)
|
||||
|
||||
### Alt-A: Self-host via Docker + Render/Fly/Railway
|
||||
|
||||
```dockerfile
|
||||
# apps/www/Dockerfile (would need creating)
|
||||
FROM node:20-alpine
|
||||
WORKDIR /app
|
||||
COPY apps/www/package*.json ./
|
||||
RUN npm install
|
||||
COPY apps/www/ ./
|
||||
RUN npm run build
|
||||
CMD ["npm", "start"]
|
||||
EXPOSE 3000
|
||||
```
|
||||
|
||||
Render/Fly: connect GitHub repo, point at `apps/www`, set 13 env vars, deploy.
|
||||
Cost: $0-7/mo for hobby, scales with traffic.
|
||||
|
||||
### Alt-B: Cloudflare Pages with Functions
|
||||
|
||||
CF Pages supports Next.js with Functions for API routes. Slightly more setup than
|
||||
Vercel, similar feature parity. Pro: cheaper at scale. Con: less mature Next.js
|
||||
integration vs Vercel.
|
||||
|
||||
### Alt-C: Existing GitHub Pages workflow + Next.js static export
|
||||
|
||||
Rewrite `apps/www/next.config.mjs` with `output: 'export'`, drop API routes, move
|
||||
the Stripe webhook handler elsewhere (Cloudflare Worker, AWS Lambda, your `cloud.waggle-os.ai`
|
||||
sidecar). **Significant rework. NOT recommended for Day-0.**
|
||||
|
||||
---
|
||||
|
||||
## Day-0 readiness gate
|
||||
|
||||
Wave 3 / C2 (Stripe live smoke) **cannot fire** until:
|
||||
|
||||
- [ ] apps/www deployed to https://waggle-os.ai (whichever path)
|
||||
- [ ] Production smoke confirms `/api/webhooks/stripe` responds (4xx for missing sig, not 5xx or 404)
|
||||
- [ ] Stripe dashboard "Send test webhook" delivers 200 from production endpoint
|
||||
- [ ] DNS propagation confirmed (`nslookup waggle-os.ai` resolves)
|
||||
- [ ] SSL cert active (no browser warning)
|
||||
|
||||
Once those 5 checks pass, the Wave 3 C2 task in `02-PLAN.md` (real Pro Checkout
|
||||
with test card 4242 → live webhook → Clerk publicMetadata.tier flip → tier
|
||||
unlock in product) can fire as designed.
|
||||
|
||||
**Wall-clock estimate** for Marko to drive this: 30-60 min if Vercel auth + DNS
|
||||
are already set up; +1-2h if DNS is at a registrar that takes hours to propagate.
|
||||
|
||||
---
|
||||
|
||||
## Disposition
|
||||
|
||||
Once you pick a deploy path:
|
||||
- **Vercel (recommended):** follow Steps 1-7 above. Tell CC "deployment live at https://waggle-os.ai" and I fire Wave 3 / C2 from there.
|
||||
- **Other:** confirm the path; CC adapts the smoke script accordingly.
|
||||
|
||||
---
|
||||
|
||||
*Drafted 2026-05-12 by CC. Wave 3 C2 task in `02-PLAN.md` resumes once deployment is live.*
|
||||
398
docs/launch/drafts/2026-05-12-egzakta-legal-text-drafts.md
Normal file
398
docs/launch/drafts/2026-05-12-egzakta-legal-text-drafts.md
Normal file
@@ -0,0 +1,398 @@
|
||||
# Egzakta Legal Text Drafts — Day-0 Placeholder
|
||||
|
||||
**Status:** DRAFT — for Marko review before swap into `apps/www/app/(legal)/*/page.tsx`
|
||||
**Disposition:** generic-but-plausible legal text; replaces lorem ipsum but keeps `noindex` on
|
||||
**Long-term:** to be replaced by Egzakta legal counsel-reviewed text within T+30d
|
||||
**Authoring stance:** pragmatic boilerplate covering actual data flows (Stripe + Clerk + PostHog + local-only memory). NOT a substitute for actual legal review.
|
||||
|
||||
---
|
||||
|
||||
## How to use these drafts
|
||||
|
||||
1. Read each block below.
|
||||
2. For each, copy the text between `BEGIN BODY` and `END BODY` markers.
|
||||
3. Replace the lorem-ipsum body in the corresponding `apps/www/app/(legal)/<route>/page.tsx`.
|
||||
4. Keep the existing `robots: { index: false, follow: false }` in metadata.
|
||||
5. Replace the `pendingNoteStyle` paragraph ("Content pending Egzakta Group legal review...") with the new opening paragraph from each draft below.
|
||||
6. **OR**: tell CC "swap drafts into legal route group" and CC handles the file edits in one commit.
|
||||
|
||||
---
|
||||
|
||||
## Block 1 — Privacy Policy
|
||||
|
||||
**Route:** `apps/www/app/(legal)/privacy/page.tsx`
|
||||
**Heading:** Privacy Policy
|
||||
|
||||
```
|
||||
BEGIN BODY
|
||||
|
||||
**Effective date:** [Day-0 launch date]
|
||||
**Last updated:** [Day-0 launch date]
|
||||
|
||||
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.
|
||||
|
||||
### 1. Data we collect
|
||||
|
||||
- **Account data**: 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
|
||||
(https://clerk.com/privacy).
|
||||
- **Subscription data**: when you upgrade to Pro or Teams, 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. Stripe's privacy
|
||||
practices: https://stripe.com/privacy.
|
||||
- **Product analytics**: 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. PostHog's privacy: https://posthog.com/privacy.
|
||||
- **Local memory**: Waggle OS stores your conversations, memories, and harvested
|
||||
content **locally on your device** in a SQLite database (`.waggle/` 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.
|
||||
|
||||
### 2. How we use your data
|
||||
|
||||
- Provide the Service (authentication, subscription management, support).
|
||||
- Improve the Service (analytics where you've opted in).
|
||||
- Comply with legal obligations (tax records, fraud prevention).
|
||||
- We do not sell your personal data and do not use it for advertising.
|
||||
|
||||
### 3. Where your data lives
|
||||
|
||||
- Account + subscription data: Clerk + Stripe (US- and EU-region processors).
|
||||
- Analytics (opt-in only): PostHog (US-region).
|
||||
- Memory + conversations: your device. Optionally your Teams workspace bundle.
|
||||
- Egzakta's own systems: minimal account + billing metadata in encrypted storage.
|
||||
|
||||
### 4. Your rights (GDPR + similar regimes)
|
||||
|
||||
You have the right to access, rectify, port, restrict, or delete your personal
|
||||
data, and to object to processing. To exercise these rights, email
|
||||
**privacy@egzakta.com**. We aim to respond within 30 days.
|
||||
|
||||
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.
|
||||
|
||||
### 5. Retention
|
||||
|
||||
- Account data: retained while your account is active + 90 days after deletion
|
||||
for billing reconciliation.
|
||||
- Subscription data: retained per Stripe's record-keeping requirements (typically
|
||||
7 years for accounting).
|
||||
- Analytics (opt-in only): retained 12 months.
|
||||
- Local memory: retained until you delete it. Egzakta has no access.
|
||||
|
||||
### 6. Cookies and tracking
|
||||
|
||||
We use strictly-necessary cookies for authentication (Clerk session) and, with
|
||||
your opt-in, analytics cookies (PostHog). See our [Cookie Policy](/cookies).
|
||||
|
||||
### 7. Changes to this policy
|
||||
|
||||
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.
|
||||
|
||||
### 8. Contact
|
||||
|
||||
Egzakta Group d.o.o.
|
||||
[Egzakta registered address — Marko to fill]
|
||||
Email: **privacy@egzakta.com**
|
||||
Data Protection Officer: **dpo@egzakta.com** (designated point of contact for
|
||||
EU residents)
|
||||
|
||||
END BODY
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Block 2 — Terms of Service
|
||||
|
||||
**Route:** `apps/www/app/(legal)/terms/page.tsx`
|
||||
**Heading:** Terms of Service
|
||||
|
||||
```
|
||||
BEGIN BODY
|
||||
|
||||
**Effective date:** [Day-0 launch date]
|
||||
**Last updated:** [Day-0 launch date]
|
||||
|
||||
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.
|
||||
|
||||
### 1. The Service
|
||||
|
||||
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.
|
||||
|
||||
### 2. Account
|
||||
|
||||
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.
|
||||
|
||||
### 3. Acceptable use
|
||||
|
||||
You agree not to:
|
||||
- Use the Service to violate any law or third-party rights.
|
||||
- Attempt to reverse-engineer, modify, or interfere with the Service's
|
||||
protections.
|
||||
- Use the Service to generate content that infringes intellectual property,
|
||||
defames individuals, or violates privacy.
|
||||
- Submit data you do not have the right to submit (including confidential or
|
||||
copyrighted third-party content).
|
||||
- Use the Service to develop or train competing AI products.
|
||||
|
||||
### 4. Subscription and billing
|
||||
|
||||
Free tier: available at no cost, subject to documented usage limits.
|
||||
Pro tier (USD 19/month): unlocks advanced features and unlimited memory.
|
||||
Teams tier (USD 49/seat/month): adds shared workspaces and team collaboration.
|
||||
|
||||
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.
|
||||
|
||||
### 5. Trial
|
||||
|
||||
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 Free tier and trial
|
||||
features become inaccessible. Trial data is retained per the Privacy Policy.
|
||||
|
||||
### 6. Intellectual property
|
||||
|
||||
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.
|
||||
|
||||
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).
|
||||
|
||||
### 7. Disclaimer of warranties
|
||||
|
||||
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.
|
||||
|
||||
### 8. Limitation of liability
|
||||
|
||||
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.
|
||||
|
||||
### 9. Termination
|
||||
|
||||
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.
|
||||
|
||||
### 10. Governing law
|
||||
|
||||
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.
|
||||
|
||||
### 11. Changes to the Terms
|
||||
|
||||
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.
|
||||
|
||||
### 12. Contact
|
||||
|
||||
Egzakta Group d.o.o.
|
||||
[Egzakta registered address — Marko to fill]
|
||||
Email: **legal@egzakta.com**
|
||||
|
||||
END BODY
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Block 3 — Cookie Policy
|
||||
|
||||
**Route:** `apps/www/app/(legal)/cookies/page.tsx`
|
||||
**Heading:** Cookie Policy
|
||||
|
||||
```
|
||||
BEGIN BODY
|
||||
|
||||
**Effective date:** [Day-0 launch date]
|
||||
**Last updated:** [Day-0 launch date]
|
||||
|
||||
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).
|
||||
|
||||
### 1. What cookies are
|
||||
|
||||
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.
|
||||
|
||||
### 2. Cookies we use
|
||||
|
||||
#### Strictly necessary
|
||||
|
||||
These cookies are required for the Service to function and cannot be disabled.
|
||||
|
||||
- **Clerk session cookies** — keep you logged in. Set by `clerk.waggle-os.ai`.
|
||||
Cleared on logout.
|
||||
- **CSRF protection** — prevents cross-site request forgery. Cleared on tab close.
|
||||
|
||||
#### Analytics (opt-in)
|
||||
|
||||
These cookies are loaded only if you opt in via Settings → Privacy → "Allow
|
||||
anonymous product analytics." Default is opt-out.
|
||||
|
||||
- **PostHog `ph_*` cookies** — 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.
|
||||
|
||||
### 3. No advertising or social-media tracking
|
||||
|
||||
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.
|
||||
|
||||
### 4. Managing cookies
|
||||
|
||||
You can clear cookies through your browser settings. For granular control of
|
||||
the analytics cookie, use Settings → Privacy in the Waggle product.
|
||||
|
||||
### 5. Changes to this policy
|
||||
|
||||
We may update this Cookie Policy. Material changes will be announced via
|
||||
the product and email.
|
||||
|
||||
### 6. Contact
|
||||
|
||||
Email: **privacy@egzakta.com**
|
||||
|
||||
END BODY
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Block 4 — EU AI Act Statement
|
||||
|
||||
**Route:** `apps/www/app/(legal)/eu-ai-act/page.tsx`
|
||||
**Heading:** EU AI Act Statement
|
||||
|
||||
```
|
||||
BEGIN BODY
|
||||
|
||||
**Effective date:** [Day-0 launch date]
|
||||
**Last updated:** [Day-0 launch date]
|
||||
|
||||
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.
|
||||
|
||||
### 1. Our role in the AI value chain
|
||||
|
||||
Waggle OS is a **deployer** (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 **not** 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.
|
||||
|
||||
### 2. Article 50 — transparency obligations
|
||||
|
||||
We comply with the transparency obligations of Article 50 by:
|
||||
- **Clearly labeling AI-generated output**: the Waggle UI marks AI-generated
|
||||
responses as such; the user always knows they are interacting with an AI
|
||||
system.
|
||||
- **Disclosing system prompts on request**: users can view the active persona's
|
||||
system prompt in Settings → Personas → [persona] → System Prompt.
|
||||
- **No deepfake generation**: Waggle OS does not generate synthetic images,
|
||||
audio, or video that could be confused with authentic media.
|
||||
|
||||
### 3. Article 5 — prohibited practices
|
||||
|
||||
Waggle OS does not implement, encourage, or facilitate any prohibited AI
|
||||
practice under Article 5, including:
|
||||
- Subliminal manipulation or exploitation of vulnerabilities.
|
||||
- Social scoring of natural persons.
|
||||
- Real-time remote biometric identification in publicly accessible spaces.
|
||||
- Emotion inference in workplace or education contexts.
|
||||
|
||||
### 4. High-risk AI systems
|
||||
|
||||
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.
|
||||
|
||||
### 5. General-purpose AI (GPAI) considerations
|
||||
|
||||
Waggle OS depends on GPAI models provided by third parties. Those providers
|
||||
publish their own EU AI Act compliance information:
|
||||
- Anthropic: https://www.anthropic.com/eu-ai-act
|
||||
- OpenAI: https://openai.com/eu-ai-act
|
||||
- Mistral: https://mistral.ai/eu-ai-act
|
||||
|
||||
### 6. Risk management and documentation
|
||||
|
||||
Egzakta maintains internal documentation of:
|
||||
- Models routed to and their provenance.
|
||||
- Safety testing for the persona system + behavioral spec.
|
||||
- The evolution subsystem (see arxiv paper, pending submission).
|
||||
- User-facing transparency mechanisms.
|
||||
|
||||
We will publish a public AI risk management summary by Article 50's effective
|
||||
date (2026-08-02 for Article 50 obligations).
|
||||
|
||||
### 7. Data protection alignment
|
||||
|
||||
Personal data handling is governed by our [Privacy Policy](/privacy) 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).
|
||||
|
||||
### 8. Contact for data subject and EU AI Act inquiries
|
||||
|
||||
Email: **ai-compliance@egzakta.com**
|
||||
Data Protection Officer: **dpo@egzakta.com**
|
||||
Registered representative for EU AI Act purposes: [to be designated if/when
|
||||
Egzakta has no Union establishment per Article 25].
|
||||
|
||||
END BODY
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Marko-side TODOs before swapping these in
|
||||
|
||||
1. **Confirm Egzakta registered address** for the Privacy + Terms contact blocks.
|
||||
2. **Designate** `privacy@egzakta.com` + `legal@egzakta.com` + `dpo@egzakta.com` + `ai-compliance@egzakta.com` mailboxes (or alias them to a single forwarder).
|
||||
3. **Set effective date** = your chosen Day-0 launch date (e.g., 2026-05-15).
|
||||
4. **Ratify** the EU AI Act framing — specifically the "deployer not GPAI provider" classification. This is the standard read for an aggregator like Waggle but Egzakta legal counsel should sign off in T+30d.
|
||||
5. **Decide** whether to keep `robots: noindex` on Day-0 (recommended for placeholder text) or remove once Egzakta legal review concludes.
|
||||
|
||||
---
|
||||
|
||||
## Disposition options
|
||||
|
||||
- **Option A (recommended for Day-0):** Tell CC "swap drafts into legal route group" and CC does the 4 file edits in one commit (`docs(legal): replace lorem ipsum with Day-0 placeholder text per egzakta-legal-text-drafts.md`). `noindex` stays on. Egzakta legal does proper review in T+30d.
|
||||
- **Option B:** You hand these drafts to Egzakta legal counsel for review, they redline, CC swaps the final versions. T+5-15d.
|
||||
- **Option C:** Ship as lorem ipsum + noindex placeholder for Day-0 launch. These drafts stay in `docs/launch/drafts/` for future swap. Cheapest path, weakest signal to any pilot user who clicks through.
|
||||
|
||||
---
|
||||
|
||||
*Drafted 2026-05-12 by CC for Marko ratification. Not a substitute for legal review.*
|
||||
Reference in New Issue
Block a user