Add comprehensive profile enhancements: languages, certifications, profile info, and fix duplicate resource ID bug

Co-authored-by: ArthurDanjou <29738535+ArthurDanjou@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2025-11-14 21:52:15 +00:00
parent be7a6b7371
commit 01f8ec098e
8 changed files with 267 additions and 2 deletions

View File

@@ -79,13 +79,63 @@ export default defineContentConfig({
schema: z.object({
body: z.array(z.object({
name: z.string(),
url: z.string().url()
icon: z.string().optional(),
value: z.string().url()
}))
})
}),
hobbies: defineCollection({
type: 'page',
source: 'hobbies.md'
}),
languages: defineCollection({
type: 'page',
source: 'languages.json',
schema: z.object({
body: z.array(z.object({
name: z.string(),
level: z.string(),
proficiency: z.string()
}))
})
}),
certifications: defineCollection({
type: 'page',
source: 'certifications.json',
schema: z.object({
body: z.array(z.object({
name: z.string(),
issuer: z.string(),
date: z.string(),
url: z.string().url().optional()
}))
})
}),
profile: defineCollection({
type: 'page',
source: 'profile.json',
schema: z.object({
shortBio: z.string(),
location: z.object({
current: z.string(),
timezone: z.string(),
remote: z.boolean()
}),
availability: z.object({
status: z.string(),
types: z.array(z.string()),
preferences: z.array(z.string()),
startDate: z.string().optional()
}),
careerGoals: z.array(z.string()),
workPreferences: z.object({
workStyle: z.array(z.string()),
companySize: z.array(z.string()),
industries: z.array(z.string()),
roles: z.array(z.string())
}),
achievements: z.array(z.string())
})
})
}
})

View File

@@ -0,0 +1,20 @@
{
"body": [
{
"name": "Git & GitHub",
"issuer": "GitHub Learning Lab",
"date": "2021-06",
"url": "https://github.com"
},
{
"name": "Docker Essentials",
"issuer": "Self-taught through practical experience",
"date": "2021-09"
},
{
"name": "Machine Learning Specialization",
"issuer": "Various academic courses",
"date": "2024-09"
}
]
}

19
content/languages.json Normal file
View File

@@ -0,0 +1,19 @@
{
"body": [
{
"name": "French",
"level": "Native",
"proficiency": "C2"
},
{
"name": "English",
"level": "Fluent",
"proficiency": "C1"
},
{
"name": "Spanish",
"level": "Intermediate",
"proficiency": "B1"
}
]
}

32
content/profile.json Normal file
View File

@@ -0,0 +1,32 @@
{
"shortBio": "Software Engineer & Mathematics Student passionate about AI, Data Science, and Infrastructure. Building scalable solutions at the intersection of theory and practice.",
"location": {
"current": "Paris, France",
"timezone": "Europe/Paris (CET/CEST)",
"remote": true
},
"availability": {
"status": "open_to_opportunities",
"types": ["internship", "full-time", "part-time", "freelance"],
"preferences": ["remote", "hybrid"],
"startDate": "2025-06"
},
"careerGoals": [
"Become an expert in Machine Learning Engineering and MLOps",
"Contribute to open-source AI/ML projects",
"Build scalable data infrastructure for real-world applications",
"Combine mathematical rigor with practical engineering solutions"
],
"workPreferences": {
"workStyle": ["remote", "hybrid"],
"companySize": ["startup", "scale-up", "enterprise"],
"industries": ["AI/ML", "Data Science", "FinTech", "SaaS", "DevOps"],
"roles": ["Machine Learning Engineer", "Data Engineer", "Software Engineer", "MLOps Engineer"]
},
"achievements": [
"Built and maintained personal homelab with 10+ self-hosted services",
"Developed mini-games for Erisium, one of the largest French-speaking Minecraft servers",
"Created multiple full-stack applications using modern web technologies",
"Active contributor to various technical projects and communities"
]
}

View File

@@ -0,0 +1,10 @@
import { queryCollection } from '@nuxt/content/server'
export default defineCachedEventHandler(async (event) => {
return await queryCollection(event, 'certifications')
.where('extension', '=', 'json')
.first()
}, {
name: 'certifications-list',
maxAge: 3600 // 1 hour
})

View File

@@ -0,0 +1,10 @@
import { queryCollection } from '@nuxt/content/server'
export default defineCachedEventHandler(async (event) => {
return await queryCollection(event, 'languages')
.where('extension', '=', 'json')
.first()
}, {
name: 'languages-list',
maxAge: 3600 // 1 hour
})

10
server/api/profile.get.ts Normal file
View File

@@ -0,0 +1,10 @@
import { queryCollection } from '@nuxt/content/server'
export default defineCachedEventHandler(async (event) => {
return await queryCollection(event, 'profile')
.where('extension', '=', 'json')
.first()
}, {
name: 'profile-info',
maxAge: 3600 // 1 hour
})

View File

@@ -162,7 +162,7 @@ function createServer() {
)
server.registerResource(
'artmcp-contact',
'artmcp-hobbies',
'resource://artmcp/hobbies',
{
title: 'ArtMCP Hobbies',
@@ -199,6 +199,63 @@ function createServer() {
}
)
server.registerResource(
'artmcp-languages',
'resource://artmcp/languages',
{
title: 'ArtMCP Languages',
description: 'Get Languages spoken by Arthur Danjou with proficiency levels'
},
async (uri) => {
const result = await $fetch('/api/languages')
return {
contents: [{
uri: uri.href,
mimeType: 'application/json',
text: JSON.stringify(result, null, 2)
}]
}
}
)
server.registerResource(
'artmcp-certifications',
'resource://artmcp/certifications',
{
title: 'ArtMCP Certifications',
description: 'Get Certifications and achievements of Arthur Danjou'
},
async (uri) => {
const result = await $fetch('/api/certifications')
return {
contents: [{
uri: uri.href,
mimeType: 'application/json',
text: JSON.stringify(result, null, 2)
}]
}
}
)
server.registerResource(
'artmcp-profile',
'resource://artmcp/profile',
{
title: 'ArtMCP Profile',
description: 'Get comprehensive profile information of Arthur Danjou including bio, location, availability, career goals, and work preferences'
},
async (uri) => {
const result = await $fetch('/api/profile')
return {
contents: [{
uri: uri.href,
mimeType: 'application/json',
text: JSON.stringify(result, null, 2)
}]
}
}
)
// Tools
server.registerTool(
'get_resume_link',
@@ -420,6 +477,63 @@ function createServer() {
}
)
server.registerPrompt(
'artmcp-languages',
{
title: 'Get Languages of Arthur Danjou',
description: 'Get Languages spoken by Arthur Danjou with proficiency levels'
},
async () => {
return {
messages: [{
role: 'user',
content: {
type: 'text',
text: `What languages does Arthur Danjou speak and at what proficiency level?`
}
}]
}
}
)
server.registerPrompt(
'artmcp-certifications',
{
title: 'Get Certifications of Arthur Danjou',
description: 'Get Certifications and achievements of Arthur Danjou'
},
async () => {
return {
messages: [{
role: 'user',
content: {
type: 'text',
text: `What certifications and professional achievements does Arthur Danjou have?`
}
}]
}
}
)
server.registerPrompt(
'artmcp-profile',
{
title: 'Get Profile Information of Arthur Danjou',
description: 'Get comprehensive profile information including bio, location, availability, and career goals'
},
async () => {
return {
messages: [{
role: 'user',
content: {
type: 'text',
text: `Provide me comprehensive profile information about Arthur Danjou including his bio, location, availability, career goals, and work preferences.`
}
}]
}
}
)
return server
}