{"id":16426671,"url":"https://github.com/michaelsolati/portfolio","last_synced_at":"2025-03-16T17:34:33.059Z","repository":{"id":56726523,"uuid":"264386365","full_name":"MichaelSolati/portfolio","owner":"MichaelSolati","description":"A portfolio designed for lazy developers all over the world. With little configuration and maintanince let this application automatically update itself without you having to lift a finger!","archived":false,"fork":false,"pushed_at":"2024-07-30T18:29:56.000Z","size":77444,"stargazers_count":25,"open_issues_count":0,"forks_count":7,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-10-12T08:09:53.934Z","etag":null,"topics":["astro","firebase","portfolio","resume"],"latest_commit_sha":null,"homepage":"https://michaelsolati.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MichaelSolati.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-16T07:49:16.000Z","updated_at":"2024-07-30T18:30:29.000Z","dependencies_parsed_at":"2024-07-30T00:46:06.599Z","dependency_job_id":null,"html_url":"https://github.com/MichaelSolati/portfolio","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MichaelSolati%2Fportfolio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MichaelSolati%2Fportfolio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MichaelSolati%2Fportfolio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MichaelSolati%2Fportfolio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MichaelSolati","download_url":"https://codeload.github.com/MichaelSolati/portfolio/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221666410,"owners_count":16860415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["astro","firebase","portfolio","resume"],"created_at":"2024-10-11T08:09:53.997Z","updated_at":"2024-10-27T10:59:16.238Z","avatar_url":"https://github.com/MichaelSolati.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Portfolio\n\nA portfolio designed for lazy developers all over the world. With little configuration and maintanince let this application automatically update itself without you having to lift a finger!\n\nI speak at events, write blog posts, and maintain some libraries. I wanted to create a website that would showcase all of this, and I created this project to host my blog, display my repos from [GitHub](https://github.com) and show a [YouTube](https://youtube.com) playlist!\n\n- My experience is pulled from [LinkedIn](https://linkedin.com) and is shown on [`/`](https://michaelsolati.com/).\n- Blog posts I've written are hosted here and shown on [`/blog`](https://michaelsolati.com/blog).\n- My most starred and recent GitHub repos are shown on [`/code`](https://michaelsolati.com/code).\n- Recorded talks are fetched from a YouTube playlist and shown on the [`/videos`](https://michaelsolati.com/videos).\n\nAlmost all of this is configured from a few JSON files in [`src/_data`](src/_data).\n\n---\n\n## Getting Setup\n\nWe'll keep our first step simple and just run a `npm ci` command. You will also want `firebase-tools` installed as a global dependency on your machine. Just run the command `npm i -g firebase-tools` and be sure to sign into your Google account for the `firebase-tools` with the command `firebase login`.\n\n### Configuration\n\nSome basic details used for generating pages and fetching content on the site is found in the [`src/environment.ts`](src/environment.ts). Below is an interface explaining the site's data structure. If you don't want one of the optional fields, delete it.\n\n```TypeScript\ninterface Environment {\n  name: string; // Your name.\n  shortName: string; // Short name for PWA.\n  description: string; // A short description about yourself.\n  code: {\n    githubID: string; // Your GitHub handle.\n  }\n  videos: {\n    youtubePlaylistID: string; // The YouTube Playlist ID to show.\n  }\n}\n```\n\n#### Blog\n\nBlog posts are written in Markdown and stored in [`src/content/blog`](src/content/blog). The metadata is set in the Front Matter at the top of a Markdown file. Below is an example of what fields are supported and what they should look like.\n\n```yaml\n---\ntitle: My Blog Post's Title\ndescription: A description for this blog post.\npubDate: May 20 2024\nhero: https://michaelsolati.com/hero.png\n---\n```\n\n#### LinkedIn\n\nI would like to automate this but LinkedIn makes it near impossible. Using this [Chrome extension](https://chromewebstore.google.com/detail/caobgmmcpklomkcckaenhjlokpmfbdec). Generate a JSON and save the content in [`src/data/linkedin.json`](src/data/linkedin.json).\n\n#### Firebase\n\nThis application takes advantage of Firebase for the use of its [Hosting](https://firebase.google.com/products/hosting). In the [Firebase console](https://console.firebase.google.com/) create a new application, and ensure that these features are enabled. Typically they would be enabled from the get-go, but you may want to check just in case.\n\nUpdate the `.firebaserc` file in the root directory so that `projects.default` is assigned to your Project ID. The easiest way to do this is just to delete the file and run the command `firbase init` to assign it to your project.\n\n#### YouTube\n\nYou will also need to enable the YouTube Data API v3 for your Firebase application, which [you can do here](https://console.developers.google.com/apis/library/youtube.googleapis.com/). Generate an API token for this and use set it as an environment variable called `YOUTUBE`. If you don't want to keep setting it you can set it once in a git ignored `.env` file.\n\n## Let's Wind Up\n\nWith everything configured and data generated you can test the site by running:\n\n```bash\nnpm run start\n```\n\nIf everything looks good then we're ready to deploy to Firebase, run:\n\n```bash\nnpm run build\nfirebase deploy\n```\n\nEnjoy!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelsolati%2Fportfolio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichaelsolati%2Fportfolio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichaelsolati%2Fportfolio/lists"}