DeepSeek Harness Remote
DeepSeek Harness Remote 可將手機或另一台電腦與你運行 DeepSeek Harness 的電腦安全連接,隨時隨地繼續你的工作,方便隨時查看進度並繼續工作。
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗A personal relationship and networking tool for people whose work depends on who they know. It's built around three ideas: goals first, rooms (events) as first-class, and a two-way promises ledger. Lagos is the first market.
docs/PRODUCT_BRIEF.mddocs/TECH_PLAN.mddocs/DESIGN_SYSTEM.mddocs/DECISIONS.md · Changes: CHANGELOG.mdprototype/index.htmlNext.js 16 (App Router, Cache Components) · TypeScript strict · Tailwind CSS v4 · Supabase (Postgres, Auth) · Drizzle ORM · Zod · Vitest · Playwright. Inngest for background jobs (optional) and the Anthropic API for AI features. Hosted on Vercel's free tier. Email (Resend) arrives in P2, with the daily brief by email.
You need Node 22, pnpm 10, and a Supabase project (the free plan is fine).
pnpm install
cp .env.example .env.local # then fill it in, see below
pnpm db:migrate # applies supabase/migrations to DATABASE_URL
pnpm dev # http://localhost:3000
Sign in with Google, then go to Settings → Load example data to see the app with a small Lagos network in it.
https://<project-ref>.supabase.co/auth/v1/callback.https://inroads.vercel.app.http://localhost:3000/** and https://inroads.vercel.app/**.Email magic links are built but switched off (NEXT_PUBLIC_MAGIC_LINK_ENABLED=false) until there's a domain to send email from. See docs/TECH_PLAN.md §12.
| Name | Needed for | Notes |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | everything | https://<ref>.supabase.co. Inlined at build time. |
NEXT_PUBLIC_SUPABASE_ANON_KEY | everything | Anon / publishable key. Safe in the browser; RLS protects data. |
DATABASE_URL | server | Postgres connection string. The app connects as the table owner and drops to the authenticated role per request, so RLS applies (see src/server/db/with-user.ts). |
SUPABASE_SERVICE_ROLE_KEY | deleting accounts | Server only. Never expose it. Used to delete the sign-in through the Supabase Admin API (which also ends sessions). Without it the auth row is deleted directly in Postgres. |
APP_URL | server | Public base URL. |
NEXT_PUBLIC_MAGIC_LINK_ENABLED | optional | true once a sending domain is set up. |
TOKEN_ENC_KEYS | connections | JSON map of key id to a base64 32-byte key, e.g. {"v1":"…"}. Encrypts OAuth tokens and calendar links (AES-256-GCM). Generate one with node -e "console.log(require('crypto').randomBytes(32).toString('base64'))". |
TOKEN_ENC_CURRENT | connections | The key id new secrets are encrypted with (v1). To rotate, add v2 to the map, set this to v2, and keep v1 until old rows have re-synced. |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | Google connection | See Connect Google below. Without them the Google card says it isn't set up. |
MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET | Outlook connection | See Connect Outlook below. MICROSOFT_TENANT is optional (default common). |
INNGEST_EVENT_KEY, INNGEST_SIGNING_KEY | background sync | From Inngest (free tier). Without them a sync runs right after the request that started it, and there are no scheduled re-syncs. |
RESEND_API_KEY arrives with the emailed daily brief (P2).
contacts.readonly, calendar.events.readonly and calendar.calendarlist.readonly. Under Test users, add the Google accounts that will use it (up to 100).http://localhost:3000/api/oauth/google/callbackhttps://inroads.vercel.app/api/oauth/google/callbackGOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET.While the app is in Testing, Google expires the connection after 7 days; Inroads then shows "Needs reconnecting". Publishing the app (and Google's verification for these scopes) needs a domain with a privacy policy; see docs/TECH_PLAN.md §12.
https://inroads.vercel.app/api/oauth/microsoft/callback (add the localhost one too).User.Read, Contacts.Read, Calendars.Read, offline_access.MICROSOFT_CLIENT_ID / MICROSOFT_CLIENT_SECRET.INNGEST_EVENT_KEY / INNGEST_SIGNING_KEY on Vercel.https://inroads.vercel.app/api/inngest. That registers the sync, the 30-minute re-sync schedule and the daily clean-up.Locally, npx inngest-cli@latest dev runs the dev server; or leave the keys unset and syncs run inline.
Calendar links (Apple iCloud, Outlook "publish", any .ics) and the Android Contact Picker need no setup.
pnpm typecheck
pnpm lint
pnpm test # unit tests + database tests (RLS, Space sealing, triggers, example data)
pnpm build && pnpm test:e2e # Playwright on desktop and mobile viewports, with axe accessibility checks
supabase/tests/supabase-stub.sql stands in for the parts of Supabase the migrations use: the auth schema, auth.uid() and the roles.tests/e2e/support/fake-supabase.ts) that signs real ES256 tokens, so the app's real token verification runs unchanged. The same server plays Google (OAuth, People, Calendar) via TEST_FAKE_PROVIDERS_URL, so the connect → sync → sort flow runs end to end. The build must use NEXT_PUBLIC_SUPABASE_URL=http://localhost:54399 and NEXT_PUBLIC_SUPABASE_ANON_KEY=e2e-anon-key (CI does this).Edit src/server/db/schema.ts, then run pnpm db:generate. Triggers, functions and grants go in a custom migration (pnpm drizzle-kit generate --custom --name=...). Every new user-owned table needs a user_id, the owner policies, and an entry in tests/db/rls.test.ts.
vercel.json).DATABASE_URL=<session pooler URL> pnpm db:migrate.Vercel's free plan is for non-commercial use. Move to Pro before charging users. Supabase's free plan pauses a project after about a week with no activity; you can resume it from the dashboard.
ANTHROPIC_API_KEY |
| AI features |
| Server only. Without it, AI buttons say AI isn't set up and nothing else changes. |
AI_MODEL_FAST, AI_MODEL_STRONG | optional | Override the model ids in src/server/ai/config.ts. |
AI_LIMIT_RESEARCH, AI_LIMIT_LOOKUP, AI_LIMIT_RADAR, AI_LIMIT_BRIEF, AI_LIMIT_DRAFT, AI_LIMIT_CARD, AI_LIMIT_CHAT, AI_LIMIT_SCORE, AI_LIMIT_CAPTURE, AI_LIMIT_ASK | optional | Daily uses per person per feature (defaults 5, 5, 2, 4, 50, 30, 10, 3, 60, 20). Quick capture and Ask your network fall back to word matching when their limit is reached. Research also runs on its own for people you add by hand, and Look up for rooms you add (their plan); past the limit those quietly skip and the buttons still work the next day. |
AI_USER_MONTHLY_USD, AI_APP_MONTHLY_USD | optional | Monthly AI spend caps per person (default 2) and for the whole app (default 25). |
AI_UNLIMITED_EMAILS | optional | Comma-separated sign-in emails with no daily or per-person monthly AI limits (the owner while testing). The whole-app cap still applies. |
NEXT_PUBLIC_VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY | notifications | Web Push keys. Generate a pair with npx web-push generate-vapid-keys and paste them in (the private one is a secret). Without them Settings says notifications aren't set up. Needs Inngest for the 15-minute schedule. |
VAPID_SUBJECT | optional | A mailto: address push services can contact about your notifications (default mailto:[email protected]). |
TEST_DATABASE_URL | tests | Any Postgres 15+ server with contrib. Tests create their own databases on it. |
PW_CHROMIUM_PATH | tests, optional | Use an installed Chromium instead of playwright install. |