Simon-YHKim/2nd-B
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Not a note vault — a second brain built from what you write and save. Journal daily to build
your self-knowledge base, get personalized guidance grounded in
validated psychology, and carry your data anywhere.
A personalized learning platform for self-understanding. Solo build,
shipping to Google Play and the App Store. There is no external
deadline.查看完整 README ↗Understand yourself through what you write and save. Keep a journal, organize your records, explore grounded reflections with HustleK, and export your data when you need it.
The repository, package identifiers, and existing /2nd-B web path retain
their established names. PolaScope is the app's public display name.
A personalized learning platform for self-understanding. Solo build, shipping to Google Play and the App Store. There is no external deadline.
Master Blueprint · Constraints · Bundled assets and licenses · HustleK opening
This commit scaffolds the project with all 12 hard constraints enforced at code, schema, and CI level. External integrations (live EAS build, remote Supabase, real Gemini API calls) are deferred to Sprint 1.
| Layer | Status |
|---|---|
| Expo + TypeScript strict | done |
| Single Gemini wrapper (C1/C2/C3/C9) | done |
| 3-zone Safety Classifier (C9) | done |
| Supabase migrations 0001–0043 | done |
| ESLint + LLM import boundary | done |
| i18n EN/KO with CI parity check (C7) | done |
| Forbidden lexicon CI scan | done |
| Aggregated constraints self-check | done |
| Auth flow with birth-date age gate + email password reset (C10) | done |
| Judge mode auto-detect (C6) | retired 2026-08-21 (#1302 + migration 0138); the CI check now guards the retirement |
| Bundled asset + license disclosure | done (was C12; the constraint retired 2026-09-06, the check stays under its own name) |
| Support SLA section (C11) | done (auto-responder Sprint 1) |
Age-gate jurisdiction (current, 2026-09-21): the self-consent floor is per country -
resolveJurisdiction()reads the device region and applies a 63-country table (statutory 13-20, clamped up to 14); a country we cannot place gets 18, not KR 14. That client table is live now - it is not the follow-up. What is: residence self-report (the device region is a user setting, not proof of residence), counsel sign-off on the table, and per-country enforcement on the server - the authoritative DB floor is still country-blind 14. Seedocs/CONSTRAINTS.mdC10 andsrc/lib/auth/consent-age.ts.
cp .env.example .env # fill in values
npm ci --legacy-peer-deps
npm run verify # lint + tsc + i18n + lexicon + boundary + constraints + tests
npm run start # Expo dev server
For Supabase migrations dry-run, see db/README.md.
See docs/ARCHITECTURE.md. The 7 engines and
12 constraints map to specific files and CI checks; the architecture
doc is the routing table.
The concept and direction is deep-space; see docs/CONCEPT.md
for what is canonical vs legacy. UI color, spacing, radius, type scale and font
pairing come from the design tokens in src/lib/theme/tokens.ts (semantic.* /
deepSpace.* for deep-space; cosmic.* is the legacy Cosmic Pixel Graph Village
skin). Never hardcode hex literals in components. Visual discipline lives in
DESIGN.md. (The earlier phytoncide tokens in src/theme/tokens.ts
are superseded and must not be used.)
npm run lint # ESLint (C1: blocks foreign LLM SDKs)
npm run type-check # tsc --noEmit
npm run check:edge-runtime # real Edge imports/types; requires Deno 2.9.7
npm run check:i18n # C7 EN/KO key parity
npm run check:lexicon # forbidden vocabulary scan
npm run check:llm-boundary # @google/genai stays in gemini.ts
npm run check:constraints # hard-constraint aggregate
npm test # jest (C9 ordering, C3 audit insertion)
CI also runs check:edge-runtime with pinned Deno 2.9.7. It downloads public
dependencies but never executes handlers. Set DENO_BINARY to use an isolated
binary. This check does not prove hosted Supabase runtime or deployment parity.
Asset provenance: see docs/ASSETS.md for
the full registry. Summary: the codebase was initialized from a clean
Expo template on 2026-05-25 with no proprietary pre-existing code
imported. All third-party dependencies are public OSS used under their
licenses.
We commit to responding to questions and bug reports within 2 business days (KST). Channels:
needs-triage /
sla:2-business-days on creation.support@ email (auto-responder enabled from Sprint 1).Reviewer accounts: retired. Sign-up no longer recognises any email
domain specially. JUDGE_DOMAINS is empty and isJudgeEmail() returns
false for every address (src/lib/judge/domains.ts), and migration 0138
dropped the auto_judge_mode() database trigger. The contest this rule
came from ended on 2026-08-15. The C6 constraint is still checked in CI,
but it now guards the retirement rather than the feature. The
users.judge_mode column and its comp branch stay on purpose so an
account can still be comped by hand. See CLAUDE.md.
MIT for the application code in this repository. Third-party assets remain under their original licenses.