CV (cv.md/resume.html/public cv.html), O nama CV/blog button swap, email validation hardening
Commitovi
14f8f19fb2430eSession 2026-08-10 — CV, O nama button swap, email validation hardening
Kontekst
Korisnik je tražio: (1) CV u .md i resume.html — tehničar za računalstvo, rođen 9.10.1993., 5+ godina iskustva, cijena 20 €/h, svi portfolio showcase projekti, tagline "Cyber sigurnost, LLM Q/A inženjering i full stack web razvoj", protosweb + bodulica = LIVE, ostalo DEMO, plus paragraf o Linux (VSCodium) / Protos Agent / System Boost. (2) CV gumb u Dariov prozor na O nama, blog gumb prebačen u Martinin prozor. (3) Pojačati email validaciju — korisnik je primijetio da se mail može poslati upisivanjem gluposti u polje za email.
Što je napravljeno
1. CV (commit 14f8f19)
CV/cv.md+CV/resume.html— puni životopis:- Header: "Dario Imširović — Full Stack Web Developer · Cyber sigurnost · LLM Q/A inženjering · Tehničar za računalstvo"
- Tagline: "Cyber sigurnost, LLM Q/A inženjering i full stack web razvoj — uz vrhunski frontend/shop i app dizajn s 3D iskustvima. Gradimo precizna, brza i vizualno impresivna rješenja."
- Rođen 9.10.1993., 5+ godina, 20 €/h
- Kontakti: dario.admin@protosweb.eu, protosweb.eu, github.com/ProtosEschatos, golance.com/freelancer/dario.imsirovic, about.me/imsirovicdarioprotosweb, +385 97 604 39 41
- Edukacija: tehničar za računalstvo; skills tablica
- Projekti: LIVE (Protos Web ⭐, Bodulica Shop 🟢) vs DEMO (Golden Pawn 🔨, LuminaDent 🦷, Auto Moto Zagreb 🚗, Apartman Mihael 🏖️, Auto Precision 🔧, Mark23 CAP 📊, System Boost ⚡)
- Paragraf: "Gradim 3D/WebGL i full stack web na Linuxu (VSCodium) kroz vlastiti Protos Agent, pravila i workflowe. Uz to: System Boost — Linux i Windows upute za otključavanje punog CPU kapaciteta + zram performance boost."
- Vrednovanje @20 €/h (~940h ≈ 18.800 €, raspon 18.000–20.000 €)
public/cv.html= kopijaCV/resume.html→ dostupan na https://protosweb.eu/cv.html (Vercel public/)
2. O nama button swap (commit 14f8f19)
src/app/[locale]/o-nama/page.tsx: Dario prozor → CV gumb (/cv.html, target _blank, FileText ikona,t('cvLink')); Martina prozor → blog gumb (/blog, BookOpen ikona,t('guideLink'))- Import:
ArrowRight, BookOpen, FileText, Instagramiz lucide-react cvLinkprijevod dodan u svih 6 locale JSON (src/messages/hr/en/de/it/es/sr.json)
3. Email validation hardening (commit fb2430e)
Problem: server action za kontakt nije imao NI KAKVU validaciju; zod .email() propušta smeće poput a@b.c. Footer newsletter i donate su koristili email.includes('@') / slab regex.
Fix — zajednički strogi regex:
src/lib/schemas/contact.ts: exportEMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/(bez razmaka, domena s TLD-om ≥ 2 znaka);contactFormSchema.email→.regex(EMAIL_REGEX)src/actions/contact.ts:contactFormSchema.safeParse(data)prije RPC-a (bio bez validacije!)src/lib/contact/submit-contact.ts: ista zod provjera (defense in depth)src/app/api/contact/route.ts:EMAIL_REGEXumjesto.email()src/components/features/home/sections/Contact.tsx: koristi zajedničkiEMAIL_REGEX(bio lokalni slab)src/app/api/subscribe/route.ts:EMAIL_REGEXumjesto slabog regexasrc/app/api/donate/route.ts:EMAIL_REGEXumjestoemail.includes('@')src/components/layout/Footer.tsx:EMAIL_REGEXuhandleSubscribesrc/components/features/donations/DonationModal.tsx:EMAIL_REGEXumjestoemail.includes('@')
Odluke i tradeoffi
- Email validacija na svim razinama (client → API → server action → lib) = defense in depth; korisnik je specifično tražio da se smeće ne može poslati.
- CV koristi i
.md(za AI/freelance profile) iresume.html(print-ready, Ctrl+P), pluspublic/cv.htmlza direktan javni link. public/cv.htmlje statičan HTML (ne SSG) — servira se s Vercel public/ foldera bez builda.
Provjere
npx tsc --noEmit✅ (exit 0)npx next build✅ (exit 0)- JSON validacija svih 6 localea ✅
Commit + push
14f8f19— CV files + O nama button swap (10 datoteka, +864 linija)fb2430e— email validation hardening (9 datoteka, +42/−17)
Otvoreno / Sljedeći koraci
- [ ] Vercel build/deploy potvrditi live (auto-deploy s GitHub main-a)
- [ ] Ako korisnik želi, dodati CV download gumb (PDF varijanta)
Reference
- https://protosweb.eu/cv.html
- commits:
14f8f19,fb2430e