Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Monorepo for the Developer Hub (skill validation layer) described in
PLAN.md: candidates connect their GitHub account and get a
profile dashboard showing language breakdown, activity, and repo quality
signals — one input alongside manual technical screening, not a replacement
for it.
• Node 20+
• pnpm (corepack enable or npm i -g pnpm)
• Two GitHub OAuth Apps (web and mobile need separate ones — see below)README 전문 보기 ↗Monorepo for the Developer Hub (skill validation layer) described in
PLAN.md: candidates connect their GitHub account and get a
profile dashboard showing language breakdown, activity, and repo quality
signals — one input alongside manual technical screening, not a replacement
for it.
apps/web Next.js dashboard (App Router, TypeScript, Tailwind, NextAuth)
apps/mobile Expo/React Native app (TypeScript)
packages/shared Branding tokens, shared types, GitHub API client
corepack enable or npm i -g pnpm)Create both apps at https://github.com/settings/developers:
http://localhost:3000/api/auth/callback/githubipskill://
(GitHub OAuth Apps only support one fixed callback URL each, and the
mobile app redirects to a custom ipskill:// scheme instead of a
localhost URL, so it can't share the web app's OAuth App.)Copy the env files and fill in the values:
cp apps/web/.env.example apps/web/.env.local
cp apps/mobile/.env.example apps/mobile/.env
apps/web/.env.local: GITHUB_CLIENT_ID/GITHUB_CLIENT_SECRET (web app),
GITHUB_MOBILE_CLIENT_ID/GITHUB_MOBILE_CLIENT_SECRET (mobile app — the
secret is only ever used server-side in apps/web's token-exchange route),
NEXTAUTH_SECRET (openssl rand -base64 32), NEXTAUTH_URL,
SUPABASE_URL/SUPABASE_SERVICE_ROLE_KEY (work history storage — see
below).apps/mobile/.env: EXPO_PUBLIC_GITHUB_CLIENT_ID (the mobile app's client
ID only — never the secret), EXPO_PUBLIC_AUTH_BACKEND_URL pointing at the
running apps/web instance.Unlike Skills/Projects, work history, certifications, and skill test results
aren't sourced from GitHub — they need real storage. The ipskill Supabase
project holds:
work_experience (company, role, location, dates, description)certifications (name, issuer, issue/expiry dates, credential ID/URL,
description)skill_test_templates / skill_test_questions / skill_test_attempts —
lightweight, in-house multiple-choice tests (3 seeded: JavaScript, Python,
SQL fundamentals). This is deliberately not a real code-execution sandbox;
the plan (see improvements.md) is to migrate to a proctored third-party
vendor (CodeSignal/HackerRank/Coderbyte) once there's revenue to justify
it. Correct answers (correct_index) never leave the server — /start
only ever returns question text and choices, and scoring happens in
/api/skill-tests/attempts/[id]/submit.All are keyed by the candidate's GitHub numeric ID (stable across username changes, unlike the login string).
There's no Supabase Auth involved — auth is still GitHub OAuth via NextAuth.
Both tables have Row Level Security enabled with no policies, so the
only way to read or write them is the service-role key, and that key is
only ever used server-side (apps/web/src/lib/supabase.ts, guarded by the
server-only import). Every /api/experience and /api/certifications
route re-derives the candidate's identity from the authenticated NextAuth
session before querying — a request can never read or write another
candidate's rows by passing a different ID, since the ID isn't taken from
the request at all.
Grab SUPABASE_SERVICE_ROLE_KEY from the Supabase dashboard (Project
Settings → API → service_role) — it's a secret and isn't obtainable through
tooling, by design.
The mobile app can't hold an OAuth client secret, so it exchanges its GitHub
authorization code for an access token via apps/web's
/api/mobile/github-token route rather than talking to GitHub's token
endpoint directly. This means apps/web needs to be running for mobile login
to work.
pnpm install
pnpm dev:web # http://localhost:3000
pnpm dev:mobile # Expo dev server
Set ALLOW_TEST_LOGIN=true in apps/web/.env.local to register an extra
"test-account" NextAuth provider and show a "Continue as Test User" button
on the login page. It logs straight into a fixture developer profile with
realistic GitHub-shaped data (repos, languages, skill fingerprint, commit
history) — no real OAuth round trip, no GitHub access token needed — so
every GitHub-derived page (Profile, Skills, Projects, Analytics) can be
exercised end to end. Supabase-backed features (Experience, Certifications,
Verified Skills, the display-name override) still need a real
SUPABASE_SERVICE_ROLE_KEY to read/write data, since those aren't mocked.
Never set ALLOW_TEST_LOGIN on a real deployment — it's deliberately not
gated by NODE_ENV (Vercel builds preview deployments with
NODE_ENV=production too), so leaving it unset is what keeps the bypass
from existing at all outside your own machine.
name field) — all backed by Supabase, scoped per-candidate via the
authenticated session.PLAN.md — this repo currently covers the Developer Hub only.