Skip to content

educational-technology-collective/srs-authoring

Repository files navigation


Logo

Ambient Authoring

Become a catalyst for knowledge.
Report Bug · Request Feature

Table of Contents
  1. About The Project
  2. Getting Started
  3. Proposal
  4. Roadmap
  5. Contributing
  6. License
  7. Contact
  8. Acknowledgments

About The Project

Ambient Authoring is a Chrome extension where experts can author learning moments and flashcards.

(back to top)

Built With

TypeScript React Vite

(back to top)

Getting Started

To get a local copy up and running follow these simple example steps.

Installation

  1. Clone the repo
    git clone https://github.com/educational-technology-collective/srs-authoring.git
  2. Install NPM packages
    npm install
  3. Build the project
    npm run build
  4. Load unpacked extension in Chrome.
  5. Select /dist directory.
  6. Load the extension from Chrome's side panel.
  7. Go to the assigned Coursera page.

(back to top)

Proposal

This write-up is a proposal for a new system design for the Ambient Learning project.

The Big Picture

Below is the system design flowchart of the project.

Clients

We aim to serve three clients primarily:

  • Coursera Agent Chrome Extension
  • Coursera Authoring Chrome Extension
  • Mobile App

JupyterLab client will be supported soon.

Spaced repetition system will not use the exposed API from AWS, but will manipulate the database directly. The implementation details for the system is still under debate.

Auth

There will be whitelisted users data inside Auth0.

Database Collections

MongoDB is the database of choice here. The project will use four collections and one view:

Collections

  • lms
  • fcs
  • userStates
  • mobileTelemetry

Views

  • userStates_fcs

API Endpoints

Below is the tree that lists out our proposed endpoints.

/api
/v1
/lms
`POST` (authoring)
`PUT` (authoring)
/search
`GET` (authoring, agent)
/{id}
`DELETE` (authoring)
/fcs
`POST` (authoring)
`PUT` (authoring)
/search
`GET` (authoring)
/{id}
`DELETE` (authoring)
/{userId}
/fcs
/now
`GET` (mobile)
/{lmId}
`POST` (agent)
`PUT` (mobile)
/telemetry
/mobile
`POST` (mobile)

Coursera Agent Chrome Extension

  • GET /api/v1/lms/search
    • Gets a list of learning moments given query parameters.
    • Reads from lms collection.
  • POST /api/v1/{userId}/{lmId}
    • Posts newly experienced learning moments to a given user.
    • Writes to userStates collection.

Coursera Authoring Chrome Extension

  • GET /api/v1/lms/search
    • Gets a list of learning moments given query parameters.
    • Reads from lms collection.
  • GET /api/v1/fcs/search
    • Gets a list of flashcards given query parameters.
    • Reads from fcs collection.
  • POST /api/v1/lms
    • Posts a new learning moment.
    • Writes to lms collection.
  • POST /api/v1/fcs
    • Posts a new flashcard.
    • Writes to fcs collection.
  • PUT /api/v1/lms
    • Updates a learning moment.
    • Writes to lms collection.
  • PUT /api/v1/fcs
    • Updates a flashcard.
    • Writes to fcs collection.
  • DELETE /api/v1/lms/{lmId}
    • Deletes a given learning moment.
    • Writes to lms collection.
  • DELETE /api/v1/fcs/{fcId}
    • Deletes a given flashcard.
    • Writes to fcs collection.

Mobile App

  • GET /api/v1/{userId}/fcs/now
    • Gets a 2D list of flashcards for review today.
    • Reads from userStates_fcs view.
  • PUT /api/v1/{userId}/{lmId}
    • Updates the review record for each learning moment after user interaction with the mobile app.
    • Writes to userStates collection.
  • POST /api/v1/telemetry/mobile
    • Posts user telemetry data.
    • Writes to mobileTelemetry collection.

More endpoints will be added once JupyterLab support lands.

Schemas

We propose these schemas for each collection.

lms

{
  _id: ObjectId,
  platform: String,
  contentType: String,
  content: Object,
  visibility: String,
}

fcs

{
  _id: ObjectId,
  lm_id: ObjectId,
  type: String,
  content: Object,
  visibility: String,
  source: String,
}

userStates

{
  userId: String,
  lms: Object,
}

// Each lms key-value entry:
lm_id as String key: {
  reviewRecord: {
    correct: Number,
    incorrect: Number,
    skipped: Number,
    know: Number,
    dontKnow: Number,
    oneMore: Number,
    poorCard: Number,
  },
  alg: {
    prevInterval: Number,
    prevFactor: Number,
    nextReview: Date,
  },
  createdAt: Date,
  updatedAt: Date,
}

mobileTelemetry (undecided)

{
  userId: String,
  lm_id: Number,
  eventName: String,
  eventTime: Date,
  selfEval: String,
  testEval: String,
  isBuffer: Boolean,
}

(back to top)

Roadmap

See the open issues for a full list of proposed features (and known issues).

(back to top)

Contact

June Hyung (Jacob) Kim - @jpoly1219 - jpoly@umich.edu

(back to top)

Acknowledgments

(back to top)

About

The authoring side of the spaced repetition app.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages