-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path.env.example
More file actions
182 lines (147 loc) · 7.76 KB
/
Copy path.env.example
File metadata and controls
182 lines (147 loc) · 7.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# ═══════════════════════════════════════════════════════════════
# ZAO OS Environment Variables
# See FORK.md for setup instructions.
# ═══════════════════════════════════════════════════════════════
# ── REQUIRED ─────────────────────────────────────────────────
# The app will not function without these.
# Supabase — database + auth + realtime
# Get these from: Supabase dashboard → Settings → API
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
# Neynar — Farcaster API (reading/writing casts, user data, signers)
# Get from: neynar.com → Create app → API key
NEYNAR_API_KEY=your_neynar_api_key
# Sign In With Farcaster — your app's domain
NEXT_PUBLIC_SIWF_DOMAIN=zaoos.com
# Session — encrypted cookie secret
# Generate: node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
SESSION_SECRET=your_session_secret_here
# App identity — your Farcaster app FID (must match community.config.ts farcaster.appFid)
APP_FID=19640
# App signer — dedicated wallet for posting casts (NEVER a personal wallet)
# Generate: npx tsx scripts/generate-wallet.ts
APP_SIGNER_PRIVATE_KEY=your_app_signer_private_key
# ── OPTIONAL: Farcaster Webhooks ──────────────────────────────
# Receives real-time events (reactions, follows, new casts)
# Get from: Neynar dashboard → Webhooks → Create webhook
# Leave empty to skip signature verification in local dev
NEYNAR_WEBHOOK_SECRET=
# ── OPTIONAL: Cross-Platform Publishing ──────────────────────
# Enable these to cross-post governance proposals to other platforms
# Bluesky — create an App Password at: bsky.app/settings/app-passwords
BLUESKY_HANDLE=
BLUESKY_APP_PASSWORD=
# X / Twitter — create at: developer.twitter.com/en/portal/projects-and-apps
X_API_KEY=
X_API_SECRET=
X_ACCESS_TOKEN=
X_ACCESS_SECRET=
# Threads — requires approved Meta Business App
# Create at: developers.facebook.com → add Threads product → submit for review
THREADS_APP_ID=
THREADS_APP_SECRET=
THREADS_ACCESS_TOKEN=
THREADS_USER_ID=
# Lens Protocol V3 — register at: developer.lens.xyz
NEXT_PUBLIC_LENS_APP_ADDRESS=0x8A5Cc31180c37078e1EbA2A23c861Acf351a97cE
# ── OPTIONAL: Blockchain / Web3 ──────────────────────────────
# Alchemy — ENS resolution, NFT discovery, respect token sync
# Free tier: 30M compute units/month
# Get from: alchemy.com → Create app → API key
ALCHEMY_API_KEY=your_alchemy_api_key
# Alchemy Webhook — auto-sync respect token transfers in real-time
# Create at: Alchemy dashboard → Webhooks
ALCHEMY_WEBHOOK_SIGNING_KEY=your_webhook_signing_key
# Arweave — permanent music storage + NFTs
# Generate wallet at: arweave.app → download keyfile
# Paste minified JSON or base64-encoded keyfile content
ARWEAVE_WALLET_KEY=
# ── OPTIONAL: Audio / Video ──────────────────────────────────
# Stream.io — audio rooms for /spaces
# Get from: getstream.io → Create app
NEXT_PUBLIC_STREAM_API_KEY=
STREAM_API_SECRET=
# 100ms — live audio rooms
# Get from: 100ms.live dashboard
NEXT_PUBLIC_100MS_ACCESS_KEY=
HMS_APP_SECRET=
NEXT_PUBLIC_100MS_TEMPLATE_ID=
# ── OPTIONAL: Live Streaming ─────────────────────────────────
# Twitch — OAuth for stream key + chat
TWITCH_CLIENT_ID=
TWITCH_CLIENT_SECRET=
NEXT_PUBLIC_TWITCH_CLIENT_ID=
# Livepeer — multistream + recording + clips
LIVEPEER_API_KEY=
# YouTube — OAuth for live streaming
YOUTUBE_CLIENT_ID=
YOUTUBE_CLIENT_SECRET=
NEXT_PUBLIC_YOUTUBE_CLIENT_ID=
# Kick — OAuth for streaming
KICK_CLIENT_ID=
KICK_CLIENT_SECRET=
NEXT_PUBLIC_KICK_CLIENT_ID=
# Facebook — OAuth for live streaming
FACEBOOK_APP_ID=
FACEBOOK_APP_SECRET=
NEXT_PUBLIC_FACEBOOK_APP_ID=
# ── OPTIONAL: AI & Analytics ─────────────────────────────────
# Paperclip AI Agent — community issue forwarding
PAPERCLIP_API_URL=http://localhost:3100
PAPERCLIP_COMPANY_ID=your_paperclip_company_id
PAPERCLIP_CEO_AGENT_ID=your_ceo_agent_id
PAPERCLIP_API_KEY=
# Minimax LLM — alternative AI for content generation
MINIMAX_API_KEY=
MINIMAX_MODEL=MiniMax-M2.7
MINIMAX_API_URL=https://api.minimax.io/v1/chat/completions
# Sopha Social — curated Farcaster feed (trending tab)
# Get credentials from Sopha team (Basic Auth)
SOPHA_API_USERNAME=
SOPHA_API_PASSWORD=
# ── Empire Builder V3 ───────────────────────────────────────────
# Public read endpoints (leaderboard, rewards, boosters) require NO auth.
# This key is reserved for future write endpoints (distribute, burn, airdrop)
# that Adrian whitelists per-caller. Server-only, never expose to browser.
EMPIRE_BUILDER_API_KEY=
# ── Sentry Error Tracking ──────────────────────────────────────
# Create project at sentry.io, get DSN from project settings
NEXT_PUBLIC_SENTRY_DSN=
SENTRY_ORG=
SENTRY_PROJECT=
# ── Juke Developer API ─────────────────────────────────────────
# Server-side Juke space creation for recurring ZAO events (doc 695, Path B).
# POST /v1/developer/spaces needs BOTH credentials below. Server-only, never
# expose to the browser. When either is unset, /api/juke/space returns 503 and
# the keyless /live iframe embed (Path A) still works.
#
# JUKE_API_KEY — app secret. Apply at juke.audio/developers: sign in, request
# access, create an app, generate a key. Shown only once.
# JUKE_USER_TOKEN — Juke JWT for the account that hosts created spaces,
# obtained via Sign In With Farcaster. Juke JWTs expire;
# refresh strategy is an open question (see doc 695).
# JUKE_CREATE_PASSWORD — shared password that lets the /live/create page and
# the ZAOcoworking bot call /api/juke/space without an admin
# session. Unset = password path disabled. Server-only.
JUKE_API_KEY=
JUKE_USER_TOKEN=
JUKE_CREATE_PASSWORD=
# ── Calendar Integration (ZOE) ─────────────────────────────────
# ZOE watches a public calendar (ICS format) and includes upcoming events in
# the morning brief + sends day-before reminders. Inform-only: ZOE tells Zaal
# about events but never creates/modifies/RSVPs.
#
# CALENDAR_ICS_URL — defaults to ZAO Luma calendar at luma.com/zao
# (cal-jPH4al7AMlXzdNN). Leave unset to use the default. Set to a custom
# ICS feed URL (e.g., your own Luma event, Google Calendar export, Outlook
# ICS feed) to override.
#
# The calendar reader caches events (~/.zao/zoe/calendar/cache.json) and
# refreshes every 6 hours. No-op gracefully if the URL is unset or unreachable.
CALENDAR_ICS_URL=
# ── Cowork Tracker (separate Supabase project) ────────────────────
# The task board Zaal sees (~489 items). Points to a DIFFERENT Supabase
# project than the app's own DB. Leave empty for "not configured" state.
COWORK_TRACKER_URL=https://your-tracker-project.supabase.co
COWORK_TRACKER_SERVICE_ROLE_KEY=your_tracker_service_role_key