# Build brief — a focused alternative to pbmate.ro

> **Verdict:** Not faithfully · **Buildability:** 27/100 · **Category:** Education
> **Source:** https://www.canitbevibecoded.com/pbmate
> Independent editorial assessment from Can It Be Vibe Coded? Not affiliated with, endorsed by, or derived from pbmate.ro. Verify current pricing and capabilities before acting.

## Context

**pbmate.ro** — Curriculum-mapped maths practice for Romanian pupils, with the national exams as the deadline. It currently costs $17.57/mo.

The trainer is not the product. An agent will hand you a clean multiple-choice runner with LaTeX, hints and a mastery chart in one evening, and then you will be staring at an empty database. What is actually being sold here is roughly 5.000 published problems mapped chapter by chapter to the Romanian programa, the official Bacalaureat and Evaluare Națională papers rebuilt as interactive tests with every marking scheme re-derived rather than trusted, and four role surfaces (pupil, parent, teacher, plus an iOS app) grown over more than 2.300 commits. A language model will cheerfully generate a thousand Romanian maths problems for you, and a worrying share will carry a wrong answer key, a hint that leaks the answer, or a chapter label that does not match the programa. You will not find out which until a child gets one wrong for the wrong reason. Check a hundred by hand and the price stops looking mysterious. Build the trainer if you enjoy building; the honest free move is the ministry's own paper archive, not a rebuild.

This brief describes a focused, single-operator replacement for the part of pbmate.ro that is genuinely reproducible. It is deliberately narrower than the product it replaces, and it says so in writing. Build the useful core; do not pretend to have rebuilt the rest.

## What you are building

A local trainer for maths problems you author yourself: pick a chapter, work through five problems, reveal graded hints, then the full solution, and watch a per chapter mastery bar move.

- Sequence lessons, check understanding, and track progress for one learner.
- A responsive interface with real empty, loading, success, and error states.

## Requirements

### Functional

- Node 22.
- Your own problem set, or the public Bacalaureat and Evaluare Națională PDFs.

### Data and integrations

- Optional Anthropic or OpenAI API key for draft extraction from those PDFs.
- Somebody willing to solve every problem before trusting its answer key.

Each of these needs a real account, credential, or quota. Set them up before writing feature code.

### Non-functional

- Accessibility: semantic markup, labelled controls, visible focus, and reduced-motion support.
- Security: server-side secrets, validated input, and no credentials in the client bundle.
- Reliability: retries with backoff on external calls, and a clear failure state when a provider is down.
- Portability: the operator can export their data and leave without losing it.

## Implementation brief

Build a personal Romanian maths practice trainer in an empty folder.
Stack: Next.js 15 (App Router), TypeScript, SQLite via better-sqlite3, Tailwind, KaTeX. Do not offer alternatives.
Problems live as Markdown files in content/problems, one per file, with frontmatter: id, chapter, grade, difficulty 1 to 5, statement, four options, correctIndex, hints (up to three, ordered nudge -> method -> setup), solution.
Write `npm run import` to validate every file into SQLite, failing loudly on a missing correctIndex, an out-of-range difficulty, an unknown chapter, or a hint containing the final answer as a substring.
Ship exactly three seed problems as format examples plus a chapters.json for one grade, taken from the official programa. Generate no problems yourself.
Practice loop: pick a chapter, get five problems ordered easy to hard, answer, then reveal hints one at a time before the solution.
Record every attempt (problem id, chosen option, correct, seconds, hints used) in SQLite.
Show a per-chapter mastery bar from the last twenty attempts on that chapter and a weak-chapters list. No streaks, no badges, no daily guilt.
Add `npm run drill` that serves only problems previously answered wrong.
Render maths with KaTeX inline and display, and verify the seed problems render before you finish.
Handle Romanian diacritics correctly in the files and the UI.
Add `npm run export` writing all attempts to CSV, and keep every byte on the local disk.
If ANTHROPIC_API_KEY is set in .env, add an optional `npm run draft -- paper.pdf` that turns an exam PDF into draft Markdown in content/drafts, never imported until a human moves the file, and print a warning that the answer key is unverified.
Secrets in .env, ship .env.example, commit neither.
Test the importer validation rules and one end-to-end five-problem session.
Write a README covering setup, the problem file format, and how to add a chapter.
Leave out: accounts, payments, hosting, telemetry, parent and teacher views, a mobile app, and anything claiming to grade a real exam.
Finish by running the import and the tests, then print the exact commands used.

## Delivery standard

- Inspect the repository first, then write a short implementation plan before writing code.
- Deliver the smallest complete end-to-end workflow first; every primary control must work against persisted data.
- Use real validation and storage; never substitute fake dashboards, decorative controls, hard-coded success states, or mock integrations.
- Include responsive layouts plus genuine empty, loading, success, validation, and failure states.
- Keep secrets server-side in environment variables, provide .env.example, and never commit credentials or user data.
- Add structured logs around every external call and return actionable errors without leaking sensitive details.
- Write unit tests for the core logic and one automated test of the main user journey.
- Finish with a README covering setup, architecture, data location, backups, tests, deployment, and known limitations.

## Acceptance criteria

- [ ] A clean install starts the app using only the README and .env.example.
- [ ] The primary journey works from first visit through saved result, reload, edit, export, and deletion where applicable.
- [ ] Invalid input, missing configuration, provider failure, and an empty database each have a usable state.
- [ ] The interface works at 390px and 1440px, is keyboard navigable, and shows visible focus on every control.
- [ ] Tests, type checking, linting, and a production build all pass with no ignored failures.
- [ ] No part of the interface implies a live integration, security guarantee, or scale capability that was not actually built and verified.

## Non-goals

Do not build these, and do not claim to have replaced them:

- Roughly 5.000 vetted problems, each tied to a chapter of the Romanian programa and a difficulty tier.
- Official exam papers rebuilt as interactive tests, with each marking scheme re-derived point by point.
- Three progressive hints and a written solution on every problem, not just the correct letter.
- The parent and teacher surfaces, assigned homework, and the iOS app.
- Somebody maintaining all of it when the programa or the exam format shifts.

## What you still own after launch

- Secure credentials, rotate secrets, and handle provider rate limits.
- Run migrations, backups, restores, and dependency updates.
- Test the critical journey after every model, API, or hosting change.
- Monitor failures and fix the edge cases a first prompt will miss.

## Risk

**Manageable.** A personal version is realistic if you test the critical journey and keep reliable backups.

Editorial confidence in this assessment: high. No reviewed project implementation is linked yet.

## Existing alternatives

Before building, compare these checked options:

- [Khan Academy România](https://ro.khanacademy.org/math) — Full maths courses, exercises and hints in Romanian, free forever. It teaches the subject well and ignores the exam calendar entirely
- [Subiecte și bareme oficiale](https://subiecte.edu.ro) — Every exam paper and marking scheme the ministry publishes, free, and the single best reason not to pay anyone for PDFs. It serves the current session only, so the archive is whatever you saved or the Wayback Machine kept
- [Manuale digitale](https://manuale.edu.ro) — The state's digital textbooks with their built-in exercises, free for every grade. Coverage is the textbook rather than exam drilling, and the interactive parts have aged the way state web projects age

## Prior art

Working open-source software you can read, fork, or borrow from before starting:

- [KaTeX](https://github.com/KaTeX/KaTeX) — Renders the maths in every statement fast enough that a practice loop does not feel like a PDF
- [FSRS](https://github.com/open-spaced-repetition/fsrs4anki) — The scheduler to borrow if you want spaced review instead of a random shuffle
- [Moodle question bank](https://github.com/moodle/moodle) — A schema for questions, answers and per attempt grading that has survived twenty years of schools, if you would rather not invent one

---

Generated by [Can It Be Vibe Coded?](https://www.canitbevibecoded.com) · Full report: https://www.canitbevibecoded.com/pbmate
