TrityShield web console

Project charter · issued 12 October 2026

TrityShield Web Console

The class builds the frontend of a browser console where SOC analysts review scam and phishing verdicts, triage them and report trends. The server is live and the design is finished. This page holds the charter, the team roles and the team lead vote.

API documentationtrityshield.nohup.me/docsSwagger UI for the live server. UI designdesign.nohup.meThe finished design. Build to match it.
Starter repositoryLink coming from the instructorClone it and set up your project there.

Project overview

The class will build the TrityShield Web Console: a browser app where SOC analysts review scam and phishing verdicts, triage them, and report trends. The backend already exists.

What TrityShield is

A scam and phishing detector for university students. Users connect Gmail or Outlook, paste messages, upload screenshots, or forward content through Telegram and WhatsApp bots. Each item gets a verdict:

What already exists

Five Go microservices behind a Caddy HTTPS gateway: auth, user, detection, email and bots. Each has a REST/JSON API with an OpenAPI spec, browsable in Swagger UI at /docs/. The server is live and the UI design is finished. The frontend is what is missing.

What the class builds

A web console that turns these verdicts into SOC work: a triage queue, case detail with evidence, analyst feedback on verdicts, and dashboards of scam activity.

Getting started

The server is live and the design is finished, so the team builds the real console from day one. There is no mock-server stage.

  1. Clone the starter repository (link at the top of this page).
  2. Choose your frontend stack together (see Technology choice) and set up the initial project inside the repo.
  3. Put the API base URL, https://trityshield.nohup.me, in one config file, not scattered through the code.
  4. Register your own test account with POST /auth/v1/register and a made-up email address. Read the request rules before you start calling the server.
  5. Work on branches and review each other's changes before merging.

Purpose and objectives

The project gives students hands-on SOC triage practice on real detection output, while producing a console the product can use.

Learning objectives

By the end, each student can:

  1. Triage a phishing or scam alert from its evidence: sender, subject, reasons, signals and score.
  2. Explain why a verdict is right or wrong, and record a false positive or false negative with a justification.
  3. Map common scam types to MITRE ATT&CK techniques (for example T1566 Phishing) and to a response action.
  4. Read an OpenAPI spec and integrate a web client with an authenticated REST backend.
  5. Apply secure web practices: token handling, least privilege, input validation, OWASP Top 10.
  6. Write an incident report and a weekly threat summary for a non-technical audience.

Product objectives

The console must:

  1. Show analysts a prioritised queue of suspicious and dangerous verdicts.
  2. Capture analyst feedback that can be used to tune the scoring thresholds.
  3. Report trends: volume by label, scam type, channel and time.
  4. Never expose more user data than the backend already keeps (previews, not full messages).

Scope

The class owns the web console frontend only. The backend is live and belongs to the instructor.

In scope

FeatureWhat it doesPriority
Design matchScreens and components follow the design at design.nohup.meMust
Sign-inEmail and password login, logout, session expiry handlingMust
Triage queuePaged list of verdicts, filter by label, channel, scam type and date, sorted by scoreMust
Case detailPreview, sender, subject, score, reasons, and signals grouped by source (heuristic, reputation, AI)Must
Manual analysisPaste text or upload a screenshot (PNG, JPEG, WebP up to 8 MB) and see the verdictMust
DashboardCounts and trends by label, scam type and channel over 7, 30 and 90 days, worked out from the signed-in user's verdictsMust
Analyst workflowCase status (new, in review, closed), notes, true or false positive. Saved in the browser, because the API has no endpoint for itShould
Indicator viewSenders and domains that recur across dangerous verdictsShould
ReportsExport a case or weekly summary to PDF or CSVShould
ATT&CK mappingTag each scam type with a technique and a playbook linkCould
Live updatesNew dangerous verdicts appear without refresh (polling no faster than every 30 seconds)Could

Out of scope

Technology choice

The team chooses its frontend stack. Pick one of four options, the same one for everyone, and write the choice in the README.

OptionWhat it isGood to know
ReactA component libraryLarge ecosystem. You choose your own router and data-fetching library.
VueA progressive framework with single-file componentsGentle learning curve. Official router and state libraries.
AngularA full framework in TypeScriptRouter, forms and HTTP client included. The most to learn up front.
Plain JavaScript with HTMLNo frameworkNo tooling to set up. You write routing, state and rendering by hand.

Backend API and integration

The server is live at https://trityshield.nohup.me. The full contract is in the Swagger documentation at trityshield.nohup.me/docs, which covers the auth, user, detection, email and bots services. The console calls the same address over HTTPS, using REST/JSON.

Conventions

Endpoints the console uses

Paths start at the base URL, for example https://trityshield.nohup.me/auth/v1/login.

PurposeMethod and path
Register a test accountPOST /auth/v1/register
Login, logout, current userPOST /auth/v1/login, POST /auth/v1/logout, GET /auth/v1/me
ProfileGET and PATCH /users/v1/me
Analyse textPOST /detection/v1/analyze
Analyse screenshotPOST /detection/v1/analyze/image (multipart)
Verdict historyGET /detection/v1/analyses?channel=&label=
Verdict detailGET /detection/v1/analyses/{id}
Mail verdictsGET /email/v1/messages, GET /email/v1/messages/{id}

What the API does not offer today

The API serves each signed-in user's own data only. The console therefore works from the verdicts of the account it is signed in with. These are not in the API today:

The team does not wait for these. Build from what the API returns now, keep case status and notes in the browser, and tell the instructor in week 1 if a feature truly needs one of them.

Request rules: keep your requests low

The server is shared by the whole class, and every analysis call behind it costs money. The Swagger "Try it out" button sends real requests too, so the same rules apply there.

Deliverables and acceptance criteria

The team hands in six deliverables. A deliverable is accepted only when every criterion in its row is met.

DeliverableAcceptance criteria
Web console source codeIn the starter repository with a README that names the chosen stack; builds and runs from a clean clone with one documented command; no secrets committed
Working demoAll "Must" features from Scope work against the live server and match the design; a 10-minute live walkthrough
Triage playbookOne page per scam type: what to check, what makes it a true positive, the response, the ATT&CK technique
Incident reportsAt least 3 cases triaged in the console, each with timeline, evidence, verdict and recommendation
Security reviewOWASP Top 10 checklist for the console; findings and fixes; token storage and XSS handling explained; the console follows the request rules
Final presentation15 minutes: problem, demo, a threat trend found in the data, lessons learned

Quality bar for the console

Team structure and roles

Everyone on the team is a frontend developer. Building the console is mandatory for all. On top of that, each person can take one extra role. The instructor is the project sponsor and not part of the team: they provide the server and API changes, approve scope changes and grade.

RoleWhoResponsibilities
Frontend developer Everyone (mandatory) Build screens to the design, connect them to the live API, test their own code, review each other's changes
Team leadVote
1, chosen by team vote Extra role. Plans sprints, runs weekly check-ins, tracks risks, submits deliverables, and still builds features
QA and testing 1 volunteer Extra role. Test plan, browser and phone-width checks, checks every screen against the design
Security review 1 volunteer Extra role. OWASP Top 10 checklist, token and XSS review, watches the request rules
Documentation and demo 1 to 2 volunteers Extra role. README, triage playbook, incident reports, final presentation and demo script

Extra roles are on top of frontend work, not instead of it. The team agrees who takes each one and records it in the README by the end of week 1.

How the team lead is chosen

The team lead is chosen by a digital vote, held in week 1. Press Vote next to Team lead, or open the Vote tab.

  1. Pick one student from the list. If your name is not on the list, add it first. Your name is all that is needed.
  2. Each person votes once and can change the vote until voting closes.
  3. The instructor closes voting. The student with the most votes becomes team lead, and the page shows who was picked.
  4. After a tie, the instructor re-runs the vote.
  5. The instructor is not on the list, cannot vote and cannot be picked.

Milestones and timeline

The project runs 6 weeks. It starts now, in week 8 of the term, and ends around week 14. The team moves to the next phase only after passing its gate. The week numbers below count from the start of the project.

Set up

Week 1
  • Team lead elected
  • Stack chosen
  • Starter repo set up
  • Login works
End of week 1: ready to buildCharter signed, stack in the README

Core console

Weeks 2 to 3
  • Triage queue
  • Case detail view
  • Manual analysis
End of week 3: mid-term demoCore screens work

Workflow and dashboard

Weeks 4 to 5
  • Dashboard, indicators
  • Case status and notes
  • Reports and export
End of week 5: freezeNo new features

Harden and present

Week 6
  • Security review
  • Incident reports
  • Final rehearsal
End of week 6: final demoAll deliverables due

The console uses the live API from the first day. If a Must feature is at risk, drop Could items first.

Constraints, risks and rules of engagement

Rules of engagement

These are pass or fail. Breaking one stops the team's access to the class environment.

Assumptions

Risks

RiskImpactMitigation
The browser blocks calls to the API (CORS)Requests fail in the browserUse your dev server's proxy and tell the instructor the same day
The console needs data the API does not provideQueue and dashboard limited to one account's dataBuild from the signed-in user's verdicts, keep case notes in the browser, raise needs in week 1
Many students share one IP addressLogin and sign-up errors (10 per minute per IP)Log in once and reuse the token; stagger sign-ups
Only 6 weeksUnfinished featuresMust features first, a gate review each phase, drop Could items first
AI provider outageVerdicts marked degradedShow the degraded flag; demo with saved verdicts
Uneven team contributionMissed deliverablesEveryone builds frontend; extra roles agreed in week 1; peer review counts toward the grade

Communication, grading and sign-off

Communication

Grading

ComponentWeight
Working console (Must features, quality bar)30%
Triage playbook and incident reports25%
Security review15%
Final presentation and demo15%
Weekly progress and peer review15%

Sign-off

Each team member signs to confirm they have read this charter and the rules of engagement. The names come from the vote list.

NameRoleDate

TrityShield Web Console · project charter

TrityShield web console · project week 1

Team lead vote

The team lead plans the work, tracks risks and still writes code. First pick your name from the list. If it is not there, add it. Then pick one student to vote for. You can change your vote until voting closes. The instructor is not on the list and does not vote.

Back to the charter

Loading the ballot…

Instructor