Appearance
Track Records & Verification
Track Records are the core documentation artifact of DoCurious. When a user completes a real-world challenge, they create a Track Record -- a multimedia journal of what they did, what they learned, and what they made. Track Records are the permanent, shareable proof of accomplishment that drives XP, badges, portfolios, and social sharing across the platform.
STATUS: BUILT
The Track Record system is fully implemented in the frontend prototype. Store, API, pages, and components are all wired up and functional with mock data. Backend integration is pending.
Spec source: Doc 2 (Challenge System & Track Records), Sections 5--7 | Screen Descriptions: Features, Sections 3--4
My Challenges Page
The My Challenges page is the user's command center for their challenge lifecycle. It is accessible from the dashboard and organizes everything into tabs.
Five-Tab Structure
| Tab | What It Shows | Badge/Count | Visibility |
|---|---|---|---|
| Invitations | Challenges gifted, recommended, or assigned that have not been accepted or declined | Numeric badge showing pending count | Always visible (leftmost tab) |
| In Progress | Challenges the user has started but not yet submitted for verification | -- | Always visible |
| In Review | Track Records submitted and awaiting DoCurious staff review | -- | Always visible |
| Completed | Challenges with verified (approved) Track Records | -- | Always visible |
| Unverified | Track Records that exhausted all verification attempts | -- | Hidden if empty |
Implementation note
The current codebase adds two extra tabs beyond the spec: "From Others" and "Declined." These are additive and do not contradict the spec. The tab IDs are defined as a MyChallengesTab union type in src/types/.
Card Contents Per Tab
Invitations tab -- Each card shows:
- Challenge cover image and title
- Gift message (if present)
- Gifter or recommender name and avatar
- Fulfillment type note (e.g., "Kit -- confirm you've received materials to begin")
- "Accept" and "Decline" buttons
- For school assignments: teacher name, due date, required/optional badge
In Progress tab -- Each card shows:
- Cover image thumbnail and challenge title
- Progress bar with milestone count (e.g., "2 of 5 milestones") or a percentage if no milestones are defined
- Time since started (e.g., "Started 3 days ago")
- "Continue" button that opens the Track Record editor
- "Abandon" link (small, secondary styling; triggers a confirmation dialog)
- Sort options: most recently active (default), date started, alphabetical
In Review tab -- Each card shows:
- Cover image and title
- Submission date
- Review status: "Pending Review" or "In Review"
- Estimated review time (if available)
- "View Submission" link (opens a read-only view of the submitted Track Record)
Completed tab -- Each card shows:
- Cover image and title
- Completion date
- XP earned badge
- Rating (if the user rated the challenge)
- "View Track Record" button
- Multiple completions show a count badge (e.g., "x3") and expand to reveal all Track Records
- Sort options: completion date (default, most recent first), alphabetical
Unverified tab -- Each card shows:
- Cover image and title
- Submission date and rejection count
- Status explanation: "This Track Record was not verified after [X] attempts"
- "View Track Record" link (read-only)
Multiple Completions
Users can complete the same challenge more than once. Each completion generates a separate Track Record with a completion_number field (1, 2, 3...). On the Completed tab, challenges with multiple completions show a count badge and expand to list each Track Record individually.
Empty States
Every tab has a friendly empty state message. Examples:
- Invitations: "No pending invitations."
- In Progress: "Ready to start something new? Explore challenges."
- Completed: "Your completed challenges will appear here."
Track Record Structure
A Track Record is a container that holds an ordered sequence of entries. Think of it as a journal where each entry is a page documenting a moment, step, or reflection.
Track Record Metadata
| Field | Description |
|---|---|
| Challenge reference | Which challenge this documents |
| Completion number | 1st, 2nd, 3rd time completing this challenge |
| Status | draft, submitted, verified, rejected, unverified |
| Cover image | User selects one entry image as the cover; used in galleries and cards |
| Created date | When the Track Record was first created |
| Submitted date | When it was submitted for verification |
| Verified date | When it was approved (if applicable) |
| Storage used | Total bytes of media uploaded to this Track Record |
| Sharing scope | private (default), communities, individuals, or public |
Track Record Entries
Each entry represents a discrete moment or step. Entries are ordered chronologically by creation date. A single entry can contain multiple media types.
Entry fields:
| Field | Details |
|---|---|
| Text | Rich text content. No hard character limit, but the UI encourages concise entries with placeholder text like "What did you do? What did you notice?" |
| Images | Photos uploaded from device. Auto-resized to 1200px maximum dimension (~2MB typical after resize). Multiple images per entry are allowed. |
| Video | Links only (YouTube, Vimeo). No direct video upload. Embedded preview displayed in the entry. |
| Audio | Links only (SoundCloud, Spotify). No direct audio upload or in-app recording. Embedded player displayed if supported. |
| Documents | PDF or DOC uploads. Maximum 25MB per document. |
Entry metadata:
- Created date
- Edited flag (boolean) and edited date (if applicable)
- Associated milestone (if the challenge has milestones)
- Thumbs-up count
- Comment count
Milestone Checkpoints
If the challenge defines milestones, a horizontal stepper or progress bar appears in the Track Record editor showing all milestones. Each milestone has a title and completion checkbox. Users can associate entries with specific milestones via a dropdown selector.
Milestones are informational guides. Completion is not enforced -- the user does not have to check off every milestone before submitting.
Track Record Editor
The editor is where users build their Track Record. It opens automatically when a user starts a challenge (via "Continue" from In Progress, or when first accepting a challenge).
Layout Zones
Challenge Context Bar (top) -- Challenge title linked to detail page, cover image thumbnail, status badge ("Draft" / "Submitted" / "Verified" / "Rejected"). If rejected, a banner shows the rejection reason and a "Revise and Resubmit" prompt.
Milestone Progress (conditional) -- Shown only if the challenge defines milestones. Horizontal stepper with checkboxes. Clicking a milestone scrolls to associated entries.
Entry List (scrollable) -- The core editing area. Each entry is a block containing:
- Entry header (auto-incremented number, creation date, milestone dropdown)
- Rich text editor
- Media section with "Add Photo," "Add Video Link," "Add Audio Link," and "Add Document" buttons
- Reorder handle (drag to reorder) and delete button (with confirmation dialog)
- "+ Add New Entry" button at the bottom
Storage Indicator + Actions Bar (fixed bottom) -- Storage meter, cover image selector, auto-save indicator, "Submit for Review" button, and "Abandon Challenge" link.
Auto-Save
The editor auto-saves continuously. A "All changes saved" indicator with a timestamp of the last save appears in the actions bar. There is no manual save button.
Storage Limits
STATUS: BUILT
Storage tracking is implemented in the mock API. The storageUsedBytes field is updated on every media upload and checked against the 100MB limit.
| Media Type | Per-Item Limit | Storage Impact |
|---|---|---|
| Images | ~2MB typical (after 1200px auto-resize) | Counts against 100MB |
| Video | N/A (link only) | No storage impact |
| Audio | N/A (link only) | No storage impact |
| Documents | 25MB per document | Counts against 100MB |
| Total per Track Record | 100MB maximum | Sum of all uploaded files |
Storage meter behavior:
- Green: under 60% used
- Yellow: 60--80% used
- Red: over 80% used
- At 80%: a warning message appears
- At 100%: all upload buttons are disabled with a "Storage full" message; user must delete existing files to free space
Editing Rules
Track Records follow a tiered editing model that balances user flexibility with verification integrity.
Before Submission (Draft State)
Full editing freedom. The user can:
- Add, edit, reorder, and delete entries
- Add and remove media of any type
- Change any text
- No restrictions whatsoever
- No edit indicators shown
After Submission, Before Verification
The user can still edit entries. Edits do not affect the review process. No edit indicators are shown at this stage.
After Verification (Approved)
The user can still edit text content in existing entries. However:
- Each edited entry displays a permanent "edited [date]" indicator visible to anyone viewing the Track Record
- The "edited" indicator is non-removable once set
- New entries can be appended to the Track Record
- Media cannot be added or removed from existing entries after verification
- The original verified content is not stored separately (no diff or version history)
Why this matters
The editing model preserves the integrity of verified work while letting users fix typos, add reflections, or append new content. The visible "edited" flag signals to viewers that the entry changed after the review.
Verification Workflow
When a user submits a Track Record for verification, it enters the DoCurious staff review queue.
STATUS: BUILT
The full verification workflow is implemented: submit, review queue, approve, reject with templated reasons, re-submission, attempt tracking, SLA tracking with escalation, and unverified terminal state.
Submission Requirements
- The Track Record must have at least one entry
- The Track Record must be in
draftorrejectedstatus - The user must not have already exhausted the maximum verification attempts (3)
What Reviewers Check
Reviewers evaluate three things:
- Completion evidence -- Did the user actually complete the challenge? Is there photographic or written evidence?
- Content appropriateness -- No harmful, offensive, or dangerous content.
- Challenge match -- Is this Track Record about the correct challenge? Not a record of a different activity.
Review Outcomes
| Outcome | What Happens |
|---|---|
| Approved | TR is verified. User receives XP and applicable badges. TR becomes eligible for the public gallery (if sharing scope is set to "public"). |
| Rejected | TR is returned to the user with a rejection reason selected from admin-configurable templates, plus an optional free-text note. User can revise entries and resubmit. This counts as one verification attempt. |
Review SLA
DoCurious staff target a 72-hour turnaround time for Track Record reviews. The system tracks:
- Submission timestamp
- SLA deadline (72 hours from submission)
- Escalation flag -- if the deadline passes without review, the TR is automatically flagged as escalated
- SLA status categories:
on_track,at_risk(within 24 hours of deadline),overdue,escalated
Who Reviews
Only DoCurious staff review Track Records. Vendors do not review TRs for their own challenges. In the school context, teachers with owner or moderator roles in a community can also review Track Records from students in their classes.
Rejection Reason Templates
Staff select from a library of admin-configurable rejection reason templates. Each template has:
- Reason title -- Short label (e.g., "Insufficient evidence")
- Reason description -- Detailed explanation shown to the user (e.g., "Your Track Record doesn't include enough visual evidence that you completed the challenge. Please add photos showing your work.")
- Active flag -- Staff can deactivate templates without deleting them
Staff can also add a custom free-text note alongside the template reason for challenge-specific feedback.
Re-submission After Rejection
When a Track Record is rejected, the user sees a banner in the editor showing:
- The rejection reason (from the template)
- Any custom note from the reviewer
- A "Revise and Resubmit" prompt
The user can then edit their entries and submit again. Each submission counts as one verification attempt.
Maximum Attempts
3 attempts per Track Record. This is a system-wide setting (stored as maxAttempts on the user_challenges record, defaulting to 3).
Each rejection includes standardized, semi-automated guidance explaining:
- Why the attempt failed
- What the user should change before resubmitting
If the user exhausts all 3 attempts, the Track Record moves to Unverified status (see below).
Unverified Track Records
After exhausting the maximum number of verification attempts, a Track Record enters the Unverified state permanently.
| Behavior | Detail |
|---|---|
| Location | Moves to the Unverified tab in My Challenges |
| Message | "This Track Record could not be verified after [X] attempts." |
| Visibility | Still visible to the user; can be viewed and shared |
| Gallery eligibility | NOT eligible for the public Track Record Gallery |
| XP and badges | Does NOT award XP or badges |
| Editing | User can still edit entries |
| Sharing | Can share within communities (sharing settings still apply) |
| Badge display | Displays a visible "Unverified" badge when viewed by anyone |
Track Record Sharing
Track Record sharing is deliberate and controlled by the owner. Each Track Record has independent sharing and permission settings.
Two Permission Types
| Permission | What It Grants |
|---|---|
| View | Can see the Track Record and all its entries |
| Comment | Can view AND post comments on entries (requires view permission as prerequisite) |
Sharing Scope Options
| Scope | Description |
|---|---|
| Private (default) | Only the owner can see it. No one else has view or comment access. |
| Specific communities | Visible to members of selected communities. Owner chooses which communities. |
| Specific individuals | Visible to specific named users. Owner grants access individually. |
| Public | Visible to all DoCurious users. Eligible for the challenge's Track Record Gallery. |
Sharing Link Behavior
If a user shares a link to their Track Record, the link does NOT auto-grant permission. Instead:
- Recipient clicks the link
- If they have permission, they see the Track Record
- If they do not have permission, they see: "This Track Record is private. Request access?"
- Recipient sends an access request
- Owner receives a notification and approves with a permission level choice: view-only or view + comment
Batch Sharing to Communities
Track Records use Pattern B batch sharing (see Communities). The user explicitly selects which communities to share with rather than sharing happening automatically.
Track Record Gallery
Each challenge has a public Track Record Gallery (Tab 2 of the Challenge Detail page). This is the social proof layer -- "here's what others have done."
Gallery Layout
- Masonry grid of Track Record cards
- Each card shows: cover image (or first image from first entry), user display name, completion date, thumbs-up count, entry count badge (e.g., "8 entries")
- Only Track Records with
publicsharing scope appear
Featured Track Records
DoCurious staff can feature 3--5 Track Records per challenge:
- Featured TRs appear in a highlighted row above the main gallery grid
- They carry a "Featured" badge on their card
- Staff select featured TRs from the admin panel
- All featured TRs must already be verified
- Can be unfeatured at any time
Sorting and Pagination
- Sort options: Most Recent (default), Most Popular (by total thumbs-up across entries), Featured First
- Pagination: 12 Track Records per page. "Load More" button (not infinite scroll) loads the next 12.
Comments on Entries
Comments are attached to individual Track Record entries (not the Track Record as a whole). This allows specific feedback on specific moments.
Comment Structure
| Field | Detail |
|---|---|
| Content | Rich text, reasonable length |
| Author | User who posted the comment |
| Timestamp | When posted |
| Threading | One level deep: top-level comments and replies. No deeper nesting. |
| Edit window | Comments can be edited within 15 minutes of posting. After that, they are permanent. |
| Edited flag | Shown if the comment was edited within the window |
Teacher / Instructor Comments
- Teachers can post comments on student Track Record entries from within the school context
- Teacher comments have a visibility setting: "public" (visible to all who can see the TR) or "student-only" (visible only to the student and linked parents of under-13 students)
- Teacher comments are the ONLY comment type that triggers an email notification. All other comments produce in-app notifications only.
Comment Rate Limits (Anti-Spam)
| Limit | Value |
|---|---|
| Per user per entry per 24 hours | 10 comments |
| Per user per day globally | 20 comments |
| Violation message | "You've been busy! You can post more comments tomorrow." |
These limits are admin-adjustable via system configuration.
Thumbs Up on Entries
Individual entries (not the TR as a whole) can receive a "thumbs up" from viewers:
- One thumbs up per user per entry (toggle on/off)
- Visible count displayed on the entry
- No downvote or negative reaction
- Thumbs-up count contributes to "Most Popular" sorting in the gallery
Scrapbook Templates
STATUS: BUILT
7 of 9 scrapbook templates are implemented as React components with Storybook stories. Two templates (Visual Journal and Wall of Achievement) are not yet built.
Scrapbook templates are visual layouts for displaying Track Record content. They transform the same underlying data into different visual presentations.
Available Templates
| Template | Style | Best For | Status |
|---|---|---|---|
| Classic Scrapbook | Layered photos at angles, washi tape strips, sticky notes | Personal keepsakes, fun presentations | Built |
| Evidence Board | Investigation-style board with pinned items and string connections | Detective/mystery challenges, research projects | Built |
| Field Log | Structured field notes with observation-style formatting | Nature challenges, outdoor exploration, scientific activities | Built |
| Journal Spread | Open journal/diary layout with handwriting-style elements | Reflective challenges, writing-focused activities | Built |
| Modern Minimalist | Clean, contemporary layout with generous whitespace | Professional sharing, portfolio inclusion | Built |
| Passport Stamps | Travel passport with stamp-style entries for each milestone | Travel challenges, multi-location activities | Built |
| Polaroid Wall | Grid of polaroid-style photos with captions | Photography challenges, visual documentation | Built |
| Visual Journal | Image-heavy layout blending photos with artistic elements | Creative arts, visual storytelling | Built |
| Wall of Achievement | Trophy/achievement wall showcasing accomplishments | Milestone celebrations, end-of-year reviews | Built |
STATUS: BUILT
All 9 scrapbook templates are fully implemented as React components with Storybook stories. The ScrapbookPage component acts as the template switcher and supports all templates.
Template Data Model
All templates share a common data interface (ScrapbookLayoutProps):
- Title, description, user name, avatar URL
- Array of entries (each with day, date, title, text, photos, waypoint, type, XP)
- Progress tracking: total days, current day, start date
- Gamification: XP earned, badges, waypoints
Portfolios
STATUS: BUILT
Portfolio creation and export are fully implemented in the frontend with all type definitions, store actions, and UI components for creating, managing, and exporting portfolios.
Portfolios let users compile selected Track Records into shareable, formatted presentations for external audiences like college admissions, job applications, parent conferences, or personal keepsakes.
Portfolio Types
| Type | Created By | Contains | Visibility |
|---|---|---|---|
| Personal Portfolio | Any user (13+), or parent on behalf of under-13 child | User's own verified Track Records | Controlled by creator (private link, public link, or download) |
| Student Portfolio | Teachers for students in their classes | Student's Track Records from school-assigned challenges | Shared with student, parents, and school staff only |
| Class Portfolio | Teachers for their classes | Selected Track Records from multiple students (with permissions) | Configurable: class only, school-wide, or parent access |
Creation Flow (Personal Portfolio)
- Navigate to Profile, click "Create Portfolio"
- Select Track Records from a checklist of all verified TRs (searchable, filterable)
- Arrange order via drag-and-drop
- Add optional context: title, introduction (max 500 characters), section headers
- Choose a visual template
- Preview the portfolio
- Generate in selected format(s)
Output Formats
| Format | Description |
|---|---|
| PDF Download | Formatted document, suitable for email or printing. Warns if over 25MB. |
| Web Link | Hosted page on DoCurious with a unique URL. Can be private, password-protected, or public. Optional expiration date. View count analytics for the creator. |
| JSON Export | Machine-readable format for importing into other systems. |
Portfolio Templates
| Template | Style | Best For |
|---|---|---|
| Clean | Minimal, professional, text-focused | College applications, resumes |
| Gallery | Image-forward, grid layout | Visual/creative work |
| Timeline | Chronological, journey-focused | Showing progression over time |
| Academic | Structured, formal headers | School reporting, IEP documentation |
| Celebration | Colorful, fun, achievement-focused | Personal keepsakes, class shares |
Roles & Permissions
| Action | General User | Student | Parent | Teacher | School Admin | Platform Admin |
|---|---|---|---|---|---|---|
| Create own Track Record | Yes | Yes | Yes | Yes | -- | Yes |
| Edit own Track Record (draft) | Yes | Yes | Yes | Yes | -- | Yes |
| Edit own Track Record (post-verification) | Text only | Text only | Text only | Text only | -- | Text only |
| Submit for verification | Yes | Yes | Yes | Yes | -- | Yes |
| View own Track Record | Yes | Yes | Yes | Yes | -- | Yes |
| View others' Track Records | If shared/public | If shared/public | Child's TRs + shared/public | Student TRs in class | Student TRs in school | All TRs |
| Comment on entries | If comment permission granted | If comment permission granted | On child's TRs | On student TRs (public or student-only visibility) | -- | All |
| Review/verify Track Records | -- | -- | -- | For students in their classes | -- | All submitted TRs |
| Reject Track Records | -- | -- | -- | For students in their classes | -- | All submitted TRs |
| Feature Track Records in gallery | -- | -- | -- | -- | -- | Yes |
| Set sharing scope | Own TRs | Own TRs | Child's TRs (under-13) | -- | -- | Any TR |
| Create portfolio | Yes | Yes (13+) | On behalf of under-13 child | Student and class portfolios | -- | Yes |
| Manage rejection templates | -- | -- | -- | -- | -- | Yes |
Constraints & Limits
| Constraint | Value | Notes |
|---|---|---|
| Max storage per Track Record | 100MB | Sum of all uploaded files (images + documents). Links do not count. |
| Max document size | 25MB per document | PDF and DOC accepted |
| Image auto-resize | 1200px max dimension | Typical ~2MB after resize |
| Max verification attempts | 3 per Track Record | System-wide default. After 3 rejections, TR moves to Unverified. |
| Review SLA target | 72 hours | From submission to review outcome |
| Comment edit window | 15 minutes | After posting, comments become permanent |
| Comments per user per entry per day | 10 | Anti-spam rate limit |
| Comments per user per day (global) | 20 | Anti-spam rate limit |
| Featured TRs per challenge | 3--5 maximum | Selected by DoCurious staff |
| Gallery pagination | 12 TRs per page | "Load More" button, not infinite scroll |
| Thumbs up | 1 per user per entry | Toggle on/off |
| Portfolio introduction | 500 characters max | Optional text on portfolio cover |
| Minimum entries to submit | 1 | TR must have at least one entry to be submittable |
| Track Record default sharing | Private | Must be explicitly changed by the owner |
Challenge Abandonment
A user can abandon a challenge at any time while it is In Progress:
- The challenge is removed from the In Progress tab
- The draft Track Record is preserved (not deleted) but marked as abandoned
- The user can restart the same challenge later, creating a new Track Record
- For Dealer's Choice challenges, abandonment carries XP penalties (see Challenge System)
XP and Gamification Integration
When a Track Record is verified, the gamification system awards XP and checks for badge eligibility.
| Event | XP | Notes |
|---|---|---|
| Challenge completed (verified TR) | Base XP (varies by difficulty) | Beginner < Intermediate < Advanced < Expert |
| Milestone completed | Partial XP per milestone | Proportional to total challenge XP |
| Dealer's Choice completion | Base XP x multiplier (1.5x--2x) | Higher for uncharted categories |
| Dealer's Choice abandonment | Negative XP (symmetric penalty) | Lose same points as would have gained |
| First challenge in a new category | Bonus XP | Encourages breadth |
| Multiple completions (same challenge) | 50% of base XP | Diminishing returns on repeats |
XP calculation formula:
Points = ((Base + Difficulty Factor) + Duration Hours + Venue/Travel Factor + Cost Factor) x Fudge FactorWhere:
- Base value = 22
- Difficulty Factor: Beginner=1.0, Intermediate=2.0, Advanced=4.0, Expert=5.5
- Venue/Travel Factor = 4.0 (if hosted or requires travel, else 0)
- Cost Factor = Log10(1 + Cost in dollars) x 5
- Fudge Factor = 1.0 default (adjustable per challenge by admin for promotions)
Once points are awarded for a completion, they do not retroactively change even if the formula or factors are later adjusted.
Implementation Status
What Is Built
| Component | File | Size | Notes |
|---|---|---|---|
| Track Record Store | src/store/useTrackRecordStore.ts | 15.4KB | Full lifecycle: create, entries, media, submit, verify, reject, comments, teacher review |
| Track Record API (mock) | src/api/trackRecord.api.ts | 34.6KB | CRUD, gallery, comments, verification, SLA tracking, escalation |
| Track Record API (real) | src/api/trackRecord.real.api.ts | -- | Shell for backend integration |
| Track Record Page | src/pages/challenges/TrackRecord.tsx | 40.7KB | Full editor with entries, media, milestones, submission |
| My Challenges Page | src/pages/challenges/MyChallenges.tsx | -- | 5+ tab structure with card rendering per tab |
| TR View component | src/components/trackRecord/TrackRecordView.tsx | -- | Read-only display |
| TR Gallery component | src/components/trackRecord/TrackRecordGallery.tsx | -- | Masonry grid for challenge detail page |
| Entry Card | src/components/trackRecord/EntryCard.tsx | -- | Individual entry display with media |
| Entry Form | src/components/trackRecord/EntryForm.tsx | -- | Entry creation and editing |
| Media Upload | src/components/trackRecord/MediaUpload.tsx | -- | File picker and upload handling |
| Comment Thread | src/components/trackRecord/CommentThread.tsx | -- | Threaded comments on entries |
| Sharing Settings | src/components/trackRecord/SharingSettings.tsx | -- | Scope selector UI |
| TR Revision | src/components/trackRecord/TrackRecordRevision.tsx | -- | Re-submission after rejection |
| Reflection Prompts | src/components/trackRecord/ReflectionPrompts.tsx | -- | Guided reflection questions |
| Add Update Modal | src/components/trackRecord/AddUpdateModal.tsx | -- | Modal for adding new entries |
| Scrapbook templates (7 of 9) | src/components/scrapbook/ | -- | Classic, Evidence Board, Field Log, Journal, Modern Minimalist, Passport, Polaroid |
What Is Not Built
| Feature | Status | Notes |
|---|---|---|
| Visual Journal scrapbook template | Not started | Specified but no component exists |
| Wall of Achievement scrapbook template | Not started | Specified but no component exists |
| Portfolio creation flow | Planned | Type definitions exist; no UI implemented |
| Portfolio export (PDF/Web/JSON) | Planned | No implementation |
| Access request flow for private TR links | Not started | Spec describes the full request/approve UX |
| Public Track Record Gallery on Challenge Detail | Partial | Component exists; wiring to challenge detail tabs may be incomplete |
Cross-References
- Challenge System -- Challenge lifecycle, milestones, difficulty levels, Dealer's Choice mechanics, challenge abandonment
- Communities -- Pattern B batch sharing, community feeds where Track Records appear, class assignments
- School Administration -- Teacher review workflow, student portfolios, class portfolios, SA oversight, COPPA/FERPA considerations for student Track Records
Data Model Reference
The Track Record system uses the following database tables (PostgreSQL, all IDs are UUIDs, all timestamps UTC):
| Table | Purpose |
|---|---|
track_records | Core TR record with status, sharing scope, storage tracking, SLA fields, reviewer info |
track_record_entries | Individual entries with text, milestone link, display order, edit tracking |
track_record_entry_media | Media attachments per entry (images, video links, audio links, documents) |
track_record_entry_votes | Thumbs-up reactions (one per user per entry) |
track_record_permissions | Granular sharing grants to users or communities |
track_record_access_requests | Pending access requests from users who clicked a private TR link |
track_record_comments | Comments on entries with threading, visibility, edit window tracking |
rejection_reason_templates | Admin-configurable rejection reasons with title, description, active flag |
featured_track_records | Staff-curated featured TRs per challenge (max 5) |
user_challenges | Links user to challenge with status, completion number, verification attempts |
user_milestone_progress | Per-milestone completion tracking |
portfolios | Portfolio metadata (type, title, template, status) |
portfolio_track_records | Which TRs are included in which portfolio, with display order |
portfolio_shares | Sharing links for portfolios (private, password-protected, public) |
portfolio_exports | Generated PDF/JSON exports with temporary file storage |