npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

jlpt-srs

v1.4.5

Published

A sophisticated spaced repetition system designed specifically for Japanese language learning and JLPT preparation. The system implements an advanced algorithm similar to SuperMemo/Anki for optimal learning efficiency.

Downloads

615

Readme

JLPT SRS (Spaced Repetition System)

A sophisticated spaced repetition system designed specifically for Japanese language learning and JLPT preparation. The system implements an advanced algorithm similar to SuperMemo/Anki for optimal learning efficiency.

Features

  • Advanced Spaced Repetition Algorithm

    • Customizable learning steps
    • Adaptive ease factor adjustments
    • Intelligent interval calculations
    • Support for relearning paths
    • Mature card identification
  • Comprehensive Card Types

    • Kanji/vocabulary cards with furigana
    • Sentence patterns with detailed breakdowns
    • Grammar notes with importance levels
    • Audio support for proper pronunciation
  • Smart Learning Management

    • Daily new card limits
    • Review scheduling
    • Leech identification
    • Progress tracking
    • Dynamic difficulty adjustments

Practical Example

Setting Up a Study Session

Here's a complete example of implementing a JLPT N4 vocabulary study session:

import { SRSManager } from './srsManager';
import { Card, Settings } from './types';

// 1. Define your SRS settings
const jlptSettings: Settings = {
    maxNewCardsPerDay: 10,  // Start with 10 new words per day
    learningSteps: [1, 10], // Review after 1 day, then 10 days
    maxReviewsPerDay: 100,
    graduatingInterval: 1,
    easyInterval: 4,
    startingEase: 2.5,
    easyBonus: 1.3,
    intervalModifier: 1,
    hardInterval: 1.2,
    lapses: {
        relearningSteps: [1, 10],
        minimumInterval: 1,
        leechThreshold: 8,
    }
};

// 2. Create sample vocabulary cards
const sampleCard: Card = {
    id: "verb-taberu",
    phase: "new",
    ease: 2.5,
    interval: 0,
    learning_order: 1,
    word_audio: "taberu.mp3",
    word_to_practice: {
        kanji: "食べる",
        romanji: "taberu",
        kana: "たべる",
        meanings: ["to eat", "to take a meal"],
        furigana: "た",
        difficulty_level: {
            jlpt: "N5",
            wanikani: 1,
            general: 1
        },
        example: "私は寿司を食べる",
        example_romanji: "watashi wa sushi wo taberu"
    },
    sentence: {
        difficulty_level: {
            jlpt: "N5",
            wanikani: 1,
            general: 1
        },
        romanji: "watashi wa mainichi gohan wo taberu",
        furigana: {
            kanji: "私は毎日ご飯を食べる",
            hiragana: "わたしはまいにちごはんをたべる"
        },
        translation: "I eat rice every day",
        meaning: "Expressing daily habits",
        audio: "sentence1.mp3",
        structure_note: "Subject は Object を Verb",
        structure_note_romanji: "Subject wa Object wo Verb",
        breakdown: {
            words: [{
                word: "私",
                form: "noun",
                type: "pronoun",
                meanings: ["I", "me"],
                kanji: "私",
                kana: "わたし",
                root_form: "私",
                group: "pronouns",
                difficulty_level: {
                    jlpt: "N5",
                    wanikani: 1,
                    general: 1
                }
            }]
        }
    },
    grammar_notes: {
        "basic-sentence": {
            importance: 5,
            description: "Basic sentence structure with を particle",
            description_romanji: "Basic sentence structure with wo particle",
            example: "私はりんごを食べる",
            example_romanji: "watashi wa ringo wo taberu"
        }
    }
};

// 3. Initialize the SRS Manager
const manager = new SRSManager(jlptSettings, new Date());

// 4. Start a study session
function startStudySession(cards: Card[]) {
    // Get cards due for review
    const classified = manager.classify(cards);
    
    // Study new cards
    console.log(`New cards to study today: ${classified.new.length}`);
    classified.new.forEach(card => {
        // Display card information
        console.log(`
Word: ${card.word_to_practice.kanji} (${card.word_to_practice.kana})
Meaning: ${card.word_to_practice.meanings.join(', ')}
Example: ${card.sentence.furigana.kanji}
Translation: ${card.sentence.translation}
        `);

        // Process review (simulating user response)
        const updatedCard = manager.processCardReview(card, ReviewAction.Good);
        console.log(`Next review date: ${updatedCard.nextReviewDate}`);
    });

    // Review learning/review cards
    console.log(`Cards in learning: ${classified.learning.length}`);
    console.log(`Cards in review: ${classified.review.length}`);
}

// 5. Track progress
function getStudyStats(cards: Card[]) {
    const summary = manager.getSummary(cards);
    console.log(`
Study Progress:
- Mature cards: ${summary.mature}
- Review cards: ${summary.review}
- Learning cards: ${summary.learning}
- New cards remaining: ${summary.new}
    `);
}

// 6. Example usage in a daily routine
function dailyStudyRoutine(cards: Card[]) {
    // Morning study session
    console.log("=== Morning Study Session ===");
    startStudySession(cards);
    
    // Advance time by 8 hours
    manager.advanceTime(0.33);
    
    // Evening review session
    console.log("=== Evening Review Session ===");
    startStudySession(cards);
    
    // Check daily progress
    getStudyStats(cards);
}

// Run the daily routine
const myCards = [sampleCard]; // Add more cards as needed
dailyStudyRoutine(myCards);

Example Output

=== Morning Study Session ===
New cards to study today: 1

Word: 食べる (たべる)
Meaning: to eat, to take a meal
Example: 私は毎日ご飯を食べる
Translation: I eat rice every day

Next review date: 2024-11-16T03:00:00Z

Cards in learning: 0
Cards in review: 0

=== Evening Review Session ===
New cards to study today: 0
Cards in learning: 1
Cards in review: 0

Study Progress:
- Mature cards: 0
- Review cards: 0
- Learning cards: 1
- New cards remaining: 0

This example demonstrates:

  • Creating and configuring the SRS system
  • Structuring vocabulary cards with complete information
  • Running daily study sessions
  • Tracking progress
  • Handling multiple review sessions per day

The card structure includes:

  • Kanji and kana forms
  • Example sentences with translations
  • Grammar notes
  • Difficulty levels
  • Audio references (for integration with audio files)

Card Structure

[Rest of the README remains the same...]