Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
4c9fd9a
updated content
shreyabhandari0220 Jul 7, 2025
76f9c17
update
shreyabhandari0220 Jul 7, 2025
5c0e7cd
Content update with raw content files
allyqwert Aug 15, 2025
6af37e5
Update package-lock.json
allyqwert Aug 15, 2025
1603e44
Clean up spreadsheet
allyqwert Aug 16, 2025
3e635b5
fix file name error
allyqwert Aug 16, 2025
3f63fe1
content update
allyqwert Aug 16, 2025
700ee62
Update
allyqwert Aug 16, 2025
aa71454
Logic to render OER/License without link
allyqwert Aug 20, 2025
3dd115d
Account for missing license and oer links
allyqwert Aug 21, 2025
936d0a9
content update
allyqwert Aug 21, 2025
e569a8b
update problem rendering code
allyqwert Aug 22, 2025
3993359
Updated Rendering for OER source
allyqwert Aug 22, 2025
70c1955
Update attribution
allyqwert Aug 26, 2025
9b47938
working version before messing with user ids
Dragoknight777 Nov 10, 2025
70062f1
frontend changes
Dragoknight777 Nov 14, 2025
8444a4e
changed to 3 questions
Dragoknight777 Nov 14, 2025
80293b7
Add personalized message API route
aritrod3 Nov 15, 2025
dac9d8e
Show personalized lesson intro
aritrod3 Nov 15, 2025
b103e4e
Load middleware env vars via dotenv
aritrod3 Nov 15, 2025
df15e66
Add logging for personalized message route
aritrod3 Nov 15, 2025
9803930
Move personalized message to lesson confirmation page, remove modal
aritrod3 Nov 17, 2025
5eb59bf
Add LLM-extracted industry to lesson confirmation heading
aritrod3 Nov 17, 2025
08f00ca
Implement personalized lesson messages with industry extraction
aritrod3 Nov 19, 2025
10a802a
Fix timer to start only after both LLM messages are displayed
aritrod3 Dec 1, 2025
6a3359d
Update .gitignore and logger.js
aritro-datta Jan 3, 2026
7823c69
Align GenAI lesson names with problem labels.
aritro-datta Jan 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
node_modules/
/.pnp
.pnp.js

Expand Down
3 changes: 0 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +0,0 @@
[submodule "src/content-sources/oat"]
path = src/content-sources/oatutor
url = https://github.com/CAHLR/OATutor-Content
42 changes: 36 additions & 6 deletions aws/lti-middleware/index.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
require("dotenv").config();

const express = require("express");
const lti = require("ims-lti");
const jwt = require("jsonwebtoken");
Expand All @@ -12,7 +14,6 @@ const to = require("await-to-js").default;
const firebaseAdmin = require("firebase-admin");
const { getFirestore } = require("firebase-admin/firestore");
const serverless = require("serverless-http");
const serviceAccount = require("./oatutor-firebase-adminsdk.json");
const { DynamoDBClient } = require("@aws-sdk/client-dynamodb");
const { DynamoDBDocumentClient, PutCommand, GetCommand} = require("@aws-sdk/lib-dynamodb");

Expand All @@ -39,10 +40,30 @@ const scorePrecision = 3; // how many decimal points to keep
const client = new DynamoDBClient({});
const docClient = DynamoDBDocumentClient.from(client);

firebaseAdmin.initializeApp({
credential: firebaseAdmin.credential.cert(serviceAccount),
});
const firestoredb = firebaseAdmin.firestore()
/**
* Firebase Admin initialization with graceful fallback for local development.
* Allows the server to run without Firebase credentials in local environments.
*
* @author Aritro Datta
*/
let firestoredb = null;

try {
const serviceAccount = require("./oatutor-firebase-adminsdk.json");

firebaseAdmin.initializeApp({
credential: firebaseAdmin.credential.cert(serviceAccount),
});

firestoredb = firebaseAdmin.firestore();
console.log("Firebase admin initialized.");
} catch (err) {
console.warn("Firebase admin SDK missing. Skipping Firebase for local dev.");
}



const personalizedMessageRoute = require("./routes/personalizedMessage");

const app = express();
app.use(express.json());
Expand All @@ -61,6 +82,8 @@ app.use((req, res, next) => {
// trust that the reverse proxy has the correct protocol
app.enable("trust proxy");

app.use(personalizedMessageRoute);

const getLinkedLesson = async (resource_link_id) => {
console.log("getting linked lesson");
const params = {
Expand Down Expand Up @@ -652,4 +675,11 @@ async function catchLegacyLessonID(linkedLesson, provider) {
return linkedLesson;
}

module.exports.handler = serverless(app);
module.exports.handler = serverless(app);

if (require.main === module) {
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log("Backend running locally on port", port);
});
}
14 changes: 14 additions & 0 deletions aws/lti-middleware/logger.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const pino = require("pino");

const logger = pino({
level: process.env.LOG_LEVEL || "info",
base: undefined,
});

module.exports = logger;






Loading