School community.
A school is not only timetables and grades — it is a community. Students who run clubs, teachers who praise a good week, families who cheer a match result, officers who recognise each other. The community module is the shared square where that life happens: one moderated feed, eight ways to react, threaded comments, polls, stories, hashtags, @-mentions, a follow graph, and a recognition layer of badges and reputation. This handbook opens the real feed — the pre-moderation model, the eight reactions, and the honest edges — grounded in the code, not the brochure.
- 8reaction types
- 7post types
- 5post statuses
- ≈13 minto read
Prologue
The shared square#
Most platforms treat the social layer as a decorative feed widget in a corner of the page. YESS treats it as the shared square: the one place the whole school gathers, moderated with the same care as the classroom. A post can be a photo of the science fair, a poll about the club logo, a milestone the alumni office wants celebrated, or a teacher's shout-out to a student who turned a term around.
Under the surface there is one canonical table — the feed was unified into a single post model, so there is no fork between "the feed" and "posts." Every post rides the same moderation gate, the same eight reactions, the same comment thread. This chapter is honest about which of the square's benches are built and which are still being carpentered: the feed, reactions, polls, stories, hashtags, mentions, and following are real; comment moderation and audience scoping are named plainly as the edges.
A feed that makes a school feel like one place — moderated so it stays that way.
Chapter one
One feed, one canonical table#
The main feed lives in the portal at /portal/social. Students, parents, and staff all read the same square from here, filtered by All / Following / Pinned / Mine. Every post is a row in one canonical posts table — an earlier split between two social systems was deliberately collapsed into this single model, so the feed you see and the posts an author writes are the same thing.
What a post carries
- 1
Content + media
Text plus an optional list of media URLs. A post also has a type — text, photo, video, poll, story, milestone, or event recap — that shapes how it renders.
- 2
A moderation status
Every post carries a status: draft, pending, approved, rejected, or archived. Only approved, active posts appear in the public feed; the author always sees their own, whatever the status.
- 3
Visibility
A post has a visibility scope — public, members-only, or club-only — in the schema. In practice today the composer always posts public; the tighter scopes exist in the data model but are not yet exposed in the UI.
- 4
Live counts
Reaction and comment totals are denormalised onto the post and kept in sync by database triggers, so the feed never has to count them on every render.
- 5
Pins & flags
A moderator can pin a post to the top of the feed, and any post can be flagged for review — the flag is what routes it into the moderation console's Flagged tab.
Chapter two
Posting, and the moderation gate#
The defining feature of the square is that it is moderated before it is seen, not policed after. When a post is created, a database trigger decides its fate the instant it is inserted: if the school's moderate student posts setting is on (the default) and the author is not a moderator, the post lands as pending and is held back from the public feed; otherwise it is approved immediately with the approval stamped on the row.
The moderation console
Staff moderators work the queue at /dashboard/social-feed — a permission-guarded console with Create, All-posts, Moderate (the pending queue), and Flagged tabs. Approving or rejecting a post calls a database function that records the decision, writes a moderation log and an audit entry, and notifies the author. On the Flagged tab a moderator can restore, hide (archive), or delete a post; each action is logged against the content it touched.
Officers can moderate too
Moderation is not staff-only. An elected student-government officer whose position grants "can moderate content" is treated as a moderator by the same rules — they can approve pending posts and act on flags exactly as a staff moderator does, without holding the staff permission. A school with a healthy peer-moderation culture can lean on its prefects; one that would rather keep it in the staffroom simply does not grant that officer power.
Chapter three
Reactions, comments & engagement#
A square needs more than posts. YESS carries a full engagement layer, most of it fully wired.
Eight reactions
A reader reacts with one of eight types — like, love, celebrate, support, insightful, funny, thoughtful, and applause. Each carries its own icon and tone; a user has exactly one reaction per post (tapping the same one again removes it, tapping a different one swaps it). "Celebrate" and "applause" are the reactions a recognition post is built for.
Comments
Comments are threaded in the schema — a comment can reply to another — and any school member can leave one. They post live: a comment appears immediately, and while the database keeps a flag for review, there is no comment-approval queue today. If your feed copy mentions a comment being "submitted for approval," treat that as aspirational — comments are not held back.
Polls, stories, and the rest
- Polls. A post can carry a poll (2-10 options, single or multiple choice, optional close time); voting goes through a function that enforces the rules and tallies live.
- Stories. Ephemeral media that expires (24 hours by default, up to 48); a scheduled job purges expired ones, and each opens in a story viewer at /portal/social/stories/[id].
- Hashtags. Parsed from a post, counted, and surfaced as trending; a tag opens its own feed at /portal/social/hashtag/[tag].
- @-mentions. Mentioning someone notifies them (and re-notifies on approval if the post was held); a person's mentions collect at /portal/social/mentions.
- Bookmarks. A reader saves a post privately to /portal/social/bookmarks — visible only to them.
- Following. A follow graph powers the Following filter, so a reader can narrow the square to the people they care about.
Chapter four
Recognition and reputation#
The square also keeps score of good citizenship. A school defines community badges — each with a code, a label, a tier (bronze, silver, gold, platinum), and criteria — and awards them to a profile with a reason attached. Badges are authored and granted from the communication cluster; the community hubs link across to them.
Alongside badges, each profile carries a reputation score that rolls up its helpful replies, best answers, appreciated posts, petitions signed, and badges into a single number. The scoring formula is real and the score is stored per profile; recomputing it runs as a scheduled job rather than instantly on every action, so a profile's reputation refreshes on the platform's cadence, not the second a badge is awarded.
Chapter five
Who sees, and who moderates#
The square is governed by permissions, and the defaults matter.
- Teaching staff can view and post by default.
- Students can view by default but cannot post unless the school grants them the create permission through a custom role — so the "moderate student posts" queue only fills once a school has actually let students post.
- Parents can view the feed; per the database rules they can react, comment, and bookmark, but not author posts.
- Admin, owner, principal, vice-principal can moderate; so can elected student officers with the content- moderation power.
Staff reach the square through the hub at /dashboard/community and the moderation console; families and students reach it through the portal hub at /portal/community and the feed. The hubs themselves are navigation aggregators — they gather events, elections, student government, forums, the feed, clubs, and recognition into one landing, and do not mutate anything.
Chapter six
What makes the community module elite#
Five things done properly
- 1
Pre-moderation by trigger
A post's status is decided the instant it is inserted, by a database trigger reading the school's moderation setting — not by hope that a moderator gets to it before a bad post spreads. Held posts never reach the public feed.
- 2
One canonical feed
The earlier fork between two social systems was collapsed into a single post model, so there is no drift between 'the feed' and 'posts' — one table, one moderation gate, one set of reactions.
- 3
Peer moderation, safely
Elected student officers with the content-moderation power moderate exactly like staff, through the same rules — so a school can genuinely hand its prefects the square, or keep it in the staffroom, by a single permission.
- 4
Eight reactions, one per user
Beyond a like: celebrate, support, insightful, thoughtful, applause — the vocabulary a school actually uses to encourage. One reaction per user per post keeps the counts honest.
- 5
A recognition layer
Badges in four tiers and a rolled-up reputation score turn the feed from chatter into a record of good citizenship — the celebrate reaction and the gold badge on the same post.
Planned & honest gaps
What is still to come#
The core square — feed, moderation, reactions, polls, stories, hashtags, mentions, following, badges — is fully built and wired. A few edges are scaffolded in the data model but not yet finished in the interface; they are named here rather than glossed over.
Four honest gaps
- 1
Comment moderation
Posts are pre-moderated; comments are not. The schema keeps a flag but there is no comment-approval queue, and comments post live. Any 'submitted for approval' copy on a comment is aspirational today — a proper comment-moderation flow is the planned work.
- 2
Audience scoping
A post can be public, members-only, or club-only in the data model, but the composer only ever posts public — the tighter scopes, along with club-only and campaign posts, exist in the schema without a UI to set them yet.
- 3
Instant reputation
Reputation is computed by a scheduled recompute rather than instantly when a badge is awarded or an answer is accepted, so a profile's score refreshes on a cadence. Live, event-driven reputation is planned.
- 4
Content auto-parse
Hashtags and mentions are captured reliably today through explicit pickers and best-effort parsing; fully automatic in-line parsing of every @ and # from free text as you type is a planned refinement.
Adjacent modules
Where the community connects#
The community feed is one bench in a wider square. It shares the notifications fabric, the portals, and the student-life cluster that runs clubs, elections, and student government.
Adjacent modules
- 15Communication hubThe feed is one of the thirteen chapters of the communication cluster; badges and recognition are authored from there.
- 13Student life & conductClubs, elections, and student government share the square — and it is student officers who can moderate the feed.
- 17NotificationsApprovals, @-mentions, comments, and best-answer signals fan out to the right person through the notifications fabric.
- 16Parent & student portalsStudents and families read the feed, react, comment, bookmark, and follow entirely from the portal.
- 47Parent-teacher conferencesThe other adult-facing communication surface — booked slots and reminders — sits beside the community feed in the same cluster.
Tutorial
Do it step by step#
Set the square up and run one recognition moment through it. Five steps, in the order a school actually opens its community.
- 1
Decide the moderation stance
In the communication settings, choose whether student posts are moderated before they are seen (on by default) and whether students may post at all — students are view-only until you grant them the create permission through a role.Start moderated. You can always relax the gate once you've seen how your year groups use the square.
- 2
Open the feed
Staff and students read the square at /portal/social and the hubs at /portal/community and /dashboard/community. Filter by All, Following, Pinned, or Mine. - 3
Post, react, and thread
Compose a post — text, photo, a poll, or a story. Readers react with one of eight reactions and reply in threaded comments. A post worth its own page opens as a mini-world at /portal/social/posts/[id]. - 4
Work the queue
Moderators clear the pending and flagged queues at /dashboard/social-feed — approve, reject with a reason, pin, hide, or delete. Every decision is logged and the author is told. Elected officers with the moderation power work the same queue.The staff moderation permission ships to admin, owner, principal, and VP only — attach it to a custom role to appoint a dedicated feed moderator.
- 5
Recognise good citizenship
Celebrate a moment on the feed, then award the matching community badge (bronze to platinum) with a reason. Badges and reputation turn the square from chatter into a record of who lifts the school.
A square the whole school reads, moderated so it stays kind, and a recognition layer that remembers who made it better.