The first security review came with a problem. Before LearnLoop could run inside SUTD's learning platform, EduTech said the original setup would need a S$7K penetration test.

That was more than the project had raised.

I could have treated the review as paperwork, or argued that a student project deserved softer rules. Neither would make the product safer. So I changed the product.

The expensive part was the trust boundary

The original design owned student accounts, exposed public signup and asked for broader LMS access than the tutor needed. Each choice added another place to test and another credential to protect.

I removed public signup. Identity moved to SUTD's EASE SSO through LTI 1.3. The LMS handoff became a single-use code with a 60-second lifetime, consumed atomically with DELETE RETURNING. LearnLoop now requests only the course data required for the tutor.

LearnLoop trust boundary before and after the security redesign
The redesign moved identity back to SUTD, made the handoff single use and cut access to only the course material the tutor needed.

The quoted penetration test was waived because the public website described in the first assessment no longer existed.

Shipping less was part of the fix

The AI tutor is live inside the LMS. It answers from the professor's own slides, cites the exact page and refuses to hand over a final answer when it should teach the method instead.

The grader is different. It touches assessment data, so it stays off while the DPO review is unresolved. That is not a missing toggle. It is the boundary between a useful pilot and an avoidable institutional risk.

LearnLoop answering beside the exact lecture slide it used
The tutor shipped behind university identity and keeps the source slide beside every response.

The lesson was simple: a security review is product feedback. The cheapest system to secure is often the system that owns less.