first commit

This commit is contained in:
Rodrigo Bertoldo de Sousa Martins committed 2026-09-07 20:46:08 -03:00
commit 0e854110d3
49 files changed
+2292

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
import { PrismaClient } from "@prisma/client";
export const prisma = new PrismaClient();
+28
View File
@@ -0,0 +1,28 @@
// SM-2 spaced repetition algorithm (SuperMemo 2).
// `quality` is 0-5: 0-2 = failed recall (reset), 3-5 = successful recall (grows interval).
export interface SM2State {
easeFactor: number;
intervalDays: number;
repetitions: number;
}
export function sm2(state: SM2State, quality: number): SM2State {
const q = Math.max(0, Math.min(5, quality));
let { easeFactor, intervalDays, repetitions } = state;
if (q < 3) {
return { easeFactor, intervalDays: 1, repetitions: 0 };
}
repetitions += 1;
if (repetitions === 1) intervalDays = 1;
else if (repetitions === 2) intervalDays = 6;
else intervalDays = Math.round(intervalDays * easeFactor);
easeFactor = Math.max(
1.3,
easeFactor + (0.1 - (5 - q) * (0.08 + (5 - q) * 0.02)),
);
return { easeFactor, intervalDays, repetitions };
}