Skip to content

User & Profile Types

File: src/lib/types/user.ts

interface User {
id: string;
displayName?: string;
email: string;
emailVerified?: boolean;
isAnonymous?: boolean;
userName?: string;
photoURL?: string;
// Location & Preferences
location?: string;
language?: string;
timeZone?: string;
// Platform Status
registrationApproved?: boolean; // Private beta gate
onboardingCompleted?: boolean;
plan?: string;
disabledAds?: boolean;
// Profile Images
avatarUrl?: string;
bannerUrl?: string;
avatarScale?: number;
bannerScale?: number;
avatarPosition?: { x: number; y: number };
bannerPosition?: { x: number; y: number };
// Personal
birthDate?: Timestamp | string;
// Referrals
referralCode?: string;
referralCount?: number;
referralEarnings?: number;
referralShareStats?: ReferralShareStats;
// Timestamps
createdAt: Date;
updatedAt: Date;
lastActiveAt: Date;
}

File: src/lib/modules/profile/types/profile.ts

interface Profile {
id: string;
displayName: string;
userName: string;
email: string;
aboutMe?: string;
tagline?: string;
avatarUrl?: string;
bannerUrl?: string;
location?: string;
language?: string;
timeZone?: string;
// Module toggles
modules: {
workExperience: boolean;
education: boolean;
skills: boolean;
projects: boolean;
testimonials: boolean;
certifications: boolean;
socialLinks: boolean;
ctas: boolean;
};
// Stats
stats: {
followers: number;
following: number;
views: number;
reviews: number;
rating: number;
};
}
interface ProfileWorkExperience {
id: string;
title: string;
company: string;
employmentType: string;
startDate: Timestamp;
endDate?: Timestamp;
isCurrent: boolean;
skills: string[];
achievements: string[];
description?: string;
}
interface ProfileEducation {
id: string;
degree: string;
institution: string;
startDate: Timestamp;
endDate?: Timestamp;
skills: string[];
logo?: string;
}
interface ProfileSkill {
id: string;
name: string;
level: 'beginner' | 'intermediate' | 'advanced' | 'expert';
category: string;
position: number;
}
interface ProfileProject {
id: string;
name: string;
description: string;
media: MediaItem[];
startDate: Timestamp;
endDate?: Timestamp;
skills: string[];
position: number;
}
interface ProfileTestimonial {
id: string;
authorName: string;
company?: string;
content: string;
avatarUrl?: string;
position: number;
}
interface ProfileCertification {
id: string;
name: string;
issuer: string;
issueDate: Timestamp;
expirationDate?: Timestamp;
credentialId?: string;
credentialUrl?: string;
}
interface ProfileCTA {
id: string;
type: 'hire' | 'contact' | 'schedule' | 'download' | 'custom';
label: string;
url: string;
position: number;
}
interface ProfileSocialLink {
id: string;
platform: string;
username: string;
url: string;
position: number;
}

File: src/lib/modules/profile/types/follow.ts

interface Follow {
followerId: string;
followingId: string;
createdAt: Timestamp;
}

File: src/lib/modules/refer-and-earn/types/referral.ts

interface ReferralCode {
code: string;
userId: string;
isActive: boolean;
usageCount: number;
maxUsage: number | null;
expiresAt?: Timestamp;
customUrl?: string;
}
interface Referral {
referrerId: string;
refereeId: string;
status: 'pending' | 'completed' | 'expired' | 'cancelled';
source: 'email' | 'social' | 'direct' | 'sms' | 'affiliate' | 'qr_code';
conversionEvent: string;
rewards: { referrer: Reward; referee: Reward };
}
interface ReferralShareStats {
totalShares: number;
totalClicks: number;
totalCopies: number;
sharesByType: Record<ReferralShareType, number>;
}

File: src/lib/types/notifications.ts

interface AppNotification {
id: string;
title: string;
typeNotification: string;
description: string;
createdBy: string;
createdAt: Timestamp;
link?: string;
extrainfo?: string;
mentions: string[];
unreadBy: string[];
itemId: string;
}

File: src/lib/types/storage.ts

interface Storage {
id: string;
userId: string;
totalSpace: number;
usedSpace: number;
}
interface FileStorage {
id: string;
path: string;
name: string;
size: number;
type: string;
url: string;
createdAt: Timestamp;
}