Skip to content

docs: propose ADR 0002 for student portfolios - #54

Merged
procoder-ji merged 2 commits into
mainfrom
docs/adr-0002-student-portfolios
Nov 10, 2026
Merged

procoder-ji merged 2 commits into
mainfrom
docs/adr-0002-student-portfolios

Conversation

@Coding-Professional

@Coding-Professional Coding-Professional commented Nov 10, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Closes #41. Part of #40.

Adds docs/decisions/0002-student-portfolios.md, the decision record that the Phase 1 portfolio issues (#42 to #48) build on. It records:

  • One data model, two ways to fill it: an editor form, or a Markdown import that only fills in the editor. No student-written HTML, CSS, JavaScript or MDX; pages render through project-owned themes. A fully editable page is listed as rejected, with reasons.
  • Shared rules under shared/portfolio/, validated in both TypeScript and .NET: field limits, https/mailto: links, username format, reserved names and blocked phishing words.
  • Addresses: /u/<username> in Phase 1; subdomains in Phase 2 via src/proxy.ts, with host-only cookies guarded by a test.
  • State and privacy: one portfolio per account; draft, published and suspended states; opt-in search visibility; no phone or postal address; no photo upload in Phase 1; account deletion deletes the portfolio.
  • Moderation: report link on every page and a documented operator suspend/restore procedure.
  • Open questions for the owner: age requirement, username changes after publishing, the Phase 2 domain choice, and legal wording (Portfolio: privacy, terms and age requirement before launch #48).

The record is linked from docs/README.md, docs/development.md and docs/architecture.md.

Checks

  • All relative links in the changed documents resolve
  • npm run lint / typecheck / test / build (not applicable: documentation only)
  • Browser checks (not applicable)

Review notes

Status is Proposed. The open questions are the owner's decisions; once answered, update the ADR status to Accepted in a follow-up.

Record the proposed model for student portfolios: fixed fields filled
through an editor or a Markdown import, project-owned themes, shared
validation rules, /u/<username> addresses with subdomains later, opt-in
search visibility, and operator moderation. List the decisions that
still need the owner's call. Link the record from the documentation
index, the development guide and the architecture guide.

Refs #41
Copilot AI balanced review requested due to automatic review settings November 10, 2026 08:09

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

@procoder-ji procoder-ji left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Reviewed the four-file diff against ADR 0001, the current Google/cookie/BFF implementation, and issues #40, #41, #43 and #48. No blocking findings for merging this as a Proposed ADR. The fixed portfolio model, shared validation, trusted backend, private draft states and explicit moderation boundary fit the existing architecture.

Checked 27 relative documentation links; all resolve. Frontend and backend CI pass; browser/SEO CI is still running at review time.

Three nonblocking wording/source notes are inline. The owner decisions remain open, and this review does not change the ADR to Accepted or clear the launch prerequisites.

### Address

Phase 1 serves portfolios at `/u/<username>` on the main site. No DNS work is needed, and the
feature can launch as soon as the pages exist.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Nonblocking wording: this launch statement is broader than the prerequisites listed in the status and owner questions. Suggest: 'Phase 1 does not require DNS changes.' Public launch still needs the backend, moderation and owner/legal decisions tracked by #40.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Agreed. Changed to "Phase 1 does not require DNS changes" and added that public launch still needs the backend, moderation, and the owner and legal decisions tracked in #40.


## Open questions for the owner

1. **Age requirement.** India's DPDP Act requires verifiable parental consent before processing

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Nonblocking source/timing clarification for #48: please cite the commencement notification and distinguish the statutory requirement from the proposed product policy. Section 9 is scheduled to commence 18 months after 13 November 2025, so the present-tense statement is premature on this ADR's date. Keeping age/consent review as a launch prerequisite is sensible. Source: MeitY commencement notification.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Thanks, you are right about the timing. The ADR now cites the DPDP Rules, 2025 notification (MeitY, 13 November 2025, G.S.R. 843(E)), states that Section 9 is scheduled to commence 18 months after that date and is not yet in force, and separates the statutory requirement from the proposed 18+ product policy.

3. **Phase 2 domain.** Serve subdomains under `procoderji.com`, or buy a separate domain for
student pages (as GitHub uses `github.io`)? A separate domain protects the main site's
reputation if a page is abused. Wildcard certificates on Vercel need Vercel nameservers or
delegation of the `_acme-challenge` record.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Nonblocking Phase 2 clarification: Vercel's managed wildcard certificate documentation specifies the nameservers method. Please remove the generic _acme-challenge delegation alternative or link a Vercel-supported workflow before treating it as a deployment option in #49. Generic ACME delegation alone does not establish support in Vercel's managed certificate service.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

The alternative is Vercel's own documented workflow: https://vercel.com/kb/guide/wildcard-domain-without-vercel-nameservers (enable Vercel DNS, add NS records for _acme-challenge pointing to Vercel's nameservers, add a wildcard CNAME to cname.vercel-dns-0.com). I kept it and linked that guide next to the nameservers guide so #49 has a supported reference for both options.

Narrow the Phase 1 statement to "no DNS changes required" and point to
the launch prerequisites tracked in #40. Cite the DPDP Rules, 2025
notification and distinguish the statutory timeline for Section 9 from
the proposed age policy. Link Vercel's documented _acme-challenge
delegation guide for the Phase 2 wildcard alternative.
Copilot AI balanced review requested due to automatic review settings November 10, 2026 08:17

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.

@procoder-ji
procoder-ji merged commit 92dd402 into main Nov 10, 2026
3 checks passed
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.

Portfolio: record product and data boundaries in ADR 0002

3 participants