Skip to content

XRPL-Commons/syllabus-assistant

Repository files navigation

Syllabus Assistant

A standalone Nuxt 3 app that walks a teacher through designing a course on the XRP Ledger and hands them a ready-to-edit syllabus.

Features

  • Guided flow — a sliding, multi-step questionnaire in two sections:
    • Author info — first/last name, university, GitHub, research profile, publications, CV, areas of expertise.
    • Course — title, topics, audience, duration, prerequisites, objectives, assessment, outline, resources, format, and teacher/student services. Most steps require an answer; prerequisites and resources can be skipped with a confirmation.
  • Prefilled editor — answers are assembled into a structured, editable block-based syllabus (overview, instructor, objectives, outline, and more).
  • Completion view — the finished syllabus rendered as a clean document.
  • Hidden admin dashboard (/admin) — password-gated; shows summary stats, charts (top topics, formats), a table of every submission, and a detail view per submission (author · responses · generated syllabus).

Setup

Data is stored in MongoDB (Mongoose models in server/models/ — submissions, admin lock state, and the seeded activity catalogue).

cp .env.example .env     # then set MONGODB_URI (and ADMIN_PASSWORD)
npm install
npm run dev              # http://localhost:3000

.env:

MONGODB_URI=mongodb://127.0.0.1:27017/syllabus-assistant   # required
ADMIN_PASSWORD=changeme                                    # /admin gate

The app connects to MongoDB on first request and seeds the activity catalogue. Open /admin and enter the password to view submissions.

After 3 failed admin attempts the dashboard locks itself. To unlock, drop the adminstates collection (or set its doc to { locked: false, failedAttempts: 0 }).

File storage (Google Drive) — optional

Uploaded CVs and course resource files can be stored in Google Drive. If the Google env vars are blank, only filenames are kept.

Which folders? Create two folders in your Drive, open each, and copy the ID from the URL (https://drive.google.com/drive/folders/<THIS_ID>):

GDRIVE_CV_FOLDER_ID=<folder for CVs>
GDRIVE_COURSE_FOLDER_ID=<folder for course files>
  • Every CV is uploaded into the CV folder (named <author> — <filename>).
  • For each submission, a new subfolder is created inside the course folder (named <author> — <course title> — <timestamp>) and that submission's resource files go there — so files are never mixed between submissions.

Auth (one-time): uploads use an OAuth refresh token so they count against your own (unlimited) Drive quota.

  1. Google Cloud Console → new project → enable Google Drive API.
  2. OAuth consent screen → External → add yourself as a test user.
  3. Credentials → Create OAuth client ID → Web application → add https://developers.google.com/oauthplayground as an authorized redirect URI. Copy the Client ID and Client secret.
  4. Open the OAuth Playground → gear icon → Use your own OAuth credentials → paste the ID/secret. In the left box enter the scope https://www.googleapis.com/auth/driveAuthorize APIs → consent → Exchange authorization code for tokens → copy the Refresh token.
  5. Set the env vars (locally in .env and in Vercel):
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GOOGLE_REFRESH_TOKEN=...
GDRIVE_CV_FOLDER_ID=...
GDRIVE_COURSE_FOLDER_ID=...

Stored files appear as links in the /admin submission detail (Author CV and Resources). Note: on Vercel the request body is capped (~4.5 MB), so very large files would need a resumable/direct-upload flow.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors