Skip to content

feat(profile): add structured profile modules, copy controls, and section settings (#3)#20

Merged
leobrqz merged 4 commits intomainfrom
feat/profile-sections
Mar 23, 2026
Merged

feat(profile): add structured profile modules, copy controls, and section settings (#3)#20
leobrqz merged 4 commits intomainfrom
feat/profile-sections

Conversation

@leobrqz
Copy link
Copy Markdown
Owner

@leobrqz leobrqz commented Mar 23, 2026

Summary

Implemented a full structured Profile experience with new section domains, attachment support, copy ergonomics, and settings-driven behavior.

  • New profile sections: About me, Skills, Experience, Projects, Certifications, Courses, Education
  • Cert/Course attachments support create + edit flows (.pdf, .png, .jpg, .jpeg) with verification links
  • Profile layout/order updated; Certifications and Courses rendered side-by-side
  • UX fixes: pointer on clickable titles, Skills gear tooltip, inspect dialogs with copy actions
  • Type fixes after API regen in Applications table + null-guards in cert/course create flows

Changes

Backend:

  • backend/alembic/versions/add_profile_structured_sections.py: migration for experience/education/projects/skills tables.
  • backend/alembic/versions/add_profile_certifications_courses_about_me.py: migration for certifications/courses/about-me tables.
  • backend/app/main.py: registers all new profile routers.
  • backend/app/models/__init__.py: registers new profile models.
  • backend/app/models/profile_experience.py, profile_education.py, profile_project.py, profile_skill.py: normalized structured profile models + ordered nested entities.
  • backend/app/models/profile_certification.py, profile_course.py, profile_about_me.py: certification/course/about-me models.
  • backend/app/schemas/profile_experience.py, profile_education.py, profile_project.py, profile_skill.py, profile_certification.py, profile_course.py, profile_about_me.py: create/update/response/reorder schemas with field validation.
  • backend/app/services/profile_experience.py, profile_education.py, profile_project.py, profile_skill.py: CRUD + reorder + reindex logic.
  • backend/app/services/profile_certification.py, profile_course.py: CRUD + reorder + attachment upload/remove/download flows.
  • backend/app/services/profile_about_me.py: get/update singleton About me.
  • backend/app/routes/profile_experience.py, profile_education.py, profile_project.py, profile_skill.py, profile_certification.py, profile_course.py, profile_about_me.py: REST endpoints for all sections, nested resources, reorder, and attachments.
    Frontend:
  • Services/hooks added for all new sections:
    • frontend/apps/web/services/profile-*.service.ts
    • frontend/apps/web/hooks/useProfile*.ts
  • frontend/apps/web/types/api.generated.ts, frontend/apps/web/types/index.ts: generated and exported types for new APIs.
  • New profile UI sections:
    • frontend/apps/web/app/profile/ExperienceSection.tsx
    • frontend/apps/web/app/profile/EducationSection.tsx
    • frontend/apps/web/app/profile/ProjectsSection.tsx
    • frontend/apps/web/app/profile/SkillsSection.tsx
    • frontend/apps/web/app/profile/CertificationsSection.tsx
    • frontend/apps/web/app/profile/CoursesSection.tsx
    • frontend/apps/web/app/profile/AboutMeSection.tsx
    • frontend/apps/web/app/profile/profile-section-utils.ts
  • frontend/apps/web/app/profile/page.tsx: order set to Resumes, About me, Skills, Experience, Projects, Certifications|Courses, Education.
  • frontend/apps/web/app/settings/page.tsx: Profile Sections card + Skills copy format preference.
  • frontend/apps/web/app/profile/SkillsSection.tsx: gear tooltip + copy format integration.
  • frontend/apps/web/app/profile/CertificationsSection.tsx, CoursesSection.tsx: create-time attachment selection + edit add/remove kept + clickable inspect titles.
  • frontend/apps/web/app/applications/ApplicationTable.tsx: pointer cursor on clickable title + type compatibility fix.

Notes

leobrqz added 4 commits March 23, 2026 15:34
Introduce structured profile support for Experience, Education, Projects and Skills.

- Adds new SQLAlchemy models, Pydantic schemas, CRUD/reorder services and FastAPI routes for each section, and registers the routers in main.py
- Includes an Alembic migration to create the new tables and indexes
- Adds frontend components, hooks and services for the new profile sections and updates generated types and profile page usage to integrate the new UI pieces
Introduce backend and frontend support for profile certifications, courses, and an About Me section.

- Backend: add Alembic migration and SQLAlchemy models (certification_entry, course_entry, profile_about_me), Pydantic schemas, services (CRUD, reorder, attachment upload/download/ removal with file storage and allowed MIME types), and FastAPI routes wired into main.py and models __init__.py
- Frontend: add React sections, hooks, and services to list/create/update/delete/reorder entries and manage attachments, and include the new sections on the profile page. Services reindex display_order on changes and validate inputs/dates
- Enable file attachments for Certifications and Courses: remove hidden file inputs and upload-target refs, add selectedAttachment state, show file input in the create/edit dialog, and upload the file when saving (with success/error toasts)
- Fix typing in ApplicationTable by adding generic 'any' to ColumnDef casts
- Reorder profile page sections: move About Me and Skills earlier, group Certifications and Courses into a two-column grid, and move Education below those sections
Enable copying and inspection of profile sections and add a user preference for skills copy format.

- About Me: add copy and edit dialog (increase textarea rows), import dialog components and use copyText util
- Certifications & Courses: add inspect dialogs with InspectRow and copy buttons, import copyText and allow viewing details in a modal
- Skills: add settings link/tooltip, usePreference for copy format (bullet vs comma) and update group copy behavior accordingly
- Settings page: add Profile Sections card to configure the skills copy format
- Also minor UI tweak: make application table button show pointer cursor
@leobrqz leobrqz self-assigned this Mar 23, 2026
@leobrqz leobrqz added enhancement Improves a feature feature New feature labels Mar 23, 2026
@@ -0,0 +1,87 @@
from fastapi import APIRouter, Depends, File, Form, HTTPException, Response, UploadFile

Check notice

Code scanning / CodeQL

Unused import Note

Import of 'Form' is not used.

Copilot Autofix

AI about 1 month ago

To fix the problem, remove the unused Form symbol from the import list so that every imported name is referenced in the file. This avoids unnecessary dependencies and quiets the static analysis warning.

Concretely, in backend/app/routes/profile_certification.py, edit the first line to drop Form from the fastapi import. All other imports on that line are used (APIRouter, Depends, File, HTTPException, Response, UploadFile), so they must remain unchanged. No other code or imports need modification.

Suggested changeset 1
backend/app/routes/profile_certification.py

Autofix patch

Autofix patch
Run the following command in your local git repository to apply this patch
cat << 'EOF' | git apply
diff --git a/backend/app/routes/profile_certification.py b/backend/app/routes/profile_certification.py
--- a/backend/app/routes/profile_certification.py
+++ b/backend/app/routes/profile_certification.py
@@ -1,4 +1,4 @@
-from fastapi import APIRouter, Depends, File, Form, HTTPException, Response, UploadFile
+from fastapi import APIRouter, Depends, File, HTTPException, Response, UploadFile
 from fastapi.responses import FileResponse
 from sqlalchemy.orm import Session
 
EOF
@@ -1,4 +1,4 @@
from fastapi import APIRouter, Depends, File, Form, HTTPException, Response, UploadFile
from fastapi import APIRouter, Depends, File, HTTPException, Response, UploadFile
from fastapi.responses import FileResponse
from sqlalchemy.orm import Session

Copilot is powered by AI and may make mistakes. Always verify output.
@leobrqz leobrqz merged commit 76aead6 into main Mar 23, 2026
5 checks passed
@leobrqz leobrqz deleted the feat/profile-sections branch March 25, 2026 17:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement Improves a feature feature New feature

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(profile): structured sections for skills, experience, projects, and education

2 participants