Profile
Routes
Section titled “Routes”| Route | Purpose | Auth |
|---|---|---|
/profile | Edit own profile | Yes |
/profile-by-username/[id] | View other user’s profile | Yes |
/public-profile/[id] | Public profile view | No |
Profile Sections
Section titled “Profile Sections”Personal Information
Section titled “Personal Information”Images:
| Image | Format | Max Size | Storage Path | Adjustments |
|---|---|---|---|---|
| Avatar | JPEG/PNG/GIF/JPG | 5MB | users-profile/{uid}/avatar | Scale 0.3-3x, X/Y position |
| Banner | JPEG/PNG/GIF/JPG | 10MB | users-profile/{uid}/banner | Scale 1-3x, X/Y position |
| Logo | JPEG/PNG/GIF/JPG | 5MB | users-profile/{uid}/logo | Scale, X/Y position |
About Me
Section titled “About Me”| Field | Type | Constraints | Required |
|---|---|---|---|
| About Me Bio | textarea | 100-160 chars (color-coded counter) | For completion |
| Tagline | text | Max 100 chars | For completion |
| Email Visibility | checkbox | Toggle emailVisible | No |
| Website | URL | Valid URL format | For completion |
| Languages | array | Name + proficiency (Beginner/Intermediate/Advanced/Fluent/Native) | For completion |
| Country | dropdown | Country selector | For completion |
| Timezone | dropdown | Timezone selector | For completion |
Debounced saves: 3000ms delay for text fields.
Work Experience
Section titled “Work Experience”| Field | Type | Max Length | Required |
|---|---|---|---|
| Job Title | text | 160 chars | Yes |
| Company Name | text | 160 chars | Yes |
| Employment Type | select | - | Yes (Full-time/Part-time/Contract/Freelance/Temp/Internship) |
| Work Environment | select | - | Yes (On-Site/Remote/Hybrid) |
| Description | textarea | 600 chars | No |
| Start Date | date | - | Yes |
| End Date | date | - | No (null if “Currently Working”) |
| Skills | multi-select | - | No |
| Achievements | array | - | No |
Completion: 2+ valid = 100%, 1 = 50%, 0 = 0%
Education
Section titled “Education”| Field | Type | Max Length | Required |
|---|---|---|---|
| Institution | text | 160 chars | Yes |
| Degree | text | 160 chars | Yes |
| Description | textarea | 600 chars | No |
| Logo | image | 5MB (JPEG/PNG/GIF) | No |
| Start/End Date | date | - | No |
| Currently Studying | checkbox | - | No |
| Skills | multi-select | - | No |
Skills
Section titled “Skills”| Field | Type | Notes |
|---|---|---|
| Name | text | Max 160 chars |
| Level | select | Beginner/Intermediate/Advanced/Expert |
| Type | select | Technical/Soft Skills/Language/Tool/Other |
Compact (badges) and detailed (rows) view modes. Drag-drop reordering. Completion: 3+ = 100%, 2 = 66%, 1 = 33%
Projects
Section titled “Projects”| Field | Type | Required |
|---|---|---|
| Name | text | Yes |
| Description | textarea | Yes |
| Start/End Date | date | No |
| Images | media upload | No (drag-drop, reorderable) |
| Skills | multi-select | No |
| Link | URL | No |
Completion: 3+ = 100%, 2 = 75%, 1 = 50%
Testimonials
Section titled “Testimonials”| Field | Type | Max Length | Required |
|---|---|---|---|
| Author Name | text | 160 chars | Yes |
| Position | text | 160 chars | No |
| Company | text | 160 chars | No |
| Content | textarea | 600 chars | Yes |
| Avatar | image | 5MB | No |
Completion: 3+ = 100%, 2 = 75%, 1 = 50%
Certifications
Section titled “Certifications”| Field | Type | Max Length | Required |
|---|---|---|---|
| Name | text | 160 chars | Yes |
| Issuing Organization | text | 160 chars | Yes |
| Issue Date | date | - | Yes |
| Expiration Date | date | - | No (checkbox: “Does Not Expire”) |
| Credential ID | text | 160 chars | Yes |
| Credential URL | URL | 160 chars | No |
| Description | textarea | 100 chars | No |
Social Links
Section titled “Social Links”Platforms: LinkedIn, X, GitHub, Instagram, Facebook, YouTube, Custom Website. Auto-detection from URL. Username + URL per link. Completion: 3+ = 100%, 2 = 70%, 1 = 40%
Call to Action (CTA)
Section titled “Call to Action (CTA)”Types: hire, contact, schedule, download, custom.
Fields: Type, Title, Button Text, Link, Description.
Completion: 2+ = 100%, 1 = 50%
Profile Completion Calculation
Section titled “Profile Completion Calculation”Overall: Average of all non-zero section percentages.
Required for Hub Builder unlock (8 items):
- Profile picture
- Tagline (non-empty)
- About Me (>= 100 chars)
- Location
- Timezone
- Language (>= 1)
- Skills (>= 1)
- Work Experience (>= 1)
Follow System
Section titled “Follow System”Collection: follows/{followerId}_{followingId}
{ followerId, followingId, createdAt: Timestamp }- Follow/unfollow toggle
- Mutual follow detection
- Stats: followers count, following count
Public Profile (/public-profile/[id])
Section titled “Public Profile (/public-profile/[id])”Uses Cloud Function getUserDataByUsernameCallable to fetch all profile data by username. Shows all visible sections. Email only shown if emailVisible: true.
Module Management
Section titled “Module Management”Each section has: visibility toggle, collapse/expand, drag-drop reordering, completion percentage badge. Module order and visibility persisted.