From 54dfbfde2d0ff92b734655a6564754c0d9a5ebf7 Mon Sep 17 00:00:00 2001 From: Scott Nath Date: Fri, 17 May 2024 18:42:56 -0400 Subject: [PATCH] :new: add jsonresume-component and article (#129) --- package-lock.json | 77 ++++- workspaces/website/astro.config.mjs | 6 + workspaces/website/package.json | 1 + .../jsonresume/jsonresume-component.png | Bin 0 -> 17050 bytes workspaces/website/public/resume.json | 278 ++++++++++++++++++ .../scott-nath-jsonresume-profile-photo.avif | Bin 0 -> 38469 bytes .../blahg/microdata-jsonresume-component.md | 127 ++++++++ workspaces/website/src/pages/resume.astro | 33 +-- 8 files changed, 488 insertions(+), 34 deletions(-) create mode 100644 workspaces/website/public/blahg-assets/jsonresume/jsonresume-component.png create mode 100644 workspaces/website/public/resume.json create mode 100644 workspaces/website/public/scott-nath-jsonresume-profile-photo.avif create mode 100644 workspaces/website/src/content/blahg/microdata-jsonresume-component.md diff --git a/package-lock.json b/package-lock.json index c50449d..50a55d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4251,8 +4251,7 @@ "node_modules/@lit-labs/ssr-dom-shim": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.0.tgz", - "integrity": "sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==", - "dev": true + "integrity": "sha512-yWJKmpGE6lUURKAaIltoPIE/wrbY3TEkqQt+X0m+7fQNnAv0keydnYvbiJFP1PnMhizmIWRWOG5KLhYyc/xl+g==" }, "node_modules/@lit-labs/ssr/node_modules/@types/node": { "version": "16.18.96", @@ -4264,11 +4263,18 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", - "dev": true, "dependencies": { "@lit-labs/ssr-dom-shim": "^1.2.0" } }, + "node_modules/@lit/task": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@lit/task/-/task-1.0.0.tgz", + "integrity": "sha512-7jocGBh3yGlo3kKxQggZph2txK4X5GYNWp2FAsmV9u2spzUypwrzRzXe8I72icAb02B00+k2nlvxVcrQB6vyrw==", + "dependencies": { + "@lit/reactive-element": "^1.0.0 || ^2.0.0" + } + }, "node_modules/@mdx-js/mdx": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz", @@ -13778,8 +13784,7 @@ "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", - "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "dev": true + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" }, "node_modules/@types/unist": { "version": "3.0.2", @@ -15953,6 +15958,11 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -16826,6 +16836,16 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, + "node_modules/core-js": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.1.tgz", + "integrity": "sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-js-compat": { "version": "3.36.1", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.1.tgz", @@ -19311,6 +19331,15 @@ "pend": "~1.2.0" } }, + "node_modules/feather-icons": { + "version": "4.29.2", + "resolved": "https://registry.npmjs.org/feather-icons/-/feather-icons-4.29.2.tgz", + "integrity": "sha512-0TaCFTnBTVCz6U+baY2UJNKne5ifGh7sMG4ZC2LoBWCZdIyPa+y6UiR4lEYGws1JOFWdee8KAsAIvu0VcXqiqA==", + "dependencies": { + "classnames": "^2.2.5", + "core-js": "^3.1.3" + } + }, "node_modules/fetch-blob": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", @@ -25017,6 +25046,29 @@ "node >= 0.2.0" ] }, + "node_modules/jsonresume-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/jsonresume-component/-/jsonresume-component-0.2.0.tgz", + "integrity": "sha512-I9IbVXNBm93RH3RKb+MfqdDtRZ/ExBFiQ++ZAyK5w5nlO/HQShz/+P1+jKL6ShTPNGw5Op7SuSOi/z0jyhg/sw==", + "dependencies": { + "@lit/task": "^1.0.0", + "jsonresume-theme-microdata": "^0.1.0", + "lit": "^3.1.3" + } + }, + "node_modules/jsonresume-theme-microdata": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/jsonresume-theme-microdata/-/jsonresume-theme-microdata-0.1.0.tgz", + "integrity": "sha512-4rUUwc4u3PEkBgxCrjhzDm8kzMa5dhEFHEDp+lhnLfOGnNopDI+gZoy1n0xnhumBfUmjV/ROYOy10BGPSuMD+w==", + "dependencies": { + "feather-icons": "^4.29.2", + "micromark": "^4.0.0", + "striptags": "^3.2.0" + }, + "bin": { + "jsonresume-theme-microdata": "bin/cli.js" + } + }, "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -25117,10 +25169,9 @@ "dev": true }, "node_modules/lit": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.2.tgz", - "integrity": "sha512-VZx5iAyMtX7CV4K8iTLdCkMaYZ7ipjJZ0JcSdJ0zIdGxxyurjIn7yuuSxNBD7QmjvcNJwr0JS4cAdAtsy7gZ6w==", - "dev": true, + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.3.tgz", + "integrity": "sha512-l4slfspEsnCcHVRTvaP7YnkTZEZggNFywLEIhQaGhYDczG+tu/vlgm/KaWIEjIp+ZyV20r2JnZctMb8LeLCG7Q==", "dependencies": { "@lit/reactive-element": "^2.0.4", "lit-element": "^4.0.4", @@ -25131,7 +25182,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.4.tgz", "integrity": "sha512-98CvgulX6eCPs6TyAIQoJZBCQPo80rgXR+dVBs61cstJXqtI+USQZAbA4gFHh6L/mxBx9MrgPLHLsUgDUHAcCQ==", - "dev": true, "dependencies": { "@lit-labs/ssr-dom-shim": "^1.2.0", "@lit/reactive-element": "^2.0.4", @@ -25142,7 +25192,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.2.tgz", "integrity": "sha512-3OBZSUrPnAHoKJ9AMjRL/m01YJxQMf+TMHanNtTHG68ubjnZxK0RFl102DPzsw4mWnHibfZIBJm3LWCZ/LmMvg==", - "dev": true, "dependencies": { "@types/trusted-types": "^2.0.2" } @@ -36649,6 +36698,11 @@ "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==", "dev": true }, + "node_modules/striptags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", + "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==" + }, "node_modules/strnum": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", @@ -39636,6 +39690,7 @@ "@types/react-dom": "^18.2.24", "airtable": "^0.12.2", "astro": "4.5.18", + "jsonresume-component": "^0.2.0", "marked": "^12.0.1", "profile-components": "^0.4.1", "react": "^18.2.0", diff --git a/workspaces/website/astro.config.mjs b/workspaces/website/astro.config.mjs index 8d5fc31..6a3feb3 100644 --- a/workspaces/website/astro.config.mjs +++ b/workspaces/website/astro.config.mjs @@ -26,4 +26,10 @@ export default defineConfig({ }, }), ], + vite: { + ssr: { + // Example: Force a broken package to skip SSR processing, if needed + noExternal: ['jsonresume-component'], + } + } }); diff --git a/workspaces/website/package.json b/workspaces/website/package.json index 9275864..0cd553d 100644 --- a/workspaces/website/package.json +++ b/workspaces/website/package.json @@ -20,6 +20,7 @@ "@types/react-dom": "^18.2.24", "airtable": "^0.12.2", "astro": "4.5.18", + "jsonresume-component": "^0.2.0", "marked": "^12.0.1", "profile-components": "^0.4.1", "react": "^18.2.0", diff --git a/workspaces/website/public/blahg-assets/jsonresume/jsonresume-component.png b/workspaces/website/public/blahg-assets/jsonresume/jsonresume-component.png new file mode 100644 index 0000000000000000000000000000000000000000..75c776e09643fa4ef28b60dcf7fbc11ec7e1f351 GIT binary patch literal 17050 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 I!{@I4AIaN(iU0rr literal 0 HcmV?d00001 diff --git a/workspaces/website/public/resume.json b/workspaces/website/public/resume.json new file mode 100644 index 0000000..b617f08 --- /dev/null +++ b/workspaces/website/public/resume.json @@ -0,0 +1,278 @@ +{ + "basics": { + "profiles": [ + { + "url": "https://linkedin.com/in/scottnath", + "username": "scottnath", + "network": "LinkedIn" + }, + { + "url": "https://github.com/scottnath", + "username": "scottnath", + "network": "GitHub" + }, + { + "url": "https://mastodon.social/@scottnath", + "username": "scottnath@mastodon.social", + "network": "Mastodon" + }, + { + "url": "https://dev.to/scottnath", + "username": "scottnath", + "network": "DEV" + } + ], + "summary": "Leader with a track record of success in translating business requirements and staff needs into powerful new web\napplications, infrastructure, and back-end tools critical for the delivery of flexible, reusable code designed to\naccelerate business goals. A strong and committed foundation in problem solving, inclusive developer mentorship\nwith pair-programming and coaching, coding POC prototypes, and architecting innovative Design Systems that build\nconsensus and cross-discipline collaboration via time-saving, user-centric web development environments.", + "location": { + "city": "New Paltz", + "countryCode": "US", + "region": "Hudson Valley" + }, + "name": "Scott Nath", + "label": "Frontend Architect", + "url": "https://scottnath.com", + "email": "scott@scottnath.com" + }, + "skills": [ + { + "level": "Senior", + "name": "Languages", + "itemtype": "ComputerLanguage", + "keywords": [ + "Javascript", + "Typescript", + "CSS", + "HTML", + "Bash/Shell", + "Gherkin", + "Python", + "PHP" + ] + }, + { + "level": "Senior", + "name": "Libraries & Tools", + "itemtype": "SoftwareSourceCode", + "keywords": [ + "NodeJS ", + "Vite", + "Storybook", + "LangChain AI", + "Docker", + "GraphQL", + "ExpressJS", + "Octokit", + "Wordpress", + "i18n", + "Microdata" + ] + }, + { + "level": "Senior", + "name": "UI Components", + "itemtype": "SoftwareSourceCode", + "keywords": [ + "Web Components", + "VueJS", + "Lit", + "Sass", + "HandlebarsJS", + "ReactJS", + "AngularJS" + ] + }, + { + "level": "Senior", + "name": "DevOps", + "itemtype": "SoftwareSourceCode", + "keywords": [ + "GitHub Actions", + "CI/CD", + "Automated Testing", + "Travis", + "GitHub", + "Kubernetes" + ] + }, + { + "level": "Senior", + "name": "Testing & QA", + "itemtype": "SoftwareSourceCode", + "keywords": [ + "accessibility", + "UI Unit Testing", + "Testing-Library", + "Jest", + "Playwright", + "Vitest", + "Chromatic", + "Test driven development (TDD)", + "Screen reader testing" + ] + }, + { + "level": "Senior", + "name": "Soft Skills", + "keywords": [ + "Agile", + "honest and clear communicator", + "Design Thinking", + "developer advocacy", + "developer translation" + ] + } + ], + "work": [ + { + "endDate": "2023-05-15", + "position": "Senior Software Engineer", + "summary": "Directed all aspects of DevOps architecture for a multi-framework design system with Storybook while increasing performance and efficiency through the development and launch of automated tools and cross-org systems.", + "startDate": "2020-04-01", + "location": "New York, NY", + "name": "IBM CIO", + "highlights": [ + "Leader in implementing the Figma designs, a/b testing, i18n internationalization and developer processes on a\ncomplete rebuild of the employee portal, which combined 5 teams into 1 cross-functional collaborating team", + "Leadership role as the architect of an Innersource multi-framework design system and front end software engineering environment and tooling for the simultaneous creation of Vanilla and Vue.js components.", + "Inherited an existing, hand-released component library project and integrated version control, automated semver releases, extensive testing, and CI/CD with consistent and trustable release naming and scheduling." + ], + "itemtype": "Corporation" + }, + { + "endDate": "2020-04-01", + "position": "System Architect", + "summary": "Demonstrated continued success as the creator of architecture for the Watson Health Pattern & Asset Library (PAL).", + "startDate": "2017-01-01", + "location": "New York, NY", + "name": "IBM Watson Health", + "highlights": [ + "Leadership role in the creation of Watson Health’s client-side design system for native and web applications.", + "Consolidated 3 disparate UI component libraries into 1 and standardized collaborative processes by architecting one design system which integrated UI design and inclusive user experiences for multiple teams." + ], + "itemtype": "Corporation" + }, + { + "endDate": "2017-01-01", + "position": "Senior Frontend Developer", + "summary": "Streamlined access to Watson developer documentation by creating a new open-source content management system.", + "startDate": "2016-01-01", + "location": "New York, NY", + "name": "IBM Watson", + "highlights": [ + "Partnered with the design team tasked with creating a developer-centric and accessible documentation site adhering to IBM Watson AI development teams’s technical specs, reducing 8 distributed systems to 1", + "Lead architect the end-to-end completion of a full-stack open-source project, Punchcard CMS, which required backend functionality for immutable data, content versioning, and subscribe-able publishing gateways." + ], + "itemtype": "Corporation" + }, + { + "endDate": "2015-12-01", + "position": "Software Architect", + "summary": "Developed pixel-perfect HTML and CSS for customer-facing streaming applications.", + "startDate": "2006-11-01", + "url": "https://www.nbcuniversal.com/", + "location": "Times Square, NY", + "name": "NBC Universal", + "highlights": [ + "Delivered reusable HTML/SaaS product while translating capabilities and features into in-depth documentation.", + "Created NBC’s WordPress system (NBCUPress) which included a focus on a reusable deployment system in PHP." + ], + "itemtype": "NewsMediaOrganization" + } + ], + "projects": [ + { + "startDate": "2023-08-01", + "name": "Profile Components", + "keywords": [ + "web components", + "native browser APIs", + "evergreen" + ], + "url": "https://github.com/scottnath/profile-components", + "description": "zero dependency native web components to present user profiles", + "type": "open source", + "roles": [ + "Architect", + "Developer" + ], + "highlights": [ + "Created native web components to learn web components", + "Created a set of zero dependency native web components to present user profiles from various social networks by querying the site APIs for the latest user profile", + "Styling to web standards and cross-browser compatibility using the newest browser-supported CSS functionality like nesting and container-queries", + "Architected fullstack DevOps solutions to ensure overall quality of the project including a Storybook implementation with user interface design testing and VRT (visual regression testing), CI/CD for automated deployment, releases, and testing, and auto-generated PRs for dependency updates", + "Test driven development using the native Node test runner, node:test, Guidepup for screen reader and web accessibility assurance." + ] + }, + { + "startDate": "2024-04-01", + "name": "jsonresume-theme-microdata", + "keywords": [ + "jsonresume", + "microdata" + ], + "url": "https://github.com/scottnath/jsonresume-theme-microdata", + "description": "A flat JSON Resume theme with schema.org microdata, compatible with the latest resume schema", + "type": "open source", + "roles": [ + "Architect", + "Developer" + ] + }, + { + "startDate": "2016-01-01", + "name": "Punchcard CMS", + "endDate": "2018-12-31", + "url": "https://github.com/punchcard-cms", + "description": "Headless Content Management System designed with content strategy at its heart. Built with Node.", + "type": "open source", + "roles": [ + "Architect", + "Developer" + ], + "highlights": [ + "Designed and developed a server-side headless, open-source content management system built with a focus on quality through content-strategy reflecting real-world use cases and a lean Postgresql/postgres backend.", + "Architected full stack system architecture for auto-generated forms, localization, role-based administration, content approval workflows with revisioning, scheduled releases, caching, and subscriptions via webhooks." + ] + }, + { + "startDate": "2012-01-01", + "entity": "videogame.camp", + "name": "The Chase", + "endDate": "2014-01-01", + "keywords": [ + "raspberry pi", + "linux" + ], + "url": "https://videogame.camp/the-chase/about/", + "description": "A high-tech game of hide and seek", + "type": "meatspace", + "roles": [ + "Inventor", + "Developer" + ], + "highlights": [ + "Created a raspberry pi-based remote camera live projection system", + "Hosted multiple in-person events where the public had to look for the ghost in the crowd" + ] + }, + { + "startDate": "2023-04-01", + "name": "StoryDocker", + "url": "https://github.com/storydocker", + "description": "Storybook, but as a microservice", + "type": "open source", + "roles": [ + "Architect", + "Owner" + ], + "highlights": [ + "Implemented Storybook as a microservice using Docker Containers released as an open-source tool (StockDocker) able to be installed with zero dependencies and which features a full testing suite enabling prototyping and testing UI and user experience via Storybook’s testing-library integrations.", + "Eliminated the need for multiple implementations of Storybook (previously one for each application development environment) by introducing the ability for Storybook to run multiple JS frameworks out-of-the-box." + ] + } + ], + "meta": { + "canonical": "https://scottnath.com/resume.json", + "version": "1.0.0", + "lastModified": "2024-05-17T18:26:35.690Z" + } +} \ No newline at end of file diff --git a/workspaces/website/public/scott-nath-jsonresume-profile-photo.avif b/workspaces/website/public/scott-nath-jsonresume-profile-photo.avif new file mode 100644 index 0000000000000000000000000000000000000000..7fde7ff0d311dca339f6ac5b71874bd0cc7f18cc GIT binary patch literal 38469 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

S6gpytS{jz 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 literal 0 HcmV?d00001 diff --git a/workspaces/website/src/content/blahg/microdata-jsonresume-component.md b/workspaces/website/src/content/blahg/microdata-jsonresume-component.md new file mode 100644 index 0000000..7d34d39 --- /dev/null +++ b/workspaces/website/src/content/blahg/microdata-jsonresume-component.md @@ -0,0 +1,127 @@ +--- +title: "How about a JSON Resume web component with configurable microdata?" +description: "Introduction to the jsonresume-component module, a web component to display your JSON Resume documented with microdata" +pubDate: "2024-05-17" +heroImage: "/blahg-assets/jsonresume/jsonresume-component.png" +heroImageDesc: 'Article header image shows a piece of HTML, specifically ' +--- + +Introducing `jsonresume-component`, a web component which displays your resume, with microdata, theming, slots, and remote fetching of your JSON Resume resume.json file. + +## tl;dr + +`jsonresume-component` is a Web Component that generates your resume with microdata following the [Schema.org][schemaorg] vocabulary set. It's custom element is `` and it fetches a `resume.json` file following the [JSON Resume][jsonresume] schema to create your resume. HTML is created from using the [jsonresume-theme-microdata][jtm] theme, creating a resume documented with microdata following the [Schema.org][schemaorg] vocabulary set. + +* [`jsonresume-component` on GitHub][jc] +* [combined `jsonresume-component` and `jsonresume-theme-microdata` storybook][jc-sb] +* [example of a resume within a website UI][my-resume] + +### snippet: + +```html + + + +``` + +## Prerequisites + +* You have your resume in a JSON file following the JSON Resume schema structure + +## Quick primer: How we got here + +This web component is built using the HTML-generating functionality of the module [jsonresume-theme-microdata][jtm]. That module is a [JSON Resume][jsonresume] theme which is the subject of the article ["Make your resume SEO friendly using JSON Resume with microdata"][microdata-jsonresume]. The underlying concepts of microdata and HTML were broken down in ["How to Boost SEO by Enhancing HTML with Microdata"][microdata-html]. + +## How to implement `` in node + +### install dependencies + +```sh +npm i lit @lit/task jsonresume-component +``` + +### Usage + +General usage + +```javascript +import { JsonResume } from 'jsonresume-component'; +``` + +```html + +``` + +## How to implement the `` web component in HTML + +### include `lit` dependencies + +`` uses [`lit`](https://lit.dev) and [`@lit/task`](https://lit.dev/docs/data/task/) which must be imported into your HTML file. You can include dependencies with an [importmap](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script/type/importmap), pulling them from a CDN: + +```html + +``` + +### Add jsonresume-component + +```html + +``` + +### Using just a `gist` id + +This option automates fetching your `resume.json` file from a GitHub gist. The gist must have a file called `resume.json` in it. + +```html + +``` + +**check out this stackblitz for examples with `slots`, alternative stylesheets, and a local `resume.json`** + + + + +## Conclusion + +At the risk of recreating the [detailed configuration docs in the `jsonresume-component` readme][jc], let's stop there. The repo contains an [examples](https://github.com/scottnath/jsonresume-component/tree/main/examples/browser) directory for stackblitzin or wherever you open your examples. + + + +[microdata-html]: /blahg/microdata-with-html/ +[microdata-jsonresume]: /blahg/microdata-with-jsonresume/ +[my-resume]: /resume/ +[jsonresume]: https://jsonresume.org +[jsonresume-schema]: https://github.com/jsonresume/resume-schema/blob/master/schema.json +[jsonresume-project]: https://jsonresume.org/projects/ +[jc]: https://github.com/scottnath/jsonresume-component +[jc-sb]: https://6647817e5224ff5c42e64d5e-dmlkvzjlzg.chromatic.com/ +[jtm]: https://github.com/scottnath/jsonresume-theme-microdata +[jtm-example]: https://github.com/scottnath/jsonresume-theme-microdata/TBD___ +[jte]: https://github.com/rbardini/jsonresume-theme-even +[schemaorg]: https://schema.org +[schemaorg-started]: https://schema.org/docs/gs.html +[schemaorg-person]: https://schema.org/Person +[schemaorg-article]: https://schema.org/Article +[schemaorg-org]: https://schema.org/Organization +[schemaorg-author]: https://schema.org/author +[schemaorg-alumniOf]: https://schema.org/alumniOf +[schemaorg-val]: https://validator.schema.org +[myresumejson]: https://gist.github.com/scottnath/9e7a7ceb9425336c6aa08d58afb63b8d \ No newline at end of file diff --git a/workspaces/website/src/pages/resume.astro b/workspaces/website/src/pages/resume.astro index 243461e..f5ffff4 100644 --- a/workspaces/website/src/pages/resume.astro +++ b/workspaces/website/src/pages/resume.astro @@ -1,34 +1,21 @@ --- - import SiteWide from '~layouts/SiteWide.astro'; -import Resume from "../components/resume/index"; - -import { getResume } from "../utils/airtable"; +import {JsonResume} from 'jsonresume-component'; +import { SITE_DESCRIPTION } from '../consts.ts' -const content = await getResume(); -const pageTitle = `Resume for Scott Nath - ${content.basics.short_summary}`; +const pageTitle = `Resume for Scott Nath - ${SITE_DESCRIPTION}`; --- - -

-
    -
  • -
+ +
+
- -
\ No newline at end of file