The Works component (representing Experience) displays Federico’s professional timeline with detailed information about each role, including responsibilities, achievements, and technologies used. It renders work experiences from translation data as timeline cards.Location:src/components/Main/Works.jsx
The component is named “Works” in the codebase but represents the Experience/Career section in the UI.
// Works items - array of job objects[ { "role": "Technical Support & Software Developer", "company": "Asince SRL", "period": "2022 — Present", "summary": "I keep the company's core platform stable while developing new features for fintech and ERP products.", "achievements": [ "Handled and resolved technical support tickets.", "Developed and implemented hotfixes for production environments.", "Monitored and maintained servers and databases.", "Developed new features for web applications." ], "technologies": ["C# .NET", "Vue", "TypeScript", "Azure", "Oracle SQL", "Crystal Reports"] }, { "role": "Freelance Full-Stack Developer", "company": "Independent Projects", "period": "2019 — 2022", "summary": "Designed and developed custom websites for small businesses — from concept to launch.", "achievements": [ "Built responsive sites and PWAs that improved visibility and lead generation for local clients.", "Automated back-office processes with Firebase, cutting manual work by up to 50%.", "Helped non-technical clients adopt analytics and iterative improvement practices." ], "technologies": ["Next.js", "Firebase", "Tailwind", "Node.js"] }]
Icon badge on the left (emerald circular background)
Arrow icon (bi-arrow-right) for directional indication
Text content aligned to start with proper gap
Visual:
→ Handled and resolved technical support tickets.→ Developed and implemented hotfixes for production.→ Monitored and maintained servers and databases.→ Developed new features for web applications.
The space-y-3 utility creates vertical spacing between achievements without requiring gap on a flex container.
// Between cardsgap-6 // Vertical spacing between work items// Within cardsgap-4 // Between major sections (header, summary, achievements, tech)gap-3 // Within header (role/company and period)space-y-3 // Between achievement itemsgap-2 // Between technology badges
All subsections use optional chaining and conditional rendering:
// Summary: Only if provided{work?.summary && <p>...</p>}// Achievements: Only if array exists and has items{Array.isArray(work?.achievements) && work.achievements.length > 0 && ( <ul>...</ul>)}// Technologies: Only if array exists and has items{Array.isArray(work?.technologies) && work.technologies.length > 0 && ( <ul>...</ul>)}
This ensures the component gracefully handles incomplete data without breaking or showing empty sections.