@cachly-dev/mcp-server 0.10.65 → 0.10.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/handlers/brain.js +1 -1
- package/dist/src/index.js +1 -1
- package/package.json +7 -1
- package/server.json +2 -2
- package/.env.test.example +0 -23
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -50
- package/.github/ISSUE_TEMPLATE/config.yml +0 -8
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -25
- package/.github/workflows/eas-build-android.yml +0 -58
- package/.github/workflows/eas-update.yml +0 -55
- package/.github/workflows/publish.yml +0 -72
- package/BENCH.md +0 -113
- package/CHANGELOG.md +0 -653
- package/Dockerfile +0 -16
- package/LAUNCH_TEXTS.md +0 -182
- package/PROGRESS.md +0 -141
- package/STRATEGY.md +0 -228
- package/VISION_10X.md +0 -133
- package/apps/travel-chaos-organizer/.env.example +0 -49
- package/apps/travel-chaos-organizer/DEPLOY.md +0 -328
- package/apps/travel-chaos-organizer/Makefile +0 -57
- package/apps/travel-chaos-organizer/README.md +0 -159
- package/apps/travel-chaos-organizer/backend/.env.example +0 -10
- package/apps/travel-chaos-organizer/backend/Dockerfile +0 -25
- package/apps/travel-chaos-organizer/backend/alembic/env.py +0 -56
- package/apps/travel-chaos-organizer/backend/alembic/script.py.mako +0 -24
- package/apps/travel-chaos-organizer/backend/alembic/versions/.gitkeep +0 -0
- package/apps/travel-chaos-organizer/backend/alembic/versions/0001_stripe_customer_id.py +0 -24
- package/apps/travel-chaos-organizer/backend/alembic/versions/0002_telegram_chat_id.py +0 -24
- package/apps/travel-chaos-organizer/backend/alembic.ini +0 -39
- package/apps/travel-chaos-organizer/backend/app/__init__.py +0 -0
- package/apps/travel-chaos-organizer/backend/app/auth/__init__.py +0 -0
- package/apps/travel-chaos-organizer/backend/app/auth/keycloak.py +0 -81
- package/apps/travel-chaos-organizer/backend/app/config.py +0 -66
- package/apps/travel-chaos-organizer/backend/app/db/__init__.py +0 -0
- package/apps/travel-chaos-organizer/backend/app/db/database.py +0 -20
- package/apps/travel-chaos-organizer/backend/app/db/migrations/001_init.sql +0 -71
- package/apps/travel-chaos-organizer/backend/app/db/migrations/002_telemetry_freemium.sql +0 -31
- package/apps/travel-chaos-organizer/backend/app/db/migrations/003_telegram_chat_id.sql +0 -4
- package/apps/travel-chaos-organizer/backend/app/db/migrations/004_stripe_and_email.sql +0 -5
- package/apps/travel-chaos-organizer/backend/app/limiter.py +0 -4
- package/apps/travel-chaos-organizer/backend/app/logging_config.py +0 -25
- package/apps/travel-chaos-organizer/backend/app/main.py +0 -77
- package/apps/travel-chaos-organizer/backend/app/models/__init__.py +0 -0
- package/apps/travel-chaos-organizer/backend/app/models/schemas.py +0 -142
- package/apps/travel-chaos-organizer/backend/app/routers/__init__.py +0 -0
- package/apps/travel-chaos-organizer/backend/app/routers/admin.py +0 -237
- package/apps/travel-chaos-organizer/backend/app/routers/cache.py +0 -13
- package/apps/travel-chaos-organizer/backend/app/routers/events.py +0 -29
- package/apps/travel-chaos-organizer/backend/app/routers/export.py +0 -122
- package/apps/travel-chaos-organizer/backend/app/routers/inbox.py +0 -122
- package/apps/travel-chaos-organizer/backend/app/routers/items.py +0 -130
- package/apps/travel-chaos-organizer/backend/app/routers/mail.py +0 -108
- package/apps/travel-chaos-organizer/backend/app/routers/parse.py +0 -303
- package/apps/travel-chaos-organizer/backend/app/routers/payments.py +0 -179
- package/apps/travel-chaos-organizer/backend/app/routers/trips.py +0 -134
- package/apps/travel-chaos-organizer/backend/app/routers/users.py +0 -169
- package/apps/travel-chaos-organizer/backend/app/routers/waitlist.py +0 -37
- package/apps/travel-chaos-organizer/backend/app/services/__init__.py +0 -0
- package/apps/travel-chaos-organizer/backend/app/services/cache.py +0 -131
- package/apps/travel-chaos-organizer/backend/app/services/drip.py +0 -128
- package/apps/travel-chaos-organizer/backend/app/services/email.py +0 -61
- package/apps/travel-chaos-organizer/backend/app/services/errors.py +0 -44
- package/apps/travel-chaos-organizer/backend/app/services/notifier.py +0 -10
- package/apps/travel-chaos-organizer/backend/app/services/ollama.py +0 -101
- package/apps/travel-chaos-organizer/backend/app/services/parser.py +0 -22
- package/apps/travel-chaos-organizer/backend/app/services/quota.py +0 -85
- package/apps/travel-chaos-organizer/backend/app/services/sentry.py +0 -11
- package/apps/travel-chaos-organizer/backend/app/services/telemetry.py +0 -35
- package/apps/travel-chaos-organizer/backend/pytest.ini +0 -4
- package/apps/travel-chaos-organizer/backend/requirements-dev.txt +0 -6
- package/apps/travel-chaos-organizer/backend/requirements.txt +0 -25
- package/apps/travel-chaos-organizer/backend/tests/__init__.py +0 -0
- package/apps/travel-chaos-organizer/backend/tests/conftest.py +0 -223
- package/apps/travel-chaos-organizer/backend/tests/test_admin.py +0 -99
- package/apps/travel-chaos-organizer/backend/tests/test_cache.py +0 -142
- package/apps/travel-chaos-organizer/backend/tests/test_drip.py +0 -32
- package/apps/travel-chaos-organizer/backend/tests/test_e2e_chain.py +0 -121
- package/apps/travel-chaos-organizer/backend/tests/test_export.py +0 -48
- package/apps/travel-chaos-organizer/backend/tests/test_inbox.py +0 -107
- package/apps/travel-chaos-organizer/backend/tests/test_items.py +0 -138
- package/apps/travel-chaos-organizer/backend/tests/test_mail.py +0 -113
- package/apps/travel-chaos-organizer/backend/tests/test_ollama.py +0 -145
- package/apps/travel-chaos-organizer/backend/tests/test_parse_url.py +0 -98
- package/apps/travel-chaos-organizer/backend/tests/test_parser.py +0 -72
- package/apps/travel-chaos-organizer/backend/tests/test_payments.py +0 -163
- package/apps/travel-chaos-organizer/backend/tests/test_quota.py +0 -46
- package/apps/travel-chaos-organizer/backend/tests/test_search.py +0 -67
- package/apps/travel-chaos-organizer/backend/tests/test_trips.py +0 -123
- package/apps/travel-chaos-organizer/backend/tests/test_users.py +0 -52
- package/apps/travel-chaos-organizer/backups/.gitkeep +0 -0
- package/apps/travel-chaos-organizer/caddy/Caddyfile +0 -27
- package/apps/travel-chaos-organizer/docker-compose.node1.yml +0 -31
- package/apps/travel-chaos-organizer/docker-compose.override.yml +0 -14
- package/apps/travel-chaos-organizer/docker-compose.yml +0 -128
- package/apps/travel-chaos-organizer/frontend/.env.example +0 -13
- package/apps/travel-chaos-organizer/frontend/app/(app)/_layout.tsx +0 -80
- package/apps/travel-chaos-organizer/frontend/app/(app)/inbox.tsx +0 -166
- package/apps/travel-chaos-organizer/frontend/app/(app)/search.tsx +0 -130
- package/apps/travel-chaos-organizer/frontend/app/(app)/settings.tsx +0 -381
- package/apps/travel-chaos-organizer/frontend/app/(app)/trips/[id].tsx +0 -346
- package/apps/travel-chaos-organizer/frontend/app/(app)/trips.tsx +0 -363
- package/apps/travel-chaos-organizer/frontend/app/(app)/upgrade/cancel.tsx +0 -34
- package/apps/travel-chaos-organizer/frontend/app/(app)/upgrade/success.tsx +0 -35
- package/apps/travel-chaos-organizer/frontend/app/(auth)/login.tsx +0 -91
- package/apps/travel-chaos-organizer/frontend/app/_layout.tsx +0 -71
- package/apps/travel-chaos-organizer/frontend/app/auth.tsx +0 -29
- package/apps/travel-chaos-organizer/frontend/app/index.tsx +0 -16
- package/apps/travel-chaos-organizer/frontend/app/onboarding.tsx +0 -119
- package/apps/travel-chaos-organizer/frontend/app.config.ts +0 -54
- package/apps/travel-chaos-organizer/frontend/assets/adaptive-icon.svg +0 -66
- package/apps/travel-chaos-organizer/frontend/assets/icon.svg +0 -79
- package/apps/travel-chaos-organizer/frontend/assets/splash.svg +0 -15
- package/apps/travel-chaos-organizer/frontend/components/BottomSheet.tsx +0 -102
- package/apps/travel-chaos-organizer/frontend/components/ConfettiCannon.tsx +0 -107
- package/apps/travel-chaos-organizer/frontend/components/ConfirmDialog.tsx +0 -109
- package/apps/travel-chaos-organizer/frontend/components/ErrorBoundary.tsx +0 -45
- package/apps/travel-chaos-organizer/frontend/components/FileUploadButton.tsx +0 -19
- package/apps/travel-chaos-organizer/frontend/components/ImportSheet.tsx +0 -155
- package/apps/travel-chaos-organizer/frontend/components/OfflineBadge.tsx +0 -55
- package/apps/travel-chaos-organizer/frontend/components/QRCodeViewer.tsx +0 -80
- package/apps/travel-chaos-organizer/frontend/components/ScoreRing.tsx +0 -39
- package/apps/travel-chaos-organizer/frontend/components/Screen.tsx +0 -39
- package/apps/travel-chaos-organizer/frontend/components/Skeleton.tsx +0 -70
- package/apps/travel-chaos-organizer/frontend/components/SwipeableInboxItem.tsx +0 -121
- package/apps/travel-chaos-organizer/frontend/components/SwipeableTimelineItem.tsx +0 -70
- package/apps/travel-chaos-organizer/frontend/components/TimelineItem.tsx +0 -73
- package/apps/travel-chaos-organizer/frontend/components/TimelineItemDetail.tsx +0 -130
- package/apps/travel-chaos-organizer/frontend/components/Toast.tsx +0 -60
- package/apps/travel-chaos-organizer/frontend/components/ToastContext.tsx +0 -42
- package/apps/travel-chaos-organizer/frontend/components/TripCard.tsx +0 -146
- package/apps/travel-chaos-organizer/frontend/components/TripQRModal.tsx +0 -70
- package/apps/travel-chaos-organizer/frontend/components/UpgradeBanner.tsx +0 -44
- package/apps/travel-chaos-organizer/frontend/eas.json +0 -22
- package/apps/travel-chaos-organizer/frontend/hooks/useInbox.ts +0 -24
- package/apps/travel-chaos-organizer/frontend/hooks/useNetworkSync.ts +0 -60
- package/apps/travel-chaos-organizer/frontend/hooks/useTrips.ts +0 -112
- package/apps/travel-chaos-organizer/frontend/lib/api.ts +0 -223
- package/apps/travel-chaos-organizer/frontend/lib/auth.ts +0 -93
- package/apps/travel-chaos-organizer/frontend/lib/db.ts +0 -86
- package/apps/travel-chaos-organizer/frontend/lib/fileCache.ts +0 -54
- package/apps/travel-chaos-organizer/frontend/lib/haptics.ts +0 -13
- package/apps/travel-chaos-organizer/frontend/lib/notifications.ts +0 -112
- package/apps/travel-chaos-organizer/frontend/lib/offlineQueue.ts +0 -145
- package/apps/travel-chaos-organizer/frontend/lib/quota.tsx +0 -43
- package/apps/travel-chaos-organizer/frontend/lib/sentry.ts +0 -28
- package/apps/travel-chaos-organizer/frontend/lib/shareIntent.ts +0 -44
- package/apps/travel-chaos-organizer/frontend/package-lock.json +0 -13221
- package/apps/travel-chaos-organizer/frontend/package.json +0 -44
- package/apps/travel-chaos-organizer/frontend/tsconfig.json +0 -23
- package/apps/travel-chaos-organizer/keycloak/realm-export.json +0 -59
- package/apps/travel-chaos-organizer/landing/index.html +0 -773
- package/apps/travel-chaos-organizer/scripts/backup.sh +0 -14
- package/apps/travel-chaos-organizer/scripts/configure-env.sh +0 -82
- package/apps/travel-chaos-organizer/scripts/deploy.sh +0 -54
- package/apps/travel-chaos-organizer/scripts/health-check.sh +0 -36
- package/apps/travel-chaos-organizer/scripts/migrate.sh +0 -7
- package/apps/travel-chaos-organizer/scripts/server-setup.sh +0 -85
- package/apps/travel-chaos-organizer/scripts/smoke-test.sh +0 -29
- package/apps/travel-chaos-organizer/scripts/verify-tracking.sh +0 -71
- package/apps/travel-chaos-organizer/telegram-bot/.env.example +0 -3
- package/apps/travel-chaos-organizer/telegram-bot/Dockerfile +0 -6
- package/apps/travel-chaos-organizer/telegram-bot/bot.py +0 -504
- package/apps/travel-chaos-organizer/telegram-bot/requirements.txt +0 -3
- package/dist/src/__tests__/auth.test.d.ts +0 -1
- package/dist/src/__tests__/auth.test.js +0 -107
- package/dist/src/__tests__/auth.test.js.map +0 -1
- package/dist/src/__tests__/brain-flow.test.d.ts +0 -12
- package/dist/src/__tests__/brain-flow.test.js +0 -1241
- package/dist/src/__tests__/brain-flow.test.js.map +0 -1
- package/dist/src/__tests__/confidence.test.d.ts +0 -13
- package/dist/src/__tests__/confidence.test.js +0 -233
- package/dist/src/__tests__/confidence.test.js.map +0 -1
- package/dist/src/__tests__/e2e/api-auth.test.d.ts +0 -7
- package/dist/src/__tests__/e2e/api-auth.test.js +0 -162
- package/dist/src/__tests__/e2e/api-auth.test.js.map +0 -1
- package/dist/src/__tests__/e2e/api-health.test.d.ts +0 -7
- package/dist/src/__tests__/e2e/api-health.test.js +0 -95
- package/dist/src/__tests__/e2e/api-health.test.js.map +0 -1
- package/dist/src/__tests__/e2e/cli.test.d.ts +0 -10
- package/dist/src/__tests__/e2e/cli.test.js +0 -204
- package/dist/src/__tests__/e2e/cli.test.js.map +0 -1
- package/dist/src/__tests__/e2e/config.d.ts +0 -35
- package/dist/src/__tests__/e2e/config.js +0 -53
- package/dist/src/__tests__/e2e/config.js.map +0 -1
- package/dist/src/__tests__/e2e/funnel.test.d.ts +0 -13
- package/dist/src/__tests__/e2e/funnel.test.js +0 -90
- package/dist/src/__tests__/e2e/funnel.test.js.map +0 -1
- package/dist/src/__tests__/e2e/mcp-tools.test.d.ts +0 -7
- package/dist/src/__tests__/e2e/mcp-tools.test.js +0 -129
- package/dist/src/__tests__/e2e/mcp-tools.test.js.map +0 -1
- package/dist/src/__tests__/e2e/provisioning.test.d.ts +0 -15
- package/dist/src/__tests__/e2e/provisioning.test.js +0 -123
- package/dist/src/__tests__/e2e/provisioning.test.js.map +0 -1
- package/dist/src/__tests__/handlers-unit.test.d.ts +0 -12
- package/dist/src/__tests__/handlers-unit.test.js +0 -505
- package/dist/src/__tests__/handlers-unit.test.js.map +0 -1
- package/dist/src/__tests__/namespace.test.d.ts +0 -1
- package/dist/src/__tests__/namespace.test.js +0 -114
- package/dist/src/__tests__/namespace.test.js.map +0 -1
- package/dist/src/__tests__/rerank.test.d.ts +0 -1
- package/dist/src/__tests__/rerank.test.js +0 -125
- package/dist/src/__tests__/rerank.test.js.map +0 -1
- package/dist/src/__tests__/utils.test.d.ts +0 -1
- package/dist/src/__tests__/utils.test.js +0 -83
- package/dist/src/__tests__/utils.test.js.map +0 -1
- package/dist/src/bench/cachly-bench.d.ts +0 -39
- package/dist/src/bench/cachly-bench.js +0 -223
- package/dist/src/bench/cachly-bench.js.map +0 -1
- package/dist/src/bench/fixtures.d.ts +0 -37
- package/dist/src/bench/fixtures.js +0 -225
- package/dist/src/bench/fixtures.js.map +0 -1
- package/dist/src/search.test.d.ts +0 -1
- package/dist/src/search.test.js +0 -713
- package/dist/src/search.test.js.map +0 -1
- package/eslint.config.js +0 -16
- package/glama.json +0 -36
- package/llms.txt +0 -155
- package/packages/telegram-notify/SPLIT_PLAN.md +0 -106
- package/packages/telegram-notify/client.ts +0 -88
- package/packages/telegram-notify/emojis.json +0 -22
- package/packages/telegram-notify/pyproject.toml +0 -17
- package/packages/telegram-notify/telegram_notify/__init__.py +0 -3
- package/packages/telegram-notify/telegram_notify/client.py +0 -87
- package/packages/telegram-notify/telegram_notify/emojis.json +0 -22
- package/scripts/e2e-run.sh +0 -160
- package/scripts/generate-icons.js +0 -28
- package/smithery.yaml +0 -45
- package/src/__tests__/auth.test.ts +0 -147
- package/src/__tests__/brain-flow.test.ts +0 -1472
- package/src/__tests__/confidence.test.ts +0 -285
- package/src/__tests__/e2e/api-auth.test.ts +0 -182
- package/src/__tests__/e2e/api-health.test.ts +0 -103
- package/src/__tests__/e2e/cli.test.ts +0 -228
- package/src/__tests__/e2e/config.ts +0 -53
- package/src/__tests__/e2e/funnel.test.ts +0 -99
- package/src/__tests__/e2e/mcp-tools.test.ts +0 -191
- package/src/__tests__/e2e/provisioning.test.ts +0 -128
- package/src/__tests__/handlers-unit.test.ts +0 -677
- package/src/__tests__/namespace.test.ts +0 -126
- package/src/__tests__/rerank.test.ts +0 -141
- package/src/__tests__/utils.test.ts +0 -81
- package/src/auth.ts +0 -46
- package/src/bench/cachly-bench.ts +0 -263
- package/src/bench/fixtures.ts +0 -256
- package/src/ckg.ts +0 -103
- package/src/confidence.ts +0 -38
- package/src/embeddings.ts +0 -217
- package/src/handlers/advanced.ts +0 -647
- package/src/handlers/brain.ts +0 -2622
- package/src/handlers/cache.ts +0 -633
- package/src/handlers/context.ts +0 -222
- package/src/handlers/fedbrain.ts +0 -1232
- package/src/handlers/instances.ts +0 -180
- package/src/handlers/roadmap.ts +0 -201
- package/src/handlers/syndicate.ts +0 -460
- package/src/handlers/tco.ts +0 -345
- package/src/handlers/team.ts +0 -1249
- package/src/index.ts +0 -2815
- package/src/namespace.ts +0 -128
- package/src/notifier.ts +0 -5
- package/src/rerank.ts +0 -148
- package/src/search.test.ts +0 -848
- package/src/search.ts +0 -1781
- package/src/tools.ts +0 -2056
- package/src/utils.ts +0 -90
- package/test-features.cjs +0 -23
- package/tsconfig.json +0 -16
- package/vitest.config.ts +0 -14
package/VISION_10X.md
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
# cachly-mcp — Wie wir 10x schärfer werden
|
|
2
|
-
|
|
3
|
-
> Dieses Dokument baut auf [STRATEGY.md](./STRATEGY.md) (der ehrlichen
|
|
4
|
-
> Standortbestimmung) auf und übersetzt sie in **konkrete, schärfende Hebel**.
|
|
5
|
-
> STRATEGY.md sagt *warum* und *in welcher Reihenfolge*. Hier steht *wie genau* —
|
|
6
|
-
> und welche zehn Wetten den größten Unterschied machen.
|
|
7
|
-
>
|
|
8
|
-
> **Leitsatz (unverändert):** Erst stabil & reibungslos → dann beweisbar schlauer
|
|
9
|
-
> → dann team-weit uneinholbar → immer modell-neutral.
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
## 0. Der eine Satz
|
|
14
|
-
|
|
15
|
-
> **Anthropic gibt jedem Claude ein Gedächtnis. Wir geben jedem _Team_ ein
|
|
16
|
-
> gemeinsames, geprüftes, modell-neutrales Gehirn — und beweisen mit einer Zahl,
|
|
17
|
-
> dass es den richtigen Rat schneller findet.**
|
|
18
|
-
|
|
19
|
-
Alles unten dient diesem einen Satz. Was ihn nicht schärft, ist Ablenkung.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## 1. Die Asymmetrie, die wir ausnutzen
|
|
24
|
-
|
|
25
|
-
Anthropic kann strukturell **nicht**:
|
|
26
|
-
1. **Team-weit teilen** ohne das Per-User-Lock-in zu untergraben.
|
|
27
|
-
2. **Modell-neutral** sein — Memory in Anthropics Filesystem ist an Claude gebunden.
|
|
28
|
-
3. **Governance** liefern (Reviews, Rollen, Audit, DSGVO-Löschung im Kunden-VPC).
|
|
29
|
-
4. **Strukturiert kausal** denken statt flache Files linear zu lesen.
|
|
30
|
-
|
|
31
|
-
Jeder dieser vier Punkte ist bereits in cachly angelegt (CKG, `team_confirm`,
|
|
32
|
-
Visibility, Self-Hosting-Pfad). Die 10x-Arbeit ist **Tiefe, nicht Breite**.
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
## 2. Die zehn schärfenden Wetten (priorisiert)
|
|
37
|
-
|
|
38
|
-
### Wette 1 — Der unabhängige Beweis (höchste Priorität)
|
|
39
|
-
**Problem:** Unser Hauptargument ("strukturiert > flat files") ist intern bewiesen
|
|
40
|
-
(+22.2 % P@1), aber auf eigenem Korpus. Skeptiker glauben das nicht.
|
|
41
|
-
**10x-Hebel:**
|
|
42
|
-
- Externen, von Dritten gelabelten Korpus aus realen Agent-Traces bauen.
|
|
43
|
-
- **Head-to-head** gegen Anthropics Memory-Tool (flat files) auf *denselben* Tasks.
|
|
44
|
-
- Eine reproduzierbare Zahl, die jeder selbst nachfahren kann: `npx cachly bench --vs-flatfile`.
|
|
45
|
-
**Erfolg sieht so aus:** "In 100 echten Debugging-Sessions fand cachly die hilfreiche
|
|
46
|
-
Lesson 2.3x öfter im Top-1 als ein flat-file-Memory." — zitierbar, verteidigbar.
|
|
47
|
-
|
|
48
|
-
### Wette 2 — Time-to-first-recall < 60 s
|
|
49
|
-
**Problem:** Jede Onboarding-Stufe ist ein Drop-off. First-party hat 0 Setup.
|
|
50
|
-
**10x-Hebel:** `npx @cachly-dev/init` — auto-provision + device-flow + MCP-config-write
|
|
51
|
-
+ erster `brain_from_git`-Seed, idempotent, mit sichtbarem Fortschritt, <60 s.
|
|
52
|
-
**Metrik:** vom `npx`-Befehl bis zum ersten wertvollen Recall. Ziel: <2 min, dann <60 s.
|
|
53
|
-
|
|
54
|
-
### Wette 3 — Wert sichtbar machen (jede Session)
|
|
55
|
-
**Problem:** Anthropic-Memory ist unsichtbar-bequem; unseres war sichtbar-umständlich.
|
|
56
|
-
**10x-Hebel:** Das "Brain saved you ~Xm here"-Banner (bereits live) wird zur
|
|
57
|
-
**laufenden Bilanz**: pro Woche/Monat aggregierte Zeitersparnis, geteilte
|
|
58
|
-
Team-Reuse-Momente ("Bob's Lesson hat dir gerade 40 min erspart").
|
|
59
|
-
**Erfolg:** Der User *fühlt* den Wert, bevor er über Kündigung nachdenkt.
|
|
60
|
-
|
|
61
|
-
### Wette 4 — Personalisiertes, wer-was-wo-gewichtetes Recall
|
|
62
|
-
**Problem:** Recall ignoriert heute, *wer* fragt und *woran* gerade gearbeitet wird.
|
|
63
|
-
**10x-Hebel:** Die Phase-3-Graphen (Person/File/Konzept) ins Ranking ziehen:
|
|
64
|
-
- Lessons aus dem aktuellen File-Kontext höher.
|
|
65
|
-
- Lessons von Personen mit hoher Domain-Confidence höher.
|
|
66
|
-
- "Du arbeitest an `payments/`, Carol hat hier 3x erfolgreich gefixt" — proaktiv.
|
|
67
|
-
|
|
68
|
-
### Wette 5 — Kollaborations-Graph (Personen ↔ Personen)
|
|
69
|
-
**Problem:** Wir kennen Person→Konzept und Person→File, aber nicht Person↔Person.
|
|
70
|
-
**10x-Hebel:** Kanten zwischen Menschen, die an denselben Dateien/Konzepten arbeiten
|
|
71
|
-
→ "Frag X *und* Y, die haben das zusammen gelöst." Onboarding-Gold, Bus-Faktor-Schutz.
|
|
72
|
-
|
|
73
|
-
### Wette 6 — Rollen & Team-Scopes (Enterprise-Eintrittskarte)
|
|
74
|
-
**Problem:** Heute nur lesson-level `private`. Enterprises brauchen Rollen.
|
|
75
|
-
**10x-Hebel:** admin / reviewer / contributor / viewer; Scopes auf Team-Ebene;
|
|
76
|
-
nur reviewer dürfen `team_confirm`. Macht den Self-Hosted-Tier verkaufbar.
|
|
77
|
-
|
|
78
|
-
### Wette 7 — Stabilität auf First-Party-Niveau
|
|
79
|
-
**Problem:** Gegen ein eingebautes Feature ist Vertrauen asymmetrisch — ein Crash kostet mehr.
|
|
80
|
-
**10x-Hebel:** Circuit-Breaker + Timeouts überall (✅ erste Guards in 0.10.62);
|
|
81
|
-
jede Tool-Antwort hat einen Vertragstest (405 Tests, weiter ausbauen);
|
|
82
|
-
Graceful Degradation: Tool blockiert **nie** den Agent-Call.
|
|
83
|
-
|
|
84
|
-
### Wette 8 — "Dreaming"-Konter: Team-Crystallize
|
|
85
|
-
**Problem:** Anthropics "Dreaming" extrahiert Muster pro User — bedroht unser Crystallize.
|
|
86
|
-
**10x-Hebel:** Wir crystallizen **team-weit** und **kausal**: nicht nur "was passierte",
|
|
87
|
-
sondern "welche Fixes haben strukturell ähnliche Probleme über *mehrere Personen* gelöst".
|
|
88
|
-
Das kann ein per-User-Background-Prozess nicht.
|
|
89
|
-
|
|
90
|
-
### Wette 9 — Modell-Neutralität als Feature, nicht Fußnote
|
|
91
|
-
**Hebel:** "Bring your own model, keep your brain." First-class über jeden MCP-Client.
|
|
92
|
-
Ein sichtbarer Beweis: dasselbe Brain in Claude *und* einem anderen MCP-Client live zeigen.
|
|
93
|
-
|
|
94
|
-
### Wette 10 — Teilbare Domänen-Brains (Ökosystem/Virality)
|
|
95
|
-
**Hebel:** Kuratierte öffentliche Brains ("Kubernetes-Incident-Brain",
|
|
96
|
-
"React-Best-Practices-Brain") als Marktplatz. Je mehr Org-Wissen, desto höher die
|
|
97
|
-
Wechselkosten *weg* von cachly — aber **null** Lock-in beim Modell.
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## 3. Was 10x **nicht** ist (Anti-Roadmap)
|
|
102
|
-
|
|
103
|
-
- ❌ Mehr Tools stapeln. Wir sind bei 100 — **Tiefe vor Breite**.
|
|
104
|
-
- ❌ Anthropics Single-User-Memory feature-für-feature schlagen. Das verlieren wir.
|
|
105
|
-
- ❌ Modell-Lock-in aufbauen. Das ist unser einziger glaubwürdiger Vorteil.
|
|
106
|
-
- ❌ Beweis durch Marketing ersetzen. Ohne Zahl keine Story.
|
|
107
|
-
|
|
108
|
-
---
|
|
109
|
-
|
|
110
|
-
## 4. Wie wir Fortschritt messen
|
|
111
|
-
|
|
112
|
-
| Hebel | Leitmetrik | Schwelle für "10x erreicht" |
|
|
113
|
-
|---|---|---|
|
|
114
|
-
| Beweis (W1) | Recall-Lift vs. flat-file auf externem Korpus | reproduzierbar, Dritte bestätigen |
|
|
115
|
-
| Onboarding (W2) | Time-to-first-recall | <60 s im Median |
|
|
116
|
-
| Wertsichtbarkeit (W3) | Wöchentlich angezeigte Zeitersparnis | User nennt sie unaufgefordert |
|
|
117
|
-
| Team-Reuse (W4/W5) | Recalls einer Lesson durch *andere* Person | >30 % der wertvollen Recalls |
|
|
118
|
-
| Stabilität (W7) | Tool-Fehlerquote, die den Agent-Call bricht | ~0 |
|
|
119
|
-
|
|
120
|
-
---
|
|
121
|
-
|
|
122
|
-
## 5. Die Reihenfolge (nicht verhandelbar)
|
|
123
|
-
|
|
124
|
-
```
|
|
125
|
-
1. STABIL & REIBUNGSLOS → W2, W7 (sonst ist alles wertlos)
|
|
126
|
-
2. BEWEISBAR SCHLAUER → W1, W3, W4 (jetzt verdienen wir den Wettbewerb)
|
|
127
|
-
3. TEAM-WEIT UNEINHOLBAR → W5, W6, W8, W10 (hier ist Anthropic strukturell raus)
|
|
128
|
-
4. NEUTRALER LAYER → W9 (die Positionierung, die nie veraltet)
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
> Wir gewinnen nicht, indem wir Anthropic kopieren. Wir gewinnen, indem wir das
|
|
132
|
-
> werden, was Anthropic strukturell **nicht sein darf**: der neutrale, team-weite,
|
|
133
|
-
> beweisbar-bessere Wissens-Layer über allen Modellen.
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
# Travel Chaos Organizer — Environment Variables
|
|
2
|
-
# Copy to .env and fill in your values
|
|
3
|
-
|
|
4
|
-
# App
|
|
5
|
-
DEBUG=false
|
|
6
|
-
UPLOAD_DIR=/data/uploads
|
|
7
|
-
|
|
8
|
-
# Database (overridden by docker-compose for containerized runs)
|
|
9
|
-
DATABASE_URL=postgresql+asyncpg://tco:tco@localhost:5432/tco
|
|
10
|
-
|
|
11
|
-
# Keycloak
|
|
12
|
-
KEYCLOAK_URL=http://localhost:8080
|
|
13
|
-
KEYCLOAK_REALM=travel-chaos
|
|
14
|
-
KEYCLOAK_CLIENT_ID=tco-backend
|
|
15
|
-
|
|
16
|
-
# Ollama — point to your self-hosted instance
|
|
17
|
-
OLLAMA_URL=http://your-server:11434
|
|
18
|
-
OLLAMA_MODEL=llama3.2-vision
|
|
19
|
-
OLLAMA_TIMEOUT=120
|
|
20
|
-
|
|
21
|
-
# Cachly Redis — caches Ollama parse results to avoid duplicate AI calls.
|
|
22
|
-
# docker-compose sets this automatically (local Redis).
|
|
23
|
-
# In production, replace with your Cachly instance URL:
|
|
24
|
-
# cachly.dev → Instances → Connection String
|
|
25
|
-
# Same document uploaded twice? Instant response from cache, no second AI call.
|
|
26
|
-
CACHLY_REDIS_URL=redis://localhost:6379/0
|
|
27
|
-
# CACHLY_REDIS_URL=redis://:<password>@<host>.cachly.dev:6380/0
|
|
28
|
-
|
|
29
|
-
# Telegram Notifier (optional) — get token from @BotFather
|
|
30
|
-
# TELEGRAM_BOT_TOKEN=...
|
|
31
|
-
# TCO_TELEGRAM_CHAT_ID=... # chat or channel ID for TCO events
|
|
32
|
-
|
|
33
|
-
# Email — Resend (optional, https://resend.com)
|
|
34
|
-
# RESEND_API_KEY=re_...
|
|
35
|
-
# RESEND_FROM=noreply@yourdomain.com
|
|
36
|
-
|
|
37
|
-
# Admin dashboard (change before going live!)
|
|
38
|
-
ADMIN_USER=admin
|
|
39
|
-
ADMIN_PASSWORD=changeme
|
|
40
|
-
|
|
41
|
-
# CORS — comma-separated origins, or * for all
|
|
42
|
-
CORS_ORIGINS=*
|
|
43
|
-
|
|
44
|
-
# Stripe
|
|
45
|
-
# STRIPE_SECRET_KEY=sk_live_...
|
|
46
|
-
# STRIPE_WEBHOOK_SECRET=whsec_...
|
|
47
|
-
# STRIPE_PRO_PRICE_ID=price_...
|
|
48
|
-
STRIPE_SUCCESS_URL=https://YOUR_DOMAIN/upgrade/success
|
|
49
|
-
STRIPE_CANCEL_URL=https://YOUR_DOMAIN/upgrade/cancel
|
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
# Travel Chaos Organizer — Deployment & Test Checklist
|
|
2
|
-
|
|
3
|
-
> Hand this file to any agent or developer to get the app running end-to-end.
|
|
4
|
-
> Everything below assumes a fresh Ubuntu 22.04 VPS and an Android phone for testing.
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Prerequisites
|
|
9
|
-
|
|
10
|
-
| What | Where to get |
|
|
11
|
-
|------|-------------|
|
|
12
|
-
| VPS (min. 2 GB RAM) | Hetzner / DigitalOcean / any Ubuntu 22.04 |
|
|
13
|
-
| Domain pointing to VPS | Your DNS provider → A record → VPS IP |
|
|
14
|
-
| Stripe account | stripe.com — get secret key + webhook secret + price ID |
|
|
15
|
-
| Resend account | resend.com — get API key, verify sender domain |
|
|
16
|
-
| Telegram bot (optional) | @BotFather → create bot → get token + chat ID |
|
|
17
|
-
| Expo account | expo.dev — needed for EAS builds |
|
|
18
|
-
| Android phone | Expo Go from Play Store for quick testing |
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## Step 1 — Server Setup (run once)
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
# On the VPS as root:
|
|
26
|
-
curl -o server-setup.sh https://raw.githubusercontent.com/cachly-dev/cachly-mcp/claude/plan-mvp-project-1ORlN/apps/travel-chaos-organizer/scripts/server-setup.sh
|
|
27
|
-
chmod +x server-setup.sh
|
|
28
|
-
bash server-setup.sh
|
|
29
|
-
# → installs Docker, UFW, creates tco user, sets up backup cron
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## Step 2 — Configure Environment
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
# As the tco user on the VPS:
|
|
38
|
-
git clone https://github.com/cachly-dev/cachly-mcp.git /home/tco/app
|
|
39
|
-
cd /home/tco/app/apps/travel-chaos-organizer
|
|
40
|
-
bash scripts/configure-env.sh
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
**The script asks for these values — have them ready:**
|
|
44
|
-
|
|
45
|
-
### Backend `.env` (created at `apps/travel-chaos-organizer/.env`)
|
|
46
|
-
|
|
47
|
-
| Variable | Value / Where to find |
|
|
48
|
-
|----------|-----------------------|
|
|
49
|
-
| `DATABASE_URL` | `postgresql+asyncpg://tco:YOURPASSWORD@postgres:5432/tco` |
|
|
50
|
-
| `KEYCLOAK_URL` | `https://auth.YOURDOMAIN.com` |
|
|
51
|
-
| `KEYCLOAK_REALM` | `tco` |
|
|
52
|
-
| `KEYCLOAK_CLIENT_ID` | `tco-app` |
|
|
53
|
-
| `OLLAMA_URL` | `http://ollama:11434` |
|
|
54
|
-
| `OLLAMA_MODEL` | `llama3.2-vision` |
|
|
55
|
-
| `STRIPE_SECRET_KEY` | Stripe Dashboard → Developers → API keys |
|
|
56
|
-
| `STRIPE_WEBHOOK_SECRET` | Stripe Dashboard → Webhooks → signing secret |
|
|
57
|
-
| `STRIPE_PRO_PRICE_ID` | Stripe Dashboard → Products → your Pro price ID |
|
|
58
|
-
| `RESEND_API_KEY` | Resend Dashboard → API Keys |
|
|
59
|
-
| `RESEND_FROM` | `TCO <noreply@YOURDOMAIN.com>` |
|
|
60
|
-
| `ADMIN_USER` | choose a username (not "admin") |
|
|
61
|
-
| `ADMIN_PASSWORD` | strong password (min 20 chars) |
|
|
62
|
-
| `TELEGRAM_BOT_TOKEN` | @BotFather → your bot token (optional) |
|
|
63
|
-
| `TCO_TELEGRAM_CHAT_ID` | your personal/group chat ID (optional) |
|
|
64
|
-
| `SENTRY_DSN` | sentry.io → project → DSN (optional) |
|
|
65
|
-
| `CORS_ORIGINS` | `https://YOURDOMAIN.com` (lock down in production) |
|
|
66
|
-
| `SECRET_KEY` | run: `openssl rand -hex 32` |
|
|
67
|
-
| `APP_URL` | `https://YOURDOMAIN.com` |
|
|
68
|
-
|
|
69
|
-
### Frontend `.env.production` (created at `apps/travel-chaos-organizer/frontend/.env.production`)
|
|
70
|
-
|
|
71
|
-
| Variable | Value |
|
|
72
|
-
|----------|-------|
|
|
73
|
-
| `EXPO_PUBLIC_API_URL` | `https://YOURDOMAIN.com` |
|
|
74
|
-
| `EXPO_PUBLIC_KEYCLOAK_URL` | `https://auth.YOURDOMAIN.com` |
|
|
75
|
-
| `EXPO_PUBLIC_KEYCLOAK_REALM` | `tco` |
|
|
76
|
-
| `EXPO_PUBLIC_KEYCLOAK_CLIENT_ID` | `tco-app` |
|
|
77
|
-
| `EXPO_PUBLIC_UPGRADE_URL` | `https://YOURDOMAIN.com/upgrade` (or Stripe payment link) |
|
|
78
|
-
| `EXPO_PUBLIC_PRIVACY_URL` | `https://YOURDOMAIN.com/privacy` |
|
|
79
|
-
| `EXPO_PUBLIC_TERMS_URL` | `https://YOURDOMAIN.com/terms` |
|
|
80
|
-
| `EXPO_PUBLIC_SUPPORT_EMAIL` | `support@YOURDOMAIN.com` |
|
|
81
|
-
| `EXPO_PUBLIC_SENTRY_DSN` | same Sentry DSN as backend (optional) |
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## Step 3 — Deploy Backend
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
cd /home/tco/app/apps/travel-chaos-organizer
|
|
89
|
-
bash scripts/deploy.sh
|
|
90
|
-
# → pulls images, builds, starts containers, runs Alembic migrations
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
**Verify it's running:**
|
|
94
|
-
```bash
|
|
95
|
-
bash scripts/health-check.sh
|
|
96
|
-
# Should print: ✓ API healthy, ✓ Keycloak reachable
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
---
|
|
100
|
-
|
|
101
|
-
## Step 4 — Pull Ollama Model
|
|
102
|
-
|
|
103
|
-
```bash
|
|
104
|
-
# On the VPS (this downloads ~2GB, takes a few minutes):
|
|
105
|
-
docker exec tco-ollama ollama pull llama3.2-vision
|
|
106
|
-
|
|
107
|
-
# Verify:
|
|
108
|
-
docker exec tco-ollama ollama list
|
|
109
|
-
# Should show: llama3.2-vision
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## Step 5 — Configure Keycloak
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
# Open in browser:
|
|
118
|
-
https://auth.YOURDOMAIN.com/admin
|
|
119
|
-
|
|
120
|
-
# Login with: admin / (password set during server-setup.sh)
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
1. **Import realm**: Realm Settings → Import → upload `keycloak/realm-export.json`
|
|
124
|
-
2. **Set SMTP** (for password reset emails):
|
|
125
|
-
- Realm Settings → Email → configure with your SMTP provider
|
|
126
|
-
3. **Create first user** (optional — users can self-register):
|
|
127
|
-
- Users → Add user → set email + temp password
|
|
128
|
-
4. **Verify redirect URIs**: Clients → tco-app → Settings → Valid redirect URIs should include:
|
|
129
|
-
- `tco://*`
|
|
130
|
-
- `exp://*`
|
|
131
|
-
- `https://auth.expo.io/@YOUR_EXPO_USERNAME/tco`
|
|
132
|
-
|
|
133
|
-
---
|
|
134
|
-
|
|
135
|
-
## Step 6 — Configure Stripe Webhook
|
|
136
|
-
|
|
137
|
-
1. Go to Stripe Dashboard → Developers → Webhooks
|
|
138
|
-
2. Click "Add endpoint"
|
|
139
|
-
3. Endpoint URL: `https://YOURDOMAIN.com/api/v1/payments/webhook`
|
|
140
|
-
4. Events to listen for:
|
|
141
|
-
- `checkout.session.completed`
|
|
142
|
-
- `customer.subscription.deleted`
|
|
143
|
-
- `customer.subscription.paused`
|
|
144
|
-
- `invoice.payment_succeeded`
|
|
145
|
-
- `invoice.payment_failed`
|
|
146
|
-
5. Copy the signing secret → put in `STRIPE_WEBHOOK_SECRET` env var
|
|
147
|
-
6. Re-run `bash scripts/deploy.sh` to apply the new env var
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## Step 7 — Generate App Icons (local, on your machine)
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
# On your local machine in the repo:
|
|
155
|
-
cd apps/travel-chaos-organizer/frontend
|
|
156
|
-
npm install -g sharp-cli
|
|
157
|
-
node ../../scripts/generate-icons.js
|
|
158
|
-
# → creates icon.png, adaptive-icon.png, splash.png, favicon.png in assets/
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
> If sharp-cli fails: open `assets/icon.svg` in a browser, screenshot at 1024×1024, save as `assets/icon.png`. Repeat for splash at 1284×2778.
|
|
162
|
-
|
|
163
|
-
---
|
|
164
|
-
|
|
165
|
-
## Step 8 — Test on Android with Expo Go (quickest)
|
|
166
|
-
|
|
167
|
-
```bash
|
|
168
|
-
# On your local machine:
|
|
169
|
-
cd apps/travel-chaos-organizer/frontend
|
|
170
|
-
cp .env.production .env.local # use production config
|
|
171
|
-
npx expo start --tunnel # --tunnel makes it reachable over internet
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
1. Install **Expo Go** from Play Store on your Android phone
|
|
175
|
-
2. Scan the QR code shown in the terminal
|
|
176
|
-
3. App opens on your phone with live reload
|
|
177
|
-
|
|
178
|
-
**Test these flows in order:**
|
|
179
|
-
- [ ] Onboarding slides swipe correctly, "Start" navigates to login
|
|
180
|
-
- [ ] Login via Keycloak opens browser, redirects back to app
|
|
181
|
-
- [ ] `/api/v1/users/me` returns plan (check Network tab or backend logs)
|
|
182
|
-
- [ ] Create a trip → check it appears in list
|
|
183
|
-
- [ ] Upload a PDF/screenshot → Ollama parses it → item appears in timeline
|
|
184
|
-
- [ ] Parse success triggers confetti ✨
|
|
185
|
-
- [ ] Trip countdown shows correct days
|
|
186
|
-
- [ ] Score ring updates after adding flight/hotel items
|
|
187
|
-
- [ ] Tap "↗" share button → share sheet opens with formatted text
|
|
188
|
-
- [ ] Inbox shows parsed items without trip_id
|
|
189
|
-
- [ ] Assign inbox item to trip
|
|
190
|
-
- [ ] Go offline (airplane mode) → create trip → back online → syncs
|
|
191
|
-
- [ ] Settings → Plan shows Free/Pro correctly
|
|
192
|
-
|
|
193
|
-
---
|
|
194
|
-
|
|
195
|
-
## Step 9 — Build Production APK with EAS
|
|
196
|
-
|
|
197
|
-
```bash
|
|
198
|
-
# On your local machine (one-time setup):
|
|
199
|
-
npm install -g eas-cli
|
|
200
|
-
eas login # with your Expo account
|
|
201
|
-
|
|
202
|
-
cd apps/travel-chaos-organizer/frontend
|
|
203
|
-
|
|
204
|
-
# Preview build (sideloadable APK, no Play Store needed):
|
|
205
|
-
eas build --profile preview --platform android
|
|
206
|
-
# → ~10-15 min build time on EAS servers
|
|
207
|
-
# → get download link by email + in Expo dashboard
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
**Install on phone:**
|
|
211
|
-
1. Open the download link on your Android phone
|
|
212
|
-
2. Tap Install (allow "Install unknown apps" for your browser)
|
|
213
|
-
3. Done — this is the real app, no Expo Go needed
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
## Step 10 — Smoke Test Production
|
|
218
|
-
|
|
219
|
-
```bash
|
|
220
|
-
bash scripts/smoke-test.sh
|
|
221
|
-
# Tests: health, waitlist signup, event tracking, admin auth
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
```bash
|
|
225
|
-
bash scripts/verify-tracking.sh
|
|
226
|
-
# Checks: Sentry DSN, Telegram bot, Resend API, Stripe, Ollama, Cachly Redis
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
## Admin Dashboard
|
|
232
|
-
|
|
233
|
-
```
|
|
234
|
-
https://YOURDOMAIN.com/admin
|
|
235
|
-
Username: (ADMIN_USER from .env)
|
|
236
|
-
Password: (ADMIN_PASSWORD from .env)
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
Features:
|
|
240
|
-
- See all users + their plan status
|
|
241
|
-
- Manually upgrade/downgrade a user's plan
|
|
242
|
-
- View telemetry events
|
|
243
|
-
- View waitlist signups
|
|
244
|
-
- Trigger drip email sequence (dry run first!)
|
|
245
|
-
|
|
246
|
-
---
|
|
247
|
-
|
|
248
|
-
## Drip Emails
|
|
249
|
-
|
|
250
|
-
```bash
|
|
251
|
-
# Dry run first — see what would be sent:
|
|
252
|
-
make drip-dry
|
|
253
|
-
# or: curl -X POST https://YOURDOMAIN.com/admin/drip/run?dry_run=true -u admin:password
|
|
254
|
-
|
|
255
|
-
# Actually send:
|
|
256
|
-
make drip-run
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
Set up a cron job on the VPS to run daily:
|
|
260
|
-
```bash
|
|
261
|
-
# As tco user — add to crontab:
|
|
262
|
-
0 9 * * * curl -s -X POST https://YOURDOMAIN.com/admin/drip/run -u ADMIN_USER:ADMIN_PASSWORD
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
---
|
|
266
|
-
|
|
267
|
-
## Backups
|
|
268
|
-
|
|
269
|
-
```bash
|
|
270
|
-
# Manual backup:
|
|
271
|
-
bash scripts/backup.sh
|
|
272
|
-
# → creates timestamped pg_dump in backups/
|
|
273
|
-
|
|
274
|
-
# Docker backup profile (scheduled):
|
|
275
|
-
docker compose --profile backup run backup
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
Backups are kept for 30 days, stored in `backups/` on the VPS.
|
|
279
|
-
|
|
280
|
-
---
|
|
281
|
-
|
|
282
|
-
## Monitoring
|
|
283
|
-
|
|
284
|
-
| What | Where |
|
|
285
|
-
|------|-------|
|
|
286
|
-
| App errors (mobile) | Sentry → your project |
|
|
287
|
-
| Backend errors | `docker compose logs backend -f` |
|
|
288
|
-
| Stripe payments | Stripe Dashboard → Events |
|
|
289
|
-
| New users / signups | Telegram bot notifications |
|
|
290
|
-
| Admin overview | `https://YOURDOMAIN.com/admin` |
|
|
291
|
-
|
|
292
|
-
---
|
|
293
|
-
|
|
294
|
-
## Common Issues
|
|
295
|
-
|
|
296
|
-
**Parse fails / Ollama error**
|
|
297
|
-
```bash
|
|
298
|
-
docker exec tco-ollama ollama list # is model downloaded?
|
|
299
|
-
docker logs tco-ollama --tail 50 # any errors?
|
|
300
|
-
curl http://localhost:11434/api/tags # is Ollama responding?
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
**Login fails / Keycloak error**
|
|
304
|
-
```bash
|
|
305
|
-
docker logs tco-keycloak --tail 50
|
|
306
|
-
# Check redirect URIs in Keycloak client config
|
|
307
|
-
# Check EXPO_PUBLIC_KEYCLOAK_URL matches exactly (no trailing slash)
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
**Stripe webhook returns 400**
|
|
311
|
-
```bash
|
|
312
|
-
docker logs tco-backend --tail 50
|
|
313
|
-
# Check STRIPE_WEBHOOK_SECRET is the signing secret (not the API key)
|
|
314
|
-
# In Stripe Dashboard: Webhooks → your endpoint → "Signing secret" (not "Secret key")
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
**Push notifications not arriving**
|
|
318
|
-
- Expo Go: notifications don't work in Expo Go — use EAS Preview build
|
|
319
|
-
- Check device has notifications enabled for the app
|
|
320
|
-
- event_at must be in the future for reminders to schedule
|
|
321
|
-
|
|
322
|
-
---
|
|
323
|
-
|
|
324
|
-
## Branch
|
|
325
|
-
|
|
326
|
-
All code is on: `claude/plan-mvp-project-1ORlN`
|
|
327
|
-
|
|
328
|
-
Merge to `main` when ready to ship.
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
.PHONY: up down build logs ps health smoke migrate migrate-history backup deploy setup-env drip-dry drip-run shell-backend shell-db restart-backend caddy-reload
|
|
2
|
-
|
|
3
|
-
up:
|
|
4
|
-
docker compose up -d
|
|
5
|
-
|
|
6
|
-
down:
|
|
7
|
-
docker compose down
|
|
8
|
-
|
|
9
|
-
build:
|
|
10
|
-
docker compose build
|
|
11
|
-
|
|
12
|
-
logs:
|
|
13
|
-
docker compose logs -f --tail=100
|
|
14
|
-
|
|
15
|
-
ps:
|
|
16
|
-
docker compose ps
|
|
17
|
-
|
|
18
|
-
health:
|
|
19
|
-
bash scripts/health-check.sh
|
|
20
|
-
|
|
21
|
-
smoke:
|
|
22
|
-
bash scripts/smoke-test.sh
|
|
23
|
-
|
|
24
|
-
migrate:
|
|
25
|
-
docker compose exec backend alembic upgrade head
|
|
26
|
-
|
|
27
|
-
migrate-history:
|
|
28
|
-
docker compose exec backend alembic history
|
|
29
|
-
|
|
30
|
-
backup:
|
|
31
|
-
docker compose --profile backup run --rm backup
|
|
32
|
-
|
|
33
|
-
deploy:
|
|
34
|
-
bash scripts/deploy.sh
|
|
35
|
-
|
|
36
|
-
setup-env:
|
|
37
|
-
bash scripts/configure-env.sh
|
|
38
|
-
|
|
39
|
-
drip-dry:
|
|
40
|
-
curl -s -u "$$(grep ADMIN_USER .env | cut -d= -f2):$$(grep ADMIN_PASSWORD .env | cut -d= -f2)" \
|
|
41
|
-
-X POST "http://localhost:8000/admin/drip/run?dry_run=true" | python3 -m json.tool
|
|
42
|
-
|
|
43
|
-
drip-run:
|
|
44
|
-
curl -s -u "$$(grep ADMIN_USER .env | cut -d= -f2):$$(grep ADMIN_PASSWORD .env | cut -d= -f2)" \
|
|
45
|
-
-X POST "http://localhost:8000/admin/drip/run" | python3 -m json.tool
|
|
46
|
-
|
|
47
|
-
shell-backend:
|
|
48
|
-
docker compose exec backend bash
|
|
49
|
-
|
|
50
|
-
shell-db:
|
|
51
|
-
docker compose exec postgres psql -U tco -d tco
|
|
52
|
-
|
|
53
|
-
restart-backend:
|
|
54
|
-
docker compose restart backend
|
|
55
|
-
|
|
56
|
-
caddy-reload:
|
|
57
|
-
docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile
|