From e37569547ff6623b2d01f59e16454afa0b8fce2c Mon Sep 17 00:00:00 2001 From: Zulius Roolf <36889707+ZuliusRoolf@users.noreply.github.com> Date: Wed, 1 Jan 2025 16:38:43 +0100 Subject: [PATCH 1/6] update portfolio projects to be scrollable --- website/index.html | 2 +- website/styles.css | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/website/index.html b/website/index.html index a960677..991329e 100644 --- a/website/index.html +++ b/website/index.html @@ -66,7 +66,7 @@ GitHub
ยทwith - Mr. Ranedeer + Seyit Y
diff --git a/website/styles.css b/website/styles.css index b50d572..33865f4 100644 --- a/website/styles.css +++ b/website/styles.css @@ -290,13 +290,13 @@ body { } @media (min-width: 768px) { .video { - box-shadow: 0 0 30px 2px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 20px 2px rgba(0, 0, 0, 0.2); } .project__video { padding: 0px; } .portfolio__project { - overflow: visible; + overflow: scroll; scrollbar-width: none; } } From fca11edc24256701bc443d5655cf77126dcad2cf Mon Sep 17 00:00:00 2001 From: Zulius Roolf <36889707+ZuliusRoolf@users.noreply.github.com> Date: Wed, 1 Jan 2025 17:24:51 +0100 Subject: [PATCH 2/6] added professional "fetching video" preload image --- .../graphic_assets/fetching_video.afdesign | Bin 0 -> 19019 bytes .../content/graphic_assets/fetching_video.gif | Bin 0 -> 54051 bytes .../content/graphic_assets/fetching_video.png | Bin 0 -> 22276 bytes website/content/portfolio.json | 1 + website/index.html | 2 +- website/scripts/load_content.js | 5 ++++- 6 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 website/content/graphic_assets/fetching_video.afdesign create mode 100644 website/content/graphic_assets/fetching_video.gif create mode 100644 website/content/graphic_assets/fetching_video.png diff --git a/website/content/graphic_assets/fetching_video.afdesign b/website/content/graphic_assets/fetching_video.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..4e54b5271045471457809ef304389354a885a764 GIT binary patch literal 19019 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 b|N6fvs@MKk%NJK*u3+$V^>bP0l+XkKGeU&& literal 0 HcmV?d00001 diff --git a/website/content/graphic_assets/fetching_video.gif b/website/content/graphic_assets/fetching_video.gif new file mode 100644 index 0000000000000000000000000000000000000000..6dfa85c79eb37bd4e2c1b52d359f80000fdebe49 GIT binary patch literal 54051 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 literal 0 HcmV?d00001 diff --git a/website/content/graphic_assets/fetching_video.png b/website/content/graphic_assets/fetching_video.png new file mode 100644 index 0000000000000000000000000000000000000000..31f249be256afa27f222014873c45dc5f85ff45d GIT binary patch literal 22276 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 literal 0 HcmV?d00001 diff --git a/website/content/portfolio.json b/website/content/portfolio.json index b9e6998..98e5049 100644 --- a/website/content/portfolio.json +++ b/website/content/portfolio.json @@ -1,5 +1,6 @@ { "lastModified": "Dec 2024", + "defaultPreloadImage": "content/graphic_assets/fetching_video.gif", "portfolio": [ { "title": "Website", diff --git a/website/index.html b/website/index.html index 991329e..c9b171f 100644 --- a/website/index.html +++ b/website/index.html @@ -56,7 +56,7 @@
-
@@ -78,7 +78,7 @@ The template uses JSON files, which makes it simple to maintain and easy to update.
- +
diff --git a/website/scripts/load_content.js b/website/scripts/load_content.js index 31e93a1..ffe560f 100644 --- a/website/scripts/load_content.js +++ b/website/scripts/load_content.js @@ -14,6 +14,7 @@ export function populateBiography(document) { //Workplace if (biography.workplace !== '') { + template.querySelector('.introduction__workplace__preface').textContent = biography.workplacePreface; template.querySelector('.introduction__workplace').textContent = biography.workplace; template.querySelector('.introduction__workplace').href = biography.workplaceLink; } @@ -51,7 +52,7 @@ export function populatePortfolio(document) { if (data.defaultPreloadImage !== '') projects.querySelector('#project0 .project__video video').poster = data.defaultPreloadImage; - + //Portfolio Projects data.portfolio.forEach(project => { var index = projects.childElementCount; From e280f4bab5324c82853c5d194e1fc1b001e3f864 Mon Sep 17 00:00:00 2001 From: Zulius Roolf <36889707+ZuliusRoolf@users.noreply.github.com> Date: Wed, 1 Jan 2025 18:16:04 +0100 Subject: [PATCH 4/6] cleanup devcontainers and media placement --- .github/dependabot.yml | 12 ------------ .../{icons => graphic_assets}/back_button.svg | 0 .../{icons => graphic_assets}/portrait_template.svg | 0 website/index.html | 2 +- 4 files changed, 1 insertion(+), 13 deletions(-) delete mode 100644 .github/dependabot.yml rename website/content/{icons => graphic_assets}/back_button.svg (100%) rename website/content/{icons => graphic_assets}/portrait_template.svg (100%) diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 36eaa30..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,12 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for more information: -# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates -# https://containers.dev/guide/dependabot - -version: 2 -updates: - - package-ecosystem: "devcontainers" - directory: "/" - schedule: - interval: weekly \ No newline at end of file diff --git a/website/content/icons/back_button.svg b/website/content/graphic_assets/back_button.svg similarity index 100% rename from website/content/icons/back_button.svg rename to website/content/graphic_assets/back_button.svg diff --git a/website/content/icons/portrait_template.svg b/website/content/graphic_assets/portrait_template.svg similarity index 100% rename from website/content/icons/portrait_template.svg rename to website/content/graphic_assets/portrait_template.svg diff --git a/website/index.html b/website/index.html index e6b9d4a..205a879 100644 --- a/website/index.html +++ b/website/index.html @@ -42,7 +42,7 @@
- Close button + Close button
From 47ee64f59437b40d5d31224fe04e82e23a8fd2c2 Mon Sep 17 00:00:00 2001 From: Zulius Roolf <36889707+ZuliusRoolf@users.noreply.github.com> Date: Wed, 1 Jan 2025 18:35:48 +0100 Subject: [PATCH 5/6] add content to read me, not yet validated --- README.md | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9084c75..39a0a5a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,51 @@ -# Portfolio Website +# Portfolio Template (Instructions NOT Validated) + +This template is designed to showcase your projects in the form of a portfolio. It features two main sections: a biography container and a portfolio container. The biography container displays your photo, name, profession, social links, and a short bio. The portfolio container provides a list of projects with dates. Clicking on a project reveals more details, such as an image or video, contributors, a description, and a link to more details. + +--- + +## Features + +- **Biography Section**: Share your personal information with a professional touch. +- **Portfolio Section**: Highlight your projects interactively with descriptions and media. + +## Prerequisites + +This template is hosted on GitHub Pages, so the only requirement is a GitHub account. + +## Installation Instructions + +1. **Clone the Template Repository**: + - Navigate to the template repository on GitHub. + - Click the **"Use this template"** button (visible when signed in to GitHub). + - Follow the prompts to create a new repository based on this template. + +2. **Set Up GitHub Pages**: + - Go to your repositoryโ€™s **Settings**. + - Under **Pages**, configure GitHub Pages to use the `main` branch (or your preferred branch). + - Enable GitHub Actions if necessary. + +## Usage Instructions + +1. **Host the Portfolio**: + - After setting up GitHub Pages, your portfolio will be live at `https://.github.io//`. + +2. **Customize Your Portfolio**: + - Switch to the `personal` branch. + - Edit the following files: + - `website/content/biography.json`: Update this file with your personal details, such as your name, photo, bio, and social links. + - `website/content/portfolio.json`: Add or update your projects, including names, dates, media (images or videos), contributors, descriptions, and links. + - Push your changes to the repository. The portfolio will automatically update via GitHub Actions. + +## License + +This template is distributed under the MIT License. This permissive license allows you to use, modify, and distribute the template freely. ## Shoutouts - [Seyit Yilmaz](https://www.seyityilmaz.com/) for being such an amazing UX designer and creating the inspiration source for my implementation. - [Loading Artist](https://loadingartist.com/) for making the duck animation available on [giphy.com](https://giphy.com/stickers/happy-dance-cartoon-NdfUg7dmNlUOafGeW0). + +## Creator's Commentary + +For more information check out the [personal branch from the creator](https://github.com/ZuliusRoolf/portfolio-template/tree/personal). There is a [development journal](https://github.com/ZuliusRoolf/portfolio-template/blob/personal/JOURNAL.md) with documentation throughout the design process. From f9129e668ef844d9a11f8aaf2aeea45125c0619b Mon Sep 17 00:00:00 2001 From: Zulius Roolf <36889707+ZuliusRoolf@users.noreply.github.com> Date: Wed, 1 Jan 2025 18:44:32 +0100 Subject: [PATCH 6/6] removed personal files in template --- JOURNAL.md | 746 ------------------ website/content/experience.json | 10 - ...icker_4_3_background_by_loading_artist.gif | Bin 145000 -> 0 bytes .../happy_dance_sticker_by_loading_artist.gif | Bin 147342 -> 0 bytes website/scripts/load_content.js | 12 +- 5 files changed, 6 insertions(+), 762 deletions(-) delete mode 100644 JOURNAL.md delete mode 100644 website/content/experience.json delete mode 100644 website/content/graphic_assets/happy_dance_sticker_4_3_background_by_loading_artist.gif delete mode 100644 website/content/graphic_assets/happy_dance_sticker_by_loading_artist.gif diff --git a/JOURNAL.md b/JOURNAL.md deleted file mode 100644 index 7c545d9..0000000 --- a/JOURNAL.md +++ /dev/null @@ -1,746 +0,0 @@ -# Journal - -This is a quick journal on how I develop this website. It will be used for documentation for both tools used and thought process. - -- [Journal](#journal) - - [July 13](#july-13) - - [Starting from the beginning (again)](#starting-from-the-beginning-again) - - [Mr. Ranedeer](#mr-ranedeer) - - [DevTools](#devtools) - - [Structure of HTML](#structure-of-html) - - [`` Element Uses](#head-element-uses) - - [July 14](#july-14) - - [Playing around](#playing-around) - - [July 15](#july-15) - - [GitHub Pages using GitHub Actions](#github-pages-using-github-actions) - - [CSS](#css) - - [JavaScript](#javascript) - - [DOM Modification](#dom-modification) - - [Some small things I've learned](#some-small-things-ive-learned) - - [JSON Content Structure](#json-content-structure) - - [Reflection](#reflection) - - [July 16](#july-16) - - [Biography Template](#biography-template) - - [Graphical Assets are Difficult](#graphical-assets-are-difficult) - - [Git Cherry Pick Tangent](#git-cherry-pick-tangent) - - [July 19](#july-19) - - [Portfolio UI](#portfolio-ui) - - [JSON creation](#json-creation) - - [July 27](#july-27) - - [Train work](#train-work) - - [Converting JSON to HTML using JS](#converting-json-to-html-using-js) - - [Learning CSS](#learning-css) - - [Descendant vs. Child Selectors](#descendant-vs-child-selectors) - - [Flexbox and Grid](#flexbox-and-grid) - - [Design Considerations](#design-considerations) - - [JSON to HTML in Biography](#json-to-html-in-biography) - - [July 31](#july-31) - - [Learning as much as I can](#learning-as-much-as-i-can) - - [JavaScript Asynchronous Functions](#javascript-asynchronous-functions) - - [JavaScript Event Handling and Listeners](#javascript-event-handling-and-listeners) - - [August 02](#august-02) - - [Learning even more](#learning-even-more) - - [Neat tricks I found analyzing chatGPT's To-Do List sample page](#neat-tricks-i-found-analyzing-chatgpts-to-do-list-sample-page) - - [Best practices](#best-practices) - - [The last lesson](#the-last-lesson) - - [HTML templates and JSON pre-fetching](#html-templates-and-json-pre-fetching) - - [August 04](#august-04) - - [Applying everything I've learned from August 02](#applying-everything-ive-learned-from-august-02) - - [HTML Biography Template](#html-biography-template) - - [HTML Portfolio Template](#html-portfolio-template) - - [August 05](#august-05) - - [JSON Conversion](#json-conversion) - - [August 09](#august-09) - - [CSS Layout](#css-layout) - - [Styling Tricks](#styling-tricks) - - [Exploring CSS](#exploring-css) - - [Design considerations](#design-considerations-1) - - [August 10](#august-10) - - [Clickable button items](#clickable-button-items) - - [Hiding "About" in mobile view](#hiding-about-in-mobile-view) - - [Fade CSS animation](#fade-css-animation) - - [September 02](#september-02) - - [Relearning](#relearning) - - [September 08](#september-08) - - [CSS `display: none` Replacement](#css-display-none-replacement) - - [September 9](#september-9) - - [Layout Positioning](#layout-positioning) - - [September 10](#september-10) - - [Portfolio Column Width Issue](#portfolio-column-width-issue) - - [September 30](#september-30) - - [October 28](#october-28) - - [November 28](#november-28) - -## July 13 - -### Starting from the beginning (again) - -I have restarted my repository to the minimum through the "learning" branch. This may break the [pages](.github\workflows\pages.yml) workflow to deploy. -I had set up next.js before this entry. That set up is now removed. I have never built a website before and have always struggled to use tools such as node and Jekyll to build websites. The goal of this project is to understand the basics of front-end development. I don't need tools for that, except HTML, CSS and JS. In the future I should take time to learn React. - -I have installed Live Server to my VS Code. I don't know if I need it. It will host my website locally for me to edit. - -### Mr. Ranedeer - -I use Mr. Ranedeer to teach me about the basics of web development. It is a GPT model, which also means I can ask questions. - -Asking questions helps a lot. I have already learned that you can in fact write CSS and JS inside an HTML document. This makes sense, but I never thought how this could be executed considering a browser has the rendering engine and a script engine separated. Also learned that `defer` attribute makes the JavaScript wait until the HTML has loaded, in contrast to `async` that will run alongside it. - -### DevTools - -Mr Ranedeer gave me an example of using Elements, Console and Sources in the web browser's DevTools. There are more tools, but I think only those 3 should be enough for my static website for now. - -### Structure of HTML - -I've learned that `` declares HTML version, but all browsers assume the "unspecified version" as I would like to call it refers to HTML5. - -The `` element can specify a language using the `lang` attribute. This is mainly used for accessibility screen readers, search engine indexing, and browsers spell-checking. To name a few. - -You can't display things horizontally by using only HTML, CSS is required for that by using either: inline, flex or grid. - -#### `` Element Uses - -- Title: `My Webpage` -- Character Set: `` -- Viewport Settings: `` -- CSS Links: `` -- JavaScript Links: `` -- Meta Tags for SEO: `` -- Favicons: `` -- Social Media Metadata: Open Graph tags for Facebook, Twitter cards, etc. -Open Graph tags (prefixed with `og:`) are used by social media platforms to generate rich link previews. - -```html - - - -``` - -## July 14 - -### Playing around - -I have added the index.html file that I played around with yesterday and added a favicon of my logo and a styles.css to play around with today. The ZuliusRoolfLogo.svg is my own work with the use of my own Font that I plan to release in the future. - -While I'm committing my work so far, I wanted to take the opportunity and see if I can update to GitHub Pages alongside with it. According to this [Stack Overflow post](https://stackoverflow.com/a/56911185) I'm supposed to add a file named `.nojekyll` for a website that does not use Jekyll. Not sure if it actually matters. - -## July 15 - -- [x] Setup GitHub actions to work with static builds -- [x] Reach step 1.4 in the website curriculum -- [ ] Reach step 1.16 in the website curriculum -- [X] Get answers on how to use Markdown to then convert into HTML - -### GitHub Pages using GitHub Actions - -Finally, did it! -GitHub Actions now successfully publish a static website to [zulius.me](https://zulius.me) correctly. - -I find it fascinating that it is so difficult to find resources on this kind of matter. If I search for "GitHub pages HTML action" on Google I get [peaceiris' action](https://github.com/peaceiris/actions-gh-pages) for GitHub pages. That is not the one I am using. I use the official static website action provided by GitHub, but I can't find a link for it as they are only accessible through `github.com///actions/new`. - -I also took the opportunity to add a grammatical linter for my markdown files. Because, I noticed some grammatical errors and wished to get them corrected for me instead of manually skimming through. - - -### CSS - -I can already tell by the deceptively huge amount of functionality CSS brings with Attribute and Pseudo-Classes Selectors that it will be very easy to confuse how CSS works. - -Overall I think classes is the way to go when it comes to CSS, it is not often you want a singular element for style using ID Selector. - -### JavaScript - -I found out that IDs of HTML elements is more used for scripts rather than CSS. This makes sense considering a script most likely want to find a specific item to change. - -The difference between `var` and `let` is subtle. What I understand so is `let` a more restricted `var`, if it is in a block it will be restricted while `var` would keep a value after a block ends (except for functions). I should probably just use var to make it simple. - -Comparison Operators have been a bit confusing for me as JavaScript has triple `===` operator. I now finally understand what it means as the triple `===` is strict and is a regular double `==` in many other languages. The difference is that double `==` in JavaScript means the language automatically performs type conversion. In other words I can see if the integer `5` is equal to the string `"5"`, e.g. `5 == "5";` results in `true`. What I should keep in mind is that this applies to `0 == false` as well, meaning Boolean is not represented as an int like the C languages does. - -Arrays are more linked list types. `pop()` & `push()` and `shift()` & `unshift()` removes and adds elements from the back and front respectively. - -Objects are python dictionaries, they work the same, support both period and string in brackets, e.g. `dictionary.key` and `dictionary["key"]`. - -#### DOM Modification - -You can retrieve and edit HTML and CSS elements using these following functions: - -```js -let element = document.getElementById("myId"); -let elements = document.getElementsByClassName("myClass"); -let elements = document.getElementsByTagName("p"); -let element = document.querySelector(".myClass"); -let elements = document.querySelectorAll("p"); -``` - -Worth of note is that some return multiple items as an array. To change all of them you will need to loop through them. - -```js -element.innerHTML = "New Content"; -element.textContent = "New Text"; -element.style.color = "blue"; - -for (let i = 0; i < elements.length; i++) { - elements[i].classList.add("newClass"); - elements[i].classList.remove("oldClass"); -} -``` - -### Some small things I've learned - -When you add an alt text for an image in HTML, like this `Description of image`, I never realized the alt text is displayed after the "broken image file" icon. This explains all the times I visited a website, and it couldn't properly load, I got "broken image file" icons sometimes with and sometimes without text. - -I learned that it is very easy to change color for SVG files, considering that it is only a style attribute change for fill. So I inverted the colors for my [favicon](website/favicon.svg) file. - -My initial idea was to use Markdown for my portfolio. In case my website would be down then I could just showcase my GitHub repository. However, because I am using only static content to build everything from scratch, I can't use libraries to convert Markdown to HTML. I can of course install them locally, or run them on GitHub Actions, but then I will troubleshoot that and the website on my local machine won't reflect what will be published. I could resolve this using Docker, but there are so many tools to make things easier when the simplest solution is to just use JSON to convert into JavaScript Object to then insert into HTML/DOM. - -Three JSON files will be used to represent my content on the website. Biography, Portfolio and Experiences. I don't know if there will be a performance issue, but my idea is to host all images and videos on the GitHub repository. The plan is to host less than 15 seconds video per portfolio item on GitHub, keeping it under 2 MB per item if possible. - -#### JSON Content Structure - -- **Biography:** Portrait | Name | Title, workplace | Links to social media | About me text -- **Portfolio:** Title | Video link | Descriptive title, year, company?, collaborators?, reason why I did the project -- **Experiences:** Year | Start date?, End date? | Description | Image link of company - -### Reflection - -I was not able to reach step 1.16 in the curriculum, only to step 1.4. Reaching step 1.16 or even finishing the curriculum which ends at 1.20 will be my goal tomorrow. Maybe a bit optimistic considering I will without a doubt work on my website alongside the learning curriculum Mr. Ranedeer has provided me. Will see tomorrow. I'm happy with today's effort on all the subjects I've learned. - -## July 16 - -Completely forgot I had laundry and cleaning planned today in the afternoon. Hence, only half a workday is available to me. -To change up the plan I could write an HTML template to load JSON data into. Then I have content to work with even if the JSON converter is not set up properly. - -- [X] Template for Biography -- [ ] Template for Portfolio -- [ ] Reach step 1.10 in the website curriculum (if possible) - -### Biography Template - -I first focused on structuring up the three columns: Portfolio, Biography and Timeline. For now only Portfolio and Biography will be used. I already had a portfolio template up, so my priority was to set up a biography template. - -My goal is to make the content modular, mostly for me to learn but if anyone wants to take inspiration then feel free to use my system. - -The JSON should be able to change profile picture, name, profession, company/place, social links and a description. I do need some template in case the JavaScript breaks. It would be bad if someone visits the site and can not see anything because the JavaScript failed to load the information. - -Whenever JavaScript failure would happen, I think using this repository as a social link would be fitting. Acting a bit like a backup. - -#### Graphical Assets are Difficult - -Inserting an icon for a social media company is extremely easy but also difficult. Because I am trying to achieve modularity by using a JSON, I cannot use external resources like [Font Awesome icons](https://fontawesome.com/start) that require a special syntax in an HTML element. I would much rather prefer to have the icons locally and load them as images instead with a path. The issue occurs when icons are SVG files which are not really supported by the `` element. It can load, but it is not stylable by CSS afterwards. - -The solution I came up with is to take the defined icon path in the JSON, open the SVG file and then copy its contents to the appropriate HTML element. - -The proposed solution has not been implemented yet. Did not have enough time until my laundry was due. -Anyway, I am also a bit torn over the biography description as it can easily overwhelm the visitor. [Seyit Yilmaz](https://www.seyityilmaz.com/) designed his portfolio to be as clean as possible, using the principle of "show, don't tell". I feel a bit like an over-explainer, so perhaps I should avoid information as much as possible. I could potentially show more information if the user clicked "About" or a "Show more..." button, so that the very least it is hidden when you first visit the site. That sounds like a good idea. - -### Git Cherry Pick Tangent - -I got annoyed that my current profile picture in the HTML template is just my logo. The logo is good now, but I want a professional photo when the website gets deployed. An image has already been uploaded to the git, on commit 9a0ce500 specifically. I wondered how to go back in history and get the `cv-picture.jpg` back without re-uploading. - -Today I found out that you can cherry-pick commits into your branch and just get the changes. This is a very nice feature of git I never knew existed nor how it could be done. I will keep this in mind when creating commits, as every commit should be a complete feature so that you can remove and add features easily. Very cool. - -## July 19 - -- [x] Cleanup Biography Template -- [x] Portfolio Template -- [ ] JavaScript convert JSON to HTML -- [ ] Upload 2 videos to portfolio (hopefully) -- [ ] Reach step 1.10 in Mr. Ranedeer website curriculum - -### Portfolio UI - -I am not too sure how to make the portfolio UI. I thought about a way to maybe make clickable links to redirect to the source code. The mobile UI always ruins my ideas though, unfortunately. At the same time; I also need to get myself together that this is a showcase of my work. - -The reason I am so worried about clickable links is to be able to showcase the entire project. One example is my high school graduation documentary. It is already a video to begin with, so I could just embed the entire YouTube video instead. - -A solution could be that you can in fact click on the portfolio items and they "open up" or rather persist after the mouse stopped hovering. This would also be easy to integrate into mobile view because they already click on the items. - -An extension to the idea would be to show the descriptive text only when the user clicks on the portfolio item. Hover will still be in effect for the other portfolio items, but the selected portfolio item will persist. Essentially it will replace the Biography section until the user clicks 'x' in the upper right corner. - -### JSON creation - -I made [JSON content structure](#json-content-structure) on the 15 of July. I'll use that to make templates for both Biography and Portfolio. - -## July 27 - -- [x] Translate portfolio HTML into JSON structure -- [x] JavaScript convert JSON to HTML - - [x] Portfolio - - [x] Biography -- [x] Recap Mr. Ranedeer lessons -- [ ] Reach step 1.10 in Mr. Ranedeer website curriculum - -### Train work - -Today I am sitting on the train towards back home. I took a minute to regather my thoughts of what my next step is. Confused over what I meant with portfolio template, as I assumed it referred to JSON and not HTML, I have updated it accordingly. - -This is a minor detail, but I also updated the tab spacing to be 2 instead of 4 in the JSON files. This is to save some space and make it look a little prettier when reading. Installed this JSON extension to help format the documents: [JSON Tools](https://marketplace.visualstudio.com/items?itemName=eriklynd.json-tools) - -### Converting JSON to HTML using JS - -Converting JSON to HTML will be an interesting challenge. I imagine it cannot be too difficult, but this is the first time doing this. Currently, the [script.js](website/script.js) contains an auto-generated converter from chat GPT. It is now broken since I updated the JSON structure. - -I have been working for an hour to change the old converter to use the new JSON structure. It does not mirror the HTML template perfectly, but close enough to work with for now. The function is now very messy. I find it difficult to read and would love to find a way to make it more readable. One idea is to split the function into smaller functions, but then the script would be a mess of smaller functions instead. Hopefully Mr. Ranedeer can give good suggestions on this later. Right now the train Wi-Fi is a bit unstable and websites have trouble loading. - -### Learning CSS - -Before learning CSS a bit more, I went ahead and asked Mr. Ranedeer if they could recap the curriculum so far. It was maybe not as detailed as I wished it to be. It would have been more effective to copy, paste and ask for a summary of this journal. Anyway, Mr. Ranedeer was clever enough to remember some of my questions and added them to the recap. One question for example was if JSON is suitable for storing content. - -#### Descendant vs. Child Selectors - -Today I learned the difference between "descendant" and "child" selectors in CSS. In essence the difference is the distance between elements. A descendant `div p` would apply on both `div(tb(rw(p(I'm a value in a table))))` and `div(p(I'm a regular text))`, while a child selector `div > p` would only apply on the latter. - -```CSS -div p {...} /* Descendant Selector */ -div > p {...} /* Child Selector */ -``` - -#### Flexbox and Grid - -We are now at the complex end of CSS. Not that flexbox and grids are complex by themselves, but when combined with margins, paddings and other positional properties it will be really difficult to understand what exactly is going on. I made a Google search to see if any visualization tools existed, and I found [Flexbox Playground](https://flexbox.tech). It is a handy little website that helped me see what the different settings will result in, and then ask GPT if there's something I don't understand. - -From the lesson and playing around with grid property I thought that maybe grid is the best tool to represent my (eventual) three columns of Portfolio, Biography and Experiences. Grid property automatically makes padding and general form factor suitable for mobile. - -I looked up if you can define the grid to collapse three columns to three rows instead of individual items dropping to the next row. It is possible to do so using media queries, but I am pretty sure I can just as well use flexboxes that go from horizontal to vertical placement. Which makes sense in retrospect. - -### Design Considerations - -Learning about CSS made me think about what the best way to layout the website. I will have three columns which will naturally switch to three rows in mobile view. In mobile view it needs some form of definition of "this is a phone" to convert the timeline user interface into a simple scrollable timeline. Don't want users to press a year to then be shown a segment of continuous timeline. - -Also need to think about how to handle a square screen. Will three columns still suffice, or should one be hidden? If yes, how should it be accessible? -One solution could be to have an arrow that opens the timeline column or shift the entire view towards the timeline, hiding the portfolio until the left arrow is pressed. -All of these solutions are extra steps to a simple design, making it more complex. For now, especially considering I only have two columns at the moment, I will implement the flexbox for now with media queries. - -### JSON to HTML in Biography - -I only did portfolio converter earlier today. Now I will attempt to use chatGPT to make a biography converter. - -That went surprisingly easy... -ChatGPT just took the HTML template as a string and inserted replaceable values to then insert JSON into. I changed some class names as well, nothing major. On a sidenote, I have begun liking two space indentation more than four, so I switched the `script.js` to be that as well. - -## July 31 - -### Learning as much as I can - -I have done pretty good progress on the website so far. Perhaps I will change the design a bit in the future, but for now the template is good. Today then I will focus on learning as much as possible with Mr. Ranedeer! A future lecture is about how to structure up a website project, which I have been winging so far. Learn as you go or go as you learn :) - -I am on *1.6 Advanced JavaScript Concepts* which is now I realized Mr. Ranedeer is hallucinating the curriculum ๐Ÿ˜‚ -1.6 was supposed to be more about CSS in the original, but I guess we are changing things up. Good to know that hallucinations are still a flaw even in a more strict definition. Makes me wonder how the GPT is coded to behave and organize information. - -#### JavaScript Asynchronous Functions - -- `.then()` -- `.catch()` -- `.finally()` - -This is confusing, but I kind of see how it is utilized. It is all about parallelization like I knew before, but it uses promises to work with. You can use *Promise() object* to then add *.then()* to process that particular request. You can even return a new promise to create a chain of "synchronous" function calls. Please NOTE that the code below is not functional, it is mainly a way for me to remember the concept. - -```js -Promise(FetchURL) - .then(response1 => { - display(response1); - return new Promise(FetchURL); - }) - .then(response2 => { - display(response2); - }) - .catch(error => { - display(error); - }) -``` - -Another way to use asynchronous functions to display at the same time instead is to use `Promises.all()` which checks through all promises first and if all passes then proceeds to process the responses. - -```js -response1 = new Promise(FetchURL) -response2 = new Promise(FetchURL) -Promise.all([response1, response2]) - .then(responses => { - responses.forEach(response => { - display(response); - }) - }) - .catch(error => { - display(error); - }) -``` - -#### JavaScript Event Handling and Listeners - -An interesting functionality of JavaScript. I haven't used event listeners, but I can imagine them being useful to track everything about the user. Mr. Ranedeer proposes to use event listener to make sure forms are properly formatted before submitting. No clue how valid this is in standard practice. - -There are three `useCapture` (`Capturing`, `Target` and `Bubbling`) which define if the listener should capture child elements, only the specific target, or bubble up to capture parent elements... - -```js -element.addEventListener(event, function, useCapture); -``` - -## August 02 - -### Learning even more - -According to Mr. Ranedeer there are only three lectures left. -I would like to have an additional lecture on **JavaScript and CSS Interactions** and **Web Development Best Practices**. I think they could be useful. They were part of the main curriculum but not anymore. - -1. Creating a Simple Web Application -2. Debugging and Testing -3. Deployment - -Today I'll solely focus on learning two more lectures from Mr. Ranedeer and be done with my day. I'll write down interesting notes if there are any. - -#### Neat tricks I found analyzing chatGPT's To-Do List sample page - -The JavaScript uses an event listener to see if `DOMContentLoaded` before running any code, this is to make the logic more robust in case the script is loaded earlier in the HTML file. My immediate idea is to use this to load the script in the beginning of the HTML file and prefetch the JSON data to be used immediately after DOM content has been loaded. Maybe bad practice, but it seems possible to make. - -I also really like the JS structure. Define global variables in the beginning, define them and then add a bunch of functions afterwards. This is typical code practice, but I just forgot from imagining web development to be messy. - -```js -document.addEventListener('DOMContentLoaded', () => { - const form = document.getElementById('toDoForm'); - const taskInput = document.getElementById('taskInput'); - - form.addEventListener('submit', function(event) { - event.preventDefault(); - addTask(taskInput.value); - taskInput.value = ''; - }); - - function x(){} - function y(){} - function etc(){} -}) -``` - -Analyzing the HTML and CSS structure made me realize that HTML already has an included list tag of `