DeepSeek Harness Remote
DeepSeek Harness Remote: DeepSeek Harness 실행 PC와 모바일·PC를 안전하게 연결해 어디서나 작업 이어받기
출퇴근 기록·일·주 총시간 확인·시간표 내보내기를 제공하는 포켓몬 테마 작업시간 추적기다
A work-hours tracker: clock in and out, see daily and weekly totals, and export a timesheet. Themed as a Pokémon game.
생산성TypeScript · CSSGitHub @carnowell-uchicago온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A work-hours log for remote workers and students, played like a Pokémon battle.
Live: https://dbs-p4.vercel.app · Course: Design, Build, Ship (MPCS 51238), Assignment 4
| Part | What |
|---|---|
| App | Next.js 16 (App Router, Cache Components) and Tailwind CSS 4 |
| Sign-in | Clerk (development keys) |
| Database | Supabase Postgres with row-level security, connected to Clerk through Supabase third-party auth |
| External API | PokéAPI (no key) |
| Tests | Vitest (unit) and Playwright with @clerk/testing (end-to-end) |
| Hosting | Vercel (Hobby) |
Two tables, and every row belongs to one Clerk user (user_id = the sub claim of the Clerk token).
profiles work_sessions
user_id PK (Clerk sub) id uuid PK
trainer_name user_id (Clerk sub)
avatar jsonb source 'clock' | 'manual'
timezone (null = browser's) clock_in / clock_out what the timesheet shows
created_at recorded_in / recorded_out set only by the database clock
xp_minutes generated: overlap of the two windows
note optional, ≤ 500 chars
(select auth.jwt()) ->> 'sub' = user_id. Signed-out visitors (the anon role) have no access at all. The user_id is filled in by the database from the token, never sent by the browser.now(), ignoring any time the browser sends. Editing a session can only lower its XP, never raise it.supabase/migrations/.On the server (src/lib/pokeapi.ts, marked server-only):
"use cache" and cacheLife("max"), one fetch serves every user./pokemon response is about 300 KB. The server keeps only the few fields the UI needs.The designed states are:
No Pokémon named "pikahcu", with "Did you mean Pikachu?".Clocking in never depends on PokéAPI.
npm install
Create .env.local with these variables (names only; get the values from each dashboard):
| Variable | From | Public? |
|---|---|---|
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY | Clerk → API keys | yes |
CLERK_SECRET_KEY | Clerk → API keys | no |
NEXT_PUBLIC_SUPABASE_URL | Supabase → Project Settings → API | yes |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | Supabase → API Keys (sb_publishable_…) | yes |
E2E_USER1_EMAIL, E2E_USER2_EMAIL | two Clerk test users (end-to-end test only) | no |
Never use the Supabase secret or service-role key: it bypasses RLS. .env* files are gitignored, and .claude/settings.json denies the coding agent from reading them.
npm run dev, then open http://localhost:3000.
npm run test:unit: 93 Vitest tests covering time zones and DST, ranges, the timesheet and CSV, XP, the daily coach, coach lines, the PokéAPI helper and the Pokédex search.npm run test:e2e (or PLAYWRIGHT_BASE_URL=https://dbs-p4.vercel.app npm run test:e2e to test the live site): one Playwright test, two users can't see each other's sessions (e2e/rls.spec.ts). Users A and B each add a session with a secret note on the same day; each must see their own note and not the other's.
using (true), user B's save was refused with "That overlaps your manual entry … 10:00", which was user A's session: B's queries could read A's rows (docs/test-runs/rls-broken-FAILED.txt).docs/test-runs/rls-fixed-PASSED.txt)./security-review was run on the feature/clerk-auth branch before merging.
= + - @ are now prefixed with ' so spreadsheets don't run them.createRouteMatcher in src/proxy.ts is deprecated. That's not a vulnerability: every page and server action also checks auth() itself, and RLS enforces ownership in the database. The proxy is an extra layer.The theme is "Dusk", a spinoff of my Neon Arcade design system, in Pokémon Diamond/Pearl colours, with dark tall grass and neon glow. Watch red is the only accent, and only the Poké Ball uses it. The process pages are still in the app:
/design/mood-board/design/system/design/fonts and /design/clock-fonts (font comparisons)/design/landing (three front-page options)/design/dashboard (dashboard preview with sample data)Pokémon data and sprites come from PokéAPI. Pokémon and Pokémon character names are trademarks of Nintendo. This is a fan project for a class, not affiliated with Nintendo.