feat: CV overhaul — modernize skills, add projects, fix proficiency scale

- Title: "Senior Technical Consultant & Full-Stack Developer"
- Add Swift & macOS Development skill category (SoundInbox, Commando)
- Rename "AI-Assisted Development" → "AI Engineering & Integration" with MCP, ADK, Gemini, CLIP
- Remove "Design Tools" (Corel Draw, GIMP) and "Legacy Enterprise" (Struts, Yii, Zend)
- Remove jQuery, Assembler, Groovy; add Swift to programming languages
- Rewrite Team Management with professional language
- Proficiency scale: 1-5 → 1-10 (validation, tests, chat agent prompt)
- Add SoundInbox (Swift) and Commando (Go+SwiftUI) to projects
- Remove personal details: dateOfBirth, placeOfBirth, domestika, driverLicense
- Trim weak LinkedIn Learning courses (speed reading, persuasive UX)
- Fix Spanish soft_skills duplicates
- Chat agent: 11 new assertions (proficiency scale, new projects, removed skills)
- Fix hardcoded year 2025 in TestDefaultCVShortcut → time.Now().Year()
This commit is contained in:
juanatsap
2026-04-13 00:07:51 +01:00
parent aae818fbc0
commit 2fbd88f28e
7 changed files with 273 additions and 152 deletions
+1
View File
@@ -61,6 +61,7 @@ QUERY STRATEGY BY QUESTION TYPE:
- NEVER search only projects or only experience — always use cross-section search.
- Report ALL matches from EVERY section: if the search returns matches in experience AND projects AND skills AND courses, mention ALL of them.
- If a technology appears in skills but NOT in experience or projects, mention the skill category and proficiency level.
- IMPORTANT: Proficiency is on a scale of 1 to 10 (not 1 to 5). Always say "X out of 10" or "X/10". Each unit represents half a star on a 5-star visual scale.
- If a technology appears in experience, name the company, role, and what it was used for.
2. COMPANY / EMPLOYER QUESTIONS (e.g. "What companies?", "Tell me about SAP"):
+7 -3
View File
@@ -1,9 +1,11 @@
package handlers
import (
"fmt"
"net/http"
"net/http/httptest"
"testing"
"time"
)
// TestHome tests the Home handler
@@ -132,6 +134,8 @@ func TestDefaultCVShortcut(t *testing.T) {
handler := newTestCVHandler(t, "localhost:1999", nil)
currentYear := fmt.Sprintf("%d", time.Now().Year())
tests := []struct {
name string
path string
@@ -139,12 +143,12 @@ func TestDefaultCVShortcut(t *testing.T) {
}{
{
name: "Valid shortcut URL (current year EN)",
path: "/cv-jamr-2025-en.pdf",
path: "/cv-jamr-" + currentYear + "-en.pdf",
expectStatus: http.StatusOK,
},
{
name: "Valid shortcut URL (current year ES)",
path: "/cv-jamr-2025-es.pdf",
path: "/cv-jamr-" + currentYear + "-es.pdf",
expectStatus: http.StatusOK,
},
{
@@ -154,7 +158,7 @@ func TestDefaultCVShortcut(t *testing.T) {
},
{
name: "Invalid language",
path: "/cv-jamr-2025-fr.pdf",
path: "/cv-jamr-" + currentYear + "-fr.pdf",
expectStatus: http.StatusNotFound,
},
{
+3 -3
View File
@@ -246,11 +246,11 @@ func (s *Skills) Validate() error {
})
}
// Proficiency should be between 1-5 (typical skill rating)
if cat.Proficiency < 1 || cat.Proficiency > 5 {
// Proficiency should be between 1-10 (half-star increments over 5 stars)
if cat.Proficiency < 1 || cat.Proficiency > 10 {
errors = append(errors, ValidationError{
Field: fmt.Sprintf("technical[%d].proficiency", i),
Message: "proficiency must be between 1 and 5",
Message: "proficiency must be between 1 and 10",
})
}
+4 -4
View File
@@ -308,7 +308,7 @@ func TestSkills_Validate(t *testing.T) {
},
},
wantErr: true,
errMsg: "proficiency must be between 1 and 5",
errMsg: "proficiency must be between 1 and 10",
},
{
name: "Invalid - Proficiency too high",
@@ -316,13 +316,13 @@ func TestSkills_Validate(t *testing.T) {
Technical: []cv.SkillCategory{
{
Category: "Backend",
Proficiency: 6,
Proficiency: 11,
Items: []string{"Go"},
},
},
},
wantErr: true,
errMsg: "proficiency must be between 1 and 5",
errMsg: "proficiency must be between 1 and 10",
},
{
name: "Invalid - No skill items",
@@ -609,7 +609,7 @@ func TestCV_Validate(t *testing.T) {
Technical: []cv.SkillCategory{
{
Category: "Backend",
Proficiency: 10, // Invalid
Proficiency: 11, // Invalid
Items: []string{"Go"},
},
},