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. |