mirror of
https://github.com/ArthurDanjou/artmcp.git
synced 2026-01-14 16:54:22 +01:00
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:
@@ -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())
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
20
content/certifications.json
Normal file
20
content/certifications.json
Normal 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
19
content/languages.json
Normal 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
32
content/profile.json
Normal 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"
|
||||
]
|
||||
}
|
||||
10
server/api/certifications.get.ts
Normal file
10
server/api/certifications.get.ts
Normal 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
|
||||
})
|
||||
10
server/api/languages.get.ts
Normal file
10
server/api/languages.get.ts
Normal 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
10
server/api/profile.get.ts
Normal 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
|
||||
})
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user