Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,6 @@ updates:
- tsx
- '@types/*'
- zod
- clsx
- tailwind-merge
- package-ecosystem: github-actions
directory: '/'
schedule:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/desktop-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
run: pnpm install --frozen-lockfile
- name: Linux launcher security and packaging tests
if: runner.os == 'Linux'
run: node --test tests/desktop/launcher.test.mjs tests/desktop/windows-inventory.test.mjs tests/desktop/fixture-http-provider.test.mjs tests/desktop/upgrades.test.mjs tests/desktop/worker-lock.test.mjs tests/desktop/relocated-helpers.test.mjs
run: node --test tests/desktop/launcher.test.mjs tests/desktop/windows-inventory.test.mjs tests/desktop/fixture-http-provider.test.mjs tests/desktop/upgrades.test.mjs tests/desktop/worker-lock.test.mjs tests/desktop/relocated-helpers.test.mjs tests/desktop/linux-installer.test.mjs
- name: Windows launcher security and packaging tests under a standard user
if: runner.os == 'Windows'
shell: powershell
Expand Down
93 changes: 26 additions & 67 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,80 +1,39 @@
# Examify

Personal exam practice on your own computer. Start with a short sample exam,
keep your progress locally, then optionally add study material and AI. Windows
and Linux are the personal-study targets. Household sharing remains available
as a separate, more involved setup.
Simple exam practice on your own computer. Take a short exam, review your answers
and pick up where you left off. Your questions and progress stay with you.

## Start with personal study
## Try it

The solo launcher opens Examify in your browser without email or routine login.
Choose **Try a sample exam** for five fixed questions and scoring that needs no AI.
Reopen Examify to resume unfinished practice or see saved results. When you are
ready, **Create your question bank** guides you through adding material, choosing
AI, generating questions and reviewing them before Apply.
Examify's Windows x64 and Linux x64 personal-study packages are in **preview**. There is
no published desktop release yet, and consumer OS/browser testing is still in
progress. The preview bundles its runtime; no development tools are needed.

**There is no published desktop release yet.** Windows x64 and Linux x64 preview
packages bundle Node and dependencies; no Git, pnpm, Docker or administrator setup
is needed. Actual consumer OS/browser support still needs verification. macOS and
ARM are outside this preview.
1. [Get and open the preview](docs/solo-installation.md)
2. Choose **Try a sample exam** — five questions, no account or AI required
3. Review your result. Reopen **Examify** later to resume practice or see your progress

[Get the preview and try your first exam](docs/solo-installation.md) ·
[Back up, upgrade or remove it](docs/solo-maintenance.md)
Ready for your own material? Choose **Create your question bank**, add notes or
PDFs, and review the generated questions before applying them. AI is optional
for sample practice. Generation and written-answer marking use your chosen
provider and may send it your material or answers.
[Read about privacy](docs/privacy.md).

## Optional household setup
[Back up, update or remove Examify](docs/solo-maintenance.md) ·
[Get help](SUPPORT.md)

For multiple people or access from another device, use the existing
[household installation guide](docs/installation.md) or
[agent installation manual](docs/agent-installation.md). That path uses accounts,
mailbox-verified invitations and normal sign-in. It needs Node 22.22.2–22.x,
pnpm 10.33.0, Git, Bash and curl.
## Share with a household

Existing household installations keep their data and upgrade workflow. A solo
launcher never converts or adopts an existing household database. Do not expose
the solo listener through a reverse proxy or share its local session.
For multiple people or access from another device, use the
[household installation guide](docs/installation.md). This separate setup uses
accounts, invitations and normal sign-in.

## Everyday use
## Build with us

Pick a subject and difficulty, answer a short exam, then review your results.
Unfinished exams autosave and can be resumed. In household mode, parents see their household's
student progress and can take exams themselves. The app includes a small sample
bank. In solo mode, **Create your question bank** stays available for adding
subjects and material, setting up optional AI, and reviewing/applying generated
questions. In household mode, the initial wizard and later [CLI content workflow](docs/content-authoring.md#cli-workflow) retain their existing behavior.
**AI settings** remains available for provider changes.
We're working toward the first beta. Examify uses Next.js, TypeScript and SQLite.
See [Contributing](CONTRIBUTING.md) for local development,
[the guides](docs/README.md) for setup and maintenance, and
[the beta review](docs/beta-review.md) for what remains before publication.

AI generation and marking send study material or answers to the selected
provider. Local hosting alone does not keep AI requests local.
[What leaves your server](docs/privacy.md)

## Guides

- [Personal study on Windows or Linux](docs/solo-installation.md)
- [Household install and first login](docs/installation.md)
- [Install with your preferred AI agent](docs/agent-installation.md)
- [Configure sign-in, mail and AI](docs/configuration.md)
- [Solo backup, recovery and uninstall](docs/solo-maintenance.md)
- [Household deployment, updates and backups](docs/operations.md)
- [Troubleshooting](docs/troubleshooting.md)
- [Add or generate questions](docs/content-authoring.md)
- [Ingest CLI reference](tools/examify-ingest/README.md)
- [Develop and test](CONTRIBUTING.md)

## Built with

Next.js 16, React 19, TypeScript, Tailwind CSS and SQLite (Drizzle + better-sqlite3).
Exact versions live in [package.json](package.json). The app runs on one Node
server with a persistent family data folder; see [deployment](docs/operations.md#deploy).

## Support and contributing

Questions: [SUPPORT.md](SUPPORT.md). Contributions: [CONTRIBUTING.md](CONTRIBUTING.md).
Report vulnerabilities privately using [SECURITY.md](SECURITY.md).
[Report a security issue privately](SECURITY.md) ·
[Code of conduct](CODE_OF_CONDUCT.md) · [MIT license](LICENSE)

### Student View for parents

From the parent dashboard, select **Student View** to try exams with the student
interface. Your attempts stay on your own account. Select **Back to parent view**
in the banner above any student-preview screen to return to the parent dashboard.
Students do not see these parent-only controls.
29 changes: 29 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Examify guides

Start with [personal study on Windows or Linux](solo-installation.md). The
desktop packages are a preview; there is no published release yet.

## Use Examify

- [Install and try your first exam](solo-installation.md)
- [Back up, update, recover or remove a personal installation](solo-maintenance.md)
- [Add or generate your own questions](content-authoring.md)
- [Understand privacy and AI data use](privacy.md)
- [Fix a problem](troubleshooting.md) or [ask for help](../SUPPORT.md)

## Run a household installation

- [Install and sign in for the first time](installation.md)
- [Install with an AI agent](agent-installation.md)
- [Configure sign-in, mail and AI](configuration.md)
- [Deploy, update and back up the server](operations.md)

## Develop and release

- [Set up local development and run checks](../CONTRIBUTING.md)
- [Understand architecture and safety boundaries](architecture.md)
- [Use the question-bank CLI](../tools/examify-ingest/README.md)
- [Prepare and verify a release candidate](release-candidate.md)
- [See the first-beta review and reconciled PRs/issues](beta-review.md)

[Back to Examify](../README.md)
12 changes: 9 additions & 3 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,12 @@ Surface:
uses the same transport; every card shows
`onboardingAiCapabilityLine`: how it reads PDFs, how it signs in; the marking line,
`onboardingMarkingCopy`, says which AI marks written answers for that mode and what the
server still needs) → validate → Review
(dry-run HITL with read-only author question cards) → apply → ready. The wizard is one stage at a time: desktop
server still needs) → Review
(automatic format validation and dry-run preview with read-only author question cards)
→ apply → ready. Review questions opens and checks the draft in one action;
Refresh review repeats that check after changes. Validation does not verify
answer accuracy, and only explicit Apply publishes the reviewed draft.
The wizard is one stage at a time: desktop
(≥900px) uses a left step rail + stage + sticky footer; mobile uses compact
“Step N of M · Label” progress and a sticky bottom bar. Everything the
wizard reads and writes — subjects, uploaded PDFs, BankIR, generated JSON,
Expand Down Expand Up @@ -614,7 +618,9 @@ These are non-negotiable. Don't "fix" them out.
member (or role mismatch) redirects to `/signin/invalidate` so the sealed
cookie is actually cleared. Verify/bootstrap write via `getRawSession` so a
stale cookie cannot intercept a new sign-in. Parents/admins can remove members
via `removeMember` (cannot remove self or the household admin).
via `removeMember` (cannot remove self or the household admin). Removal consumes
outstanding sign-in tokens and increments `users.session_version` in the same
transaction; old cookies stay revoked even if that member accepts a new invite.
- **The session cookie follows `SITE_URL`, not `NODE_ENV`.** `sessionCookieConfig()`
(`src/lib/env.ts`) is the only source of iron-session's cookie name + `secure`:
`Secure` exactly when `SITE_URL` is `https:`; the default name is
Expand Down
Loading
Loading