← All templates

Student Portal

Education · React + Node (Express) · 18 @molecule/* packages

PowerSchool-like student portal with schedule, grades, attendance, and messages — with built-in Stripe-backed subscription tiers

Open in Molecule

What is inside

  • auth
  • notifications
  • calendar
  • subscriptions

Screens (18)

  • Landing /
  • Login /login
  • Signup /signup
  • ForgotPassword /forgot-password
  • ResetPassword /reset-password
  • Dashboard /dashboard (signed in)
  • Schedule /schedule (signed in)
  • Grades /grades (signed in)
  • Assignments /assignments (signed in)
  • Calendar /calendar (signed in)
  • Messages /messages (signed in)
  • Attendance /attendance (signed in)
  • Settings /settings (signed in)
  • AssignmentDetail /assignments/:id (signed in)
  • CourseDetail /courses/:id (signed in)
  • MessageThread /messages/:id (signed in)
  • ReportCard /grades/report-card (signed in)
  • Notifications /notifications (signed in)

Data model (12 tables)

  • announcements — id, user_id, school_id, audience, icon, title, body, pinned, …
  • assignments — id, course_id, course_name, user_id, title, description, due_date, points, …
  • attendance — id, user_id, course_id, date, weekday, status, classes, note, …
  • courses — id, school_id, term_id, teacher_id, name, subject, room, syllabus, …
  • devices — id, createdAt, updatedAt, userId, name, pushPlatform, pushSubscription, hasPushSubscription
  • grades — id, user_id, course_id, course_name, subject, term_id, score, letter_grade, …
  • messages — id, user_id, recipient_id, recipient_email, thread_id, sender_name, content, read_at, …
  • notifications — id, createdAt, updatedAt
  • report_cards — id, user_id, term_id, generated_at, payload, created_at
  • schedule_entries — id, user_id, course_id, course_name, subject, teacher, room, period_label, …
  • schools — id, name, domain, created_at, updatedAt
  • terms — id, school_id, name, start_date, end_date, created_at

API (7 handlers)

  • \_seed api/src/handlers/_seed.ts
  • announcements api/src/handlers/announcements.ts
  • assignments api/src/handlers/assignments.ts
  • attendance api/src/handlers/attendance.ts
  • grades api/src/handlers/grades.ts
  • messages api/src/handlers/messages.ts
  • schedule api/src/handlers/schedule.ts

Subscription tiers

free / pro / team — gated by: maxAnnouncements, maxAttendance, maxGrades, maxMessages, maxSchedule, advancedFeatures, canExport, retentionDays

Built from 18 @molecule/* packages

Browse all @molecule/* packages →

Required secrets

  • DATABASE_URL PostgreSQL connection string
  • MAILGUN_API_KEY Mailgun API key

The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing