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
Try it
Opens instantly. Runs on sample data, so changes reset on reload.
What is inside
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
@molecule/api-cron-node-cron@molecule/api-database-postgresql@molecule/api-email-templates@molecule/api-emails-mailgun@molecule/api-entitlements@molecule/api-payments-stripe@molecule/api-pdf-pdfkit@molecule/api-permissions-custom@molecule/api-push-notifications-web-push@molecule/api-reporting-database@molecule/api-resource-notification@molecule/api-resource-payment@molecule/api-resource-user@molecule/app-billing-react@molecule/app-calendar@molecule/app-command-palette@molecule/app-data-table@molecule/app-virtual-scroll
Required secrets
DATABASE_URLPostgreSQL connection stringMAILGUN_API_KEYMailgun API key
The @molecule/* packages are Apache-2.0. The app you build from this template is yours to export and self-host. Licensing