DeepSeek Harness Remote
DeepSeek Harness Remote: DeepSeek Harness 실행 PC와 모바일·PC를 안전하게 연결해 어디서나 작업 이어받기
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Turns your "Let's hang out sometime" to actual plans
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗An AI that turns "we should hang out" into a real plan. Friends leave voice notes, the AI works out when, where, and what — and the app succeeds when everyone puts their phone down.
.ics calendar file.src/)TanStack Start + React, built with Lovable. Mock mode is on by default so the UI works without the backend.
npm install
npm run dev
Open the URL Vite prints (usually http://localhost:8080). Create a group, leave notes, generate plans, and vote — all against a browser-local mock store.
To hit the real API instead:
# in .env (repo root)
VITE_API_URL=http://localhost:8787
VITE_USE_MOCK=false
Then run the backend in another terminal. The frontend only knows VITE_* values; never put secrets in those.
server/)Node 20+ and TypeScript, built on Hono. State is in memory only; every restart re-seeds a demo group.
cp .env.example .env # repo root; set SERPAPI_KEY if you have one (optional, see below)
cd server
npm install
npm run dev # watch mode; `npm start` for a plain run
The API listens on http://localhost:$PORT (default 8787) and implements every endpoint in docs/api-contract.md under /api. CORS is open (*); set CORS_ORIGIN=https://your-frontend (comma-separated for several) to pin it.
Demo group. On startup the server creates group g_demo ("Friday crew") with Maya, Jordan and Priya's constraints from mock/constraints.sample.json, so you can go straight to the plan step:
curl -X POST localhost:8787/api/groups/g_demo/plan
curl -X POST localhost:8787/api/groups/g_demo/vote -H 'content-type: application/json' -d '{"planId":"p_1","memberName":"Maya"}'
curl -X POST localhost:8787/api/groups/g_demo/vote -H 'content-type: application/json' -d '{"planId":"p_1","memberName":"Priya"}'
curl -OJ localhost:8787/api/groups/g_demo/confirmed.ics
Plan pipeline (POST /api/groups/:id/plan), each step logged with its timing: merge constraints and find shared free windows (everyone first, otherwise the largest subset free for 1h+) → search SerpApi (Google Maps + Google Events) → rankPlans → exactly 3 ranked plans. Votes: a plan is confirmed once it has more than half the members' votes.
SerpApi and the cache. server/serpapi.ts is cache-first. Every successful response is stored in server/cache/serpapi-cache.json, keyed by engine and query, and a cached query never goes to the network. Places closed during the planned window are dropped.
SERPAPI_KEY set, a cache miss makes a live call and saves the result.mock/venues.sample.json and logs a warning.npm run warm-cache, and commit the cache file.LLM functions. The server imports transcribe, extractConstraints and rankPlans from server/llm/index.ts. Until that exists (or for any function it doesn't export) it falls back to mock-backed stubs, and says so in the startup log.
| Env var | Default | Purpose |
|---|---|---|
PORT | 8787 | HTTP port |
SERPAPI_KEY | none | Live SerpApi calls on a cache miss |
SERPAPI_CACHE_FILE | server/cache/serpapi-cache.json | Cache location |
CORS_ORIGIN | * | Allowed origin(s) |
Other scripts: npm run typecheck, npm test.