DeepSeek Harness Remote
DeepSeek Harness Remote: DeepSeek Harness 실행 PC와 모바일·PC를 안전하게 연결해 어디서나 작업 이어받기
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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. |