Register 3 Pages + MEMORY.md Cleanup
Key Decisions
3-page wizard over single form
Each step has distinct UX requirements and can fail independently. Multi-page is more resilient (partial completion survives refresh).
GitHub linking optional
Forcing GitHub linking at registration would block users who use other hosting. Optional step with "skip" maintains accessibility.
PKCE for GitHub OAuth2
PKCE (Proof Key for Code Exchange) is required for public clients (browser-side). No client secret stored in frontend.
MEMORY.md cleanup
Files over 24KB trigger warnings. Pruning inline detail to topic files is the standard maintenance pattern.
Background
New user onboarding required a multi-step registration flow. The existing auth flow jumped directly from OAuth callback to the main dashboard with no profile setup step. Sprint 101 introduces a 3-page registration wizard and performs MEMORY.md housekeeping.
Goals
- Create
/registerpage (registration entry, OAuth provider selection) - Create
/register/profilepage (display name, avatar, study preferences) - Create
/register/githubpage (GitHub account linking for submission tracking) - Clean up MEMORY.md entries older than 30 sprints
Work Summary
| Commit | Agent | Content |
|---|---|---|
a1b2c3d | architect | RegisterLayout + 3 page skeletons |
e4f5g6h | herald | i18n keys for registration flow (KR + EN) |
i7j8k9l | architect | Profile form — display name + avatar upload |
m0n1o2p | architect | GitHub linking — OAuth2 PKCE flow |
q3r4s5t | scribe | MEMORY.md cleanup — removed Sprint 60–70 inline detail |
Changes
Page Structure
app/[locale]/register/
layout.tsx — RegisterLayout (stepper + progress indicator)
page.tsx — Step 1: Registration entry
profile/
page.tsx — Step 2: Profile setup
github/
page.tsx — Step 3: GitHub linking
Registration Flow
-
/register— Entry page. Displays "Complete your profile to get started" CTA. Shows current OAuth provider (Google/GitHub). "Continue" button advances to/register/profile. -
/register/profile— Display name input (2–30 chars, profanity filter), avatar upload (≤2MB JPEG/PNG, cropped to 200×200), study timezone selection. "Save & Continue" →/register/github. -
/register/github— GitHub OAuth2 PKCE flow to link a separate GitHub account for submission file tracking. "Skip for now" allowed — GitHub linking is optional.
Stepper Component
<RegisterStepper
steps={[
{ label: t('stepRegister'), href: '/register' },
{ label: t('stepProfile'), href: '/register/profile' },
{ label: t('stepGithub'), href: '/register/github' },
]}
currentStep={currentStep}
/>
MEMORY.md Cleanup
- Removed inline detail for sprints 60–70 (moved to topic files in
.claude/projects/memory/) - Reduced MEMORY.md from 28KB to 18KB
- Preserved sprint index entries (1-line summaries retained)
Verification
| Item | Result |
|---|---|
/register renders correctly | ✅ |
/register/profile — form validation | ✅ |
/register/github — PKCE flow | ✅ |
| Stepper progress indicator | ✅ |
| i18n KR + EN | ✅ |
tsc --noEmit | ✅ 0 errors |
Decisions
- 3-page wizard over single form: Each step has distinct UX requirements and can fail independently. Multi-page is more resilient (partial completion survives refresh).
- GitHub linking optional: Forcing GitHub linking at registration would block users who use other hosting. Optional step with "skip" maintains accessibility.
- PKCE for GitHub OAuth2: PKCE (Proof Key for Code Exchange) is required for public clients (browser-side). No client secret stored in frontend.
- MEMORY.md cleanup: Files over 24KB trigger warnings. Pruning inline detail to topic files is the standard maintenance pattern.