Files
cv-site/templates/cv-text.txt
T
juanatsap 58c1237326 feat: Add secure contact form with comprehensive security features
- Add contact form dialog with HTMX integration (hx-post)
- Implement browser-only access middleware (blocks curl/Postman/wget)
- Add rate limiting (5 requests/hour per IP) for contact endpoint
- Implement honeypot and timing-based bot detection
- Add input validation (email format, message length 10-5000 chars)
- Create contact button in desktop and mobile navigation (last position)

Security features:
- Browser-only middleware validates User-Agent, Referer/Origin, HX-Request headers
- Honeypot field returns fake success to fool bots while logging spam
- Timing validation rejects forms submitted < 2 seconds
- All security events logged for monitoring

Documentation:
- docs/SECURITY.md - Comprehensive security documentation
- docs/HACK-CHALLENGE.md - "Try to Hack Me!" challenge for security researchers
- docs/SECURITY-AUDIT-REPORT.md - Full security audit report
- docs/CONTACT-FORM-QUICKSTART.md - Integration guide

Form fields: email (required), name, company, subject, message (required)
2025-11-30 14:31:58 +00:00

116 lines
5.7 KiB
Plaintext

================================================================================
{{if .Icons}} 📄 CURRICULUM VITAE
{{else}} CURRICULUM VITAE
{{end}}================================================================================
{{if .Icons}}👤 {{end}}{{.CV.Personal.Name}}
{{.CV.Personal.Title}}
{{if .Icons}}📍{{else}}Location:{{end}} {{.CV.Personal.Location}}
{{if .Icons}}📧{{else}}Email: {{end}} {{.CV.Personal.Email}}
{{if .Icons}}📱{{else}}Phone: {{end}} {{.CV.Personal.Phone}}
{{if .Icons}}💼{{else}}LinkedIn:{{end}} {{.CV.Personal.LinkedIn}}
{{if .Icons}}💻{{else}}GitHub: {{end}} {{.CV.Personal.GitHub}}
{{if .Icons}}🌐{{else}}Website: {{end}} {{.CV.Personal.Website}}
================================================================================
{{if .Icons}} 📝 SUMMARY
{{else}} SUMMARY
{{end}}================================================================================
{{.CV.Summary}}
================================================================================
{{if .Icons}} 💼 EXPERIENCE
{{else}} EXPERIENCE
{{end}}================================================================================
{{range .CV.Experience}}
--------------------------------------------------------------------------------
{{if $.Icons}}🏢 {{end}}{{.Position}}
{{.Company}} | {{.Location}}
{{if $.Icons}}📅 {{end}}{{.StartDate}} - {{if .Current}}Present{{else}}{{.EndDate}}{{end}}{{if .Duration}} ({{.Duration}}){{end}}
--------------------------------------------------------------------------------
{{.ShortDescription}}
{{if $.Icons}}📋 Responsibilities:{{else}}Responsibilities:{{end}}
{{range .Responsibilities}}- {{.}}
{{end}}
{{if $.Icons}}🛠️ Technologies:{{else}}Technologies:{{end}} {{range $i, $t := .Technologies}}{{if $i}}, {{end}}{{$t}}{{end}}
{{end}}
================================================================================
{{if .Icons}} 🎓 EDUCATION
{{else}} EDUCATION
{{end}}================================================================================
{{range .CV.Education}}
{{if $.Icons}}📜 {{end}}{{.Degree}}{{if .Field}} - {{.Field}}{{end}}
{{.Institution}} - {{.Location}}
{{.StartDate}} - {{.EndDate}}
{{end}}
================================================================================
{{if .Icons}} 🛠️ TECHNICAL SKILLS
{{else}} TECHNICAL SKILLS
{{end}}================================================================================
{{range .CV.Skills.Technical}}
{{if $.Icons}}## 📦 {{.Category}}{{else}}## {{.Category}}{{end}}
{{range .Items}}- {{.}}
{{end}}
{{end}}
================================================================================
{{if .Icons}} 🏆 AWARDS
{{else}} AWARDS
{{end}}================================================================================
{{range .CV.Awards}}
{{if $.Icons}}🥇 {{end}}{{.Title}} - {{.Issuer}} ({{.Date}})
{{.Description}}
{{end}}
================================================================================
{{if .Icons}} 📁 PROJECTS
{{else}} PROJECTS
{{end}}================================================================================
{{range .CV.Projects}}
--------------------------------------------------------------------------------
{{if $.Icons}}🚀 {{end}}{{.Title}}{{if .URL}} - {{.URL}}{{end}}
{{if .Location}}{{.Location}}{{end}}
--------------------------------------------------------------------------------
{{.ShortDescription}}
{{range .Responsibilities}}- {{.}}
{{end}}
{{if $.Icons}}🛠️ Technologies:{{else}}Technologies:{{end}} {{range $i, $t := .Technologies}}{{if $i}}, {{end}}{{$t}}{{end}}
{{end}}
================================================================================
{{if .Icons}} 📚 COURSES
{{else}} COURSES
{{end}}================================================================================
{{range .CV.Courses}}
{{if $.Icons}}📖 {{end}}{{.Title}} - {{.Institution}} ({{.Date}})
{{.Location}}
{{if .Description}}{{.Description}}{{end}}
{{range .Responsibilities}}- {{.}}
{{end}}
{{end}}
================================================================================
{{if .Icons}} 🌍 LANGUAGES
{{else}} LANGUAGES
{{end}}================================================================================
{{range .CV.Languages}}
- {{if $.Icons}}🗣️ {{end}}{{.Language}}: {{.Proficiency}}{{if .Detail}} - {{.Detail}}{{end}}
{{end}}
================================================================================
{{if .Icons}} 📬 CONTACT
{{else}} CONTACT
{{end}}================================================================================
{{if .Icons}}👤{{else}}Name: {{end}} {{.CV.Personal.Name}}
{{if .Icons}}📧{{else}}Email: {{end}} {{.CV.Personal.Email}}
{{if .Icons}}📱{{else}}Phone: {{end}} {{.CV.Personal.Phone}}
{{if .Icons}}💼{{else}}LinkedIn:{{end}} {{.CV.Personal.LinkedIn}}
{{if .Icons}}💻{{else}}GitHub: {{end}} {{.CV.Personal.GitHub}}
{{if .Icons}}🌐{{else}}Website: {{end}} {{.CV.Personal.Website}}
================================================================================
Generated from: {{.BaseURL}} | Last Updated: {{.CV.Meta.LastUpdated}}
================================================================================