Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Planning Center tools for worship teams.
This app helps teams schedule people into open positions for specific plans by combining:
• service type and plan selection
• needed team positions grouped by team
• people matching for the selected team/position
• availability and recent scheduling history context
• one-click scheduling into Planning Center
The public marketing site lives at /, with the origin story at /about. The authenticated product starts at /services.README 전문 보기 ↗Planning Center tools for worship teams.
This app helps teams schedule people into open positions for specific plans by combining:
The public marketing site lives at /, with the origin story at /about. The authenticated product starts at /services.
This is a Bun/Turborepo monorepo. The product UI lives in apps/web, the API Worker (an Alchemy Effect-native Cloudflare Worker serving the product API with Effect HttpApi on an Effect HTTP router) lives in apps/server, server implementation lives in packages/api, browser-safe API contracts live in packages/contracts, the product API client lives in packages/client, Planning Center models and calendar rules live in packages/planning-center-models, and the static marketing site lives in apps/marketing. See marketing development and deployment.
For parallel remote development, see Codex cloud development.
This repo uses Bun for dependency management and scripts. Use bun.lock as the only lockfile; do not use npm or commit package-lock.json.
Use Node.js 24 (see .node-version) and Bun 1.4.2 (pinned in package.json; CI reads it from there).
bun install --frozen-lockfile
Development credentials live in Infisical pcobooster-dev, which Alchemy reads for stage local. With the agent-dev machine identity's INFISICAL_CLIENT_ID and INFISICAL_CLIENT_SECRET set, run bun run setup:infisical once to store it in your default Alchemy profile. Never put a secret value in command arguments, chat, issues, or committed files.
bun run dev signs you in as the owner of the Planning Center sandbox PAT from the Keychain sandbox scope (bun run secrets:set sandbox PLANNING_CENTER_PAT); dev:church uses the Agape PAT from Infisical, read-only. dev:auth uses real OAuth and dev:present enables presentation mode. The servers bind to 127.0.0.1; deployed Workers ignore the development bypass. Each stage gets separate D1 data.
Scripts that run outside Alchemy use bun run secrets:dev <command>. Operator-only tools keep Keychain scopes (bun run secrets:run apple -- <command>). Deployed app secrets live in Cloudflare Secrets Store; GitHub environment secrets supply deployment credentials. See configuration, migration, and deployment.
bun run dev
Alchemy applies migrations to persistent local D1 and starts the API and product; marketing runs beside them. The command prints the product URL. You are signed in with the personal access token; there is no sign-in page.
The main checkout uses ports 3000 (API), 3001 (product), and 3002 (marketing). Each linked git worktree gets its own block of ports, derived from its path (4000 to 4993), so several worktrees can run bun run dev at once. Set DEV_PORT_BASE=<port> to choose the block yourself; the stack uses that port and the next two. Every checkout keeps its own local D1 database under .alchemy/.
All running checkouts share one personal access token, so they share Planning Center's limit of 100 requests per 20 seconds per user. Each API Worker paces only its own requests, so two busy checkouts can see 429s that one would not.
bun run dev:auth
This runs real Planning Center OAuth instead of the token, always on the main ports: Planning Center redirects only to the registered http://127.0.0.1:3001/api/auth/callback/planning-center, so one checkout at a time can test sign-in. Production uses https://pcobooster.com/api/auth/callback/planning-center; preview callbacks use the production OAuth broker.
Schema migrations are generated by Drizzle.Schema on bun run dev (or explicitly with bun run db:generate); commit them. Alchemy applies them during local startup and deployments. No remote database credentials are needed to run tests.
bun run dev:present
This enables PRESENTATION_MODE=1 for the local dev servers. It is ignored when NODE_ENV=production . The app shows a "Presentation mode" badge. Your signed-in account and organization stay visible. Planning Center people get consistent fictional names, fictional initials, and no photos across candidates, filled positions, search, and People pages. Blockout reasons/descriptions and selected-plan decline notes are masked on the server. Aliases come from about 9,500 name combinations, so two people rarely share one.
Search matches the fictional names. Its first request loads the People directory; subsequent requests reuse the account-scoped directory cache for five minutes. Browser people caches and React Query caches are isolated from normal mode. PRESENTATION_SEED optionally changes the aliases and browser cache namespace.
Stop the server, run bun run dev, and reload open tabs to return to normal mode. Do not store PRESENTATION_MODE in Keychain if you want the command to control it. The flag is ignored in production . It does not change authentication or grant API access.
This masks person fields for app presentations, not the underlying dataset: IDs, schedules, team/position names, plan titles, and free-form plan-item text remain real. Review those custom labels before a public recording. Actions still write to the real Planning Center account; server logs and external Planning Center pages are outside the masking scope.
https://pcobooster.com/demo/<key> opens the app for someone without a Planning Center login. It reads your Planning Center organization with people's personal details spoofed, and cannot write. See the demo link guide for setup and revocation.
Product operations are Effect HttpApi endpoints under /api/v1 (one method and path per procedure, packages/contracts/src/http), called by tag through makeProductClient (packages/client). Better Auth keeps its protocol-owned GET/POST /api/auth/* handler. /health is the service liveness endpoint.
apps/
web/ # TanStack Start product UI
server/ # API Worker (Alchemy Effect-native) serving Effect HttpApi
marketing/ # Prerendered TanStack Start marketing site
packages/
api/ # Server-side application, auth, DB, adapters, API server
contracts/ # Browser-safe API contracts and fault classes
client/ # Product API client, request scheduler, query helpers
planning-center-models/ # Shared Planning Center shapes and calendar rules
presentation-mode/ # Shared server-side presentation configuration
config/ # Shared TypeScript configuration
bun run devbun run buildbun run check: strict Ultracite lint and formatting checksbun run fix: auto-fix and formatbun run ci: the local CI gate (check, typecheck, and tests)bun run ci:affected --base origin/main: lint, then check changed packages and dependents plus repository guards; use --dry-run to inspect the selection. For an upper stack layer, pass its preceding branch as the base.bun run typecheckbun run testbun run test:watchbun run proof -- doctor: audit revision-bound PR proof prerequisitesbun run ci
bun run build
Tests are colocated under packages/*/src and apps/*/src. Feature modules accept narrow typed dependencies so tests can exercise behavior without replacing modules. Everything is validated with Effect Schema: the server decodes inputs, the client decodes answers, and Planning Center responses, KV entries, and persisted browser caches (written and read through each endpoint's own schema) are decoded the same way.
Pull requests must pass the GitHub ci and cloudflare-build checks. See CI/CD for the merge gates, deployment flow, dependency update policy, and rollback procedure.
For visible or high-risk changes, follow Proofed delivery. The repo-local skills under .agents/skills/ cover setup, app-specific browser verification, verification-skill generation, and independent PR proof.
Ultracite uses Oxlint and Oxfmt with the strict core, React, TanStack, Vitest, shadcn, anti-slop, and React Doctor presets. oxlint.config.ts and oxfmt.config.ts are the configuration sources. GitHub CI rejects warnings as well as errors, then runs TypeScript and tests; cloudflare-build separately builds the Workers without credentials. Tests use explicit dummy credentials from vitest.config.ts; neither gate receives production secrets. Generated route trees, database migrations, and scraped API documentation are excluded from formatting.
The OXC VS Code extension is recommended in .vscode/extensions.json; workspace settings enable formatting and explicit fixes on save. bun install installs the Lefthook hooks: pre-commit fixes and re-stages supported staged files, and pre-push runs bun run check and bun run typecheck. Run bun run ci before submitting changes and bun x ultracite doctor when diagnosing the toolchain.
Shared UI primitives expose appearance through variants, with semantic theme tokens for scheduling states. Call sites own layout.
Better Auth is pinned to 1.7.5; keep the registered callback URLs above aligned with the service origin.
Use GitHub's native stacks for changes with dependent review layers. Keep each layer focused and independently passing bun run ci and bun run build.
gh extension install github/gh-stack
gh stack init --base main codex/my-change-foundation
# Commit the foundation, then start its dependent layer.
gh stack add codex/my-change-interface
# Commit and validate the interface, then publish draft PRs.
gh stack submit --auto --remote origin
gh stack view --json
Each PR targets the preceding branch; the bottom PR targets main. After editing a lower layer, run gh stack rebase --upstack --remote origin and resubmit. Update the generated PR titles and descriptions with the behavior changes and validation results.
When every layer is ready and GitHub checks pass, use gh stack merge <stack-number> --yes --squash to land the stack together. GitHub enforces the repository's merge requirements for the entire operation. Use gh stack sync --remote origin afterward to reconcile local state.
Local scraped API docs are in docs/planning-center-api/. See docs/planning-center-api/README.md for export details.