DevPortfolio — Requirements

Personas

  • Junior dev — first job hunt, wants a striking portfolio they can scan to a QR code at meetups.
  • Senior IC — wants to share a curated set of side projects with one tap from their iPhone to a recruiter’s screen.
  • Recruiter — receives a portfolio link, scans it, browses the contents on her own phone, or views in AR if she’s curious.

User stories

Setup

  1. First launch shows a 2-screen onboarding (what the app does, “upload your resume to get started”).
  2. User picks a resume PDF from Files, iCloud Drive, or Photos.
  3. The app extracts text via Vision’s VNRecognizeTextRequest, then runs each paragraph through a CoreML text classifier to label it (experience / skill / education / project / other).
  4. The user reviews the classification, can edit labels, and saves.

Portfolio building

  1. After parsing, the app shows the structured portfolio: Profile (name, title), Experience (list of roles), Skills (chips), Projects (cards with titles + descriptions), Education.
  2. Each section is editable — user can rename, reorder, hide.
  3. User can add Projects manually (title, summary, image, link).

Sharing

  1. Tapping “Share” generates a QR code linking to a portfolio URL (devportfolio://portfolio/{id} or https://yourorg.com/p/{id} if you host a redirect).
  2. The recipient can tap the link on their phone (with the app installed) to view; without the app, they see a web view fallback.
  3. Sharing a portfolio always uses the user’s current version (no stale snapshots).

AR mode

  1. From Projects, tap “AR” to enter ARKit mode.
  2. The app detects horizontal planes and places one card per project floating above the plane.
  3. User can tap a card to expand it; pinch to scale; rotate via two-finger drag.
  4. Recording an AR session as a video is supported via RealityKit’s ARView.snapshot(...) over time, or a simpler “save AR screenshot” button.

Privacy

  1. Resume parsing is fully on-device. The PDF is never uploaded.
  2. The CoreML model is bundled, not downloaded.
  3. The portfolio URL points to user-owned data (CloudKit private DB); only the URL holder can resolve it.

Acceptance criteria

  • Cold launch: < 1.5 s
  • Resume parsing (1-page PDF): < 3 s end-to-end on iPhone 13
  • Classifier accuracy on labeled test set: ≥ 80%
  • AR mode FPS: ≥ 30 FPS on iPhone 13 in good lighting
  • AR plane detection: < 5 s to detect first horizontal plane
  • App size including model: < 50 MB
  • Crash-free sessions: ≥ 99.5% in first 7 days post-launch

Non-goals

  • No portfolio web hosting (the QR code can point to a static page you host elsewhere; the iOS app is the canonical viewer).
  • No multi-page resume tracking beyond plain text extraction (no preserving original PDF layout).
  • No collaborative editing.
  • No analytics dashboard (“who viewed your portfolio”) — privacy invasive and out of scope.

Constraints

  • iOS 17+, ARKit-capable device required for AR mode (older iPads work for non-AR features).
  • Apple Developer Program (CloudKit + App Store)
  • The CoreML model must be redistributable under a permissive license (we’ll train ours from open data).

Next: Architecture