Table of Contents
Ambient Authoring is a Chrome extension where experts can author learning moments and flashcards.
To get a local copy up and running follow these simple example steps.
- Clone the repo
git clone https://github.com/educational-technology-collective/srs-authoring.git
- Install NPM packages
npm install
- Build the project
npm run build
- Load unpacked extension in Chrome.
- Select
/dist
directory. - Load the extension from Chrome's side panel.
- Go to the assigned Coursera page.
This write-up is a proposal for a new system design for the Ambient Learning project.
Below is the system design flowchart of the project.
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.
There will be whitelisted users data inside Auth0.
MongoDB is the database of choice here. The project will use four collections and one view:
lms
fcs
userStates
mobileTelemetry
userStates_fcs
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)
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.
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.
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.
We propose these schemas for each collection.
{
_id: ObjectId,
platform: String,
contentType: String,
content: Object,
visibility: String,
}
{
_id: ObjectId,
lm_id: ObjectId,
type: String,
content: Object,
visibility: String,
source: String,
}
{
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,
}
{
userId: String,
lm_id: Number,
eventName: String,
eventTime: Date,
selfEval: String,
testEval: String,
isBuffer: Boolean,
}
See the open issues for a full list of proposed features (and known issues).
June Hyung (Jacob) Kim - @jpoly1219 - [email protected]