Skip to content

MER-126 admin planning doc#419

Open
SujiChen wants to merge 17 commits intomainfrom
MER-126-Admin-Outreach
Open

MER-126 admin planning doc#419
SujiChen wants to merge 17 commits intomainfrom
MER-126-Admin-Outreach

Conversation

@SujiChen
Copy link
Copy Markdown
Collaborator

No description provided.

@SujiChen SujiChen requested a review from AZ0228 as a code owner February 24, 2026 22:16

### Solution

The Admin Outreach System allows administrators to precisely target students based on attributes such as major, year, enrollment status, and program.
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these are good attribute based targets

Comment on lines +69 to +122
Admin Outreach System

Overview:
Problem
Administrators often struggle with communicating with the right students effectively. Currently, they rely on mass emailing, which results in cluttered inboxes, students ignoring important announcements, and messages not reaching the right people. For example, an admin might just want to contact the class of 2027 computer science students only.
Solution
The Admin Outreach System allows administrators to precisely target students based on attributes, major, year, enrollment status, program, etc.

Goals:
Have targeted communication to specific student groups
Reduce inbox clutter
Improve students engagement

General Features
Student Targeting:
Administrators select recipients using filters such as:
Major / department
Graduation year
Program type (undergraduate, graduate, etc.)
Enrollment status
Dynamic
As the student attribute changes, updates automatically

Philosophy Behind the System
Prioritizes relevant messages instead of mass emailing
Asking what type of student should receive the message
All targeting and messages should be done with clear UI controls



Inspiration from Existing Software
Submitty, Blackboard: Structured announcements for defined groups




Breakdown Into Actionable Tasks
Planning:
students attributes
Admin roles and permissions
Figure out how to get data
Backend
Database schema
Frontend
Admin UI
Student email feed
Delivery
Integrating email and notification



Bugs found while creatin events:
Changin time and location after making an event
For qr code when coping and pasting the hex color the little color box doesnt reflect the right color
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

duplicated?


### Planning

- Define student attributes
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what kind of attributes? it's important for backend set up for schemas


### Frontend

- Build the admin UI
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what would that include? create messages? different filters, like major or year?

Copy link
Copy Markdown
Collaborator

@nicolelin322 nicolelin322 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

overall, I would like to see more parameters declarations and in all backend route just to make it more readable.

Comment on lines +47 to +49
const page = Math.max(1, parseInt(req.query.page) || 1);
const limit = Math.min(50, Math.max(1, parseInt(req.query.limit) || 20));
const skip = (page - 1) * limit;
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

declare all in one line for readability please (example const {page, limit, skip}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

also, do we really need all 3 pagination parameters (would just two suffice)

*/
router.get('/audiences/:id', async (req, res) => {
try {
const { OutreachAudience } = getModels(req, 'OutreachAudience');
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please clearly declare parameters

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

try not to reference directly

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants