diff --git a/assets/css/compiled/main.css b/assets/css/compiled/main.css index 4e97cef5..89aec76d 100644 --- a/assets/css/compiled/main.css +++ b/assets/css/compiled/main.css @@ -1427,10 +1427,6 @@ select { z-index: 30; } -.z-40 { - z-index: 40; -} - .order-first { order: -9999; } @@ -1606,10 +1602,6 @@ select { height: 9rem; } -.max-h-\[10rem\] { - max-height: 10rem; -} - .max-h-\[5rem\] { max-height: 5rem; } @@ -1674,10 +1666,6 @@ select { max-width: 48rem; } -.max-w-\[10rem\] { - max-width: 10rem; -} - .max-w-\[5rem\] { max-width: 5rem; } @@ -3330,16 +3318,16 @@ body:has(#menu-controller:checked) { padding-right: 3.5rem; } - .sm\:py-10 { - padding-top: 2.5rem; - padding-bottom: 2.5rem; - } - .sm\:px-6 { padding-left: 1.5rem; padding-right: 1.5rem; } + .sm\:py-10 { + padding-top: 2.5rem; + padding-bottom: 2.5rem; + } + .sm\:pt-10 { padding-top: 2.5rem; } @@ -3387,12 +3375,6 @@ body:has(#menu-controller:checked) { justify-content: flex-start; } - .md\:space-x-3 > :not([hidden]) ~ :not([hidden]) { - --tw-space-x-reverse: 0; - margin-right: calc(0.75rem * var(--tw-space-x-reverse)); - margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse))); - } - .md\:p-\[10vh\] { padding: 10vh; } diff --git a/assets/js/appearance.js b/assets/js/appearance.js index 417b1a4a..e6254d89 100644 --- a/assets/js/appearance.js +++ b/assets/js/appearance.js @@ -24,6 +24,8 @@ if (document.documentElement.getAttribute("data-auto-appearance") === "true") { window.addEventListener("DOMContentLoaded", (event) => { const switcher = document.getElementById("appearance-switcher"); + const switcherMobile = document.getElementById("appearance-switcher-mobile"); + if (switcher) { switcher.addEventListener("click", () => { document.documentElement.classList.toggle("dark"); @@ -37,4 +39,17 @@ window.addEventListener("DOMContentLoaded", (event) => { localStorage.removeItem("appearance"); }); } + if (switcherMobile) { + switcherMobile.addEventListener("click", () => { + document.documentElement.classList.toggle("dark"); + localStorage.setItem( + "appearance", + document.documentElement.classList.contains("dark") ? "dark" : "light" + ); + }); + switcherMobile.addEventListener("contextmenu", (event) => { + event.preventDefault(); + localStorage.removeItem("appearance"); + }); + } }); diff --git a/assets/js/search.js b/assets/js/search.js index 1084a1d0..3d92b3ed 100644 --- a/assets/js/search.js +++ b/assets/js/search.js @@ -1,7 +1,6 @@ var fuse; var showButton = document.getElementById("search-button"); -var showButtonBasic = document.getElementById("search-button-basic"); -var showButtonHamburger = document.getElementById("search-button-hamburger"); +var showButtonMobile = document.getElementById("search-button-mobile"); var hideButton = document.getElementById("close-search-button"); var wrapper = document.getElementById("search-wrapper"); var modal = document.getElementById("search-modal"); @@ -15,8 +14,7 @@ var hasResults = false; // Listen for events showButton? showButton.addEventListener("click", displaySearch) : null; -showButtonBasic? showButtonBasic.addEventListener("click", displaySearch) : null; -showButtonHamburger? showButtonHamburger.addEventListener("click", displaySearch) : null; +showButtonMobile? showButtonMobile.addEventListener("click", displaySearch) : null; hideButton.addEventListener("click", hideSearch); wrapper.addEventListener("click", hideSearch); modal.addEventListener("click", function (event) { diff --git a/config/_default/params.toml b/config/_default/params.toml index db1b53a3..b2514694 100644 --- a/config/_default/params.toml +++ b/config/_default/params.toml @@ -15,8 +15,8 @@ enableCodeCopy = true # mainSections = ["section1", "section2"] # robots = "" -[header] - layout = "basic" # valid options: basic, hamburger, hybrid, custom +#[header] +# layout = "basic" # valid options: basic, hamburger, hybrid, custom - no more choice [footer] showCopyright = true diff --git a/exampleSite/.DS_Store b/exampleSite/.DS_Store index 7630287c..27435e2b 100644 Binary files a/exampleSite/.DS_Store and b/exampleSite/.DS_Store differ diff --git a/exampleSite/archetypes/default.md b/exampleSite/archetypes/default.md new file mode 100644 index 00000000..00e77bd7 --- /dev/null +++ b/exampleSite/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/exampleSite/assets/.DS_Store b/exampleSite/assets/.DS_Store deleted file mode 100644 index 703b940c..00000000 Binary files a/exampleSite/assets/.DS_Store and /dev/null differ diff --git a/exampleSite/assets/img/author.jpg b/exampleSite/assets/img/author.jpg deleted file mode 100644 index bd53fd27..00000000 Binary files a/exampleSite/assets/img/author.jpg and /dev/null differ diff --git a/exampleSite/assets/img/logo.jpg b/exampleSite/assets/img/logo.jpg deleted file mode 100644 index 79dc6e82..00000000 Binary files a/exampleSite/assets/img/logo.jpg and /dev/null differ diff --git a/exampleSite/assets/js/home.js b/exampleSite/assets/js/home.js deleted file mode 100644 index 37210349..00000000 --- a/exampleSite/assets/js/home.js +++ /dev/null @@ -1,27 +0,0 @@ -function switchHomeLayout() { - const pageDiv = document.getElementById("page"); - const profileDiv = document.getElementById("profile"); - const layoutCode = document.querySelectorAll("code[id=layout]"); - if (pageDiv.style.display === "none") { - pageDiv.style.display = "block"; - profileDiv.style.display = "none"; - layoutCode.forEach(function (el) { - el.innerText = "page"; - }); - } else { - pageDiv.style.display = "none"; - profileDiv.style.display = "block"; - layoutCode.forEach(function (el) { - el.innerText = "profile"; - }); - } -} - -window.addEventListener("DOMContentLoaded", (event) => { - document.querySelectorAll("#switch-layout-button").forEach((button) => - button.addEventListener("click", function (e) { - e.preventDefault(); - switchHomeLayout(); - }) - ); -}); diff --git a/exampleSite/config/_default/config.toml b/exampleSite/config/_default/config.toml index 698aa2ae..59b56fc8 100644 --- a/exampleSite/config/_default/config.toml +++ b/exampleSite/config/_default/config.toml @@ -3,11 +3,22 @@ # https://jpanther.github.io/congo/docs/getting-started/ theme = "blowfish" +baseURL = "https://github.com/nunocoracao/blowfish" defaultContentLanguage = "en" enableRobotsTXT = true -paginate = 15 -summaryLength = 0 +paginate = 20 +summaryLength = 30 + +buildDrafts = false +buildFuture = false + +googleAnalytics = "G-XXXXXX" + +[sitemap] + changefreq = 'daily' + filename = 'sitemap.xml' + priority = 0.5 [outputs] home = ["HTML", "RSS", "JSON"] diff --git a/exampleSite/config/_default/languages.en.toml b/exampleSite/config/_default/languages.en.toml index ac2ea022..154c4c01 100644 --- a/exampleSite/config/_default/languages.en.toml +++ b/exampleSite/config/_default/languages.en.toml @@ -1,25 +1,67 @@ -languageCode = "en-au" -languageName = "English (Australia)" -displayName = ":flag-au:" -isoCode = "en-AU" +languageCode = "en" +languageName = "English" +displayName = "EN" +isoCode = "en" weight = 1 rtl = false -title = "Congo" -# logo = "img/logo.jpg" -description = "A powerful, lightweight theme for Hugo built with Tailwind CSS." -copyright = "© 2022 Congo contributors" +title = "Blowfish" +logo = "img/blowfish_logo_transparent.png" +description = "Product | Nuno Coração" +# copyright = "Copy, _right?_ :thinking_face:" dateFormat = "2 January 2006" [author] - name = "Congo" - image = "img/author.jpg" - headline = "Not your ordinary theme!" - bio = "This is an example author bio, and although there's a stock photo of a dog here, this article was actually created by a human. :dog:" + name = "Blowfish" + image = "img/blowfish_logo.png" + headline = "Product @ Docker" + bio = "A little bit about you and me" links = [ - { twitter = "https://twitter.com/" }, - { facebook = "https://facebook.com/" }, - { linkedin = "https://linkedin.com/" }, - { youtube = "https://youtube.com/" }, + { linkedin = "https://linkedin.com/in/nunocoracao" }, + { twitter = "https://twitter.com/nunocoracao" }, + { medium = "https://medium.com/@nunocoracao" }, + { github = "https://github.com/nunocoracao" }, + { goodreads = "http://goodreads.com/nunocoracao" }, + #{ reddit = "https://reddit.com/user/nunoheart" }, + #{ hackernews = "https://news.ycombinator.com/user?id=nunocoracao"}, + #{ telegram = "https://t.me/nunocoracao" }, + #{ keybase = "https://keybase.io/nunocoracao" }, + #{ instagram = "https://instagram.com/nunocoracao" }, + #{ music = "/music" }, + + # { email = "mailto:hello@your_domain.com" }, + # { link = "https://link-to-some-website.com/" }, + # { amazon = "https://www.amazon.com/hz/wishlist/ls/wishlist-id" }, + # { apple = "https://www.apple.com" }, + # { blogger = "https://username.blogspot.com/" }, + # { codepen = "https://codepen.io/username" }, + # { dev = "https://dev.to/username" }, + # { discord = "https://discord.gg/invitecode" }, + # { dribbble = "https://dribbble.com/username" }, + # { facebook = "https://facebook.com/username" }, + # { flickr = "https://www.flickr.com/photos/username/" }, + # { foursquare = "https://foursquare.com/username" }, + # { gitlab = "https://gitlab.com/username" }, + # { google = "https://www.google.com/" }, + # { hashnode = "https://username.hashnode.dev" }, + # { kickstarter = "https://www.kickstarter.com/profile/username" }, + # { lastfm = "https://lastfm.com/user/username" }, + # { mastodon = "https://mastodon.instance/@username" }, + # { microsoft = "https://www.microsoft.com/" }, + # { orcid = "https://orcid.org/userid" }, + # { patreon = "https://www.patreon.com/username" }, + # { pinterest = "https://pinterest.com/username" }, + # { reddit = "https://reddit.com/user/username" }, + # { researchgate = "https://www.researchgate.net/profile/username" }, + # { slack = "https://workspace.url/team/userid" }, + # { snapchat = "https://snapchat.com/add/username" }, + # { soundcloud = "https://soundcloud.com/username" }, + # { stack-overflow = "https://stackoverflow.com/users/userid/username" }, + # { steam = "https://steamcommunity.com/profiles/userid" }, + # { tiktok = "https://tiktok.com/@username" }, + # { tumblr = "https://username.tumblr.com" }, + # { twitch = "https://twitch.tv/username" }, + # { whatsapp = "https://wa.me/phone-number" }, + # { youtube = "https://youtube.com/username" }, ] diff --git a/exampleSite/config/_default/menus.en.toml b/exampleSite/config/_default/menus.en.toml index e51dda49..c5f8c404 100644 --- a/exampleSite/config/_default/menus.en.toml +++ b/exampleSite/config/_default/menus.en.toml @@ -11,31 +11,46 @@ # ordered by weight from lowest to highest. [[main]] - name = "Docs" - pageRef = "docs" + name = "About" + pageRef = "about" weight = 10 [[main]] - name = "Samples" - pageRef = "samples" + name = "Posts" + pageRef = "posts" weight = 20 [[main]] - name = "Users" - pageRef = "users" + name = "Resume" + pageRef = "resume" weight = 30 - + [[main]] - name = "GitHub" - url = "https://github.com/jpanther/congo" + name = "Music" + pageRef = "music" weight = 40 +[[main]] + name = "Docs" + pageRef = "docs" + weight = 50 + +#[[main]] +# name = "Tags" +# pageRef = "tags" +# weight = 90 + # -- Footer Menu -- # The footer menu is displayed at the bottom of the page, just before # the copyright notice. Configure as per the main menu above. -# [[footer]] -# name = "Tags" -# pageRef = "tags" -# weight = 10 + [[footer]] + name = "Tags" + pageRef = "tags" + weight = 10 + + [[footer]] + name = "Categories" + pageRef = "categories" + weight = 20 diff --git a/exampleSite/config/_default/module.toml b/exampleSite/config/_default/module.toml deleted file mode 100644 index 6a8e43fa..00000000 --- a/exampleSite/config/_default/module.toml +++ /dev/null @@ -1,3 +0,0 @@ -[hugoVersion] - extended = false - min = "0.86.1" diff --git a/exampleSite/config/_default/params.toml b/exampleSite/config/_default/params.toml index 07579abe..680f6e93 100644 --- a/exampleSite/config/_default/params.toml +++ b/exampleSite/config/_default/params.toml @@ -5,19 +5,16 @@ # Refer to the theme docs for more details about each of these parameters. # https://jpanther.github.io/congo/docs/configuration/#theme-parameters -colorScheme = "congo" +colorScheme = "ocean" defaultAppearance = "light" # valid options: light or dark autoSwitchAppearance = true enableSearch = true enableCodeCopy = true -mainSections = ["samples"] +mainSections = ["posts", "suggest", "external"] # robots = "" -[header] - layout = "basic" # valid options: basic, hamburger, custom - [footer] showCopyright = true showThemeAttribution = true @@ -25,8 +22,8 @@ mainSections = ["samples"] showScrollToTop = true [homepage] - layout = "custom" # valid options: page, profile, custom - showRecent = true + layout = "profile" # valid options: page, profile, custom + showRecent = false [article] showDate = true @@ -35,26 +32,26 @@ mainSections = ["samples"] showBreadcrumbs = true showDraftLabel = true showEdit = true - editURL = "https://github.com/jpanther/congo/tree/dev/exampleSite/content/" + editURL = "https://github.com/nunocoracao/homepage/tree/main/content" editAppendPath = true showHeadingAnchors = true showPagination = true invertPagination = false showReadingTime = true showTableOfContents = true - showTaxonomies = false - showWordCount = false - showComments = false - # sharingLinks = ["facebook", "twitter", "pinterest", "reddit", "linkedin", "email"] + showTaxonomies = false + showWordCount = true + showSummary = true + sharingLinks = [ "linkedin", "twitter", "whatsapp", "pinterest", "reddit", "facebook", "email"] [list] - showBreadcrumbs = true + showBreadcrumbs = false showSummary = false - showTableOfContents = true - groupByYear = false + showTableOfContents = false + groupByYear = true [sitemap] - excludedKinds = ["taxonomy", "term"] + excludedKinds = [] [taxonomy] showTermCount = true diff --git a/exampleSite/config/_default/taxonomies.toml b/exampleSite/config/_default/taxonomies.toml deleted file mode 100644 index 193dc4bb..00000000 --- a/exampleSite/config/_default/taxonomies.toml +++ /dev/null @@ -1 +0,0 @@ -tag = "tags" diff --git a/exampleSite/content/.DS_Store b/exampleSite/content/.DS_Store index 1a1bbdd4..8b4e2230 100644 Binary files a/exampleSite/content/.DS_Store and b/exampleSite/content/.DS_Store differ diff --git a/exampleSite/content/about/index.md b/exampleSite/content/about/index.md new file mode 100644 index 00000000..bc1994e3 --- /dev/null +++ b/exampleSite/content/about/index.md @@ -0,0 +1,28 @@ +--- +title: "About" +date: 2022-06-13T20:55:37+01:00 +draft: false + +showDate : false +showDateUpdated : false +showHeadingAnchors : false +showPagination : false +showReadingTime : false +showTableOfContents : true +showTaxonomies : false +showWordCount : false +showSummary : false +sharingLinks : false +showEdit: false + +--- + +I’ve been building and shipping products across multiple roles and industries, from video streaming applications to API platforms. As a product person, my main goal is to understand my users and their specific needs, in order to deliver a product that truly improves their lives. + +I’ve worked for several years in big companies and recently decided to trade that for the opportunity of working in smaller teams. Definitely prefer the latter where one can succeed/fail faster, learn faster, and overall have a way bigger impact. + +Currently, I am focused on improving the lives of developers worldwide. I’m trying to write more about my previous experiences / random thoughts and would love to gather your feedback on it. I also love to dedicate my time to helping and mentoring other PMs or people that want to get into product. + +Recently I’ve also joined AWS Loft to help Startups and their founders with their product strategy. + +Feel free to reach out. \ No newline at end of file diff --git a/exampleSite/content/mentor/index.md b/exampleSite/content/mentor/index.md new file mode 100644 index 00000000..0d32818e --- /dev/null +++ b/exampleSite/content/mentor/index.md @@ -0,0 +1,24 @@ +--- +title: "Mentor" +date: 2022-06-19T13:08:25+01:00 +draft: true + +showDate : false +showDateUpdated : false +showHeadingAnchors : false +showPagination : false +showReadingTime : false +showTableOfContents : true +showTaxonomies : false +showWordCount : false +showSummary : false +sharingLinks : false +showEdit: false + + +--- + +Lorem ipsum alkdas Lorem ipsum alkdas Lorem ipsum alkdas Lorem ipsum alkdas Lorem ipsum alkdas Lorem ipsum alkdas Lorem ipsum alkdas Lorem ipsum alkdas Lorem ipsum alkdas Lorem ipsum alkdas Lorem ipsum alkdas Lorem ipsum alkdas Lorem ipsum alkdas Lorem ipsum alkdas + + + MentorCruise \ No newline at end of file diff --git a/exampleSite/content/music/addifferentkindoftango.jpg b/exampleSite/content/music/addifferentkindoftango.jpg new file mode 100644 index 00000000..b833bf9c Binary files /dev/null and b/exampleSite/content/music/addifferentkindoftango.jpg differ diff --git a/exampleSite/content/music/anotherbeginning.jpg b/exampleSite/content/music/anotherbeginning.jpg new file mode 100644 index 00000000..2bd0515a Binary files /dev/null and b/exampleSite/content/music/anotherbeginning.jpg differ diff --git a/exampleSite/content/music/apple.png b/exampleSite/content/music/apple.png new file mode 100644 index 00000000..cdad1d18 Binary files /dev/null and b/exampleSite/content/music/apple.png differ diff --git a/exampleSite/content/music/bellucciscatwalk.jpg b/exampleSite/content/music/bellucciscatwalk.jpg new file mode 100644 index 00000000..f7a7ec26 Binary files /dev/null and b/exampleSite/content/music/bellucciscatwalk.jpg differ diff --git a/exampleSite/content/music/blueingreen.jpg b/exampleSite/content/music/blueingreen.jpg new file mode 100644 index 00000000..042e0fc2 Binary files /dev/null and b/exampleSite/content/music/blueingreen.jpg differ diff --git a/exampleSite/content/music/burka.jpg b/exampleSite/content/music/burka.jpg new file mode 100644 index 00000000..05e78368 Binary files /dev/null and b/exampleSite/content/music/burka.jpg differ diff --git a/exampleSite/content/music/dreamingincolor.jpg b/exampleSite/content/music/dreamingincolor.jpg new file mode 100644 index 00000000..421c6b7e Binary files /dev/null and b/exampleSite/content/music/dreamingincolor.jpg differ diff --git a/exampleSite/content/music/index.md b/exampleSite/content/music/index.md new file mode 100644 index 00000000..8e096c0d --- /dev/null +++ b/exampleSite/content/music/index.md @@ -0,0 +1,155 @@ +--- +title: "Music" +date: 2022-06-13T20:55:37+01:00 +draft: false + +showDate : false +showDateUpdated : false +showHeadingAnchors : false +showPagination : false +showReadingTime : false +showTableOfContents : true +showTaxonomies : false +showWordCount : false +showSummary : false +sharingLinks : false +showEdit: false + +#groupByYear : false + +--- + +I started learning music by myself at the age of 14. I play several instruments and I love to record, compose and produce my own music. I've been releasing my songs under the name "Doppler Effect" in the usual streaming services. Here are the links if you want to listen. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CoverTitleReleasedListen
Remember a New DayAugust 2022 + + + +
TeardropJuly 2022 + + + +
The Devil Dances TonightJuly 2022 + + + +
Bellucci's CatwalkJune 2022 + + + +
Another BeginningJune 2022 + + + +
Blue in GreenJune 2022 + + + +
Dreaming in ColorJanuary 2022 + + + +
Sweet JuneSeptember 2021 + + + +
Walking MilesApril 2021 + + + +
A Different Kind of TangoApril 2021 + + + +
BurkaApril 2021 + + + +
Smoking with a NinjaApril 2021 + + + +
\ No newline at end of file diff --git a/exampleSite/content/music/rememberanewday.jpg b/exampleSite/content/music/rememberanewday.jpg new file mode 100644 index 00000000..ddbd92a5 Binary files /dev/null and b/exampleSite/content/music/rememberanewday.jpg differ diff --git a/exampleSite/content/music/smokingwithaninja.jpg b/exampleSite/content/music/smokingwithaninja.jpg new file mode 100644 index 00000000..cff515f9 Binary files /dev/null and b/exampleSite/content/music/smokingwithaninja.jpg differ diff --git a/exampleSite/content/music/spotify.svg.png b/exampleSite/content/music/spotify.svg.png new file mode 100644 index 00000000..b7fc7876 Binary files /dev/null and b/exampleSite/content/music/spotify.svg.png differ diff --git a/exampleSite/content/music/sweetjune.jpg b/exampleSite/content/music/sweetjune.jpg new file mode 100644 index 00000000..146773c5 Binary files /dev/null and b/exampleSite/content/music/sweetjune.jpg differ diff --git a/exampleSite/content/music/teardrop.jpg b/exampleSite/content/music/teardrop.jpg new file mode 100644 index 00000000..818f045d Binary files /dev/null and b/exampleSite/content/music/teardrop.jpg differ diff --git a/exampleSite/content/music/thedevildancestonight.jpg b/exampleSite/content/music/thedevildancestonight.jpg new file mode 100644 index 00000000..2caf7b6c Binary files /dev/null and b/exampleSite/content/music/thedevildancestonight.jpg differ diff --git a/exampleSite/content/music/walkingmiles.jpg b/exampleSite/content/music/walkingmiles.jpg new file mode 100644 index 00000000..c71cccd1 Binary files /dev/null and b/exampleSite/content/music/walkingmiles.jpg differ diff --git a/exampleSite/content/music/youtube.png b/exampleSite/content/music/youtube.png new file mode 100644 index 00000000..56580049 Binary files /dev/null and b/exampleSite/content/music/youtube.png differ diff --git a/exampleSite/content/posts/202109-the-future-of-nintendo/chart.png b/exampleSite/content/posts/202109-the-future-of-nintendo/chart.png new file mode 100644 index 00000000..af02c87c Binary files /dev/null and b/exampleSite/content/posts/202109-the-future-of-nintendo/chart.png differ diff --git a/exampleSite/content/posts/202109-the-future-of-nintendo/console.jpeg b/exampleSite/content/posts/202109-the-future-of-nintendo/console.jpeg new file mode 100644 index 00000000..c6a01139 Binary files /dev/null and b/exampleSite/content/posts/202109-the-future-of-nintendo/console.jpeg differ diff --git a/exampleSite/content/posts/202109-the-future-of-nintendo/end.jpeg b/exampleSite/content/posts/202109-the-future-of-nintendo/end.jpeg new file mode 100644 index 00000000..b9dc3865 Binary files /dev/null and b/exampleSite/content/posts/202109-the-future-of-nintendo/end.jpeg differ diff --git a/exampleSite/content/posts/202109-the-future-of-nintendo/feature.jpeg b/exampleSite/content/posts/202109-the-future-of-nintendo/feature.jpeg new file mode 100644 index 00000000..aa22fab7 Binary files /dev/null and b/exampleSite/content/posts/202109-the-future-of-nintendo/feature.jpeg differ diff --git a/exampleSite/content/posts/202109-the-future-of-nintendo/index.md b/exampleSite/content/posts/202109-the-future-of-nintendo/index.md new file mode 100644 index 00000000..52ee2b8f --- /dev/null +++ b/exampleSite/content/posts/202109-the-future-of-nintendo/index.md @@ -0,0 +1,90 @@ +--- +title: "The Future of the Nintendo Switch" +description: "Nintendo achieved something truly amazing with the launch of the Switch. It was able to disrupt itself and the entire gaming industry while saving itself from doom. How exactly was Nintendo able to do it and what comes next in that story?" +summary: "Nintendo achieved something truly amazing with the launch of the Switch. It was able to disrupt itself and the entire gaming industry while saving itself from doom. How exactly was Nintendo able to do it and what comes next in that story?" +categories: ["Strategy", "Product"] +tags: ["Strategy", "Product", "Nintendo", "Switch", "Disruption"] +#externalUrl: "" +showSummary: true +date: 2021-09-09 +draft: false +--- + + + + +Nintendo achieved something truly amazing with the launch of the Switch. It was able to disrupt itself and the entire gaming industry while saving itself from doom. How exactly was Nintendo able to do it and what comes next in that story? + +## A Little History... + + + +Nintendo is a Japanese multinational consumer electronics and video game company with headquarters in Kyoto, Japan. In its annual report for 2021, the company reported a revenue of $16 billion (¥1,759 trillion) and it currently employs around six thousand people around the world across several different business units. + +Nintendo was founded in 1889 as a company that produced and distributed hanafuda, a traditional Japanese card game. During the first half of the 1900s, the company tried to diversify into several different markets with little to no success (e.g. instant rice, love hotels, and a taxi service). During the 60s to 80s, Nintendo started investing in games, electronic toys, and gaming entertainment. + +All of these investments culminated in the 90s with the launch of the Super Nintendo Entertainment System which sold around 50 million units worldwide and helped the company enter the US market. By then Nintendo had built several valuable assets in hardware, software, and intellectual property (including the most famous plumber that ever lived, Mario). + +After the Super Nintendo, the company continued to release new games and gaming devices throughout the 90s and into the 00s, including the Gameboy, Nintendo 64, GameCube, and the Wii in 2006, which contributed to make Nintendo a force to be reckoned in the gaming industry with net sales that peaked at $18 billion in 2009. + + + +In 2010, the previous generation of hardware Wii was approaching the end of its life cycle and coincidentally the company’s annual net sales started dropping. At the end of 2012 the company launched its next-generation gaming console that would replace the Wii, the Wii U. However, the Wii U was a commercial failure and never got a real foothold in the console market selling less than 15 million units worldwide. The platform was described as expensive, confusing and was never able to attract support from either hardcore nor casual customers leading to Nintendo's sales eventually plummeting to just $4 billion in 2017. + +2017 was also the same year the company was able to disrupt itself and the entire gaming industry with the launch of the Nintendo Switch which until today sold more than 89 million units worldwide, led to a reported $16 billion net sales in 2021, and ultimately contributed to save Nintendo and establish it once again as one of the biggest players in the game industry. + +## The Switch's Disruption + + + +The Switch entered the market as the first console that was built from the ground up to provide a hybrid experience between mobile and living room gaming (or at least the first one that was actually able to deliver that experience). This hybrid setup allowed Nintendo to create different gaming modes from connecting the Switch to a TV using a dock, to connecting the controls to the main unit and taking it to play on the go. Additionally, the actual remote of the console can be used as two separate controlling devices which allows two players to enjoy a game at once. All these different modes and combinations made the switch a super attractive console for families and casual gamers since it was an affordable and flexible option when compared to the rest of the hardware available. + +A problem that Nintendo had to solve was the fact that launching a gaming console entails an interdependency between the actual hardware and its games. Or in other words, a console is only as valuable as the catalog of games available for it. To solve this problem, Nintendo adopted an integrated strategy in order to launch the Switch with a great catalog of games focusing on the same segment that the hardware features of the console were targeting. Nintendo developed several of the initial games and leveraged its valuable intellectual property of characters and stories to sell the Switch i.e. Mario, Zelda, etc. + +The Switch is a traditional example of a new-market disruption. Nintendo was targeting casual gamers (non-consumption for the traditional gaming industry) by offering a product that was inferior when compared to the other consoles in the market using the metrics from that time (graphics power, storage, etc) but superior when using the new set of metrics important to the new segment (fun, flexible, casual, affordable, etc). The fact that the Switch was not a super powerful device led to Sony and Microsoft not seeing Nintendo as a real competitor since their performance metrics were focused on high-end gamers and AAA titles. This created an asymmetric motivation, meaning that the incumbent companies simply conceded that market to Nintendo as it was not interesting for them. Ultimately, Nintendo gained market share with the Switch selling over 80 million units worldwide. At the moment other players still do not have the incentives to compete in that market and even if they did, they would not be able to because neither of them is competing on the same performance metrics as the Switch nor with the same organization and business structure that would allow them to succeed. + + + +In July 2019, Nintendo decided to launch a cheaper version of the product called the Switch Lite, this was a clear example of the company disrupting itself. Namely, Nintendo created a low-end disruption over its own product by creating a cheaper “good enough” product that targets over-served customers of the original Switch. This created a strong foothold on the low-end market for video games which is hard to compete against. + +Currently, Nintendo and the Switch are in a phase of sustaining innovation where incremental performance improvements in attributes are provided to the more valuable/demanding customers in the market. The proof of this is the next version of the console, due to launch in October 2021, the Nintendo Switch OLED, which is basically the same as the current Switch with a bigger screen, bigger battery, and more internal storage. This makes complete sense from a strategic point of view, after defining and deploying such a successful product, Nintendo is focusing on a deliberate strategy to grow its market share and meet the needs of its best customers in order to beat the competition, not that there is actually one at the time. + +## What's Next for Nintendo and the Switch? + + + +Currently, the Switch is already the 7th best selling console of all time and the 2nd best selling handheld gaming device of all time with 89 million units sold worldwide. Considering just the consoles still in the market, the Switch has already become the number 2 device in just 4 years. + + + +It is expected that, for the time being, Nintendo will retain its position in the market and keep evolving the Switch and its ecosystem with new incremental improvements. Companies like Sony and Microsoft which are targeting the high-end gamer segment will not be able to compete with Nintendo due to the humongous differences in the structures of their businesses and organization. Moreover, the other organizations also do not have any incentive to try to compete in the same market as Nintendo because, from their point of view, it is a lower margin market than the one they already have which creates an asymmetric motivation for them to flee up, conceding the low-end without fighting over it. Finally, Nintendo will have a huge advantage over new competitors that tackle its segment and it has every motivation to fight the entrance of new players into its space. + +However, there are still points that might require course correction to avoid potential future problems. The first one is the lack of traction from other game developers and publishers in respect to the Switch. Looking at the list of the top 10 best-selling games for the platform only 2 were not developed by Nintendo or one of its subsidiaries. The Switch developer experience has a low barrier to entry (each dev kit costing around $450) but there is a 30% “tax” on each game sold taken from the developers/publishers by Nintendo. The company could potentially look at their developer relationships and explore ways to improve the business model to get a bigger catalog of games faster. A couple of examples would be to help promote games via their channels, or the creation of an indie games program to help and promote smaller companies. Ultimately, this means that in order to grow Nintendo needs to move away from its integrated strategy into a specialized one where it focuses on the most important pieces of the system and in delivering it perfectly i.e. the console, the store, and its IP. But for that, it needs to ensure the right level of modularity so that other developers and publishers can thrive in that space. + +Another issue with the Switch is the lack of non-gaming applications available in the device that leads to a clash with the main Job-To-Be-Done for the product, “I want entertainment for me and my family”. The Switch has the potential to be the central hub for family entertainment, however, only three video streaming applications are available on the platform: Hulu, Youtube, and Funimation. Working with companies that provide other types of entertainment like Netflix and Disney and helping them launch those services on the Switch would be a great opportunity for Nintendo to improve the feature set of the device and better serve its users. + + + +Regarding the future, Nintendo is clearly betting on game streaming as a way to move up in the market and disrupt yet again the other players. This would be a great technology to drive the next round of low-end disruption by offering a cheaper way to play AAA games without having to own expensive hardware and upgrade it every one or two years. However, creating its own streaming service might not be the best strategy, Nintendo should look into making its system more modular and potentially partnering with other companies like Google Stadia to get access to streaming capabilities and an existing catalog of games right away. + +Ultimately, the common factor across all of Nintendo’s decisions and actions has been the ability to focus on understanding and delivering against the underlying Job-To-Be-Done for its customers. The company was able to understand that the gaming experience could solve the problem (or “job”) of family or party entertainment as well as the standard problems customers hire a gaming device to solve (i.e. play games). By organizing the entire company around these jobs, Nintendo created the ability to target non-consumption and attract a completely different segment of users to its products. Moreover, by implementing an integrated strategy that delivered new hardware, developed new games, and leveraged family-friendly characters known around the world, Nintendo was able to deliver a perfect solution for the job and completely disrupt the gaming industry. In my view, this relentless focus on the customer and how to best solve its problem is why Nintendo has become a Purpose Brand that focuses on providing great family fun and entertainment using technology. + + + +## References + +[Henderson, Rik. “What is Nintendo Switch Cloud Streaming, how does it work and what Cloud Version games are there?” Pocket-Lint](https://www.pocket-lint.com/games/news/nintendo/155391-nintendo-switch-cloud-version-streaming-explained-games-list) + +[Herold, Charles. “10 Reasons the Wii U Was a Failure.” Lifewire.](https://www.lifewire.com/reasons-the-wii-u-is-a-failure-2498588) + +[Nintendo. “Nintendo Annual Report FY 2021.”](https://www.nintendo.co.jp/ir/pdf/2021/annual2103e.pdf) + +[Orland, Kyle. “What the “OLED Model” means for the future of Nintendo Switch.” ARS Technica.](https://arstechnica.com/gaming/2021/07/what-the-oled-model-means-for-the-future-of-nintendo-switch/) + +[Peckham, Matt. “19 Things Nintendo's President Told Us About Switch and More.” Time.](https://time.com/4662446/nintendo-president-switch-interview/) + +[Statista. “Nintendo's net sales from fiscal 2008 to 2021.”](https://www.statista.com/statistics/216622/net-sales-of-nintendo-since-2008/) + +[Wikipedia. “List of best-selling game consoles.”](https://en.wikipedia.org/wiki/List_of_best-selling_game_consoles) + +[Wikipedia. “List of best-selling Nintendo Switch video games.”](https://en.wikipedia.org/wiki/List_of_best-selling_Nintendo_Switch_video_games) \ No newline at end of file diff --git a/exampleSite/content/posts/202109-the-future-of-nintendo/lite.png b/exampleSite/content/posts/202109-the-future-of-nintendo/lite.png new file mode 100644 index 00000000..4b2c3893 Binary files /dev/null and b/exampleSite/content/posts/202109-the-future-of-nintendo/lite.png differ diff --git a/exampleSite/content/posts/202109-the-future-of-nintendo/netflix.jpeg b/exampleSite/content/posts/202109-the-future-of-nintendo/netflix.jpeg new file mode 100644 index 00000000..29d05cb5 Binary files /dev/null and b/exampleSite/content/posts/202109-the-future-of-nintendo/netflix.jpeg differ diff --git a/exampleSite/content/posts/202109-the-future-of-nintendo/netsales.png b/exampleSite/content/posts/202109-the-future-of-nintendo/netsales.png new file mode 100644 index 00000000..54f0c7ff Binary files /dev/null and b/exampleSite/content/posts/202109-the-future-of-nintendo/netsales.png differ diff --git a/exampleSite/content/posts/202109-the-future-of-nintendo/olde.jpeg b/exampleSite/content/posts/202109-the-future-of-nintendo/olde.jpeg new file mode 100644 index 00000000..07007df7 Binary files /dev/null and b/exampleSite/content/posts/202109-the-future-of-nintendo/olde.jpeg differ diff --git a/exampleSite/content/posts/202109-the-future-of-nintendo/supernintendo.jpg b/exampleSite/content/posts/202109-the-future-of-nintendo/supernintendo.jpg new file mode 100644 index 00000000..fb8b7e45 Binary files /dev/null and b/exampleSite/content/posts/202109-the-future-of-nintendo/supernintendo.jpg differ diff --git a/exampleSite/content/posts/202206-homepage-guide/Install/docker.png b/exampleSite/content/posts/202206-homepage-guide/Install/docker.png new file mode 100644 index 00000000..32fab03f Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/Install/docker.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/Install/remote.png b/exampleSite/content/posts/202206-homepage-guide/Install/remote.png new file mode 100644 index 00000000..16d1c671 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/Install/remote.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/Install/vscode.png b/exampleSite/content/posts/202206-homepage-guide/Install/vscode.png new file mode 100644 index 00000000..1516bf6e Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/Install/vscode.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/banner.png b/exampleSite/content/posts/202206-homepage-guide/banner.png new file mode 100644 index 00000000..f508b0f5 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/banner.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/configure/config.png b/exampleSite/content/posts/202206-homepage-guide/configure/config.png new file mode 100644 index 00000000..903681e3 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/configure/config.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/configure/final.png b/exampleSite/content/posts/202206-homepage-guide/configure/final.png new file mode 100644 index 00000000..f508b0f5 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/configure/final.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/configure/languages.png b/exampleSite/content/posts/202206-homepage-guide/configure/languages.png new file mode 100644 index 00000000..a361ae61 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/configure/languages.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/configure/params.png b/exampleSite/content/posts/202206-homepage-guide/configure/params.png new file mode 100644 index 00000000..e095c8cb Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/configure/params.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/configure/profile.jpg b/exampleSite/content/posts/202206-homepage-guide/configure/profile.jpg new file mode 100644 index 00000000..19d50c68 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/configure/profile.jpg differ diff --git a/exampleSite/content/posts/202206-homepage-guide/deploy/createfbproj.png b/exampleSite/content/posts/202206-homepage-guide/deploy/createfbproj.png new file mode 100644 index 00000000..4648d2eb Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/deploy/createfbproj.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/deploy/fbhostingep.png b/exampleSite/content/posts/202206-homepage-guide/deploy/fbhostingep.png new file mode 100644 index 00000000..13e36def Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/deploy/fbhostingep.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/deploy/final.png b/exampleSite/content/posts/202206-homepage-guide/deploy/final.png new file mode 100644 index 00000000..1582ae49 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/deploy/final.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/deploy/firebaseconfig.png b/exampleSite/content/posts/202206-homepage-guide/deploy/firebaseconfig.png new file mode 100644 index 00000000..d83f852d Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/deploy/firebaseconfig.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/deploy/firebasedeploy.png b/exampleSite/content/posts/202206-homepage-guide/deploy/firebasedeploy.png new file mode 100644 index 00000000..b0117e0e Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/deploy/firebasedeploy.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/deploy/firebasehosting.png b/exampleSite/content/posts/202206-homepage-guide/deploy/firebasehosting.png new file mode 100644 index 00000000..ed202fbb Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/deploy/firebasehosting.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/deploy/firebaselogin.png b/exampleSite/content/posts/202206-homepage-guide/deploy/firebaselogin.png new file mode 100644 index 00000000..ef8d8833 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/deploy/firebaselogin.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/deploy/firebaseproj.png b/exampleSite/content/posts/202206-homepage-guide/deploy/firebaseproj.png new file mode 100644 index 00000000..eb59fc97 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/deploy/firebaseproj.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/devenvs/step1.png b/exampleSite/content/posts/202206-homepage-guide/devenvs/step1.png new file mode 100644 index 00000000..f0989e93 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/devenvs/step1.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/devenvs/step2.png b/exampleSite/content/posts/202206-homepage-guide/devenvs/step2.png new file mode 100644 index 00000000..353eddb7 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/devenvs/step2.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/devenvs/step3.png b/exampleSite/content/posts/202206-homepage-guide/devenvs/step3.png new file mode 100644 index 00000000..0763b83d Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/devenvs/step3.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/devenvs/step4.png b/exampleSite/content/posts/202206-homepage-guide/devenvs/step4.png new file mode 100644 index 00000000..21fc00f0 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/devenvs/step4.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/devenvs/step5.png b/exampleSite/content/posts/202206-homepage-guide/devenvs/step5.png new file mode 100644 index 00000000..14074ad6 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/devenvs/step5.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/feature.png b/exampleSite/content/posts/202206-homepage-guide/feature.png new file mode 100644 index 00000000..f508b0f5 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/feature.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/index.md b/exampleSite/content/posts/202206-homepage-guide/index.md new file mode 100644 index 00000000..665113ba --- /dev/null +++ b/exampleSite/content/posts/202206-homepage-guide/index.md @@ -0,0 +1,347 @@ +--- +title: "How I Created My Homepage (for free) Using Docker, Hugo, and Firebase" +description: "Currently, there are several solutions to build and host your personal website. I wanted to challenge myself to see if I could do it with the same set of features as some of the paid solutions out there and for free. Here are the results." +summary: "Currently, there are several solutions to build and host your personal website. I wanted to challenge myself to see if I could do it with the same set of features as some of the paid solutions out there and for free. Here are the results." +categories: ["Development", "Tutorial"] +tags: ["Development", "Environment", "Tutorial", "Hugo", "Congo", "Docker", "VSCode", "Go"] +#externalUrl: "" +showSummary: true +date: 2022-06-27 +draft: false +--- + + + + +## TL;DR + +Currently, there are several solutions to build and host your personal website. I wanted to challenge myself to see if I could do it with the same set of features as some of the paid solutions out there and for free. Here are the results. + +## Why would a PM build their own homepage from scratch… + +A couple of months ago I decided that I wanted to start writing more in order to a) exercise my writing skills and b) get feedback on some of my ideas. With this goal in mind, I started researching tools/platforms that would help me publish without creating too much friction for me, or for the people wanting to read what I have to say e.g. having to pay. Ultimately I decided upon creating my own website. + +I had a couple of reasons for wanting to try this: + +- challenge me to see if I, a previous software engineering student, could still bodge something together that would work and feel good about not having forgotten everything I ever learned about programming, + +- find a flexible free solution that would allow me to kickstart my website without investing money right away into it, aka avoiding operational costs with platforms and services that would lock me in the future, + +- have my content hosted in a place that will not require people to pay for reading it, + +- play around with Docker's developer environments and Microsoft's developer containers to get myself familiar with both solutions. + +## Let’s get started… + +After some research, I decided to choose a website generator framework and a free hosting service. For the website framework, I choose Hugo with Congo as the theme, and for the hosting service Firebase. And for obvious reasons, I decided to set up my development environment using Docker in order to put myself in the user's shoes for this experiment. + +I didn't go into a deep analysis of which framework was the best for my problem as I wanted to get an MVP out fast so I went through a couple of options and picked the first one that I liked. There are several other options with different features and approaches from the one I picked. If you want to explore other options these are some you can explore: Docussaurus, Gatsby, Jekyll, Ghost, and even WordPress. The same is applicable to the hosting part, even though I chose Firebase there are other solutions like Cloudflare Pages, GitHub Pages, Digital Ocean, Netlify, Vercel, and others that you might consider exploring. If you have any suggestions for this guide feel free to reach out, always happy to chat and learn. + + +## Tools + +For this guide, I will use the following tools, which should be installed on your machine. Here is a small explanation of what each component is going to be used for and a link to the installation instructions. + +- **Docker** - I will use Docker to configure a development environment for this project so that we can skip the need to install all the software required to run Hugo and Firebase CLI i.e. cURL, Go, Hugo, Node, NPM, etc. This will allow you to start from a git repository, start the environment and go straight into writing code instead of spending hours figuring out how to install a specific compiler for your CPU architecture. Install Docker + +- **Visual Studio Code** - I'm using Visual Studio Code as my code editor at the moment, and all the material in the guide assumes that this is what you're using. If you have a different preference you’ll need to adapt some parts of this guide to achieve the same results. Install Visual Studio Code + +## Setup the Development Environment + +Let's start by configuring your development environment using Docker. This will allow you to create a container with all the tools you need inside of it without having to mess with your system configurations. Moreover, it will also make it easier to just delete the container and rebuild it whenever you need it instead of keeping old versions of software you don't require daily in your personal machine. + +{{< alert >}} +Note: If you just want to clone a repo with the final skeleton feel free to clone this repo and skip to the deploy section + + +{{}} + +I'll provide two ways of setting up your development environment feel free to choose the one you prefer or try both to explore the differences between them. Both options rely on a `Dockerfile` built by me which uses `klakegg/hugo:0.93.2-ubuntu` as the base image, even though this is not Hugo's official image (since there isn't one at the moment) it's the one recommended on their website,. + +### Using Docker + +To spin up a Dev Environment just open Docker Dashboard and select the "Dev Environments" tab on the left. If you don't have any dev environments setup select "Create New Environment" otherwise use the button on the upper right side "Create". Proceed to the setup step. + + + + +Here choose the "Existing Git repo" option and use the following GitHub URL: + +``` +https://github.com/nunocoracao/homepage-kickstart +``` + +{{< alert >}} +**Note:** If you clone the repo locally you can also start from the local folder +{{< /alert >}} + +Once the container is running you should see something similar to the images below. + + + + +In both situations, you will be able to see and click the button "Open in VSCode" which will open the editor and will allow you to start working. From there open a terminal and proceed to [create the site skeleton](#create-site-skeleton) + +### Using Visual Studio Code + +Start by cloning the GitHub repository with the development environment configurations. + +``` +git clone https://github.com/nunocoracao/homepage-kickstart +``` + +This method requires the installation of an extra VSCode extension in order to spin up the containers. Please search for **Remote - Containers** and install the extension to continue this guide. + +After successfully installing the extension, open your source folder in VSCode and open the “Remote - Containers” extension panel on the left. Select "Open Folder in Container" to spin up a container with the development environment. + + + +Wait a couple of minutes while the image is built. Docker is creating an image with all the required software for the development of the website. This will only happen the first time you spin the environment. + + + + +Once the image is built, VSCode will spin the container and will place your working environment inside of it (information available in the bottom left corner of the window). You now have a development environment with Go, Hugo, Firebase CLI, and all the tools you will need for this guide. Just open a new terminal and you’re ready to begin creating your site. + + + +### ...but I really want to run everything locally + +If you either prefer or need to run your environment locally follow the guides below to install everything you need for your setup: + +- **Homebrew** - Install homebrew +- **Hugo** - Install Hugo +- **Node.js and NPM** - Install node.js & NPM (easier to install Firebase CLI) +- **Firebase CLI** - Install Firebase CLI + +## Create Site Skeleton + +Now that we have a development environment running the first step is to create the base version of your website. For this let’s use **Hugo** to generate the folder template and configuration files we need by running the following command (`--force` parameter is required to run Hugo on a non-empty directory): + +``` +hugo new site . --force +``` +This should have created a set of folders inside your workspace that you don’t need to worry about for now. The next step is to install a theme for Hugo. I choose Congo as it had all the features I required for my website and it seemed to be easy to change if I ever need it to. If you want to try a different theme there are several available in Hugo’s documentation, each with documentation and examples. + +Install Congo using git submodules by running the following command: + +``` +git submodule add -b stable https://github.com/jpanther/congo.git themes/congo +``` + +Now we need to make some changes to the directory and file structure so that Congo can work properly. I will not get into the details of what is happening in this guide (you can consult Congo’s documentation if you want to learn more), the main takeaway is that we’re creating and configuring a folder in config/_default/ which will contain all the important configuration files for Hugo and Congo. + +Please run the following commands in order: + +``` +mkdir -p config/_default +rm config.toml +cp themes/congo/config/_default/*.toml config/_default/ +echo 'theme = "congo"' | cat - config/_default/config.toml > temp && mv temp config/_default/config.toml +``` + +Congratulations, you should have your site up and running now. Let's try it out by running Hugo's debug server: + +``` +hugo server -D +``` + +Please open your favorite browser and navigate to localhost:1313 to see your page. + + + +You should see something similar to the image above. Doesn’t look that exciting, does it? Let’s configure the theme in the next sections and learn how to create your first article. + + +## Configure Theme + +Now I’ll be covering how to change the look and feel of your website, add some personal information, and activate the dark mode toggle (aka the most important feature in any website these days). + +{{< alert >}} +A note, I am covering a very simple configuration for this theme please check Congo’s theme documentation to understand everything you can do with this theme. +{{< /alert >}} + +### Profile picture + +Let’s start by adding a profile picture to your site. Create a folder called “assets” at the root of your project. Choose a profile picture and place it inside the assets folder. The rest of the guide will assume the final picture is named "profile.jpg", so please rename your picture or take that into account when configuring some of the other files. + +
+ +
If you still need to take a proper awesome picture for this feel free to download this one to proceed with the tutorial.
+
+ + + +### Configuration Files + +Let’s open a couple of configuration files and start updating them. All the files we are going to change are inside config/_default/ folder. + +#### config.toml + +Uncomment the baseURL parameter and replace it with the final domain of your website. This value will be used to create the robots.txt file for any search engines to successfully crawl and index your website. + + + +{{< alert >}} +Note: if you want to configure Google Analytics please add the following line with your id to this file `googleAnalytics = "G-XXXXXX"` + +{{}} + +#### languages.en.toml + +This file will drive the main information for the website and the author of the page (you). Replace the title and description for the ones you want for your page, these values will drive the HTML title and description tags. + +Within the [author] block you can update the details that you wish to highlight in your profile. The bare minimum would be name, image, headline, and links. For the links parameter don't forget to uncomment the last line of the file as this is a json array. Update each entry with your personal links. + + + +#### params.toml + +This file defines much of the overall behavior across the entire framework. For this tutorial I changed some of the overall values and one for the homepage, if you want to learn more about the other available configurations please consult Congo’s theme documentation. + +I've changed colorScheme to "ocean" which changes the global UI theme. Congo defines a three-color palette that is used throughout the theme. Valid values are congo (default), avocado, ocean, fire, and slate. Although these are the default schemes, you can also create your own. Refer to the theme's main documentation to learn how. + +Activated showAppearanceSwitcher to enable the light/dark mode toggle. Activated enableSearch which indexes all future posts each time you build the site and provides a simple search feature. I've also changed the value of layout, inside [homepage], to "profile" which changes the way the landing page is rendered. Finally, the last interesting value here is showRecent, which when turned on shows the recent posts on the homepage. + + + +### Final + +Let’s see how it looks, run the Hugo again: + +``` +hugo server -D +``` + +And navigate to localhost:1313 you should see something similar to the page below. + + + +Congrats it’s looking great, let’s learn how to generate your first articles. + +## How to generate articles + +Hugo provides some tools to generate your articles (markdown files) with a base set of tags already in them. Run the following command to create your first post + +``` +hugo new posts/my-first-post.md +``` + +replace the contents of the file with the following: + +``` +--- +title: "My Published Post" +date: 2022-06-19T20:10:29Z +draft: false +categories: ["published", "test"] +tags: ["first", "awesome"] +--- + +This is my first blog post +``` + +This just created your first blog post. We've added a couple of categories and tags, which will be indexed by Hugo during build time. These tags will be used to create the Categories and Tags section of the website automatically for you. Notice that I've changed the draft to false to simulate a published post. + +Run the following command to create your second post + +``` +hugo new posts/my-draft-post.md +``` +and replace the contents of that file with the following: + +```markdown +--- +title: "My Draft Post" +date: 2022-06-19T20:20:39Z +draft: true +categories: ["draft", "test"] +tags: ["second", "awesome"] +--- + +This is my second blog post +``` +For the second post, I've left the draft parameter true to simulate a draft post. + +Hugo automatically hides draft posts from the final site generation. You can keep working on articles leaving the draft label true and they will be ignored by the engine. If you want to run in DEBUG mode just use the command: + +``` +hugo server -D +``` + +If you go to the posts on the site you should be able to see both entries. If you then run the server in normal mode the draft articles will disappear. You can use the command below to do so: + + +``` +hugo server +``` + +You can use this command to test the final version of the website or an article before generating the final build. When you're ready just use the command 'Hugo' to generate the final website inside the /public folder. + +``` +hugo +``` + +All files are written in Markdown which Hugo then uses to generate the final pages. I'll not teach you how to write markdown files in this guide but I can recommend this "getting started" tutorial and this "cheat sheet" to get you started. + +## Deploy + +Ok, you’ve configured your website and created a couple of articles, but we still need to deploy it somewhere. As I mentioned before I chose Firebase for this guide, even though I know that it offers much more than just a simple hosting service it allows me to host my site for free without much of a hassle. + +### Create Firebase Project + +Let’s start by going to https://firebase.google.com and creating an account. Once that is done you can create a project for free. The process should be straightforward and when you finish you should be in Firebase's project dashboard. + +### Setup Firebase + +Now you can go back to your environment which already has Firebase CLI tools installed and ready to go. Let’s start by authenticating using: + +``` +firebase login +``` +Once you are successfully logged in you need to initiate the project configurations for firebase. For that please use: + +``` +firebase init +``` + +The tool will offer you a wide variety of different options in order to configure your Firebase project. For now, we just want to configure hosting. If you are using GitHub, you might want to consider configuring GitHub action deploys which can automatically build and deploy your site every time there is a push to a specific branch or a merged pull request. + + + +Choose the Firebase project created before as the hosting destination. And select the configurations you wish for the deployment process. The important one here is the folder where the final files to the server will be placed and this is the public folder. For the other parameters you experiment with what better matches your use-case, the image below shows you what I picked (*Note: for this tutorial I didn't configure GitHub actions but I am using that in my real setup*). + + + +### Deploy + +Ok, now for the long and boring process of deployment… joking! Once you are ready and have all your files generated by the hugo command in the public folder just use the following command to deploy: + +``` +firebase deploy +``` + + + +The process should take a couple of seconds and there you go your site is deployed. The final line of the CLI tool will give you a URL to see for yourself, otherwise, you can explore your Firebase dashboard hosting section which will have more information regarding the deployment. + + + +## Conclusion + +By now you should have a simple version of your website which you can configure to your needs. The main advantage of this solution is that it is flexible and extensible to a variety of different needs especially if you take the time to explore Hugo's theme catalog. True that it might require some coding to implement complex but I would guess that this solves the problem for almost everyone. + +Above all, it’s a completely free solution if you're looking to start and can't (or don't want to) spend money. Hope this guide helps you, feel free to share it with your network and give me feedback so that I can make it better over time. + +## Resources + +- GitHub Repo for development environment +- GitHub Repo for base Hugo and Congo configuration +- GitHub Repo for base image +- Docker Hub image URL +- Hugo\'s Documentation +- Congo\'s Documentation +- Firebase Documentation +- Markdown Guide +- Markdown Getting Started" +- Markdown Cheat Sheet \ No newline at end of file diff --git a/exampleSite/content/posts/202206-homepage-guide/setup/extension.png b/exampleSite/content/posts/202206-homepage-guide/setup/extension.png new file mode 100644 index 00000000..c9af7e11 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/setup/extension.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/setup/folder.png b/exampleSite/content/posts/202206-homepage-guide/setup/folder.png new file mode 100644 index 00000000..3363b324 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/setup/folder.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/setup/imagebuild.png b/exampleSite/content/posts/202206-homepage-guide/setup/imagebuild.png new file mode 100644 index 00000000..d8e2daa0 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/setup/imagebuild.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/setup/newterminal.png b/exampleSite/content/posts/202206-homepage-guide/setup/newterminal.png new file mode 100644 index 00000000..272a68ba Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/setup/newterminal.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/setup/selectfolder.png b/exampleSite/content/posts/202206-homepage-guide/setup/selectfolder.png new file mode 100644 index 00000000..93264768 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/setup/selectfolder.png differ diff --git a/exampleSite/content/posts/202206-homepage-guide/theme/vanilla.png b/exampleSite/content/posts/202206-homepage-guide/theme/vanilla.png new file mode 100644 index 00000000..1963ed59 Binary files /dev/null and b/exampleSite/content/posts/202206-homepage-guide/theme/vanilla.png differ diff --git a/exampleSite/content/posts/202206-mentorcruise-interview/featured.jpeg b/exampleSite/content/posts/202206-mentorcruise-interview/featured.jpeg new file mode 100644 index 00000000..d2a949da Binary files /dev/null and b/exampleSite/content/posts/202206-mentorcruise-interview/featured.jpeg differ diff --git a/exampleSite/content/posts/202206-mentorcruise-interview/index.md b/exampleSite/content/posts/202206-mentorcruise-interview/index.md new file mode 100644 index 00000000..b7bb5975 --- /dev/null +++ b/exampleSite/content/posts/202206-mentorcruise-interview/index.md @@ -0,0 +1,42 @@ +--- +title: "Nuno Coração – Meet the Mentor" +description: "Nuno Coração is one of our professional mentors on MentorCruise and works as Staff Product Manager at Docker." +summary: "Nuno Coração is one of our professional mentors on MentorCruise and works as Staff Product Manager at Docker." +categories: ["Product", "Mentorship", "Interview"] +tags: ["Product", "Mentorship", "Interview", "Mentorcruise"] +externalUrl: "https://mentorcruise.com/blog/nuno-coracao-meet-the-mentor-01006/" +showSummary: true +date: 2022-06-26 +draft: false +showReadingTime: false +--- + +{{< alert >}} +This article was originally published externally, read the original here. +{{}} + + +I’ve been building and shipping products across multiple roles and industries, from video streaming applications to API platforms. + +# Why did you decide to become a mentor? +Throughout my career, I was fortunate enough to find (or be found by) amazing mentors that helped me in several different ways. Some provided advice for professional decisions and career management, others access to opportunities, and some just took me along for the ride to “watch & learn”. All of those contributed so much to make me a better professional and gave me some really interesting opportunities in my career. In the last few years, I started being a mentor myself and I am really enjoying the experience of helping others grow and fulfill their career dreams. + +# What benefits did you gain from working with mentors early on? +The main benefit was the ability to tap into someone else’s experience and seniority and learn from their past experiences. It allowed me to get a glimpse of the future and accelerate some career milestones I wanted for myself. As an example, I never had the dream of working or living abroad, but after talking about it with my mentors (that had that experience) I learned so much about what it could bring me professionally and personally that when that opportunity came I was better prepared to make the right decision. Overall, it gave me the chance to learn how to become a better professional by watching how my mentors did it on a professional setting. Moreover, it gave me the chance to manage my career by tapping into their advice and experience in order to achieve my goals. + +# How did you get your career start? +My career started as a trainee in a telco company here in Portugal. I just left university and a junior researcher position to become a solutions architect for the TV department. It was amazing to get the first job with such responsibility and exposure to the entire organization. However, I have to say that the best part of that role was my manager who made an extra effort to coach and teach me so many invaluable lessons that I do still remember after so many years. + +> Good advice is not “one-size-fits-all” + +# How do you usually set up mentorships? +I usually like to understand what are the person’s goals for the mentorship and depending on those design a specific plan. Independently of the goal, I aim to have a weekly 1:1 with each mentee to catch up on progress and see if there is anything that I can do to help with. I also like to have a log file in docs to track questions/actions/open points. What we do within this framework highly depends on the goals themselves. For example, if the mentee is looking for help in switching into a product role, I might help review the CV and LinkedIn profile and prepare them for interviews with material and mock sessions. + +# What benefit can you provide to mentees over self-studying? +As with my own personal experience, the best benefit I can provide my mentees is to allow them to tap into my experiences, and the rational behind them, so that they can learn from it. I don’t mean to say they should do exactly as I did, no advice comes in a “one-size-fits-all” package. Moreover, I definitely made some mistakes along the way. But with that insight, each person can decide what resonates with them and what doesn’t in order to make their own decisions. In summary, I’m here to help with product topics and career management, specially people that want to get into product and don’t know where to start. + +# What’s been your favourite mentorship story so far? +In one of my previous role I was managing two young professionals that joined the product team as QA Engineers. Both of them wanted to become Product Managers and were looking for ways to make that move happen. During one year I made an extra effort to share my experiences, give advice, and try to get them as many opportunities to have a “taste” of what PM is by getting them into meetings and brainstormings with my dev teams, shadow customer calls, attend meetings with management, etc. I was really happy the day I was able to sponsor both of them into their first PM roles still within the company. Since then it has been even more fulfilling to watch them grow and have their own successful careers in Product. + +# What are you getting out of being a mentor? +From my experience, having access to mentors, allowed me to grow and improve at a professional and personal level faster than by myself. At this stage in my life, I feel like I’ve experienced enough to have something valuable to share with others and maybe help them achieve their goals. Ultimately, that is what I am aiming to get out of this experience, to be able to have the same impact as a mentor as my mentors had on me. \ No newline at end of file diff --git a/exampleSite/content/posts/202207-docker-bulk-add/Old.jpeg b/exampleSite/content/posts/202207-docker-bulk-add/Old.jpeg new file mode 100644 index 00000000..cd52db83 Binary files /dev/null and b/exampleSite/content/posts/202207-docker-bulk-add/Old.jpeg differ diff --git a/exampleSite/content/posts/202207-docker-bulk-add/featured.jpeg b/exampleSite/content/posts/202207-docker-bulk-add/featured.jpeg new file mode 100644 index 00000000..36d407e7 Binary files /dev/null and b/exampleSite/content/posts/202207-docker-bulk-add/featured.jpeg differ diff --git a/exampleSite/content/posts/202207-docker-bulk-add/image1.webp b/exampleSite/content/posts/202207-docker-bulk-add/image1.webp new file mode 100644 index 00000000..885de5c7 Binary files /dev/null and b/exampleSite/content/posts/202207-docker-bulk-add/image1.webp differ diff --git a/exampleSite/content/posts/202207-docker-bulk-add/image2.png.webp b/exampleSite/content/posts/202207-docker-bulk-add/image2.png.webp new file mode 100644 index 00000000..9bc587ac Binary files /dev/null and b/exampleSite/content/posts/202207-docker-bulk-add/image2.png.webp differ diff --git a/exampleSite/content/posts/202207-docker-bulk-add/index.md b/exampleSite/content/posts/202207-docker-bulk-add/index.md new file mode 100644 index 00000000..c9f5a795 --- /dev/null +++ b/exampleSite/content/posts/202207-docker-bulk-add/index.md @@ -0,0 +1,32 @@ +--- +title: "Bulk User Add for Docker Business and Teams" +description: "Forget manually inviting team members to Docker Desktop. With Bulk Add for Docker Business, invite your entire team with a CSV file or their Docker IDs!" +summary: "Forget manually inviting team members to Docker Desktop. With Bulk Add for Docker Business, invite your entire team with a CSV file or their Docker IDs!" +categories: ["Product", "Docker"] +tags: ["Product", "Docker", "Feature", "Docker Hub"] +externalUrl: "https://www.docker.com/blog/bulk-user-add-for-docker-business-and-teams/" +showSummary: true +date: 2022-07-27 +draft: false +showReadingTime: false +--- + +{{< alert >}} +This article was originally published externally, read the original here. +{{}} + +Docker’s goal is to create a world-class product experience for our customers. We want to build a robust product that will help all teams achieve their goals. In line with that, we’ve tried to simplify the process of onboarding your team into the Docker ecosystem with our Bulk User Add feature for Docker Business and Docker Team subscriptions. + +You can invite your team to their accounts by uploading a file including their email addresses to Docker Hub. The CSV file can either be a file you create for this specific purpose, or one that’s extracted from another in-house system. The sole requirement is that the file contains a column with the email addresses of the users that will be invited into Docker. Once the CSV file is uploaded using Docker Hub, each team member in the file will receive an invitation to use their account. + + + +We’ve also updated Docker Hub’s web interface to add multiple members at once. We hope this is useful for smaller teams that can just copy and paste a list of emails directly in the web interface and onboard everyone they need. Once your team is invited, you can see both the pending and accepted invites through Docker Hub. + + + +Bulk User Add can be used without needing to have SSO setup for your organization. This feature allows you to get the most out of your Docker Team or Business subscription, and it greatly simplifies the onboarding process. + +Learn more about the feature on our docs page, and sign in to your Docker Hub account to try it for yourself. + +And if you have any questions or would like to discuss this feature, please attend our upcoming \ No newline at end of file diff --git a/exampleSite/content/posts/202209-streaming-wars/feature.jpg b/exampleSite/content/posts/202209-streaming-wars/feature.jpg new file mode 100644 index 00000000..ea021bbc Binary files /dev/null and b/exampleSite/content/posts/202209-streaming-wars/feature.jpg differ diff --git a/exampleSite/content/posts/202209-streaming-wars/index.md b/exampleSite/content/posts/202209-streaming-wars/index.md new file mode 100644 index 00000000..038f4ca0 --- /dev/null +++ b/exampleSite/content/posts/202209-streaming-wars/index.md @@ -0,0 +1,61 @@ +--- +title: "Streaming Wars and What Comes After… " +description: "Last July and for the first time ever, streaming viewership surpassed cable. The streaming wars began around 2010 when Netflix introduced their first streaming-only plan with no DVD rentals, other players laughed at the time… little did they know. A decade after, there’s a multitude of streaming services available for mainstream entertainment and also for specific niches. What will happen next?" +summary: "Last July and for the first time ever, streaming viewership surpassed cable. The streaming wars began around 2010 when Netflix introduced their first streaming-only plan with no DVD rentals, other players laughed at the time… little did they know. A decade after, there’s a multitude of streaming services available for mainstream entertainment and also for specific niches. What will happen next?" +categories: ["Product","Strategy",] +tags: ["Streaming","Wars","Product","Strategy","Netflix","Disney","Amazon","Apple","Prediction"] +#externalUrl: "" +showSummary: true +date: 2022-09-04 +draft: false +--- + + + +Last July and for the first time ever, streaming viewership surpassed cable. The streaming wars began around 2010 when Netflix introduced their first streaming-only plan with no DVD rentals, other players (cough, cough… Blockbuster) laughed at the time… little did they know. A decade after, there’s a multitude of streaming services available for mainstream entertainment and also for specific niches (e.g., Curiosity Stream - documentaries, Crunchyroll - anime, etc.). + + +## How Did We Get Here? +This question could turn into its series of posts, aka a very long and boring answer. The short version, Netflix hit gold when they launched their streaming-only subscription service that allowed customers to watch what they wanted when they wanted. This was a massive shift from the linear TV experience where you either had to wait in front of the TV to watch your favorite show, record and watch it later, or wait for a rerun (_fun fact: there was another option to set a reminder to watch your shows :D_). Not only did Netflix launch a way better product to **consume** content, but it also changed the way users **discovered** new series and movies by recommending new shows based on previous history. Users flocked to this service, which was significantly better than the alternatives and also cheaper than the average cable subscription at the time (i.e., _cutting the chord_). + + + + +After Netflix showed everyone how people really wanted to consume content, several players were interested in replicating that model themselves. Traditional content producers (e.g., HBO, Disney, etc.) saw a way to control their distribution channel and get a direct relationship with their customers. Other players, like Apple and Amazon, saw a good opportunity to expand their _service subscription_ strategy by offering yet-another-service to their user-base. This year, most of these services reached hundreds of millions of paying users, and the competition in this industry was never been this strong. + +## Massive Investment in Content + +
+ +One of the strong signals of this competition is the huge amounts of money being spent in content production. HBO just released _House of the Dragon_, a prequel to their hit series _Game of Thrones_. The first season had an estimated production cost of just under $20 million per episode, making the 10 episode run cost a full $200 million. In comparison, _Game of Thrones_ cost around $100 million per season, with the average cost per episode starting around $6 million in season 1 and going up to $15 million in the final season. This means HBO just invested roughly double what it did in the last season of _Game of Thrones_. + +Amazon, coincidentally, also decided to launch its _prequel_ of a super-loved property in the fantasy drama space, _Lord of the Rings_. Investment in the new series, called _Lord of the Rings: The Rings of Power_, is estimated to be around $1 billion. Amazon bought the franchise rights to _Lord of the Rings_ for $250 million and invested $465 million to produce the eight-episode first season of the show. In comparison, the entire trilogy of the _Lord of the Rings_ was produced for roughly $300 million, $100 million for each movie. + +Netflix has been increasing its costs with content production in the last years, arriving at $17 billion this year. Disney is set to spend even more than that, $32 billion (even after cuts). In a different space, big tech companies are also getting into _live sports_. All of this spending creates a super competitive environment across all services, which is not necessarily in the best interest of the viewers. + +## Quality is Decreasing + +
+ +One could argue that all the investment and all the money being thrown at content production will bring the golden age of entertainment. However, as most big investments, they are made to make someone money. In the entertainment industry, one of the ways to reduce risk is to invest in properties that have already proven their value in opposition to new Intellectual Property (IP). + +The levels of “content pumping” that we are seeing nowadays lead to a massive decrease in quality, and worse, viewer fatigue. Especially since it is focused on a minimal set of genres (i.e., fantasy, hero movies, etc.) and franchises (i.e., Marvel Cinematic Universe, DC Cinematic Universe, Star Wars, Fast and the Furious, etc.) + +## More Money In… More Money Out +When a company increases costs, usually the aim is to increase revenue and profit. Streaming services charge a fixed fee per month. Therefore, it doesn’t really matter how much or how little you loved the next big _fantasy drama_ series from your favorite streaming provider – they will make the same amount of money from you. + +Unless… streaming companies increase subscription prices and find new ways to monetize content. Aided by the excuse of inflation, most services have increased their prices in the last year. Specifically, Disney+ subscription in the U.S. will rise from $7.99 to $10.99, while Hulu's ad-free offering will jump from $12.99 per month to $14.99 per month. Netflix cheapest plan increased to $9.99, with the top one at $20.00. Additionally, executives from most of these big companies are also planning to roll out ads for their services. Yes, even Netflix that resisted for years + cannot keep ignoring that option when faced with competition. + +Ultimately, this is a worse product for the user. Price increases could make the overall cost of streaming services too high for some users, which will force a choice of which services to keep. Furthermore, you will get ads again, or you can pay more if you would rather not see them. + +## What Happens Next? +The high levels of competition have begun to generate frustration among users. Users are starting to get _fatigued_ with the low-quality and constant recycling of content (I swear, I am uncertain whether I can handle yet another Marvel Movie or Star Wars trilogy). The increase in prices, especially in the current economic situation, will force users to choose which services to pay for, if any. And ultimately, competition for user’s attention has never been so high. Social networks like Twitter, Instagram, and TikTok take hours of engagement daily out of each user. Video game investment has never been so high, with so many options of games and consoles. + +In my opinion, the streaming wars have already peaked, and we’ll see a change in the upcoming years before getting to a new equilibrium. I think that one out of three things will happen: + +- **Horizontal Expansion** - current streaming services would need to expand to provide additional services and bundle them together. This would increase the _value for money_ and could be interesting to some users depending on what is being bundled. Netflix has begun doing this with games. Companies like Amazon and Apple came into streaming exactly for this reason, expanding into streaming even if it was not their core business. +- **Aggregation** - One service to rule them all… If one of the existing services, or a new player, can aggregate content from several players at a lower price point, this could create a captivating value proposition for customers on the lower end. This option seems highly unlikely, this was Netflix play years ago, and it didn’t work, potentially because they were greedy. Nevertheless, in the current scenario, it is highly unlikely that big players would share rights with another VS getting exclusivity on those. +- **Merges and Acquisitions** - Big fish eats smaller fish. This is bound to happen at some point, it’s just a matter of time and which company will acquire which company for what amount of money. It’s not clear if this will be good or bad for customers, depending on who starts playing together. + +My prediction is that ultimately, big tech companies like Amazon or Apple will begin acquiring other smaller players. These companies come into streaming as a horizontal expansion from their core businesses. Both are armed with an order of magnitude more revenues than their _content only_ counterparts. As an example, in 2021 Disney’s revenue was $81.10 billion and Netflix's was $24.9 billion. In comparison, Apple’s revenue in the same year was $378.32 billion and Amazon’s was $468.82 billion. With this kind of “war chest” plus their own core business (Apple devices, and Amazon e-commerce business) it will be way easier for these companies to step in when they want to. diff --git a/exampleSite/content/posts/202209-streaming-wars/pexels-amateur-hub-3571503.jpg b/exampleSite/content/posts/202209-streaming-wars/pexels-amateur-hub-3571503.jpg new file mode 100644 index 00000000..e35ef492 Binary files /dev/null and b/exampleSite/content/posts/202209-streaming-wars/pexels-amateur-hub-3571503.jpg differ diff --git a/exampleSite/content/posts/202209-streaming-wars/players.png b/exampleSite/content/posts/202209-streaming-wars/players.png new file mode 100644 index 00000000..0d804b4c Binary files /dev/null and b/exampleSite/content/posts/202209-streaming-wars/players.png differ diff --git a/exampleSite/content/posts/_index.md b/exampleSite/content/posts/_index.md new file mode 100644 index 00000000..d201b503 --- /dev/null +++ b/exampleSite/content/posts/_index.md @@ -0,0 +1,18 @@ +--- +title: "Posts" +date: 2022-06-13T20:55:37+01:00 +draft: false + +showDate : false +showDateUpdated : false +showHeadingAnchors : false +showPagination : false +showReadingTime : false +showTableOfContents : true +showTaxonomies : false +showWordCount : false +showSummary : false +sharingLinks : false + +--- + diff --git a/exampleSite/content/recommendations/index.md b/exampleSite/content/recommendations/index.md new file mode 100644 index 00000000..62068030 --- /dev/null +++ b/exampleSite/content/recommendations/index.md @@ -0,0 +1,57 @@ +--- +title: "Recommendations" +date: 2022-06-19T13:03:09+01:00 +draft: true + +showDate : false +showDateUpdated : false +showHeadingAnchors : true +showPagination : false +showReadingTime : false +showTableOfContents : true +showTaxonomies : false +showWordCount : false +showSummary : false +sharingLinks : false +showEdit: false + + +--- + +## Books + +### Design of Everyday Things +asdasd + +### Design of Everyday Things +asdasd + +### Design of Everyday Things +asdasd + +### Zero to One +asdasd + +### Lean Startup +asdasd + +### Zero to One +asdasd + + +## Articles +### blabla +asdasd + +## Online Publications + +### Stratechery +asdasd + +### HBR +asdasd + + +## Podcasts + +### bla bal diff --git a/exampleSite/content/resume/aws.png b/exampleSite/content/resume/aws.png new file mode 100644 index 00000000..aa4d5332 Binary files /dev/null and b/exampleSite/content/resume/aws.png differ diff --git a/exampleSite/content/resume/docker.png b/exampleSite/content/resume/docker.png new file mode 100644 index 00000000..31491db6 Binary files /dev/null and b/exampleSite/content/resume/docker.png differ diff --git a/exampleSite/content/resume/hbs.svg b/exampleSite/content/resume/hbs.svg new file mode 100644 index 00000000..32ebb348 --- /dev/null +++ b/exampleSite/content/resume/hbs.svg @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/exampleSite/content/resume/index.md b/exampleSite/content/resume/index.md new file mode 100644 index 00000000..bca375db --- /dev/null +++ b/exampleSite/content/resume/index.md @@ -0,0 +1,147 @@ +--- +title: "Resume" +date: 2022-06-13T21:28:51+01:00 +draft: false + +showDate : false +showDateUpdated : false +showHeadingAnchors : false +showPagination : false +showReadingTime : false +showTableOfContents : true +showTaxonomies : false +showWordCount : false +showSummary : false +sharingLinks : false +showEdit: false + + +--- + +## Experience + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CompanyLinkRoleDatesLocation
DockerStaff Product Manager2022 - PresentFull Remote
Lisbon, PT
AWS Startup LoftStartup Advisor2022 - PresentFull Remote
Lisbon, PT
TruphoneGroup Product Manager2021 - 2022Hybrid
Lisbon, PT
Senior Product Manager2020 - 2021
Vodafone GroupAnalytics Squad Lead 2019 - 2020Lisbon, PT
London, UK
Senior Product Manager2018 - 2019
Sky DeutschlandSenior Product Architect2016 - 2018Munich, DE
Skimic Founder2016 - 2017Munich, DE
Vodafone GroupProduct Manager2015 - 2016Lisbon, PT
London, UK
NOSProduct Manager2014 - 2015Lisbon, PT
Solutions Architect2012 - 2014
Inesc-IDJunior Researcher2011 - 2012Lisbon, PT
+ +--- + +## Education + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SchoolLinkDegreeDate
Harvard Business School OnlineEntrepreneurship Essentials2022
Disruptive Strategy2022
Tecnico LisboaMSc in Computer Science - Distributed Systems2012
BSc, Computer Science2010
\ No newline at end of file diff --git a/exampleSite/content/resume/inesc.png b/exampleSite/content/resume/inesc.png new file mode 100644 index 00000000..3172d44f Binary files /dev/null and b/exampleSite/content/resume/inesc.png differ diff --git a/exampleSite/content/resume/ist.png b/exampleSite/content/resume/ist.png new file mode 100644 index 00000000..17607fc3 Binary files /dev/null and b/exampleSite/content/resume/ist.png differ diff --git a/exampleSite/content/resume/nos.png b/exampleSite/content/resume/nos.png new file mode 100644 index 00000000..6f1c73c0 Binary files /dev/null and b/exampleSite/content/resume/nos.png differ diff --git a/exampleSite/content/resume/skimic.png b/exampleSite/content/resume/skimic.png new file mode 100644 index 00000000..871c14e0 Binary files /dev/null and b/exampleSite/content/resume/skimic.png differ diff --git a/exampleSite/content/resume/sky.png b/exampleSite/content/resume/sky.png new file mode 100644 index 00000000..98651dd9 Binary files /dev/null and b/exampleSite/content/resume/sky.png differ diff --git a/exampleSite/content/resume/truphone.png b/exampleSite/content/resume/truphone.png new file mode 100644 index 00000000..2f946ced Binary files /dev/null and b/exampleSite/content/resume/truphone.png differ diff --git a/exampleSite/content/resume/vodafone.png b/exampleSite/content/resume/vodafone.png new file mode 100644 index 00000000..6bd886f4 Binary files /dev/null and b/exampleSite/content/resume/vodafone.png differ diff --git a/exampleSite/layouts/.DS_Store b/exampleSite/layouts/.DS_Store deleted file mode 100644 index f150b3b4..00000000 Binary files a/exampleSite/layouts/.DS_Store and /dev/null differ diff --git a/exampleSite/layouts/partials/home/custom.html b/exampleSite/layouts/partials/home/custom.html deleted file mode 100644 index 960ff02e..00000000 --- a/exampleSite/layouts/partials/home/custom.html +++ /dev/null @@ -1,8 +0,0 @@ -{{ $jsHome := resources.Get "js/home.js" | resources.Minify | resources.Fingerprint "sha512" }} -
- {{ partial "partials/home/page.html" . }} -
- - diff --git a/exampleSite/resources/_gen/images/author_hu052d24d60828c1cca42a6aefe45b8b44_54195_192x192_fill_q75_box_smart1.jpg b/exampleSite/resources/_gen/images/author_hu052d24d60828c1cca42a6aefe45b8b44_54195_192x192_fill_q75_box_smart1.jpg deleted file mode 100644 index 100aaab2..00000000 Binary files a/exampleSite/resources/_gen/images/author_hu052d24d60828c1cca42a6aefe45b8b44_54195_192x192_fill_q75_box_smart1.jpg and /dev/null differ diff --git a/exampleSite/resources/_gen/images/author_hu052d24d60828c1cca42a6aefe45b8b44_54195_288x288_fill_q75_box_smart1.jpg b/exampleSite/resources/_gen/images/author_hu052d24d60828c1cca42a6aefe45b8b44_54195_288x288_fill_q75_box_smart1.jpg deleted file mode 100644 index beedc2a7..00000000 Binary files a/exampleSite/resources/_gen/images/author_hu052d24d60828c1cca42a6aefe45b8b44_54195_288x288_fill_q75_box_smart1.jpg and /dev/null differ diff --git a/exampleSite/resources/_gen/images/avatar_hud8fca8be7b711011f1c95214fd9a48d4_44268_192x192_fill_q75_box_smart1.jpg b/exampleSite/resources/_gen/images/avatar_hud8fca8be7b711011f1c95214fd9a48d4_44268_192x192_fill_q75_box_smart1.jpg new file mode 100644 index 00000000..058730a1 Binary files /dev/null and b/exampleSite/resources/_gen/images/avatar_hud8fca8be7b711011f1c95214fd9a48d4_44268_192x192_fill_q75_box_smart1.jpg differ diff --git a/exampleSite/resources/_gen/images/avatar_hud8fca8be7b711011f1c95214fd9a48d4_44268_288x288_fill_q75_box_smart1.jpg b/exampleSite/resources/_gen/images/avatar_hud8fca8be7b711011f1c95214fd9a48d4_44268_288x288_fill_q75_box_smart1.jpg new file mode 100644 index 00000000..a4545061 Binary files /dev/null and b/exampleSite/resources/_gen/images/avatar_hud8fca8be7b711011f1c95214fd9a48d4_44268_288x288_fill_q75_box_smart1.jpg differ diff --git a/exampleSite/resources/_gen/images/blowfish_logo_hu184ea2fa12490a2458ca388a16ab730e_227816_192x192_fill_box_smart1_3.png b/exampleSite/resources/_gen/images/blowfish_logo_hu184ea2fa12490a2458ca388a16ab730e_227816_192x192_fill_box_smart1_3.png new file mode 100644 index 00000000..11f22be8 Binary files /dev/null and b/exampleSite/resources/_gen/images/blowfish_logo_hu184ea2fa12490a2458ca388a16ab730e_227816_192x192_fill_box_smart1_3.png differ diff --git a/layouts/partials/header/Oldbasic.html b/layouts/partials/header/Oldbasic.html deleted file mode 100644 index 422a380c..00000000 --- a/layouts/partials/header/Oldbasic.html +++ /dev/null @@ -1,57 +0,0 @@ -
- -
diff --git a/layouts/partials/header/basic.html b/layouts/partials/header/basic.html index 79ff46b9..5d056197 100644 --- a/layouts/partials/header/basic.html +++ b/layouts/partials/header/basic.html @@ -1,5 +1,5 @@
+ class="flex items-center justify-between px-4 py-6 sm:px-6 md:justify-start space-x-3"> {{ if .Site.Params.Logo -}} {{ $logo := resources.Get .Site.Params.Logo }} {{ if $logo }} @@ -55,6 +55,30 @@ {{ end }}
+
+ + + + {{ if .Site.Params.enableSearch | default false }} + + {{ end }} + + {{/* Appearance switch */}} + {{ if .Site.Params.footer.showAppearanceSwitcher | default false }} + + {{ end }} + +
@@ -72,6 +96,7 @@ "icon.html" "xmark" }} + {{ if .Site.Menus.main }} {{ range .Site.Menus.main }}
  • @@ -81,28 +106,6 @@ {{ end }} {{ end }} - {{ if .Site.Params.enableSearch | default false }} -
  • - -
  • - {{ end }} - - {{/* Appearance switch */}} - {{ if .Site.Params.footer.showAppearanceSwitcher | default false }} -
  • - -
  • - {{ end }}
    diff --git a/layouts/partials/header/hamburger.html b/layouts/partials/header/hamburger.html deleted file mode 100644 index 129be80c..00000000 --- a/layouts/partials/header/hamburger.html +++ /dev/null @@ -1,75 +0,0 @@ -
    - -
    diff --git a/layouts/partials/header/hybrid.html b/layouts/partials/header/hybrid.html deleted file mode 100644 index 3fd27999..00000000 --- a/layouts/partials/header/hybrid.html +++ /dev/null @@ -1,78 +0,0 @@ -
    - -
    \ No newline at end of file diff --git a/exampleSite/layouts/shortcodes/swatches.html b/layouts/shortcodes/swatches.html similarity index 100% rename from exampleSite/layouts/shortcodes/swatches.html rename to layouts/shortcodes/swatches.html diff --git a/package.json b/package.json index 1d6052c3..c968822f 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,7 @@ "assets": "rimraf assets/vendor && vendor-copy", "dev": "NODE_ENV=development ./node_modules/tailwindcss/lib/cli.js -i ./assets/css/main.css -o ./assets/css/compiled/main.css --jit -w", "build": "NODE_ENV=production ./node_modules/tailwindcss/lib/cli.js -i ./assets/css/main.css -o ./assets/css/compiled/main.css --jit", - "example": "hugo server --source exampleSite --themesDir ../.. --buildDrafts -b http://localhost/ -p 8008", - "examplePersonal": "hugo server --source exampleSitePersonal --themesDir ../.. --buildDrafts -b http://localhost/ -p 8008", + "example": "hugo server --source exampleSite --themesDir ../.. --buildDrafts -b http://localhost/ -p 1313", "lighthouse": "lhci autorun" }, "repository": { diff --git a/static/.DS_Store b/static/.DS_Store index 91dfee16..74a04974 100644 Binary files a/static/.DS_Store and b/static/.DS_Store differ diff --git a/static/android-chrome-192x192.png b/static/android-chrome-192x192.png old mode 100755 new mode 100644 index eeb320e3..b63c0373 Binary files a/static/android-chrome-192x192.png and b/static/android-chrome-192x192.png differ diff --git a/static/android-chrome-512x512.png b/static/android-chrome-512x512.png old mode 100755 new mode 100644 index 698731a5..da0f7675 Binary files a/static/android-chrome-512x512.png and b/static/android-chrome-512x512.png differ diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png old mode 100755 new mode 100644 index e3ad14a1..a0119536 Binary files a/static/apple-touch-icon.png and b/static/apple-touch-icon.png differ diff --git a/static/favicon-16x16.png b/static/favicon-16x16.png old mode 100755 new mode 100644 index 8ecbbe95..28b82513 Binary files a/static/favicon-16x16.png and b/static/favicon-16x16.png differ diff --git a/static/favicon-32x32.png b/static/favicon-32x32.png old mode 100755 new mode 100644 index 6f409e8f..6af3cc04 Binary files a/static/favicon-32x32.png and b/static/favicon-32x32.png differ diff --git a/static/favicon.ico b/static/favicon.ico old mode 100755 new mode 100644 index 879d7555..db84c1b7 Binary files a/static/favicon.ico and b/static/favicon.ico differ diff --git a/static/site.webmanifest b/static/site.webmanifest old mode 100755 new mode 100644 index 03c13dab..45dc8a20 --- a/static/site.webmanifest +++ b/static/site.webmanifest @@ -1 +1 @@ -{"name":"Congo","short_name":"Congo","icons":[{"src": "/android-chrome-192x192.png","sizes": "192x192","type": "image/png","purpose": "any maskable"},{"src": "/android-chrome-512x512.png","sizes": "512x512","type": "image/png","purpose": "any maskable"}],"theme_color":"#ffffff","background_color":"#7c3aed","display":"standalone"} \ No newline at end of file +{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} \ No newline at end of file