diff --git a/lexicons.json b/lexicons.json
index dfe242c..ae040e9 100644
--- a/lexicons.json
+++ b/lexicons.json
@@ -2,6 +2,7 @@
"version": 1,
"lexicons": [
"app.bsky.actor.profile",
+ "id.sifa.profile.self",
"social.lexical.now.update"
],
"resolutions": {
@@ -17,6 +18,18 @@
"uri": "at://did:plc:6msi3pj7krzih5qxqtryxlzw/com.atproto.lexicon.schema/com.atproto.repo.strongRef",
"cid": "bafyreifrkdbnkvfjujntdaeigolnrjj3srrs53tfixjhmacclps72qlov4"
},
+ "community.lexicon.location.address": {
+ "uri": "at://did:plc:mtr7qrqtcyseedx3jyr5o7db/com.atproto.lexicon.schema/community.lexicon.location.address",
+ "cid": "bafyreicdvexolyvp6j6yksqiib7hihwktt6ogalbvyzvtkj6ecrtqqw5fq"
+ },
+ "id.sifa.defs": {
+ "uri": "at://did:plc:2f2ahswozqy4v5lvu676375y/com.atproto.lexicon.schema/id.sifa.defs",
+ "cid": "bafyreicwpzwmjb5y5ovsi6tftofgv6a2yevxw7g5vb3jrmpi6f6faeioea"
+ },
+ "id.sifa.profile.self": {
+ "uri": "at://did:plc:2f2ahswozqy4v5lvu676375y/com.atproto.lexicon.schema/id.sifa.profile.self",
+ "cid": "bafyreigjpmsfm662tis3pihkfr3bvuebnsd7saof2fphk2mp6rhfperwyi"
+ },
"social.lexical.now.update": {
"uri": "at://did:plc:k6xccphpraz5nylacjrdby3s/com.atproto.lexicon.schema/social.lexical.now.update",
"cid": "bafyreic4p5h3ublkcixvxevg5b2ughdqkgr7tkqgyqw7574o3akl5bzjzi"
diff --git a/lexicons/community/lexicon/location/address.json b/lexicons/community/lexicon/location/address.json
new file mode 100644
index 0000000..ad97f77
--- /dev/null
+++ b/lexicons/community/lexicon/location/address.json
@@ -0,0 +1,42 @@
+{
+ "id": "community.lexicon.location.address",
+ "defs": {
+ "main": {
+ "type": "object",
+ "required": [
+ "country"
+ ],
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the location."
+ },
+ "region": {
+ "type": "string",
+ "description": "The administrative region of the country. For example, a state in the USA."
+ },
+ "street": {
+ "type": "string",
+ "description": "The street address."
+ },
+ "country": {
+ "type": "string",
+ "maxLength": 10,
+ "minLength": 2,
+ "description": "The ISO 3166 country code. Preferably the 2-letter code."
+ },
+ "locality": {
+ "type": "string",
+ "description": "The locality of the region. For example, a city in the USA."
+ },
+ "postalCode": {
+ "type": "string",
+ "description": "The postal code of the location."
+ }
+ },
+ "description": "A physical location in the form of a street address."
+ }
+ },
+ "$type": "com.atproto.lexicon.schema",
+ "lexicon": 1
+}
diff --git a/lexicons/id/sifa/defs.json b/lexicons/id/sifa/defs.json
new file mode 100644
index 0000000..f99012c
--- /dev/null
+++ b/lexicons/id/sifa/defs.json
@@ -0,0 +1,1112 @@
+{
+ "id": "id.sifa.defs",
+ "defs": {
+ "host": {
+ "type": "token",
+ "description": "Hosted or moderated the session."
+ },
+ "author": {
+ "type": "token",
+ "description": "The named person co-authored the referenced id.sifa.profile.publication."
+ },
+ "hybrid": {
+ "type": "token",
+ "description": "Hybrid on-site and remote work."
+ },
+ "native": {
+ "type": "token",
+ "description": "Native or bilingual proficiency."
+ },
+ "onSite": {
+ "type": "token",
+ "description": "On-site/in-office work."
+ },
+ "remote": {
+ "type": "token",
+ "description": "Fully remote work (unspecified scope). Treated as remoteGlobal by AppViews. Prefer the scoped variants for new records."
+ },
+ "keynote": {
+ "type": "token",
+ "description": "Gave a keynote address."
+ },
+ "trainee": {
+ "type": "token",
+ "description": "Structured early-career rotation or graduate program."
+ },
+ "business": {
+ "type": "token",
+ "description": "Business and management skills."
+ },
+ "contract": {
+ "type": "token",
+ "description": "Fixed-scope engagement as an independent contractor."
+ },
+ "creative": {
+ "type": "token",
+ "description": "Creative and design skills."
+ },
+ "fullTime": {
+ "type": "token",
+ "description": "Full-time employee of the organization."
+ },
+ "industry": {
+ "type": "token",
+ "description": "Industry-specific domain knowledge."
+ },
+ "language": {
+ "type": "token",
+ "description": "Language and linguistic skills."
+ },
+ "panelist": {
+ "type": "token",
+ "description": "Participated as a member of a panel."
+ },
+ "partTime": {
+ "type": "token",
+ "description": "Part-time employee of the organization."
+ },
+ "seasonal": {
+ "type": "token",
+ "description": "Recurring role tied to a season or peak period."
+ },
+ "skillRef": {
+ "type": "object",
+ "required": [
+ "uri"
+ ],
+ "properties": {
+ "uri": {
+ "type": "string",
+ "format": "at-uri",
+ "description": "AT-URI of the id.sifa.profile.skill record."
+ }
+ },
+ "description": "A reference to an id.sifa.profile.skill record by AT-URI. No CID is required because skills are mutable records in the same user's repo."
+ },
+ "workshop": {
+ "type": "token",
+ "description": "Led or facilitated a workshop or tutorial."
+ },
+ "coSpeaker": {
+ "type": "token",
+ "description": "The named person presented alongside the claimer at the referenced id.sifa.profile.presentationDelivery occasion."
+ },
+ "freelance": {
+ "type": "token",
+ "description": "Solo service provider working with multiple clients on a project basis. No employees."
+ },
+ "linkEvent": {
+ "type": "token",
+ "description": "The event or session page."
+ },
+ "linkOther": {
+ "type": "token",
+ "description": "Other related link."
+ },
+ "presenter": {
+ "type": "token",
+ "description": "Delivered the session as the speaker or presenter (spoken or non-spoken)."
+ },
+ "technical": {
+ "type": "token",
+ "description": "Technical/engineering skills."
+ },
+ "temporary": {
+ "type": "token",
+ "description": "Fixed-end-date role as a direct employee of the organization."
+ },
+ "volunteer": {
+ "type": "token",
+ "description": "Volunteer work (when used as employment type)."
+ },
+ "domainType": {
+ "type": "string",
+ "description": "Professional domain within an industry. Optional refinement of industryType.",
+ "knownValues": [
+ "id.sifa.defs#domainSoftwareEngineering",
+ "id.sifa.defs#domainDataScience",
+ "id.sifa.defs#domainCybersecurity",
+ "id.sifa.defs#domainDevops",
+ "id.sifa.defs#domainProductDesign",
+ "id.sifa.defs#domainGameDev",
+ "id.sifa.defs#domainBanking",
+ "id.sifa.defs#domainFintech",
+ "id.sifa.defs#domainInsurance",
+ "id.sifa.defs#domainInvestmentMgmt",
+ "id.sifa.defs#domainClinicalResearch",
+ "id.sifa.defs#domainHealthtech",
+ "id.sifa.defs#domainPharma",
+ "id.sifa.defs#domainHigherEd",
+ "id.sifa.defs#domainEdtech",
+ "id.sifa.defs#domainPrimarySecondary",
+ "id.sifa.defs#domainJournalism",
+ "id.sifa.defs#domainFilmVideo",
+ "id.sifa.defs#domainGaming",
+ "id.sifa.defs#domainAdvertising",
+ "id.sifa.defs#domainEcommerce",
+ "id.sifa.defs#domainSupplyChain",
+ "id.sifa.defs#domainAutomotive",
+ "id.sifa.defs#domainAerospace",
+ "id.sifa.defs#domainHardware",
+ "id.sifa.defs#domainRenewables",
+ "id.sifa.defs#domainOilGas",
+ "id.sifa.defs#domainClimateTech",
+ "id.sifa.defs#domainManagementConsulting",
+ "id.sifa.defs#domainDevrel",
+ "id.sifa.defs#domainHrRecruitment",
+ "id.sifa.defs#domainIpLaw",
+ "id.sifa.defs#domainCompliance",
+ "id.sifa.defs#domainHumanRights",
+ "id.sifa.defs#domainOpenSource",
+ "id.sifa.defs#domainPublicPolicy",
+ "id.sifa.defs#domainDefense",
+ "id.sifa.defs#domainProptech",
+ "id.sifa.defs#domainAutonomousVehicles",
+ "id.sifa.defs#domainLogistics",
+ "id.sifa.defs#domainAgritech",
+ "id.sifa.defs#domainFoodTech",
+ "id.sifa.defs#domainHotels",
+ "id.sifa.defs#domainTravelTourism",
+ "id.sifa.defs#domainFoodBeverage",
+ "id.sifa.defs#domainNetworkInfra",
+ "id.sifa.defs#domainMobileServices",
+ "id.sifa.defs#domainExtraction",
+ "id.sifa.defs#domainGeological",
+ "id.sifa.defs#domainFashionDesign",
+ "id.sifa.defs#domainTextileManufacturing",
+ "id.sifa.defs#domainShipping",
+ "id.sifa.defs#domainPortOperations",
+ "id.sifa.defs#domainNavalArchitecture"
+ ]
+ },
+ "elementary": {
+ "type": "token",
+ "description": "Elementary proficiency."
+ },
+ "fellowship": {
+ "type": "token",
+ "description": "Funded research, academic, or mission-driven position, typically selective."
+ },
+ "internship": {
+ "type": "token",
+ "description": "Structured early-career work experience, often tied to studies."
+ },
+ "linkSlides": {
+ "type": "token",
+ "description": "Slides or presentation deck."
+ },
+ "commissions": {
+ "type": "token",
+ "description": "Open to commissioned creative work (illustration, design, voice work, music, etc.)."
+ },
+ "domainIpLaw": {
+ "type": "token",
+ "description": "Intellectual Property."
+ },
+ "linkWriteup": {
+ "type": "token",
+ "description": "A long-form write-up, article, or transcript of the talk."
+ },
+ "platformRss": {
+ "type": "token",
+ "description": "RSS or Atom feed (blog, newsletter, podcast)."
+ },
+ "proficiency": {
+ "type": "string",
+ "description": "Language proficiency level. Maps to LinkedIn's five-level scale for lossless import.",
+ "knownValues": [
+ "id.sifa.defs#elementary",
+ "id.sifa.defs#limitedWorking",
+ "id.sifa.defs#professionalWorking",
+ "id.sifa.defs#fullProfessional",
+ "id.sifa.defs#native"
+ ]
+ },
+ "projectCore": {
+ "type": "token",
+ "description": "Core team member with elevated involvement."
+ },
+ "projectRole": {
+ "type": "string",
+ "description": "Role within a collaborative project.",
+ "knownValues": [
+ "id.sifa.defs#projectOwner",
+ "id.sifa.defs#projectCore",
+ "id.sifa.defs#projectContributor"
+ ]
+ },
+ "remoteLocal": {
+ "type": "token",
+ "description": "Remote work within the same country as the employer."
+ },
+ "artifactLink": {
+ "type": "object",
+ "required": [
+ "url"
+ ],
+ "properties": {
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "description": "URL of the artifact."
+ },
+ "kind": {
+ "type": "string",
+ "description": "What this link points to.",
+ "knownValues": [
+ "pull-request",
+ "issue",
+ "commit",
+ "review",
+ "release",
+ "talk",
+ "video",
+ "slides",
+ "article",
+ "thread",
+ "dataset",
+ "edit",
+ "other"
+ ]
+ },
+ "label": {
+ "type": "string",
+ "maxLength": 2000,
+ "description": "Optional human-readable label (e.g. 'Merged PR #1234: keep-alive support').",
+ "maxGraphemes": 200
+ }
+ },
+ "description": "A public artifact proving a piece of work. Reusable across involvement, and later projects/publications."
+ },
+ "collaborator": {
+ "type": "token",
+ "description": "The named person worked alongside the claimer on the referenced id.sifa.profile.involvement."
+ },
+ "domainDevops": {
+ "type": "token",
+ "description": "DevOps & Infrastructure."
+ },
+ "domainDevrel": {
+ "type": "token",
+ "description": "Developer Relations."
+ },
+ "domainEdtech": {
+ "type": "token",
+ "description": "Education Technology."
+ },
+ "domainGaming": {
+ "type": "token",
+ "description": "Gaming & Interactive Media."
+ },
+ "domainHotels": {
+ "type": "token",
+ "description": "Hotels & Accommodation."
+ },
+ "domainOilGas": {
+ "type": "token",
+ "description": "Oil & Gas."
+ },
+ "domainPharma": {
+ "type": "token",
+ "description": "Pharmaceuticals."
+ },
+ "industryType": {
+ "type": "string",
+ "description": "Professional industry sector.",
+ "knownValues": [
+ "id.sifa.defs#industryTechnology",
+ "id.sifa.defs#industryFinance",
+ "id.sifa.defs#industryHealthcare",
+ "id.sifa.defs#industryEducation",
+ "id.sifa.defs#industryMedia",
+ "id.sifa.defs#industryRetail",
+ "id.sifa.defs#industryManufacturing",
+ "id.sifa.defs#industryEnergy",
+ "id.sifa.defs#industryGovernment",
+ "id.sifa.defs#industryLegal",
+ "id.sifa.defs#industryConsulting",
+ "id.sifa.defs#industryNonprofit",
+ "id.sifa.defs#industryRealEstate",
+ "id.sifa.defs#industryTransport",
+ "id.sifa.defs#industryAgriculture",
+ "id.sifa.defs#industryHospitality",
+ "id.sifa.defs#industryTelecom",
+ "id.sifa.defs#industryMining",
+ "id.sifa.defs#industryFashion",
+ "id.sifa.defs#industryMaritime",
+ "id.sifa.defs#industryOther"
+ ]
+ },
+ "locationType": {
+ "type": "string",
+ "description": "The role a location plays in a user's professional profile.",
+ "knownValues": [
+ "id.sifa.defs#locationPrimary",
+ "id.sifa.defs#locationBusiness",
+ "id.sifa.defs#locationTravel"
+ ]
+ },
+ "projectOwner": {
+ "type": "token",
+ "description": "Project owner with full management permissions. Multiple owners are supported."
+ },
+ "remoteGlobal": {
+ "type": "token",
+ "description": "Remote work from anywhere worldwide."
+ },
+ "remoteRegion": {
+ "type": "token",
+ "description": "Remote work within the same timezone region or continent."
+ },
+ "selfEmployed": {
+ "type": "token",
+ "description": "Operating your own business or practice. May have employees."
+ },
+ "beingMentored": {
+ "type": "token",
+ "description": "Open to being mentored."
+ },
+ "contractRoles": {
+ "type": "token",
+ "description": "Open to B2B contract or project-based freelance work, consulting, contract development."
+ },
+ "domainBanking": {
+ "type": "token",
+ "description": "Banking."
+ },
+ "domainDefense": {
+ "type": "token",
+ "description": "Defense & Intelligence."
+ },
+ "domainFintech": {
+ "type": "token",
+ "description": "Fintech."
+ },
+ "domainGameDev": {
+ "type": "token",
+ "description": "Game Development."
+ },
+ "fullTimeRoles": {
+ "type": "token",
+ "description": "Open to full-time employment opportunities."
+ },
+ "industryLegal": {
+ "type": "token",
+ "description": "Legal."
+ },
+ "industryMedia": {
+ "type": "token",
+ "description": "Media & Entertainment."
+ },
+ "industryOther": {
+ "type": "token",
+ "description": "Other industry."
+ },
+ "interpersonal": {
+ "type": "token",
+ "description": "Interpersonal and communication skills."
+ },
+ "linkRecording": {
+ "type": "token",
+ "description": "Video or audio recording of the presentation."
+ },
+ "partTimeRoles": {
+ "type": "token",
+ "description": "Open to part-time employment opportunities."
+ },
+ "platformGitea": {
+ "type": "token",
+ "description": "Gitea account on a self-hosted instance."
+ },
+ "platformOrcid": {
+ "type": "token",
+ "description": "ORCID researcher identifier."
+ },
+ "platformOther": {
+ "type": "token",
+ "description": "Other platform not covered by specific tokens."
+ },
+ "projectActive": {
+ "type": "token",
+ "description": "Project is actively maintained or in development."
+ },
+ "projectMember": {
+ "type": "token",
+ "description": "The named person worked on the referenced id.sifa.profile.project."
+ },
+ "projectStatus": {
+ "type": "string",
+ "description": "Current status of a collaborative project.",
+ "knownValues": [
+ "id.sifa.defs#projectActive",
+ "id.sifa.defs#projectCompleted",
+ "id.sifa.defs#projectArchived"
+ ]
+ },
+ "skillCategory": {
+ "type": "string",
+ "description": "Broad category for grouping skills.",
+ "knownValues": [
+ "id.sifa.defs#technical",
+ "id.sifa.defs#business",
+ "id.sifa.defs#creative",
+ "id.sifa.defs#interpersonal",
+ "id.sifa.defs#language",
+ "id.sifa.defs#industry"
+ ]
+ },
+ "workplaceType": {
+ "type": "string",
+ "description": "The workplace arrangement.",
+ "knownValues": [
+ "id.sifa.defs#onSite",
+ "id.sifa.defs#remote",
+ "id.sifa.defs#hybrid",
+ "id.sifa.defs#remoteLocal",
+ "id.sifa.defs#remoteRegion",
+ "id.sifa.defs#remoteGlobal"
+ ]
+ },
+ "apprenticeship": {
+ "type": "token",
+ "description": "Formal training-to-certification program combining paid work and education."
+ },
+ "boardPositions": {
+ "type": "token",
+ "description": "Open to advisory or board positions."
+ },
+ "collaborations": {
+ "type": "token",
+ "description": "Open to project collaborations."
+ },
+ "domainAgritech": {
+ "type": "token",
+ "description": "Agricultural Technology."
+ },
+ "domainFoodTech": {
+ "type": "token",
+ "description": "Food Technology & Processing."
+ },
+ "domainHardware": {
+ "type": "token",
+ "description": "Hardware & Electronics."
+ },
+ "domainHigherEd": {
+ "type": "token",
+ "description": "Higher Education."
+ },
+ "domainProptech": {
+ "type": "token",
+ "description": "Property Technology."
+ },
+ "domainShipping": {
+ "type": "token",
+ "description": "Shipping & Freight."
+ },
+ "employmentType": {
+ "type": "string",
+ "description": "The type of employment arrangement.",
+ "knownValues": [
+ "id.sifa.defs#fullTime",
+ "id.sifa.defs#partTime",
+ "id.sifa.defs#temporary",
+ "id.sifa.defs#seasonal",
+ "id.sifa.defs#contract",
+ "id.sifa.defs#freelance",
+ "id.sifa.defs#selfEmployed",
+ "id.sifa.defs#independentWork",
+ "id.sifa.defs#internship",
+ "id.sifa.defs#apprenticeship",
+ "id.sifa.defs#fellowship",
+ "id.sifa.defs#trainee",
+ "id.sifa.defs#volunteer"
+ ]
+ },
+ "industryDomain": {
+ "type": "object",
+ "required": [
+ "industry"
+ ],
+ "properties": {
+ "domain": {
+ "type": "string",
+ "description": "Professional domain within the selected industry. Optional refinement.",
+ "knownValues": [
+ "id.sifa.defs#domainSoftwareEngineering",
+ "id.sifa.defs#domainDataScience",
+ "id.sifa.defs#domainCybersecurity",
+ "id.sifa.defs#domainDevops",
+ "id.sifa.defs#domainProductDesign",
+ "id.sifa.defs#domainGameDev",
+ "id.sifa.defs#domainBanking",
+ "id.sifa.defs#domainFintech",
+ "id.sifa.defs#domainInsurance",
+ "id.sifa.defs#domainInvestmentMgmt",
+ "id.sifa.defs#domainClinicalResearch",
+ "id.sifa.defs#domainHealthtech",
+ "id.sifa.defs#domainPharma",
+ "id.sifa.defs#domainHigherEd",
+ "id.sifa.defs#domainEdtech",
+ "id.sifa.defs#domainPrimarySecondary",
+ "id.sifa.defs#domainJournalism",
+ "id.sifa.defs#domainFilmVideo",
+ "id.sifa.defs#domainGaming",
+ "id.sifa.defs#domainAdvertising",
+ "id.sifa.defs#domainEcommerce",
+ "id.sifa.defs#domainSupplyChain",
+ "id.sifa.defs#domainAutomotive",
+ "id.sifa.defs#domainAerospace",
+ "id.sifa.defs#domainHardware",
+ "id.sifa.defs#domainRenewables",
+ "id.sifa.defs#domainOilGas",
+ "id.sifa.defs#domainClimateTech",
+ "id.sifa.defs#domainManagementConsulting",
+ "id.sifa.defs#domainDevrel",
+ "id.sifa.defs#domainHrRecruitment",
+ "id.sifa.defs#domainIpLaw",
+ "id.sifa.defs#domainCompliance",
+ "id.sifa.defs#domainHumanRights",
+ "id.sifa.defs#domainOpenSource",
+ "id.sifa.defs#domainPublicPolicy",
+ "id.sifa.defs#domainDefense",
+ "id.sifa.defs#domainProptech",
+ "id.sifa.defs#domainAutonomousVehicles",
+ "id.sifa.defs#domainLogistics",
+ "id.sifa.defs#domainAgritech",
+ "id.sifa.defs#domainFoodTech",
+ "id.sifa.defs#domainHotels",
+ "id.sifa.defs#domainTravelTourism",
+ "id.sifa.defs#domainFoodBeverage",
+ "id.sifa.defs#domainNetworkInfra",
+ "id.sifa.defs#domainMobileServices",
+ "id.sifa.defs#domainExtraction",
+ "id.sifa.defs#domainGeological",
+ "id.sifa.defs#domainFashionDesign",
+ "id.sifa.defs#domainTextileManufacturing",
+ "id.sifa.defs#domainShipping",
+ "id.sifa.defs#domainPortOperations",
+ "id.sifa.defs#domainNavalArchitecture"
+ ]
+ },
+ "industry": {
+ "type": "string",
+ "description": "Professional industry sector token.",
+ "knownValues": [
+ "id.sifa.defs#industryTechnology",
+ "id.sifa.defs#industryFinance",
+ "id.sifa.defs#industryHealthcare",
+ "id.sifa.defs#industryEducation",
+ "id.sifa.defs#industryMedia",
+ "id.sifa.defs#industryRetail",
+ "id.sifa.defs#industryManufacturing",
+ "id.sifa.defs#industryEnergy",
+ "id.sifa.defs#industryGovernment",
+ "id.sifa.defs#industryLegal",
+ "id.sifa.defs#industryConsulting",
+ "id.sifa.defs#industryNonprofit",
+ "id.sifa.defs#industryRealEstate",
+ "id.sifa.defs#industryTransport",
+ "id.sifa.defs#industryAgriculture",
+ "id.sifa.defs#industryHospitality",
+ "id.sifa.defs#industryTelecom",
+ "id.sifa.defs#industryMining",
+ "id.sifa.defs#industryFashion",
+ "id.sifa.defs#industryMaritime",
+ "id.sifa.defs#industryOther"
+ ]
+ }
+ },
+ "description": "An industry/domain pair. Industry is required; domain is an optional refinement within the industry."
+ },
+ "industryEnergy": {
+ "type": "token",
+ "description": "Energy & Environment."
+ },
+ "industryMining": {
+ "type": "token",
+ "description": "Mining & Resources."
+ },
+ "industryRetail": {
+ "type": "token",
+ "description": "Retail & E-commerce."
+ },
+ "limitedWorking": {
+ "type": "token",
+ "description": "Limited working proficiency."
+ },
+ "locationTravel": {
+ "type": "token",
+ "description": "Frequent travel or temporary location."
+ },
+ "platformGithub": {
+ "type": "token",
+ "description": "GitHub account."
+ },
+ "platformGitlab": {
+ "type": "token",
+ "description": "GitLab account (gitlab.com or self-hosted)."
+ },
+ "domainAerospace": {
+ "type": "token",
+ "description": "Aerospace & Defense."
+ },
+ "domainEcommerce": {
+ "type": "token",
+ "description": "E-commerce."
+ },
+ "domainFilmVideo": {
+ "type": "token",
+ "description": "Film & Video."
+ },
+ "domainInsurance": {
+ "type": "token",
+ "description": "Insurance."
+ },
+ "domainLogistics": {
+ "type": "token",
+ "description": "Logistics & Warehousing."
+ },
+ "independentWork": {
+ "type": "token",
+ "description": "Self-initiated, sustained work I lead — community building, content creation, ecosystem contribution, or similar. May involve a registered entity but does not pay me personally. Often run alongside other employment."
+ },
+ "industryFashion": {
+ "type": "token",
+ "description": "Fashion & Textiles."
+ },
+ "industryFinance": {
+ "type": "token",
+ "description": "Finance & Banking."
+ },
+ "industryTelecom": {
+ "type": "token",
+ "description": "Telecommunications."
+ },
+ "involvementKind": {
+ "type": "string",
+ "description": "The nature of an involvement record.",
+ "knownValues": [
+ "id.sifa.defs#involvementOpenSource",
+ "id.sifa.defs#involvementCommunity",
+ "id.sifa.defs#involvementCharity",
+ "id.sifa.defs#involvementCivic",
+ "id.sifa.defs#involvementOther"
+ ]
+ },
+ "locationPrimary": {
+ "type": "token",
+ "description": "Primary residence or home location."
+ },
+ "mentoringOthers": {
+ "type": "token",
+ "description": "Open to mentoring others."
+ },
+ "platformForgejo": {
+ "type": "token",
+ "description": "Forgejo account on a self-hosted instance other than Codeberg."
+ },
+ "platformTwitter": {
+ "type": "token",
+ "description": "Twitter/X account."
+ },
+ "platformWebsite": {
+ "type": "token",
+ "description": "Personal or professional website."
+ },
+ "platformYoutube": {
+ "type": "token",
+ "description": "YouTube channel."
+ },
+ "projectArchived": {
+ "type": "token",
+ "description": "Project is archived and no longer active."
+ },
+ "domainAutomotive": {
+ "type": "token",
+ "description": "Automotive."
+ },
+ "domainCompliance": {
+ "type": "token",
+ "description": "Compliance & Regulatory."
+ },
+ "domainExtraction": {
+ "type": "token",
+ "description": "Extraction & Processing."
+ },
+ "domainGeological": {
+ "type": "token",
+ "description": "Geological Services."
+ },
+ "domainHealthtech": {
+ "type": "token",
+ "description": "Health Technology."
+ },
+ "domainJournalism": {
+ "type": "token",
+ "description": "Journalism."
+ },
+ "domainOpenSource": {
+ "type": "token",
+ "description": "Open Source."
+ },
+ "domainRenewables": {
+ "type": "token",
+ "description": "Renewable Energy."
+ },
+ "externalPlatform": {
+ "type": "string",
+ "description": "Platform type for an external account linked to a Sifa profile.",
+ "knownValues": [
+ "id.sifa.defs#platformRss",
+ "id.sifa.defs#platformFediverse",
+ "id.sifa.defs#platformTwitter",
+ "id.sifa.defs#platformInstagram",
+ "id.sifa.defs#platformGithub",
+ "id.sifa.defs#platformCodeberg",
+ "id.sifa.defs#platformGitlab",
+ "id.sifa.defs#platformForgejo",
+ "id.sifa.defs#platformGitea",
+ "id.sifa.defs#platformYoutube",
+ "id.sifa.defs#platformLinkedin",
+ "id.sifa.defs#platformSubstack",
+ "id.sifa.defs#platformWebsite",
+ "id.sifa.defs#platformOrcid",
+ "id.sifa.defs#platformOther"
+ ]
+ },
+ "fullProfessional": {
+ "type": "token",
+ "description": "Full professional proficiency."
+ },
+ "industryMaritime": {
+ "type": "token",
+ "description": "Maritime & Shipping."
+ },
+ "involvementCivic": {
+ "type": "token",
+ "description": "Board membership, policy, advisory, or public-consultation work."
+ },
+ "involvementOther": {
+ "type": "token",
+ "description": "Other uncompensated involvement."
+ },
+ "linkRegistration": {
+ "type": "token",
+ "description": "Registration or ticket page."
+ },
+ "locationBusiness": {
+ "type": "token",
+ "description": "Business or operational location."
+ },
+ "openToWorkStatus": {
+ "type": "string",
+ "description": "The type of opportunity the user is open to.",
+ "knownValues": [
+ "id.sifa.defs#fullTimeRoles",
+ "id.sifa.defs#partTimeRoles",
+ "id.sifa.defs#contractRoles",
+ "id.sifa.defs#commissions",
+ "id.sifa.defs#boardPositions",
+ "id.sifa.defs#mentoringOthers",
+ "id.sifa.defs#beingMentored",
+ "id.sifa.defs#collaborations"
+ ]
+ },
+ "platformCodeberg": {
+ "type": "token",
+ "description": "Codeberg account."
+ },
+ "platformLinkedin": {
+ "type": "token",
+ "description": "LinkedIn profile."
+ },
+ "platformSubstack": {
+ "type": "token",
+ "description": "Substack newsletter."
+ },
+ "presentationLink": {
+ "type": "object",
+ "required": [
+ "uri"
+ ],
+ "properties": {
+ "uri": {
+ "type": "string",
+ "format": "uri",
+ "description": "The link URL."
+ },
+ "type": {
+ "type": "string",
+ "description": "Optional link category, used to pick an icon. Open set; see id.sifa.defs#presentationLinkType.",
+ "knownValues": [
+ "id.sifa.defs#linkSlides",
+ "id.sifa.defs#linkRecording",
+ "id.sifa.defs#linkEvent",
+ "id.sifa.defs#linkRegistration",
+ "id.sifa.defs#linkWriteup",
+ "id.sifa.defs#linkOther"
+ ]
+ },
+ "label": {
+ "type": "string",
+ "maxLength": 640,
+ "description": "Optional display label (e.g., 'Watch recording', 'Slides').",
+ "maxGraphemes": 64
+ }
+ },
+ "description": "A related link for a presentation or one of its deliveries."
+ },
+ "presentationRole": {
+ "type": "string",
+ "description": "The user's role in a presentation or session. Open set.",
+ "knownValues": [
+ "id.sifa.defs#presenter",
+ "id.sifa.defs#panelist",
+ "id.sifa.defs#keynote",
+ "id.sifa.defs#workshop",
+ "id.sifa.defs#host"
+ ]
+ },
+ "projectCompleted": {
+ "type": "token",
+ "description": "Project has been completed."
+ },
+ "projectMemberRef": {
+ "type": "object",
+ "required": [
+ "did"
+ ],
+ "properties": {
+ "did": {
+ "type": "string",
+ "format": "did",
+ "description": "DID of the person named as a project member. Any atproto account is allowed."
+ },
+ "role": {
+ "type": "string",
+ "description": "Role the named person held on the project. Display only: it grants no write access to the project record, which lives in the author's repository.",
+ "knownValues": [
+ "id.sifa.defs#projectOwner",
+ "id.sifa.defs#projectCore",
+ "id.sifa.defs#projectContributor"
+ ]
+ },
+ "title": {
+ "type": "string",
+ "maxLength": 1280,
+ "description": "Optional title within the project (e.g. 'Lead Designer', 'Backend Engineer').",
+ "maxGraphemes": 128
+ }
+ },
+ "description": "Another person named as a member of a project. A claim by the record author, not a fact: it carries the named person's display name, avatar, and profile link only once they publish a matching id.sifa.confirmation."
+ },
+ "domainAdvertising": {
+ "type": "token",
+ "description": "Advertising & Marketing."
+ },
+ "domainClimateTech": {
+ "type": "token",
+ "description": "Climate Tech."
+ },
+ "domainDataScience": {
+ "type": "token",
+ "description": "Data Science & ML."
+ },
+ "domainHumanRights": {
+ "type": "token",
+ "description": "Human Rights."
+ },
+ "domainSupplyChain": {
+ "type": "token",
+ "description": "Supply Chain & Fulfillment."
+ },
+ "externalRecordRef": {
+ "type": "object",
+ "required": [
+ "uri"
+ ],
+ "properties": {
+ "cid": {
+ "type": "string",
+ "format": "cid",
+ "description": "Optional CID of a specific version of the referenced record. Used as an integrity hint only; live resolution is by AT-URI."
+ },
+ "uri": {
+ "type": "string",
+ "format": "at-uri",
+ "description": "AT-URI of the referenced record."
+ }
+ },
+ "description": "A reference to a record in another repository or lexicon by AT-URI. The CID is optional: it pins a specific version as an integrity hint, but consumers should resolve the AT-URI live so the reference tracks edits to the target."
+ },
+ "industryEducation": {
+ "type": "token",
+ "description": "Education & Research."
+ },
+ "industryNonprofit": {
+ "type": "token",
+ "description": "Non-profit & Social Impact."
+ },
+ "industryTransport": {
+ "type": "token",
+ "description": "Transportation & Logistics."
+ },
+ "platformFediverse": {
+ "type": "token",
+ "description": "Fediverse account (Mastodon, Misskey, Pleroma, etc.)."
+ },
+ "platformInstagram": {
+ "type": "token",
+ "description": "Instagram account."
+ },
+ "domainFoodBeverage": {
+ "type": "token",
+ "description": "Food & Beverage."
+ },
+ "domainNetworkInfra": {
+ "type": "token",
+ "description": "Network Infrastructure."
+ },
+ "domainPublicPolicy": {
+ "type": "token",
+ "description": "Public Policy."
+ },
+ "industryConsulting": {
+ "type": "token",
+ "description": "Consulting & Professional Services."
+ },
+ "industryGovernment": {
+ "type": "token",
+ "description": "Government & Public Sector."
+ },
+ "industryHealthcare": {
+ "type": "token",
+ "description": "Healthcare & Life Sciences."
+ },
+ "industryRealEstate": {
+ "type": "token",
+ "description": "Real Estate & Construction."
+ },
+ "industryTechnology": {
+ "type": "token",
+ "description": "Technology."
+ },
+ "involvementCharity": {
+ "type": "token",
+ "description": "Charitable or volunteer work for a cause or person."
+ },
+ "projectContributor": {
+ "type": "token",
+ "description": "Project contributor."
+ },
+ "domainCybersecurity": {
+ "type": "token",
+ "description": "Cybersecurity."
+ },
+ "domainFashionDesign": {
+ "type": "token",
+ "description": "Fashion Design."
+ },
+ "domainHrRecruitment": {
+ "type": "token",
+ "description": "HR & Recruitment."
+ },
+ "domainProductDesign": {
+ "type": "token",
+ "description": "Product & UX Design."
+ },
+ "domainTravelTourism": {
+ "type": "token",
+ "description": "Travel & Tourism."
+ },
+ "industryAgriculture": {
+ "type": "token",
+ "description": "Agriculture & Food."
+ },
+ "industryHospitality": {
+ "type": "token",
+ "description": "Hospitality & Tourism."
+ },
+ "professionalWorking": {
+ "type": "token",
+ "description": "Professional working proficiency."
+ },
+ "confirmationRelation": {
+ "type": "string",
+ "description": "What an id.sifa.confirmation record affirms. Open set.",
+ "knownValues": [
+ "id.sifa.defs#coSpeaker",
+ "id.sifa.defs#projectMember",
+ "id.sifa.defs#author",
+ "id.sifa.defs#collaborator"
+ ]
+ },
+ "domainInvestmentMgmt": {
+ "type": "token",
+ "description": "Investment Management."
+ },
+ "domainMobileServices": {
+ "type": "token",
+ "description": "Mobile & Wireless Services."
+ },
+ "domainPortOperations": {
+ "type": "token",
+ "description": "Port & Terminal Operations."
+ },
+ "involvementCommunity": {
+ "type": "token",
+ "description": "Community organizing, moderation, or meetup/event running."
+ },
+ "presentationLinkType": {
+ "type": "string",
+ "description": "The category of a related link on a presentation. Open set.",
+ "knownValues": [
+ "id.sifa.defs#linkSlides",
+ "id.sifa.defs#linkRecording",
+ "id.sifa.defs#linkEvent",
+ "id.sifa.defs#linkRegistration",
+ "id.sifa.defs#linkWriteup",
+ "id.sifa.defs#linkOther"
+ ]
+ },
+ "industryManufacturing": {
+ "type": "token",
+ "description": "Manufacturing & Engineering."
+ },
+ "involvementOpenSource": {
+ "type": "token",
+ "description": "Open-source contribution or maintainership."
+ },
+ "domainClinicalResearch": {
+ "type": "token",
+ "description": "Clinical Research."
+ },
+ "domainPrimarySecondary": {
+ "type": "token",
+ "description": "Primary & Secondary Education."
+ },
+ "domainNavalArchitecture": {
+ "type": "token",
+ "description": "Naval Architecture & Marine Engineering."
+ },
+ "domainAutonomousVehicles": {
+ "type": "token",
+ "description": "Autonomous Vehicles."
+ },
+ "domainSoftwareEngineering": {
+ "type": "token",
+ "description": "Software Engineering."
+ },
+ "domainManagementConsulting": {
+ "type": "token",
+ "description": "Management Consulting."
+ },
+ "domainTextileManufacturing": {
+ "type": "token",
+ "description": "Textile Manufacturing."
+ }
+ },
+ "$type": "com.atproto.lexicon.schema",
+ "lexicon": 1,
+ "description": "Shared type definitions for Sifa professional profile lexicons."
+}
diff --git a/lexicons/id/sifa/profile/self.json b/lexicons/id/sifa/profile/self.json
new file mode 100644
index 0000000..787c429
--- /dev/null
+++ b/lexicons/id/sifa/profile/self.json
@@ -0,0 +1,151 @@
+{
+ "id": "id.sifa.profile.self",
+ "defs": {
+ "main": {
+ "key": "literal:self",
+ "type": "record",
+ "record": {
+ "type": "object",
+ "required": [
+ "createdAt"
+ ],
+ "properties": {
+ "about": {
+ "type": "string",
+ "maxLength": 50000,
+ "description": "Professional summary or about section. Longer-form than Bluesky's description field.",
+ "maxGraphemes": 5000
+ },
+ "langs": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "language"
+ },
+ "maxLength": 3,
+ "description": "BCP 47 language tags indicating the user's primary professional languages."
+ },
+ "avatar": {
+ "type": "blob",
+ "accept": [
+ "image/png",
+ "image/jpeg"
+ ],
+ "maxSize": 1000000,
+ "description": "Professional-context avatar image. Overrides app.bsky.actor.profile.avatar when present."
+ },
+ "labels": {
+ "refs": [
+ "com.atproto.label.defs#selfLabels"
+ ],
+ "type": "union",
+ "description": "Self-label values for the professional profile."
+ },
+ "openTo": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "knownValues": [
+ "id.sifa.defs#fullTimeRoles",
+ "id.sifa.defs#partTimeRoles",
+ "id.sifa.defs#contractRoles",
+ "id.sifa.defs#commissions",
+ "id.sifa.defs#boardPositions",
+ "id.sifa.defs#mentoringOthers",
+ "id.sifa.defs#beingMentored",
+ "id.sifa.defs#collaborations"
+ ]
+ },
+ "maxLength": 10,
+ "description": "Types of opportunities the user is open to. Empty array or omitted means not actively seeking."
+ },
+ "headline": {
+ "type": "string",
+ "maxLength": 1200,
+ "description": "Professional headline (e.g., 'Senior Engineer at Acme Corp'). Distinct from Bluesky's displayName.",
+ "maxGraphemes": 120
+ },
+ "location": {
+ "ref": "community.lexicon.location.address",
+ "type": "ref",
+ "description": "Professional location. Sifa enforces ISO 3166-1 alpha-2 country codes at the app layer."
+ },
+ "pronouns": {
+ "type": "string",
+ "maxLength": 200,
+ "description": "Free-form pronouns text. Professional-context override for app.bsky.actor.profile.pronouns.",
+ "maxGraphemes": 20
+ },
+ "createdAt": {
+ "type": "string",
+ "format": "datetime",
+ "description": "Client-declared timestamp when this profile was originally created."
+ },
+ "givenName": {
+ "type": "string",
+ "maxLength": 640,
+ "description": "Given (first) name. Maps to Schema.org Person.givenName. Optional; if absent, displayName is used for rendering.",
+ "maxGraphemes": 64
+ },
+ "familyName": {
+ "type": "string",
+ "maxLength": 640,
+ "description": "Family (last) name. Maps to Schema.org Person.familyName. Optional.",
+ "maxGraphemes": 64
+ },
+ "industries": {
+ "type": "array",
+ "items": {
+ "ref": "id.sifa.defs#industryDomain",
+ "type": "ref"
+ },
+ "maxLength": 10,
+ "description": "Professional industry/domain pairs. Each entry has a required industry and optional domain refinement. Replaces the former singular industry/domain fields."
+ },
+ "displayName": {
+ "type": "string",
+ "maxLength": 640,
+ "description": "Professional-context display name. Overrides app.bsky.actor.profile.displayName when present.",
+ "maxGraphemes": 64
+ },
+ "discoverable": {
+ "type": "boolean",
+ "description": "Whether the rendered profile page may be indexed by search engines and AI tools. Default true when absent. When false, the rendering app emits noindex directives and excludes the page from any sitemap or push-indexing protocol. Does not affect the public visibility of the underlying ATproto records, which remain readable by any client."
+ },
+ "availableToUtc": {
+ "type": "integer",
+ "maximum": 23,
+ "minimum": 0,
+ "description": "End of typical working hours in UTC (0-23). May wrap around midnight (e.g., from 22 to 06 for someone in Asia working US hours)."
+ },
+ "availableFromUtc": {
+ "type": "integer",
+ "maximum": 23,
+ "minimum": 0,
+ "description": "Start of typical working hours in UTC (0-23). Used with availableToUtc for search filtering by work-hours overlap. Set via local-time UI, converted to UTC by the client."
+ },
+ "preferredWorkplace": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "knownValues": [
+ "id.sifa.defs#onSite",
+ "id.sifa.defs#remote",
+ "id.sifa.defs#hybrid",
+ "id.sifa.defs#remoteLocal",
+ "id.sifa.defs#remoteRegion",
+ "id.sifa.defs#remoteGlobal"
+ ]
+ },
+ "maxLength": 5,
+ "description": "Preferred workplace arrangements. Orthogonal to openTo. Empty array or omitted means no preference. Prefer the scoped remote variants (remoteLocal, remoteRegion, remoteGlobal) over the generic 'remote' token."
+ }
+ }
+ },
+ "description": "The user's professional profile summary."
+ }
+ },
+ "$type": "com.atproto.lexicon.schema",
+ "lexicon": 1,
+ "description": "Professional profile summary. Singleton record providing professional identity beyond the base ATproto profile. Fields overlapping app.bsky.actor.profile (displayName, avatar, pronouns) act as optional professional-context overrides; absence means fall back to the bsky record. Structured name fields (givenName, familyName) extend rather than override displayName, since app.bsky.actor.profile has no structured-name primitive."
+}
diff --git a/src/i18n/langs/en.ts b/src/i18n/langs/en.ts
index 6ff0e49..a449a25 100644
--- a/src/i18n/langs/en.ts
+++ b/src/i18n/langs/en.ts
@@ -13,7 +13,16 @@ export default {
'intro.title': 'Clément Voisin is a visual developer you can count on.',
'intro.subtext':
'Computer science undergraduate from Toulouse, France. I mix bytes and arts to create high-class products, websites and apps.',
- availability_cta: 'Looking for a master in CS for 2026/2027',
+ availability_cta: 'Read my CV',
+ 'availability_cta.open_to': 'Open to work: ',
+ 'availability_cta.fullTimeRoles': 'Full-time roles',
+ 'availability_cta.partTimeRoles': 'Part-time roles',
+ 'availability_cta.contractRoles': 'Contract roles',
+ 'availability_cta.commissions': 'Commissioned work',
+ 'availability_cta.boardPositions': 'Board positions',
+ 'availability_cta.mentoringOthers': 'Mentoring others',
+ 'availability_cta.beingMentored': 'Being mentored',
+ 'availability_cta.collaborations': 'Collaborations',
'cta.read_cv': 'Read my CV',
'cta.contact_me': 'Contact me',
section_work: 'Work & projects',
diff --git a/src/i18n/langs/fr.ts b/src/i18n/langs/fr.ts
index d066632..07175e0 100644
--- a/src/i18n/langs/fr.ts
+++ b/src/i18n/langs/fr.ts
@@ -15,7 +15,16 @@ export const fr: typeof en = {
'intro.title': 'Clément Voisin est un développeur visuel sur lequel vous pouvez compter.',
'intro.subtext':
"Étudiant en BUT Informatique à Toulouse, j'allie mes lignes de code aux arts pour créer des produits, sites et applications qualitatives.",
- availability_cta: 'Candidat en master en informatique pour 2026/2027',
+ availability_cta: 'Lire mon CV',
+ 'availability_cta.open_to': 'Ouvert au travail : ',
+ 'availability_cta.fullTimeRoles': 'temps complet',
+ 'availability_cta.partTimeRoles': 'temps partiel',
+ 'availability_cta.contractRoles': 'contractuel',
+ 'availability_cta.commissions': 'commissions freelance',
+ 'availability_cta.boardPositions': 'postes de cadre',
+ 'availability_cta.mentoringOthers': 'mentorer',
+ 'availability_cta.beingMentored': 'être mentoré',
+ 'availability_cta.collaborations': 'collaborations',
'cta.read_cv': 'Lire mon CV',
'cta.contact_me': 'Me contacter',
section_work: 'Expérience & projets',
diff --git a/src/pages/[lang]/index.astro b/src/pages/[lang]/index.astro
index dddf97a..c8a34f8 100644
--- a/src/pages/[lang]/index.astro
+++ b/src/pages/[lang]/index.astro
@@ -6,13 +6,12 @@ import MetaImageEn from '@assets/meta-images/index-en.webp';
import MetaImageFr from '@assets/meta-images/index-fr.webp';
import CRBT from '@assets/project-icons/crbt.webp';
import MecaNume from '@assets/project-icons/mecanume.png';
-import JamesHuang from '@assets/project-images/jameshuang.webp';
import Booklet from '@assets/project-images/booklet.webp';
+import JamesHuang from '@assets/project-images/jameshuang.webp';
import PNSWebsite from '@assets/project-images/pns.webp';
import Uniten1 from '@assets/project-images/uniten-1.webp';
import Uniten2 from '@assets/project-images/uniten-2.webp';
import Uniten3 from '@assets/project-images/uniten-3.webp';
-import AvailabilityCTA from '@components/AvailabilityCTA.astro';
import Button from '@components/Button.astro';
import ProjectCard from '@components/ProjectCard.astro';
import {
@@ -23,11 +22,28 @@ import {
} from '@i18n';
import Layout from '../../layouts/Layout.astro';
import Avatar from './_Avatar.astro';
-import Skills from './_Skills.astro';
+import { atpClient } from '@atp/client';
+import sifaProfile, { type Main as SifaProfile } from '@atp/lexicons/id/sifa/profile/self';
+import AvailabilityCTA from '@components/AvailabilityCTA.astro';
const lang = getLocaleFromUrl(Astro.url);
const t = useTranslations(lang);
const translatePath = useTranslatedPaths(lang);
+
+const profile = await atpClient.get(sifaProfile, { repo: import.meta.env.PUBLIC_ATPROTO_DID });
+
+// construct open to work CTA based on Sifa ID profile
+function constructOpenTo(listOT: Exclude