diff --git a/src/app/features/cv/cv-section.component.ts b/src/app/features/cv/cv-section.component.ts index 7dd0483..2c8b3fc 100644 --- a/src/app/features/cv/cv-section.component.ts +++ b/src/app/features/cv/cv-section.component.ts @@ -2,6 +2,12 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'; import { CommonModule } from '@angular/common'; import { SectionComponent } from '../../shared/ui/section/section.component'; +type CourseItem = { + title: string; + provider: string; + period: string; +}; + @Component({ selector: 'app-cv-section', standalone: true, @@ -22,10 +28,10 @@ import { SectionComponent } from '../../shared/ui/section/section.component'; Experience focus

- Node.js + .NET - Tailwind + Blazor - Design systems + Web API - Testing + MSSQL - CI/CD + .NET MAUI + + + Ionic
@@ -63,18 +72,154 @@ import { SectionComponent } from '../../shared/ui/section/section.component'; How I structure work

+ +
+
+
+

+ Courses & certifications +

+

+ Publicly listed learning history from LinkedIn-derived profile data. +

+
+ + 2018 - 2024 + +
+ +
+ @for (course of courses; track course.title) { +
+
+

+ {{ course.title }} +

+ + {{ course.period }} + +
+

+ {{ course.provider }} +

+
+ } +
+
` }) export class CvSectionComponent { readonly sectionId = 'cv'; + + readonly courses: CourseItem[] = [ + { + title: 'Learn Go Course', + provider: 'Codecademy', + period: 'Apr 2024' + }, + { + title: 'Reactive Angular RxJS (Angular 17)', + provider: 'Udemy', + period: 'Mar 2024' + }, + { + title: 'C# Advanced Topics: Prepare for Technical Interviews', + provider: 'Udemy', + period: 'Sep 2021' + }, + { + title: 'Learning Docker', + provider: 'LinkedIn', + period: 'Sep 2021' + }, + { + title: 'Applying MVVM in Xamarin.Forms Applications', + provider: 'Pluralsight', + period: 'May 2021' + }, + { + title: 'Architecting Xamarin.Forms Applications for code reuse', + provider: 'Pluralsight', + period: 'May 2021' + }, + { + title: 'Learning Entity Framework Core', + provider: 'LinkedIn', + period: 'May 2021' + }, + { + title: 'C# Intermediate: Classes, Objects and OOP', + provider: 'Udemy', + period: 'Oct 2020' + }, + { + title: 'Xamarin Forms: Build Native Cross-platform Apps with C#', + provider: 'Udemy', + period: 'Sep 2020' + }, + { + title: 'Building Web APIs with ASP.NET Core', + provider: 'LinkedIn', + period: 'Aug 2020' + }, + { + title: 'Database Foundations: Storage', + provider: 'LinkedIn', + period: 'Jul 2020' + }, + { + title: 'Software Architecture Foundations', + provider: 'LinkedIn', + period: 'Jul 2020' + }, + { + title: 'C# Essential Training: 2 Flow Control, Arrays, and Exception Handling', + provider: 'LinkedIn', + period: 'Jan 2020' + }, + { + title: 'C#: Interfaces and Generics', + provider: 'LinkedIn', + period: 'Jan 2020' + }, + { + title: 'C# Essential Training: 1 Syntax and Object Oriented Programming', + provider: 'LinkedIn', + period: 'Dec 2019' + }, + { + title: 'SQL Server - Easy Install & Configure a Developer Instance', + provider: 'Udemy', + period: 'Jan 2019' + }, + { + title: 'C# Fundamentals by Coding', + provider: 'Udemy', + period: 'Dec 2018' + }, + { + title: 'Javascript Essentials', + provider: 'Udemy', + period: 'Jul 2018' + }, + { + title: 'Linux Command Line', + provider: 'Udemy', + period: 'Jul 2018' + } + ]; } diff --git a/src/app/features/home/home-section.component.spec.ts b/src/app/features/home/home-section.component.spec.ts new file mode 100644 index 0000000..bccd0d5 --- /dev/null +++ b/src/app/features/home/home-section.component.spec.ts @@ -0,0 +1,14 @@ +import { HomeSectionComponent } from './home-section.component'; + +describe('HomeSectionComponent', () => { + it('orders the career timeline from newest to oldest', () => { + const component = new HomeSectionComponent(); + + expect(component.timeline.map(entry => entry.step)).toEqual([ + '2025 - Present', + 'Aug 2023 - Present', + 'Nov 2020 - Present', + 'Nov 2018 - 2020' + ]); + }); +}); diff --git a/src/app/features/home/home-section.component.ts b/src/app/features/home/home-section.component.ts index 039c490..12845cb 100644 --- a/src/app/features/home/home-section.component.ts +++ b/src/app/features/home/home-section.component.ts @@ -114,33 +114,33 @@ export class HomeSectionComponent { readonly timeline: TimelineEntry[] = [ { - step: '2000 - 2010', - phase: 'COMP-2000 Ltd', - title: 'Junior Developer', - subtitle: 'Started my career focusing on foundational programming skills and contributing to small-scale projects.', - side: 'left' + step: '2025 - Present', + phase: 'Unija Smart Accounting BiH', + title: 'Senior Software Engineer', + subtitle: 'Currently focused on software engineering in the Unija Smart Accounting environment.', + side: 'left', + pulsating: true }, { - step: '2010 - 2020', + step: 'Aug 2023 - Present', phase: 'COMP-2000 Ltd', - title: 'Senior Developer', - subtitle: 'Led development teams, implemented complex features, and mentored junior staff, specializing in backend systems.', + title: 'Product Owner', + subtitle: 'Led product planning, backlog management, sprint reviews, retrospectives, and cross-functional delivery for a commercialist mobile app.', side: 'right' }, { - step: '2020 - 2024', + step: 'Nov 2020 - Present', phase: 'COMP-2000 Ltd', - title: 'Technical Lead', - subtitle: 'Architected scalable solutions and managed the technical roadmap for critical product lines.', + title: 'Software Developer', + subtitle: 'Designed, developed, tested, and maintained C# applications across .NET, Blazor, Angular, Ionic, Web API, MSSQL, and .NET MAUI.', side: 'left' }, { - step: '2024 - Present', - phase: 'Unija ETL Group', - title: 'Senior Software Engineer', - subtitle: 'Currently focused on developing robust ETL processes and data integration solutions within a dynamic financial environment.', - side: 'right', - pulsating: true + step: 'Nov 2018 - 2020', + phase: 'COMP-2000 Ltd', + title: 'Junior Software Developer', + subtitle: 'Built a foundation in C#, OOP, application lifecycle practices, MSSQL, Xamarin Forms, Angular, WPF, and Windows Forms.', + side: 'right' } ]; } diff --git a/src/app/features/portfolio/portfolio-section.component.ts b/src/app/features/portfolio/portfolio-section.component.ts index dd9545f..9af7398 100644 --- a/src/app/features/portfolio/portfolio-section.component.ts +++ b/src/app/features/portfolio/portfolio-section.component.ts @@ -18,8 +18,8 @@ type PortfolioItem = {
@for (item of items; track item.title) { @@ -55,32 +55,39 @@ export class PortfolioSectionComponent { readonly items: PortfolioItem[] = [ { - title: 'Design system foundation', - period: '2024', + title: 'Cultural Sports Center CSC "Kakanj"', + period: '2016', summary: - 'Built a lightweight component system with clear tokens and documentation, reducing UI delivery time while keeping accessibility first.', - tags: ['Angular', 'Tailwind', 'Design systems'] + 'Supported cultural and sports development in Kakanj, including translation work for Italian students on an EU project and curator work through the local museum.', + tags: ['Culture', 'Translation', 'EU project'] }, { - title: 'Modernize a legacy SPA', - period: '2023', + title: 'Institute for youth development "KULT"', + period: '2016', summary: - 'Incrementally refactored a legacy front end into modular features with typed APIs, improving stability and developer velocity.', - tags: ['Refactoring', 'TypeScript', 'DX'] + 'Coordinated youth-focused project work with an NGO that develops and advocates legal and strategic solutions for young citizens, including education on alcohol, drugs, and STDs.', + tags: ['Youth', 'Education', 'NGO'] }, { - title: 'API-first product slice', - period: '2022', + title: 'WorldVision', + period: '2015', summary: - 'Shipped a new product slice with clear contracts between front end and services, enabling parallel delivery across teams.', - tags: ['Architecture', 'APIs', 'Collaboration'] + 'Contributed to a two-day workshop focused on revising and designing hazard assessments, elemental disaster estimates, and safety planning.', + tags: ['Workshop', 'Safety planning', 'Risk assessment'] }, { - title: 'Performance and observability pass', - period: '2021', + title: 'Project Manager Alternative Wave (AlterVal)', + period: '2015 - 2016', summary: - 'Improved performance budgets, added monitoring, and set up alerting to catch regressions before they reached users.', - tags: ['Performance', 'Monitoring', 'Quality'] + 'Managed local projects in Kakanj addressing modern social challenges, including writing and realizing initiatives financed by WorldVision.', + tags: ['Project management', 'Community', 'WorldVision'] + }, + { + title: 'Mountain Rescue Service - Kakanj and Zavidovici', + period: '2013 - Present', + summary: + 'Organized search and rescue groups with registered rescuers, managed equipment, and helped write and realize rescue service projects.', + tags: ['Rescue service', 'Operations', 'Equipment'] } ]; }