Commit Graph

  • 43e02adf37 216 sshd: LoginGraceTime back to 2m (30s silently cut off people typing a long password) main Zareian 2026-10-18 00:59:59 +03:30
  • e25ffb5575 CLAUDE.md: 216 password is the AdminUser-Password line Zareian 2026-10-18 00:48:23 +03:30
  • eb03b467d4 216: shared admin account mathapp-admin, temp removed, hostname mathapp Zareian 2026-10-17 20:50:17 +03:30
  • f2c57c1ad1 docs: step-by-step cut-over to 216 with rollback, what waits on others, after-cut-over list Zareian 2026-10-17 20:18:40 +03:30
  • f6d779255d docs: what was tested on 216 (end-to-end user flow, restore from the 247 encrypted copy) Zareian 2026-10-17 20:08:38 +03:30
  • 4cd859b5fa 216 backups encrypted on 216: pgBackRest (AES-256) + age-encrypted payment CSVs, pushed write-only to 247 with rrsync; health watches pg_stat_archiver and OFFSITE_SYNC_STATUS_FILE; 216 scripts/configs in ops/server216; plaintext pg216 pipeline removed Zareian 2026-10-17 19:43:00 +03:30
  • dd98f16d12 Live backup of 216 on 247 (zareian-pg216-* units, Postgres 16 tools in our dir, SCRAM hash only on 216), backup scripts take PGB_ROOT/PGB_BIN/PGB_PORT with 249 defaults, anti-bot layers documented Zareian 2026-10-17 19:22:56 +03:30
  • bd329f83ae Dedicated server 78.38.35.216: state and cut-over order in docs, CLAUDE.md entry, password snippet for two Password lines, archive-app-log.sh finds its project dir Zareian 2026-10-17 19:06:04 +03:30
  • 670513b462 tools/figures: server_fixups.json (corrections of already-published questions and lessons), doc line Zareian 2026-10-17 03:36:00 +03:30
  • 133233144e Seed: grade 12 questions (every lesson 4+ per lesson, answers computed in code), minus-sign and doubled-x fixes in grade 10 and 11 Zareian 2026-10-17 03:35:34 +03:30
  • a5a93ef6ba Seed: grade 11 questions (every lesson 4+ per lesson, answers computed in code) Zareian 2026-10-17 03:27:10 +03:30
  • 5f963e2898 Seed: grade 10 questions (every lesson 4+ per lesson, answers computed in code) Zareian 2026-10-17 03:13:37 +03:30
  • 7bd7c637b4 Seed: grade 9 questions (every lesson 4+ per lesson, answers computed in code) Zareian 2026-10-17 03:00:27 +03:30
  • ac96f93abc Seed: grade 8 questions (every lesson 4+ per lesson, answers computed in code) Zareian 2026-10-17 02:48:33 +03:30
  • 9903e0ec91 Seed: grade 5 rebuilt (every lesson 4+ questions computed in code), wording fixes Zareian 2026-10-17 02:30:33 +03:30
  • 759bb0d575 Seed: grade 4 rebuilt (every lesson 4+ questions computed in code), slash decimals fixed in chapter 5 Zareian 2026-10-17 02:06:21 +03:30
  • f8a93a37c9 Seed: grade 7 rebuilt (every lesson 5+ questions computed in code), lost-exponent questions fixed Zareian 2026-10-17 01:47:11 +03:30
  • 9eae99340d Seed: grade 6 rebuilt (every lesson 5+ questions, answers computed in code), supplementary/complementary text fixed in grades 4/6/7, '/' decimals to '٫', wrong keys fixed Zareian 2026-10-17 01:31:28 +03:30
  • f57deb9c1d Seed: grade 3 rebuilt (every lesson 5+ questions, wrong figures/lesson text fixed), Persian digits and plain fractions across all grades, apply_fixups gains lesson/question_set, ledger save chunked for SQLite Zareian 2026-10-16 21:27:22 +03:30
  • 5fbbd371fe Seed: questions for the 499 lessons that had none; every lesson now has questions (5,406/5,406) Zareian 2026-10-16 20:15:13 +03:30
  • 82fec6bf75 Admin: PaymentEvent read-only ledger view (was documented but not registered) Zareian 2026-10-16 02:18:07 +03:30
  • 8a2bf26b16 Lesson.order from the book (seed sets it, also re-syncs unit/node order); matrix lesson rows as one multi-line step Zareian 2026-10-15 13:53:30 +03:30
  • 3f68abe741 Explicit ordering for Lesson, Question, Choice (+id tie-break on Unit/Node): lessons no longer reshuffle after row updates Zareian 2026-10-15 13:39:42 +03:30
  • 7973bf4100 Raw LaTeX guard: vdots/ddots/sqrt( converted, leftover() sees bare words, matrix lesson and 4 intro texts fixed in seed Zareian 2026-10-15 13:24:11 +03:30
  • 0c6e155232 More figured questions for grade 12 (geometry conics/vectors, calculus graph reading) Zareian 2026-10-15 02:26:16 +03:30
  • e6e983f970 Figures must not give the answer away: blank titles on new figured questions, 7 trivial questions removed, 7 reworded; apply_fixups tool Zareian 2026-10-15 02:21:02 +03:30
  • 733796c25a kind=space (fixed oblique 3D: points, vectors, planes, box) + ~190 figured questions for grade 12 (geometry, discrete, calculus) Zareian 2026-10-15 01:04:08 +03:30
  • 998b68e4bc Figured questions for grade-12 geometry (conics, systems, vectors: 50 new); docs: figured questions win in the island quiz Zareian 2026-10-14 22:24:53 +03:30
  • cd4f2ce0b2 Figure questions for grade-10 geometry (115 new), quiz prefers a figured question per lesson, tools/figures/batch.py Zareian 2026-10-14 20:24:55 +03:30
  • a4e0c576bb Docs brought to the current state: CLAUDE.md rewritten, README formal, handbook and diagrams redrawn Zareian 2026-10-14 18:45:51 +03:30
  • eb95209ea8 deploy.sh: chmod only our own backups; a root-owned nginx backup aborted the release Zareian 2026-10-14 16:59:08 +03:30
  • 1c7c4b8eca API output without Persian diacritics or written ezafe ی (company decision); tutor answers too Zareian 2026-10-14 16:57:17 +03:30
  • 7b241c1aac CLAUDE.md: restore onto 249 was already done (owner) Zareian 2026-10-13 20:16:58 +03:30
  • e3c8962b7b Load test of 1000 players on the server: CPU is the ceiling (~135 req/s); player-simulation tools Zareian 2026-10-13 19:48:00 +03:30
  • ba4ecff29e Server hardening: nginx origin locked to ArvanCloud + CSP, demo logins removed, docs Zareian 2026-10-13 19:17:11 +03:30
  • 2a03dc81b5 Docs: X-Forwarded-For spoofing closed; Arvan bypass (no WAF) still open Zareian 2026-10-13 18:50:47 +03:30
  • e3bddb3757 Trust X-Forwarded-For only from ArvanCloud edges Zareian 2026-10-13 18:45:27 +03:30
  • 78c3669119 Docs: app logs archived nightly and kept forever on the backup server Zareian 2026-10-13 17:56:12 +03:30
  • 3559c43902 App logs kept forever: nightly gzip on 249 (LOG_FILE_ROTATION=external), hourly pull to 247 via a forced-command key, health warns if the archive stops Zareian 2026-10-13 17:54:05 +03:30
  • f4831e93a7 Docs: payment event ledger and its CSV export on the backup server Zareian 2026-10-13 14:47:24 +03:30
  • 44ad2eabf3 Payment events: one central payment_result row for every path (callback, reconcile, Bazaar, renewal, 100% code), discount_applied, no duplicate order_created; Bazaar token never stored Zareian 2026-10-13 14:44:50 +03:30
  • 8d8665edf3 Payment event ledger (PaymentEvent) replicated to the backup server, plus CSV export script on 247 Zareian 2026-10-13 14:18:47 +03:30
  • 947f946909 Question packs removed at the root; all subscriptions 4 assistant questions a day; Bazaar is subscription-only Zareian 2026-10-12 20:33:38 +03:30
  • 9c3adc3e60 Subscriptions only: Bazaar panel prices (598/898/1398k), assistant quota 5/3/3 from a cost calculation, packs off sale Zareian 2026-10-12 19:57:16 +03:30
  • c0fa46be44 Payment providers as classes (Strategy + factory); 10342 = monthly; health logs a failed Bazaar check Zareian 2026-10-12 18:21:45 +03:30
  • 76b0ef976e Bazaar: plans cache cleared by migration 0014, enum name override, CLAUDE.md status Zareian 2026-10-12 17:59:43 +03:30
  • 8077ab4350 Bazaar: subscriptions (10343/10344), dynamic price (discount codes on Bazaar), auto-renewal sync Zareian 2026-10-12 17:53:11 +03:30
  • 2e0753587c Like/dislike + report under every question and lesson, lesson reports and vote columns in admin; practice islands refresh from file; audit fixes Zareian 2026-10-12 12:56:47 +03:30
  • b075b93f2a Tutor/answers: bare subscripts (S_n, a_1) become Unicode; migration 0022 re-cleans DB text Zareian 2026-10-12 12:18:46 +03:30
  • e662914efc No LaTeX/markdown anywhere students read (seed, import, DB migration 0021, tutor history, frontend guard); quiz of an island is fixed per user again Zareian 2026-10-12 12:15:28 +03:30
  • dd10ff83f4 13,689 new quiz questions in 160 practice islands (grades 3-12), Question.figure, replay rotates the quiz, LaTeX removed from lesson/question text Zareian 2026-10-12 11:58:18 +03:30
  • f9eea56895 CLAUDE.md: tester accounts Zareian 2026-10-12 11:13:51 +03:30
  • 3187f69714 UNLOCK_ALL_PHONES: tester accounts see every island unlocked (map and server rule) Zareian 2026-10-12 11:12:13 +03:30
  • 33478179e2 CLAUDE.md: truth tables and island labels checked in the live app Zareian 2026-10-12 10:57:01 +03:30
  • 9c3596a132 CLAUDE.md: what is on the server after the subjects/figures release and what was checked Zareian 2026-10-12 05:44:32 +03:30
  • 8cb1ecb85e Subjects per grade (math, calculus, geometry, stats, discrete), 5 new textbooks, 202 new islands, long islands split, hand-written figures and lesson texts for the new books Zareian 2026-10-12 05:35:18 +03:30
  • 3d51b3b83a CLAUDE.md: capacity under load (measured vs estimated), open launch-day caps, how to load-test the shared server safely Zareian 2026-10-11 22:27:54 +03:30
  • 98bf05fcbd OTP code requests per IP 20 -> 100/hour so a class on one school Wi-Fi can all log in Zareian 2026-10-11 22:11:08 +03:30
  • 2c708088e4 Spike readiness: AI gets its own slice of threads, cheaper hot paths, classroom-friendly login Zareian 2026-10-11 20:55:24 +03:30
  • feaa5eb540 Postgres connection pool, clean 503 under overload, time indexes, 4 workers Zareian 2026-10-11 20:21:35 +03:30
  • d32d98d3f6 Full lesson audit (grades 3-12): 167 lessons rewritten for wrong or missing facts (terminology, wrong answers, incomplete/ambiguous prompts), 115 final answers added, 11 figures rebuilt and 6 removed to match the new text Zareian 2026-10-11 15:11:11 +03:30
  • 673a9e7e39 Lessons that depended on a missing figure or table now carry their own data (15 rewritten), figures added for 5; fixes wrong answers in 3638 and 3769 Zareian 2026-10-11 14:48:51 +03:30
  • 1fe453095f Geometry and measurement lessons: figures for the remaining drawable lessons (shapes without invented numbers), fraction bars and number lines for pure-arithmetic lessons Zareian 2026-10-11 14:41:01 +03:30
  • 4a41def4b2 Lesson figures: 2,466 lessons (2,927 figures) now carry a fixed figure; graphs, tables, trees, number lines, area models, pies Zareian 2026-10-11 13:34:18 +03:30
  • 293b916544 Lesson content complete: examples/steps for all 3,778 lessons, 1,775 lessons with fixed figures, 38 quiz fixes Zareian 2026-10-11 01:29:36 +03:30
  • 4821df3914 CLAUDE.md: pointer to the next-APK notes and why app payments go through pay.html Zareian 2026-10-10 18:54:12 +03:30
  • 9024c6b8d8 /api/user/summary: streak.activeToday and streak.lost for the app's lit / at-risk / frozen flame Zareian 2026-10-10 18:27:14 +03:30
  • 2e87a81cc5 CLAUDE.md: pre-move SQLite copy removed from the server; the old August backup script was never scheduled Zareian 2026-10-10 17:14:42 +03:30
  • d10e3e4c9f deploy.sh: backup retention used ls on a glob that can be empty, killing the deploy under pipefail Zareian 2026-10-10 16:53:57 +03:30
  • a9cccc6550 Live off-site Postgres copy on 247 replaces the nightly pg_dump; backup retention in deploy.sh Zareian 2026-10-10 16:53:10 +03:30
  • 19072ee534 Fourth companion renamed Tedi -> Omega (ω); slug stays tedi Zareian 2026-10-10 01:42:44 +03:30
  • a39643b8a3 CLAUDE.md: paywall and subscriptions are live Zareian 2026-10-10 01:20:51 +03:30
  • 64c4c09326 Paywall: first unit of each grade free; 1/3/6-month subscriptions; AI sold separately Zareian 2026-10-10 01:19:02 +03:30
  • 7d81d193bd Scheduled Postgres backup, restore check, backup warnings in health, payment result logging Zareian 2026-10-08 17:32:06 +03:30
  • a5feee053a CLAUDE.md: Bazaar package name now matches the APK (com.tadrisino.math.app) Zareian 2026-10-08 14:12:28 +03:30
  • 22c3196343 Close /api/health details and API docs to the public Zareian 2026-10-08 13:05:19 +03:30
  • d6529956e1 Docs: Postgres + own Redis are the server's current state Zareian 2026-10-08 12:43:48 +03:30
  • c1cc6be0cd User activity file includes failed logins matched by phone Zareian 2026-10-08 12:41:06 +03:30
  • bda415e579 Admin: per-user activity file (logins, logouts, orders) with CSV export Zareian 2026-10-08 12:17:11 +03:30
  • dbf0ff52d2 gitignore: server-side Postgres/Redis password files Zareian 2026-10-08 12:02:06 +03:30
  • 92dcce901b Ticket-reply notification receiver skips raw saves (loaddata made 5 duplicate notifications) Zareian 2026-10-08 11:59:26 +03:30
  • ddc6c7c9b7 NodeProgress receivers skip raw saves (loaddata duplicated rows on the Postgres move) Zareian 2026-10-08 11:54:20 +03:30
  • 042df25738 Postgres support (DB_* env), LoginEvent audit table, Choice.value 300, deploy.sh pg_dump backup Zareian 2026-10-08 11:48:48 +03:30
  • e00f6b80eb CLAUDE.md: lesson figures workflow, cost, review lessons, frontend cache and nginx headers Zareian 2026-10-07 19:48:10 +03:30
  • b93f43ef02 Lesson figures: 1-based step index, smaller graph ranges, no tick marks; regenerated 4 calculus-12 lessons Zareian 2026-10-07 16:47:35 +03:30
  • 25b3d24eb4 gen_lesson_figures prints prompt/completion tokens Zareian 2026-10-07 16:34:22 +03:30
  • ce629e32e4 Lesson.figures: fixed diagrams per lesson (stored once, served with the lesson); gen_lesson_figures; 3 calculus-12 lessons Zareian 2026-10-07 16:26:10 +03:30
  • 1d7eb829e2 Oversized request body: 413 with a short warning instead of 500 and an ERROR traceback Zareian 2026-10-07 14:48:03 +03:30
  • ff370112c0 Rebuild technical-handbook.pdf from the updated Markdown Zareian 2026-10-07 14:41:59 +03:30
  • d584d62904 Do not connect to the shared Redis: CACHE_URL stays empty, own Redis is an open decision Zareian 2026-10-07 14:41:39 +03:30
  • c129f64180 Docs: Redis cache behaviour during an outage, what was tested live, CACHE_KEY_PREFIX Zareian 2026-10-07 14:21:31 +03:30
  • 277927046d Redis outage must not 500 the API: ResilientRedisCache, key prefix, 1s socket timeouts Zareian 2026-10-07 14:16:01 +03:30
  • 7929f6bd85 Docs and requirements: signing key replaced and shared Redis cache are live; pin dependency versions Zareian 2026-10-07 14:02:51 +03:30
  • 4c601087dc deploy.sh: health check through the gunicorn socket, optional DEPLOY_BUNDLE when Gitea is unreachable Zareian 2026-10-07 13:57:50 +03:30
  • 3e63bd0860 Docs: 7ecb337 is live; record the Gitea 504 from the server and the bundle deploy Zareian 2026-10-07 13:48:20 +03:30
  • 7ecb337263 Finishing a lesson or island needs recorded answers and an unlocked island; auto DB backup before migrate; throttles on 15 more routes Zareian 2026-10-07 13:30:24 +03:30
  • 7e3854098f CLAUDE.md: guest login removed, state on the server Zareian 2026-10-05 18:40:26 +03:30
  • 5b7e6fb7d7 Content: 724 questions on lessons that had none (grades 3-11), each solved blind by a second pass Zareian 2026-10-05 18:38:10 +03:30
  • f22b9f2e88 Calculus 12: 12 more questions on lessons that had none Zareian 2026-10-05 18:20:10 +03:30
  • 663252a260 Remove the guest system entirely: no is_guest/device_id, no guest throttles, phone login is the only way in Zareian 2026-10-05 18:20:10 +03:30