diff --git a/PetCareScheduler/build.gradle b/PetCareScheduler/build.gradle index e69de29..b4b861d 100644 --- a/PetCareScheduler/build.gradle +++ b/PetCareScheduler/build.gradle @@ -0,0 +1,5 @@ +apply plugin: 'java' +java { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 +} \ No newline at end of file diff --git a/Portfolio/build.gradle b/Portfolio/build.gradle new file mode 100644 index 0000000..9e49f9c --- /dev/null +++ b/Portfolio/build.gradle @@ -0,0 +1 @@ +apply plugin: 'base' \ No newline at end of file diff --git a/Portfolio/html_finalprojimages/CSS3.png b/Portfolio/html_finalprojimages/CSS3.png new file mode 100644 index 0000000..001771a Binary files /dev/null and b/Portfolio/html_finalprojimages/CSS3.png differ diff --git a/Portfolio/html_finalprojimages/bullet.png b/Portfolio/html_finalprojimages/bullet.png new file mode 100644 index 0000000..8bd59f8 Binary files /dev/null and b/Portfolio/html_finalprojimages/bullet.png differ diff --git a/Portfolio/html_finalprojimages/checkmark--outline.svg b/Portfolio/html_finalprojimages/checkmark--outline.svg new file mode 100644 index 0000000..18cdcda --- /dev/null +++ b/Portfolio/html_finalprojimages/checkmark--outline.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/Portfolio/html_finalprojimages/envelope.png b/Portfolio/html_finalprojimages/envelope.png new file mode 100644 index 0000000..26aef2b Binary files /dev/null and b/Portfolio/html_finalprojimages/envelope.png differ diff --git a/Portfolio/html_finalprojimages/flash.png b/Portfolio/html_finalprojimages/flash.png new file mode 100644 index 0000000..c12f96b Binary files /dev/null and b/Portfolio/html_finalprojimages/flash.png differ diff --git a/Portfolio/html_finalprojimages/home.png b/Portfolio/html_finalprojimages/home.png new file mode 100644 index 0000000..c69697c Binary files /dev/null and b/Portfolio/html_finalprojimages/home.png differ diff --git a/Portfolio/html_finalprojimages/html5.png b/Portfolio/html_finalprojimages/html5.png new file mode 100644 index 0000000..cdd959b Binary files /dev/null and b/Portfolio/html_finalprojimages/html5.png differ diff --git a/Portfolio/html_finalprojimages/java.png b/Portfolio/html_finalprojimages/java.png new file mode 100644 index 0000000..aac726f Binary files /dev/null and b/Portfolio/html_finalprojimages/java.png differ diff --git a/Portfolio/html_finalprojimages/js.jpeg b/Portfolio/html_finalprojimages/js.jpeg new file mode 100644 index 0000000..387cd18 Binary files /dev/null and b/Portfolio/html_finalprojimages/js.jpeg differ diff --git a/Portfolio/html_finalprojimages/node.png b/Portfolio/html_finalprojimages/node.png new file mode 100644 index 0000000..12dc7ca Binary files /dev/null and b/Portfolio/html_finalprojimages/node.png differ diff --git a/Portfolio/html_finalprojimages/phone.png b/Portfolio/html_finalprojimages/phone.png new file mode 100644 index 0000000..dcc2408 Binary files /dev/null and b/Portfolio/html_finalprojimages/phone.png differ diff --git a/Portfolio/html_finalprojimages/profile.webp b/Portfolio/html_finalprojimages/profile.webp new file mode 100644 index 0000000..c1555c2 Binary files /dev/null and b/Portfolio/html_finalprojimages/profile.webp differ diff --git a/Portfolio/html_finalprojimages/react.png b/Portfolio/html_finalprojimages/react.png new file mode 100644 index 0000000..b669850 Binary files /dev/null and b/Portfolio/html_finalprojimages/react.png differ diff --git a/Portfolio/html_finalprojimages/waving-hand.png b/Portfolio/html_finalprojimages/waving-hand.png new file mode 100644 index 0000000..c827de4 Binary files /dev/null and b/Portfolio/html_finalprojimages/waving-hand.png differ diff --git a/Portfolio/index.html b/Portfolio/index.html new file mode 100644 index 0000000..0b3adc4 --- /dev/null +++ b/Portfolio/index.html @@ -0,0 +1,186 @@ + + + + John Ahlroos - Portfolio + + + + + + + + +
+
+ +
+ +
+

+ Hi, I'm John Ahlroos! +

+

+ I am a full stack developer with 20 years of experience in both Back-End and Web development. + I haver worked on numerous different software stacks ranging from the most basic websites to large + cloud deployments with 100+ microservices. + My favourite development stack is Java Spring Boot combined with HTMX as the front-end. +

+
+
+ + +
+

Skills

+
+ +
+
+ +
HTML
+

15 years experience

+
+ +
+ +
JavaScript
+

15 years experience

+
+ +
+ +
Java
+

15 years experience

+
+ +
+ +
React
+

2 years experience

+
+ +
+ +
Node
+

1 years experience

+
+ + +
+
+ + +
+

+ Projects +

+
+ +
+
+

Software development blog

+
    +
  • A blog providing the latest news in web development
  • +
+
+
+
+

Step Counter

+
    +
  • A step counter which measures steps taken on the Moon. Only works in Zero-gravity.
  • +
+
+
+
+

Family secret recipes book

+
    +
  • The secret recipes only known to my family - until now!
  • +
+
+
+
+
+ + +
+

Recommendations

+
+
+
+ + I've been fortunate to get to know John well over the past + 5 years, both personally and professionally. It's obvious to me that he has the key attributes necessary + to land a dream project. He could be a change-maker just + through her insurmountable spirit alone but the fact that he has the intelligence to match makes him a + formidable force and one to watch for the future. + +
+
+ + I cannot recommend John more highly - he's an extremely capable and talented Web Developer, + not to mention an A+ human. From the moment he joined BigTech over 5 years ago, John stood out + for his work ethic, attitude, and intelligence. He was a stand-out IC and then a talented and respected leader, + and any company would be lucky to have him. I'd work with him again in a heartbeat. + +
+
+ + John was an invaluable asset to the team and one of the highest performing consultants I worked with + during my tenure at Resume Worded. He independently managed multiple work streams where he demonstrated + strong project management skills, deep research and analytical capabilities and scenario-driven strategic + thinking. I know he will go on to lead and achieve great things in his career. + +
+
+
+ + +
+
+
+ Leave a Recommendation +
+ +
+ +
+
+
+
+ +
+ + + + + +
+ + + + \ No newline at end of file diff --git a/Portfolio/screenshots/aboutme.png b/Portfolio/screenshots/aboutme.png new file mode 100644 index 0000000..7a35abd Binary files /dev/null and b/Portfolio/screenshots/aboutme.png differ diff --git a/Portfolio/screenshots/home_icon.png b/Portfolio/screenshots/home_icon.png new file mode 100644 index 0000000..1a38bf4 Binary files /dev/null and b/Portfolio/screenshots/home_icon.png differ diff --git a/Portfolio/screenshots/nav_bar.png b/Portfolio/screenshots/nav_bar.png new file mode 100644 index 0000000..6cf7249 Binary files /dev/null and b/Portfolio/screenshots/nav_bar.png differ diff --git a/Portfolio/screenshots/new_recommendation.png b/Portfolio/screenshots/new_recommendation.png new file mode 100644 index 0000000..9362acb Binary files /dev/null and b/Portfolio/screenshots/new_recommendation.png differ diff --git a/Portfolio/screenshots/popup.png b/Portfolio/screenshots/popup.png new file mode 100644 index 0000000..0361c0f Binary files /dev/null and b/Portfolio/screenshots/popup.png differ diff --git a/Portfolio/screenshots/profile_name.png b/Portfolio/screenshots/profile_name.png new file mode 100644 index 0000000..73ca158 Binary files /dev/null and b/Portfolio/screenshots/profile_name.png differ diff --git a/Portfolio/screenshots/projects.png b/Portfolio/screenshots/projects.png new file mode 100644 index 0000000..5f18550 Binary files /dev/null and b/Portfolio/screenshots/projects.png differ diff --git a/Portfolio/screenshots/recommendations.png b/Portfolio/screenshots/recommendations.png new file mode 100644 index 0000000..4fd7446 Binary files /dev/null and b/Portfolio/screenshots/recommendations.png differ diff --git a/Portfolio/screenshots/skills.png b/Portfolio/screenshots/skills.png new file mode 100644 index 0000000..5039c85 Binary files /dev/null and b/Portfolio/screenshots/skills.png differ diff --git a/Portfolio/script.js b/Portfolio/script.js new file mode 100644 index 0000000..f718795 --- /dev/null +++ b/Portfolio/script.js @@ -0,0 +1,28 @@ +function addRecommendation() { + // Get the message of the new recommendation + let recommendation = document.getElementById("new_recommendation"); + // If the user has left a recommendation, display a pop-up + if (recommendation.value != null && recommendation.value.trim() != "") { + console.log("New recommendation added"); + //Call showPopup here + showPopup(true); + + // Create a new 'recommendation' element and set it's value to the user's message + var element = document.createElement("div"); + element.setAttribute("class","recommendation"); + element.innerHTML = "\“\" + recommendation.value + "\”\"; + // Add this element to the end of the list of recommendations + document.getElementById("all_recommendations").appendChild(element); + + // Reset the value of the textarea + recommendation.value = ""; + } +} + +function showPopup(bool) { + if (bool) { + document.getElementById('popup').style.visibility = 'visible' + } else { + document.getElementById('popup').style.visibility = 'hidden' + } +} \ No newline at end of file diff --git a/Portfolio/style.css b/Portfolio/style.css new file mode 100644 index 0000000..ae7bbfa --- /dev/null +++ b/Portfolio/style.css @@ -0,0 +1,326 @@ +body { + font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; +} + +/* Navigation Bar */ + +#home { + background-color: #7600bc; + padding-bottom: 1cm; + margin-left:-1cm; + margin-right:-1cm; + margin-top:-1cm; + padding-top: 2cm; + padding-bottom: 2cm; + height: 5mm; + } + +.topmenu { + color: lightgray; + margin: 10px; + padding: 20px; + font-size: 20px; + text-decoration:none; +} + +.topmenu:hover { + color: white; + font-weight: bold; + text-decoration: underline; +} + +.topdiv { + float: right; + padding-right: 1cm; +} + +.profile_name { + float: left; + padding-left: 3cm; + margin-top: -20px; + font-size: 2em; + color: #eee; + font-family: 'sans-serif'; +} + +.profile_name .contact_info { + font-size: 15px; + font-style: italic; + display: flex; + align-items: center; + flex-direction: row; +} + +.contact_info img { + width:25px; + margin-right: 10px; + float:left; +} + +/* Titles */ + +h2 { + text-align: justify; + font-size: 50px; + text-align: center; + float: left; + color: #7600bc; + margin: 30px; + margin-left: 60px; + margin-top: 40px; + margin-bottom: 0px; +} + +.introduction { + text-align: justify; + font-size: 30px; + text-align: center; + float: left; + margin-top: 30px; + margin-bottom: 20px; + animation-duration: 5s; + position: relative; +} + +/* Used in the About Me sections */ + +.container { + display: flex; +} + +/* About Me */ + +.about-me { + display: flex; + align-items: center; +} + +#about-me h1 { + font-size: 65px; + margin-top: 90px; + color: #7600bc; +} + +#about-me p { + font-size: 25px; + color: rgb(128, 128, 128); + margin-top: -1cm; +} + +.profile_image { + width: 550px; + height: fit-content; + vertical-align: middle; + margin: 5px; +} + +/* Skills */ + +.all_skills { + display: flex; + flex-direction: row; + flex-flow: wrap; +} + +.skill { + border: 1px solid gray; + display: block; + border-radius: 6px; + text-align: center; + margin: 50px; + padding: 10px; + width: 2in; + font-size: 20px; + box-shadow: 0 3px 10px gray; +} + +.skill img { + height: 100px; + align-items: center; +} + +.skills h6 { + align-items: center; + font-size: 20px; + margin-block-start: 8px; + margin-block-end: 5px; + font-weight: bold; +} + +.skills p { + align-items: center; + font-size: 15px; + color: gray; + margin-block-start: 5px; + margin-block-end: 5px; +} + +.flex_center { + display: flex; + align-items: center; + justify-content: center; +} + +/* Projects */ + +.projects-container { + margin-top: 30px; + margin-left: 60px; +} + +.projects-container hr { + border: 1px solid lightgray; + width: 75%; + margin-left: 5cm; +} + +.project-card { + margin: 0 15px 15px 30px; + padding-bottom: 5px; +} + +.project-card h3 { + font-size: 25px; + margin-left: 30px; +} + +.project-card li { + font-size: 20px; + margin-left: 30px; +} + +/* Recommendations */ + +.all_recommendations { + display: flex; + align-items: center; + margin-left: 1in; + flex-direction: row; + flex-flow: wrap; + padding: 20px; +} + +.recommendation { + font-style: italic; + text-align: left; + width: 26.875rem; + padding: 1rem; + background-color: #fff; + border-radius: 11px; + box-shadow: 0 3px 10px var(--primary-shadow); + padding: 20px; + margin: 10px; + border:1px solid gray; + font-size: 18px; + height:170px +} + +.recommendation span { + color: #7600bc; + font-size: 20px; + font-family: 'Times New Roman', Times, serif; +} + +/* Scroll to Top Button */ + +.iconbutton{ + width: 48px; + height: 48px; + border-radius: 100%; + background-color: #7600bc; + display: flex; + align-items: center; + justify-content: center; + position: fixed; + right: 3%; + bottom: 3%; + cursor: pointer; +} + +/* Form Pop-up */ + +.popup { + width:400px; + background-color: #e8bcf0; + border-radius: 3mm; + top: 50%; + left:50%; + transform: translate(-50%,-50%); + text-align: center; + position: fixed; + /* padding: 30px; */ + visibility: hidden; +} + +.popup img { + padding-top: 20px; +} + +.popup button { + background-color: #fff; + border: 1px solid #7600bc; + color: #7600bc; + display: block; + border-radius: 6px; + text-align: center; + margin: 50px; + padding: 10px; + width: 2in; + font-size: 20px; + margin-left: 25%; +} + +.popup button:hover { + background-color: #fff; + border: 2px solid #7600bc; + color: #7600bc; + display: block; + font-weight: bolder; + text-align: center; + cursor: pointer; + margin-left: 25%; +} + +/* Recommendation Form */ + +input, textarea { + font-family: 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif; + margin: 10px; + width:100%; +} + +fieldset { + display: flexbox; + align-content: center; + justify-content: center; + padding: 25px; + margin-left: 50px; + margin-right: 50px; + border: thin solid white; + width: 50%; +} + +/* Buttons */ + +button { + background-color: #fff; + border: 1px solid #7600bc; + color: #7600bc; + display: block; + border-radius: 6px; + text-align: center; + margin: 50px; + padding: 10px; + width: 2in; + font-size: 20px; +} + +button:hover { + background-color: #7600bc; + border: 1px solid #7600bc; + color: #fff; + display: block; + border-radius: 6px; + text-align: center; + cursor: pointer; +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 84cff34..f657ee9 100644 --- a/build.gradle +++ b/build.gradle @@ -4,20 +4,4 @@ allprojects { repositories { mavenCentral() } -} - -subprojects { - apply plugin: 'java' - java { - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 - } - dependencies { - testImplementation platform('org.junit:junit-bom:5.10.0') - testImplementation 'org.junit.jupiter:junit-jupiter' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - } - test { - useJUnitPlatform() - } } \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 1d5a7f6..b591a8c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,3 @@ rootProject.name = 'java-developer-course' -include('PetCareScheduler') \ No newline at end of file +include 'PetCareScheduler' +include 'Portfolio' \ No newline at end of file