shiping
면접·시험 도우미, AI가 실시간으로 풀이 아이디어를 제공
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A repository for palier
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Palier is a free, source-available web app for preparing for the Public Service Commission's Second Language Evaluation (SLE). It covers all three tests: reading comprehension, written expression and oral proficiency. It is in French, for public servants aiming at level B or C. You get timed drills and mock exams laid out like the real tests, AI feedback on your writing, and spoken practice with an AI examiner that asks, listens and follows up.
Try it: palier.study. There is no account to make and nothing to install.
Palier is an independent, source-available study tool. It is not affiliated with, endorsed by, or connected to the Public Service Commission of Canada. It contains no real test questions and its results are not official.
| Feature | What it is | Needs a key? |
|---|---|---|
| Reading practice | Timed sets on workplace passages. You can answer from the keyboard alone | No |
| Written expression practice | Drills on the grammar and usage the test checks, with a rationale for every option | No |
| Mock exams | Full timed forms built to a real variant's published structure and scored against its published cut table | No |
| Review | Items you missed come back on a Leitner schedule | No |
| Library | Short articles on each written-expression sub-skill | No |
| Progress | An estimate of your level shown with its uncertainty and what it rests on, a trend over time, and a printable page | No |
| Diagnostic | A placement test that ends in a written result and a starting level | Yes |
| Writing workshop | Write a workplace text and get feedback on it | Yes |
| Generated practice sets | New written-expression items made on demand | Yes |
| Oral, practice mode | Answer out loud one turn at a time, then get a report | Yes |
| Oral, studio mode | A live spoken conversation with an AI examiner | Yes |
The interface is fully bilingual. Every screen is in English and French, given equal prominence.
Practising is free. Drills, review, mock exams and progress need no key and cost nothing. They work offline once the site has loaded.
The AI features run on your own OpenAI API key, sent from your own browser. Each use costs a few cents, and OpenAI bills your account directly; Palier charges no subscription. Spoken practice is billed by the minute. Each feature shows its estimated cost before it spends anything, and a meter shows what you have spent.
selfhost/.To report a vulnerability, see SECURITY.md.
Every item is original, and none is copied or adapted from a real SLE or from PSC material. The current bank
(content/bank/v4) holds 868 items on 84 passages, 30 oral scenarios and 12 mock-exam forms. Claude wrote the items
in the register of the federal workplace. Separate Claude instances then reviewed each one blind: a reviewer had to
find the intended answer and no second one. Each item then passed a set of deterministic checks. An item that fails
is discarded, not repaired (ADR 24).
Every item shows where it came from, and reporting a bad one takes one tap.
Items written by people are welcome, and they go through the same checks. See Contributing.
The app is live and in use. Phases 0 to 7 of the implementation plan are built:
practice, mock exams, item statistics, the key-backed features, and both oral modes. The steps left before 1.0 are
manual checks and decisions for the maintainer. The English mirror (Phase 8), which practises English as a second
language, has not started. docs/progress.md is the source of truth for what is done, what is in
flight and what is next.
You need Node 22 and pnpm 10. Corepack picks up the version from package.json.
pnpm install
pnpm dev # builds the packages, then runs next dev
Open http://localhost:3000.
No environment variables are needed. Without a database, practice, mock exams, progress and export all work, because
they live in the browser, and only the sync routes answer 503. To try the AI features, paste your own OpenAI key in
Settings. To put Palier on the internet, with Postgres for sync, see docs/deploy.md.
Palier is a pnpm and Turborepo monorepo, written in TypeScript. It is a practice engine for any banded language exam,
and the SLE is its first profile. Every exam-specific rule lives in
content/profiles/psc-sle.json rather than in code: item counts, time limits, cut
scores, level descriptors, the sub-skill taxonomy and the review intervals
(ADR 9). If you swap the profile and the bank, you have a
practice app for a different exam.
The code is split into six packages behind ports and adapters, and dependencies point strictly inward
(ADR 10). The core does scoring, trend, selection and scheduling,
and it is pure: deterministic functions over plain data that know nothing of React, IndexedDB, OpenAI or HTTP.
dependency-cruiser fails the build on any import that points the wrong way. The item bank ships as static JSON
(ADR 18). The web app is Next.js on Vercel
(ADR 11), and Postgres holds only the sync replica
(ADR 21).
| Workspace | Depends on | Contains |
|---|---|---|
apps/web | everything | The Next.js app: routes, API handlers, and the one composition root |
apps/factory | domain, adapters | The content-pipeline CLI: harvest, draft, adversarial review, deterministic validation, then the bank build |
packages/domain | — | Types, invariants, Zod schemas for every content artefact, and the exam profile loader |
packages/engine | domain | The pure core: scorer, band mapper, trend calculator, Leitner scheduler, selector, daily planner, oral session machine |
packages/app | domain, engine | Port interfaces and the use cases that consume them |
packages/adapters | app, domain | Concrete adapters: Dexie, bank, OpenAI, sync, telemetry, ids |
packages/ui | domain | Design tokens, primitives, and item renderers registered by type |
packages/testing | app, domain | In-memory ports, port contract suites, fixture builders, and a fixture bank |
content | — | The exam profile, the item bank, the library and authored items. Data, not code |
selfhost | — | Not a workspace: two one-file realtime secret endpoints that users deploy on their own accounts |
docs | — | Requirements, architecture, plan, ADRs, progress, deploy |
| Command | Does |
|---|---|
pnpm dev | Builds the packages, then runs next dev |
pnpm build | Builds every package to its own dist, then runs next build |
pnpm verify | Runs check-types, lint, boundaries and test, in that order. Nothing merges that does not pass it |
pnpm check-types | Type-checks every workspace |
pnpm lint | Runs ESLint across the repo with zero warnings allowed |
pnpm boundaries | Runs dependency-cruiser on the import graph |
pnpm test | The fast lane: one Vitest process across every project, with coverage thresholds |
pnpm test:integration | The integration projects |
pnpm test:e2e | The Playwright end-to-end suite for apps/web |
pnpm verify:medium | Integration, then end-to-end |
pnpm mutation | Mutation testing with Stryker |
pnpm clean | Removes dist, .next and the build info |
A few conventions apply everywhere. Use named exports only; the root eslint.config.mjs lists the framework files
exempt from that rule. Keep strict, noUncheckedIndexedAccess and exactOptionalPropertyTypes on, set repo-wide
from tsconfig.base.json. Packages are ESM with NodeNext.
| Read | For |
|---|---|
docs/product-requirements.md | What the product must do: the 14 requirements, the exam model, screens and content standards |
docs/architecture.md | How it works: data model, ports, sync, the security model, engine algorithms |
docs/implementation-plan.md | Module boundaries, testing strategy, phases, definition of done |
docs/content-factory.md | How the item bank is made |
docs/adr/ | Why each significant choice was made, and what would reverse it |
docs/progress.md | Where the build is: status, deviations, the session log, the next slice |
docs/deploy.md | Deploying, smoke checks and rollback |
docs/README.md explains how the documents fit together and which one wins when two disagree.
An agent working in this repository should start at CLAUDE.md. AGENTS.md points
there too.
Items, passages and code are all welcome. Start with CONTRIBUTING.md. It opens with the rule that
matters most: every item is original, with no real test material. It then shows how to write an item in
content/authored/, the quality bar the item must clear, and what happens to it after you open a pull request.
Palier is source-available but not open source in the OSI sense. You may read, copy, change and run it for any non-commercial purpose. Commercial use is not permitted.
LICENSE). It expressly
permits personal study and use by educational institutions, charities and government institutions.LICENSE-CONTENT). The content is the item bank, passages, exam forms and other practice material.See ADR 23.