feat: volunteer work section with timeline integration#101
feat: volunteer work section with timeline integration#101rorar wants to merge 17 commits intovincentmakes:mainfrom
Conversation
The public page was passing data.volunteer (undefined) instead of data.volunteer_work, causing the volunteer section to render empty when the timeline fallback path was used. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- rules.allium: add volunteer_work to SaveDataset, LoadDataset, and DatasetAutoSave ensures clauses; active_volunteer_work was declared in the given block but missing from all three rules - surfaces.allium: add dataset.volunteer_work where visible = true to PublicCV exposes block Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Security: - Tracking code XSS: add allowlist validation at PUT /api/settings/:key and defensive script-tag check in getTrackingCode() - Volunteer role title XSS: stripHtml() before storing roles - Volunteer org/desc XSS: stripHtml() on organization and description - File upload path traversal: strict regex + path.resolve() check on all three logo PUT endpoints (experiences, certifications, education) - Dataset slug XSS: escapeJsString() on all DATASET_SLUG assignments - performImport now sanitizes imported volunteer data Input validation: - MAX_ORGANIZATION_LENGTH=200, MAX_DESCRIPTION_LENGTH=2000, MAX_ROLE_TITLE_LENGTH=100, MAX_ROLES_COUNT=20 - Organization required; length and array limits enforced on POST/PUT Performance: - 10 composite indexes on (visible, sort_order) for all tables - JSON_SAFE_PARSE used consistently at all 9 volunteer roles locations - Added country_code column to volunteer_work table Bug fixes: - Volunteer DELETE now returns 404 if record not found - ATS PDF skips empty role titles - Static export key renamed to volunteer_work for consistency Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ine sort stability - S12: /v/:slug now only serves datasets with is_public=1 (default datasets are served exclusively at /) - CQ4: Volunteer cards include itemscope itemtype="https://schema.org/OrganizationRole" with itemprop="organization" and itemprop="description" for SEO/ATS - CQ5: Timeline sort now uses volunteer_work.sort_order as secondary tiebreaker when start_date ties exist, ensuring stable ordering Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fixes missing translation key used in Volunteer Work form. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaces hardcoded "Present" placeholder with i18n function in volunteer role date inputs (admin.js). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
Thanks @rorar and the security hardening is appreciated. Thanks again for the work. |
Summary
Test plan