Skip to main content
Developer profiles showcase your skills, experience, and reputation on the platform. Profiles help organizations find qualified contributors and track your bounty completion history.

Profile Components

Your profile consists of three main sections:

User Information

  • Name and profile image
  • Email address (private by default)
  • Username handle (unique identifier)
  • Account creation date
  • Privacy settings

Profile Details

Customizable information about your skills and availability:
  • Bio: Short description about yourself (max 500 characters)
  • Location: Where you’re based (max 100 characters)
  • Website: Personal website or portfolio URL
  • Skills: Array of technical skills and technologies
  • Preferred Languages: Programming languages you work with
  • Hourly Rate: Your standard rate (optional, with currency)
  • Timezone: Your working timezone
  • Available for Work: Toggle to show availability status
  • GitHub username
  • Twitter/X username
  • LinkedIn profile URL

Reputation System

Your reputation is automatically calculated based on your activity:

Reputation Metrics

Total Earned

Cumulative amount earned from completed bounties across your entire history.

Bounties Completed

Number of bounties successfully completed with approved submissions.

Bounties Created

Number of bounties you’ve created for others to complete.

Average Rating

Mean rating from all reviews received (1-5 scale).

Additional Statistics

  • Total Ratings: Number of reviews received
  • Success Rate: Percentage of accepted vs rejected submissions
  • Response Time: Average time to respond (in seconds)
  • Completion Rate: Percentage of assigned bounties completed
Reputation metrics are automatically updated when bounties are completed or ratings are received. You cannot manually edit these values.

Creating Your Profile

Profiles are automatically created when you sign up, but you should customize them:
const profile = await trpc.profiles.updateProfile.mutate({
  bio: "Full-stack developer specializing in React and Node.js",
  location: "San Francisco, CA",
  website: "https://example.com",
  githubUsername: "johndev",
  twitterUsername: "johndev",
  linkedinUrl: "https://linkedin.com/in/johndev",
  skills: ["React", "TypeScript", "Node.js", "PostgreSQL"],
  preferredLanguages: ["TypeScript", "Python", "Go"],
  hourlyRate: "150.00",
  currency: "USD",
  timezone: "America/Los_Angeles",
  availableForWork: true
});

Validation Rules

  • Bio: Maximum 500 characters
  • Location: Maximum 100 characters
  • URLs must be valid HTTP/HTTPS URLs
  • Hourly rate: Numeric with up to 2 decimal places
  • Skills and languages: Arrays of strings

Viewing Profiles

Profiles can be viewed by user ID or username handle:
// By username handle
const profile = await trpc.profiles.getProfile.query({
  handle: "johndev"
});

// By user ID
const profile = await trpc.profiles.getProfile.query({
  userId: "user-uuid-here"
});

Profile Privacy

Users can mark their profile as private:
  • Private profiles hide detailed information from non-owners
  • Only basic information visible: name, image, handle
  • Reputation and profile details hidden
  • Profile owner always sees full information
Profile privacy is controlled through the user settings. Private profiles are cached separately for owners vs non-owners.

Rating System

After completing a bounty, users can rate each other:

Submitting Ratings

const rating = await trpc.profiles.rateUser.mutate({
  ratedUserId: "contributor-uuid",
  bountyId: "bounty-uuid",
  rating: 5, // 1-5 stars
  comment: "Excellent work! Clean code and delivered on time."
});

Rating Rules

  • Rating must be between 1 and 5 (integer)
  • One rating per user per bounty
  • Cannot rate yourself
  • Optional comment (max 500 characters)
  • Ratings are public and visible on profiles

Viewing Ratings

Retrieve ratings received by a user:
const ratings = await trpc.profiles.getUserRatings.query({
  userId: "user-uuid",
  page: 1,
  limit: 10
});

// Returns paginated ratings with:
// - Rating value and comment
// - Rater information (name, image)
// - Associated bounty
// - Timestamp

Top Contributors

View leaderboards of top-performing developers:
const contributors = await trpc.profiles.getTopContributors.query({
  limit: 10,
  sortBy: "totalEarned" // or "bountiesCompleted" or "averageRating"
});

Leaderboard Criteria

  • Total Earned: Developers who’ve earned the most
  • Bounties Completed: Most productive contributors
  • Average Rating: Highest quality work
Only developers with at least one completed bounty appear in leaderboards.

Searching Profiles

Find developers with specific skills or availability:
const results = await trpc.profiles.searchProfiles.query({
  query: "react developer",
  skills: ["React", "TypeScript"],
  availableForWork: true,
  page: 1,
  limit: 20
});

Search Features

  • Text search in name and bio
  • Filter by specific skills (AND logic)
  • Filter by availability status
  • Results sorted by average rating
  • Paginated responses

Profile Optimization

Building Your Reputation

1

Complete Your Profile

Fill out all profile fields with accurate, detailed information.
2

Add Relevant Skills

List technologies and skills you’re proficient in to appear in searches.
3

Complete Bounties

Successfully deliver high-quality work to build your completion count.
4

Request Ratings

Ask bounty creators to rate your work after completion.
5

Maintain Availability

Keep your availability status updated so organizations know when to reach out.

Profile Best Practices

Professional Photo

Use a clear, professional profile image to build trust with organizations.

Detailed Bio

Write a compelling bio highlighting your experience and specializations.

Accurate Skills

Only list skills you’re genuinely proficient in to set proper expectations.

Active Links

Ensure social links and portfolio URLs are current and showcase your work.

Activity Tracking

Your profile automatically tracks:
  • Bounties you’ve created
  • Bounties you’ve completed
  • Submissions you’ve made
  • Applications you’ve submitted
  • Comments and interactions
  • Votes and bookmarks
Activity tracking is automatic. Focus on delivering quality work and your reputation will grow organically.

My Profile

View your own profile with private information:
const myProfile = await trpc.profiles.getMyProfile.query();

// Includes all information regardless of privacy settings:
// - Full user details including email
// - Complete profile information
// - Full reputation statistics

Profile Caching

Profiles are cached for performance:
  • LRU cache stores up to 200 profiles
  • 5-minute TTL for profile data
  • Private profiles cached separately per viewer
  • Top contributors cached for 10 minutes
  • Cache automatically invalidated on updates
Profile updates may take up to 5 minutes to appear to other users due to caching. Refresh the page to see immediate updates on your own profile.

Build docs developers (and LLMs) love