diff options
-rw-r--r-- | data/publications.tsx | 28 | ||||
-rw-r--r-- | lib/feed.ts | 53 | ||||
-rw-r--r-- | package-lock.json | 305 | ||||
-rw-r--r-- | package.json | 3 | ||||
-rw-r--r-- | pages/_document.tsx | 4 | ||||
-rw-r--r-- | pages/index.tsx | 11 | ||||
-rw-r--r-- | public/rss/atom.xml | 80 | ||||
-rw-r--r-- | public/rss/feed.json | 57 | ||||
-rw-r--r-- | public/rss/feed.xml | 40 |
9 files changed, 439 insertions, 142 deletions
diff --git a/data/publications.tsx b/data/publications.tsx index b7649575..fff0eddd 100644 --- a/data/publications.tsx +++ b/data/publications.tsx @@ -1,27 +1,37 @@ type Publication = { - name: string, + title: string, url: string, + summary: string, + publishedAt: string, } const Publications : Array<Publication> = [ { - name: "Buffers, splits and tabs in Vim", - url: "https://medium.com/@msapka/buffers-splits-and-tabs-in-vim-5bb3b6dc1c19" + title: "Buffers, splits and tabs in Vim", + url: "https://medium.com/@msapka/buffers-splits-and-tabs-in-vim-5bb3b6dc1c19", + summary: "", + publishedAt: "Aug 18, 2022" }, { - name: "A month with a disgusting ThinkPad", - url: "https://medium.com/@msapka/a-month-with-a-disgusting-thinkpad-936e7c675a74" + title: "A month with a disgusting ThinkPad", + url: "https://medium.com/@msapka/a-month-with-a-disgusting-thinkpad-936e7c675a74", + summary: "", + publishedAt: "Aug 8, 2022", }, { - name: "Managing dotfiles with GNU Stow", - url: "https://medium.com/@msapka/managing-dotfiles-with-gnu-stow-72b4e3bb9434" + title: "Managing dotfiles with GNU Stow", + url: "https://medium.com/@msapka/managing-dotfiles-with-gnu-stow-72b4e3bb9434", + summary: "", + publishedAt: "Aug 5, 2022", }, { - name: "Adding dynamic DNS to my home server", - url: "https://medium.com/@msapka/adding-dynamic-dns-to-my-home-server-d05bf65358cc" + title: "Adding dynamic DNS to my home server", + url: "https://medium.com/@msapka/adding-dynamic-dns-to-my-home-server-d05bf65358cc", + summary: "", + publishedAt: "Aug 4, 2022", } ] diff --git a/lib/feed.ts b/lib/feed.ts new file mode 100644 index 00000000..92d61fc0 --- /dev/null +++ b/lib/feed.ts @@ -0,0 +1,53 @@ +import fs from "fs"; +import { Feed } from "feed"; +import Publications from "../data/publications"; + +const generateRssFeed = async () => { + const siteURL = "https://michal.sapka.pl"; + const date = new Date(); + const author = { + name: "Michał M. Sapka", + email: "michal@sapka.pl", + link: "https://michal.sapka.pl", + }; + + const feed = new Feed({ + title: "Michał's publications", + description: "Michał Sapka's recent publications", + id: siteURL, + link: siteURL, + //image: `${siteURL}/logo.svg`, + //favicon: `${siteURL}/favicon.png`, + copyright: `All rights reserved ${date.getFullYear()}, Michał M. Sapka`, + updated: date, + generator: "Feed for Node.js", + feedLinks: { + rss2: `${siteURL}/rss/feed.xml`, + json: `${siteURL}/rss/feed.json`, + atom: `${siteURL}/rss/atom.xml`, + }, + author, + + }); + + Publications.forEach((post) => { + const url = post.url; + feed.addItem({ + title: post.title, + id: url, + link: url, + description: post.summary, + content: post.summary, + author: [author], + contributor: [author], + date: new Date(post.publishedAt), + }); + }); + + fs.mkdirSync("./public/rss", { recursive: true }); + fs.writeFileSync("./public/rss/feed.xml", feed.rss2()); + fs.writeFileSync("./public/rss/atom.xml", feed.atom1()); + fs.writeFileSync("./public/rss/feed.json", feed.json1()); +}; + +export default generateRssFeed diff --git a/package-lock.json b/package-lock.json index a1f6ae49..662c9c91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,8 +13,9 @@ "@emotion/styled": "^11.10.0", "@fontsource/lato": "^4.5.9", "@fontsource/open-sans": "^4.5.11", + "feed": "^4.2.2", "framer-motion": "^7.0.0", - "next": "12.2.3", + "next": "^12.2.5", "react": "18.2.0", "react-dom": "18.2.0", "react-icons": "^4.4.0" @@ -1626,9 +1627,9 @@ } }, "node_modules/@next/env": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.3.tgz", - "integrity": "sha512-2lWKP5Xcvnor70NaaROZXBvU8z9mFReePCG8NhZw6NyNGnPvC+8s+Cre/63LAB1LKzWw/e9bZJnQUg0gYFRb2Q==" + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.5.tgz", + "integrity": "sha512-vLPLV3cpPGjUPT3PjgRj7e3nio9t6USkuew3JE/jMeon/9Mvp1WyR18v3iwnCuX7eUAm1HmAbJHHLAbcu/EJcw==" }, "node_modules/@next/eslint-plugin-next": { "version": "12.2.3", @@ -1640,9 +1641,9 @@ } }, "node_modules/@next/swc-android-arm-eabi": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.3.tgz", - "integrity": "sha512-JxmCW9XB5PYnkGE67BdnBTdqW0SW6oMCiPMHLdjeRi4T3U4JJKJGnjQld99+6TPOfPWigtw3W7Cijp5gc+vJ/w==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.5.tgz", + "integrity": "sha512-cPWClKxGhgn2dLWnspW+7psl3MoLQUcNqJqOHk2BhNcou9ARDtC0IjQkKe5qcn9qg7I7U83Gp1yh2aesZfZJMA==", "cpu": [ "arm" ], @@ -1655,9 +1656,9 @@ } }, "node_modules/@next/swc-android-arm64": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.3.tgz", - "integrity": "sha512-3l4zXpWnzy0fqoedsFRxzMy/eGlMMqn6IwPEuBmtEQ4h7srmQFHyT+Bk+eVHb0o1RQ7/TloAa+mu8JX5tz/5tA==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.5.tgz", + "integrity": "sha512-vMj0efliXmC5b7p+wfcQCX0AfU8IypjkzT64GiKJD9PgiA3IILNiGJr1fw2lyUDHkjeWx/5HMlMEpLnTsQslwg==", "cpu": [ "arm64" ], @@ -1670,9 +1671,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.3.tgz", - "integrity": "sha512-eutDO/RH6pf7+8zHo3i2GKLhF0qaMtxWpY8k3Oa1k+CyrcJ0IxwkfH/x3f75jTMeCrThn6Uu8j3WeZOxvhto1Q==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.5.tgz", + "integrity": "sha512-VOPWbO5EFr6snla/WcxUKtvzGVShfs302TEMOtzYyWni6f9zuOetijJvVh9CCTzInnXAZMtHyNhefijA4HMYLg==", "cpu": [ "arm64" ], @@ -1685,9 +1686,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.3.tgz", - "integrity": "sha512-lve+lnTiddXbcT3Lh2ujOFywQSEycTYQhuf6j6JrPu9oLQGS01kjIqqSj3/KMmSoppEnXo3BxkgYu+g2+ecHkA==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.5.tgz", + "integrity": "sha512-5o8bTCgAmtYOgauO/Xd27vW52G2/m3i5PX7MUYePquxXAnX73AAtqA3WgPXBRitEB60plSKZgOTkcpqrsh546A==", "cpu": [ "x64" ], @@ -1700,9 +1701,9 @@ } }, "node_modules/@next/swc-freebsd-x64": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.3.tgz", - "integrity": "sha512-V4bZU1qBFkULTPW53phY8ypioh3EERzHu9YKAasm9RxU4dj+8c/4s60y+kbFkFEEpIUgEU6yNuYZRR4lHHbUGA==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.5.tgz", + "integrity": "sha512-yYUbyup1JnznMtEBRkK4LT56N0lfK5qNTzr6/DEyDw5TbFVwnuy2hhLBzwCBkScFVjpFdfiC6SQAX3FrAZzuuw==", "cpu": [ "x64" ], @@ -1715,9 +1716,9 @@ } }, "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.3.tgz", - "integrity": "sha512-MWxS/i+XSEKdQE0ZmdYkPPrWKBi4JwMVaXdOW9J/T/sZJsHsLlSC9ErBcNolKAJEVka+tnw9oPRyRCKOj+q0sw==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.5.tgz", + "integrity": "sha512-2ZE2/G921Acks7UopJZVMgKLdm4vN4U0yuzvAMJ6KBavPzqESA2yHJlm85TV/K9gIjKhSk5BVtauIUntFRP8cg==", "cpu": [ "arm" ], @@ -1730,9 +1731,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.3.tgz", - "integrity": "sha512-ikXkqAmvEcWTzIQFDdmrUHLWzdDAF5s2pVsSpQn9rk/gK1i9webH1GRQd2bSM7JLuPBZSaYrNGvDTyHZdSEYlg==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.5.tgz", + "integrity": "sha512-/I6+PWVlz2wkTdWqhlSYYJ1pWWgUVva6SgX353oqTh8njNQp1SdFQuWDqk8LnM6ulheVfSsgkDzxrDaAQZnzjQ==", "cpu": [ "arm64" ], @@ -1745,9 +1746,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.3.tgz", - "integrity": "sha512-wE45gGFkeLLLnCoveKaBrdpYkkypl3qwNF2YhnfvfVK7etuu1O679LwClhCWinDVBr+KOkmyHok00Z+0uI1ycg==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.5.tgz", + "integrity": "sha512-LPQRelfX6asXyVr59p5sTpx5l+0yh2Vjp/R8Wi4X9pnqcayqT4CUJLiHqCvZuLin3IsFdisJL0rKHMoaZLRfmg==", "cpu": [ "arm64" ], @@ -1760,9 +1761,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.3.tgz", - "integrity": "sha512-MbFI6413VSXiREzHwYD8YAJLTknBaC+bmjXgdHEEdloeOuBFQGE3NWn3izOCTy8kV+s98VDQO8au7EKKs+bW0g==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.5.tgz", + "integrity": "sha512-0szyAo8jMCClkjNK0hknjhmAngUppoRekW6OAezbEYwHXN/VNtsXbfzgYOqjKWxEx3OoAzrT3jLwAF0HdX2MEw==", "cpu": [ "x64" ], @@ -1775,9 +1776,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.3.tgz", - "integrity": "sha512-jMBD0Va6fInbPih/dNySlNY2RpjkK6MXS+UGVEvuTswl1MZr+iahvurmshwGKpjaRwVU4DSFMD8+gfWxsTFs1Q==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.5.tgz", + "integrity": "sha512-zg/Y6oBar1yVnW6Il1I/08/2ukWtOG6s3acdJdEyIdsCzyQi4RLxbbhkD/EGQyhqBvd3QrC6ZXQEXighQUAZ0g==", "cpu": [ "x64" ], @@ -1790,9 +1791,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.3.tgz", - "integrity": "sha512-Cq8ToPdc0jQP2C7pjChYctAsEe7+lO/B826ZCK5xFzobuHPiCyJ2Mzx/nEQwCY4SpYkeJQtCbwlCz5iyGW5zGg==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.5.tgz", + "integrity": "sha512-3/90DRNSqeeSRMMEhj4gHHQlLhhKg5SCCoYfE3kBjGpE63EfnblYUqsszGGZ9ekpKL/R4/SGB40iCQr8tR5Jiw==", "cpu": [ "arm64" ], @@ -1805,9 +1806,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.3.tgz", - "integrity": "sha512-BtFq4c8IpeB0sDhJMHJFgm86rPkOvmYI8k3De8Y2kgNVWSeLQ0Q929PWf7e+GqcX1015ei/gEB41ZH8Iw49NzA==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.5.tgz", + "integrity": "sha512-hGLc0ZRAwnaPL4ulwpp4D2RxmkHQLuI8CFOEEHdzZpS63/hMVzv81g8jzYA0UXbb9pus/iTc3VRbVbAM03SRrw==", "cpu": [ "ia32" ], @@ -1820,9 +1821,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.3.tgz", - "integrity": "sha512-huSNb98KSG77Kl96CoPgCwom28aamuUsPpRmn/4s9L0RNbbHVSkp9E6HA4yOAykZCEuWcdNsRLbVVuAbt8rtIw==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.5.tgz", + "integrity": "sha512-7h5/ahY7NeaO2xygqVrSG/Y8Vs4cdjxIjowTZ5W6CKoTKn7tmnuxlUc2h74x06FKmbhAd9agOjr/AOKyxYYm9Q==", "cpu": [ "x64" ], @@ -3219,6 +3220,17 @@ "reusify": "^1.0.4" } }, + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -4094,15 +4106,15 @@ "dev": true }, "node_modules/next": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/next/-/next-12.2.3.tgz", - "integrity": "sha512-TA0tmSA6Dk6S6kfvCNbF7CWYW8468gZUxr/3/30z4KvAQbXnl2ASYZElVe7q/hBW/1F1ee0tSBlHa4/sn+ZIBw==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/next/-/next-12.2.5.tgz", + "integrity": "sha512-tBdjqX5XC/oFs/6gxrZhjmiq90YWizUYU6qOWAfat7zJwrwapJ+BYgX2PmiacunXMaRpeVT4vz5MSPSLgNkrpA==", "dependencies": { - "@next/env": "12.2.3", + "@next/env": "12.2.5", "@swc/helpers": "0.4.3", "caniuse-lite": "^1.0.30001332", "postcss": "8.4.14", - "styled-jsx": "5.0.2", + "styled-jsx": "5.0.4", "use-sync-external-store": "1.2.0" }, "bin": { @@ -4112,19 +4124,19 @@ "node": ">=12.22.0" }, "optionalDependencies": { - "@next/swc-android-arm-eabi": "12.2.3", - "@next/swc-android-arm64": "12.2.3", - "@next/swc-darwin-arm64": "12.2.3", - "@next/swc-darwin-x64": "12.2.3", - "@next/swc-freebsd-x64": "12.2.3", - "@next/swc-linux-arm-gnueabihf": "12.2.3", - "@next/swc-linux-arm64-gnu": "12.2.3", - "@next/swc-linux-arm64-musl": "12.2.3", - "@next/swc-linux-x64-gnu": "12.2.3", - "@next/swc-linux-x64-musl": "12.2.3", - "@next/swc-win32-arm64-msvc": "12.2.3", - "@next/swc-win32-ia32-msvc": "12.2.3", - "@next/swc-win32-x64-msvc": "12.2.3" + "@next/swc-android-arm-eabi": "12.2.5", + "@next/swc-android-arm64": "12.2.5", + "@next/swc-darwin-arm64": "12.2.5", + "@next/swc-darwin-x64": "12.2.5", + "@next/swc-freebsd-x64": "12.2.5", + "@next/swc-linux-arm-gnueabihf": "12.2.5", + "@next/swc-linux-arm64-gnu": "12.2.5", + "@next/swc-linux-arm64-musl": "12.2.5", + "@next/swc-linux-x64-gnu": "12.2.5", + "@next/swc-linux-x64-musl": "12.2.5", + "@next/swc-win32-arm64-msvc": "12.2.5", + "@next/swc-win32-ia32-msvc": "12.2.5", + "@next/swc-win32-x64-msvc": "12.2.5" }, "peerDependencies": { "fibers": ">= 3.1.0", @@ -4771,6 +4783,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -4944,9 +4961,9 @@ } }, "node_modules/styled-jsx": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz", - "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.4.tgz", + "integrity": "sha512-sDFWLbg4zR+UkNzfk5lPilyIgtpddfxXEULxhujorr5jtePTUqiPDc5BC0v1NRqTr/WaFBGQQUoYToGlF4B2KQ==", "engines": { "node": ">= 12.0.0" }, @@ -5251,6 +5268,17 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -6492,9 +6520,9 @@ } }, "@next/env": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.3.tgz", - "integrity": "sha512-2lWKP5Xcvnor70NaaROZXBvU8z9mFReePCG8NhZw6NyNGnPvC+8s+Cre/63LAB1LKzWw/e9bZJnQUg0gYFRb2Q==" + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.5.tgz", + "integrity": "sha512-vLPLV3cpPGjUPT3PjgRj7e3nio9t6USkuew3JE/jMeon/9Mvp1WyR18v3iwnCuX7eUAm1HmAbJHHLAbcu/EJcw==" }, "@next/eslint-plugin-next": { "version": "12.2.3", @@ -6506,81 +6534,81 @@ } }, "@next/swc-android-arm-eabi": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.3.tgz", - "integrity": "sha512-JxmCW9XB5PYnkGE67BdnBTdqW0SW6oMCiPMHLdjeRi4T3U4JJKJGnjQld99+6TPOfPWigtw3W7Cijp5gc+vJ/w==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.5.tgz", + "integrity": "sha512-cPWClKxGhgn2dLWnspW+7psl3MoLQUcNqJqOHk2BhNcou9ARDtC0IjQkKe5qcn9qg7I7U83Gp1yh2aesZfZJMA==", "optional": true }, "@next/swc-android-arm64": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.3.tgz", - "integrity": "sha512-3l4zXpWnzy0fqoedsFRxzMy/eGlMMqn6IwPEuBmtEQ4h7srmQFHyT+Bk+eVHb0o1RQ7/TloAa+mu8JX5tz/5tA==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.5.tgz", + "integrity": "sha512-vMj0efliXmC5b7p+wfcQCX0AfU8IypjkzT64GiKJD9PgiA3IILNiGJr1fw2lyUDHkjeWx/5HMlMEpLnTsQslwg==", "optional": true }, "@next/swc-darwin-arm64": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.3.tgz", - "integrity": "sha512-eutDO/RH6pf7+8zHo3i2GKLhF0qaMtxWpY8k3Oa1k+CyrcJ0IxwkfH/x3f75jTMeCrThn6Uu8j3WeZOxvhto1Q==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.5.tgz", + "integrity": "sha512-VOPWbO5EFr6snla/WcxUKtvzGVShfs302TEMOtzYyWni6f9zuOetijJvVh9CCTzInnXAZMtHyNhefijA4HMYLg==", "optional": true }, "@next/swc-darwin-x64": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.3.tgz", - "integrity": "sha512-lve+lnTiddXbcT3Lh2ujOFywQSEycTYQhuf6j6JrPu9oLQGS01kjIqqSj3/KMmSoppEnXo3BxkgYu+g2+ecHkA==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.5.tgz", + "integrity": "sha512-5o8bTCgAmtYOgauO/Xd27vW52G2/m3i5PX7MUYePquxXAnX73AAtqA3WgPXBRitEB60plSKZgOTkcpqrsh546A==", "optional": true }, "@next/swc-freebsd-x64": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.3.tgz", - "integrity": "sha512-V4bZU1qBFkULTPW53phY8ypioh3EERzHu9YKAasm9RxU4dj+8c/4s60y+kbFkFEEpIUgEU6yNuYZRR4lHHbUGA==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.5.tgz", + "integrity": "sha512-yYUbyup1JnznMtEBRkK4LT56N0lfK5qNTzr6/DEyDw5TbFVwnuy2hhLBzwCBkScFVjpFdfiC6SQAX3FrAZzuuw==", "optional": true }, "@next/swc-linux-arm-gnueabihf": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.3.tgz", - "integrity": "sha512-MWxS/i+XSEKdQE0ZmdYkPPrWKBi4JwMVaXdOW9J/T/sZJsHsLlSC9ErBcNolKAJEVka+tnw9oPRyRCKOj+q0sw==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.5.tgz", + "integrity": "sha512-2ZE2/G921Acks7UopJZVMgKLdm4vN4U0yuzvAMJ6KBavPzqESA2yHJlm85TV/K9gIjKhSk5BVtauIUntFRP8cg==", "optional": true }, "@next/swc-linux-arm64-gnu": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.3.tgz", - "integrity": "sha512-ikXkqAmvEcWTzIQFDdmrUHLWzdDAF5s2pVsSpQn9rk/gK1i9webH1GRQd2bSM7JLuPBZSaYrNGvDTyHZdSEYlg==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.5.tgz", + "integrity": "sha512-/I6+PWVlz2wkTdWqhlSYYJ1pWWgUVva6SgX353oqTh8njNQp1SdFQuWDqk8LnM6ulheVfSsgkDzxrDaAQZnzjQ==", "optional": true }, "@next/swc-linux-arm64-musl": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.3.tgz", - "integrity": "sha512-wE45gGFkeLLLnCoveKaBrdpYkkypl3qwNF2YhnfvfVK7etuu1O679LwClhCWinDVBr+KOkmyHok00Z+0uI1ycg==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.5.tgz", + "integrity": "sha512-LPQRelfX6asXyVr59p5sTpx5l+0yh2Vjp/R8Wi4X9pnqcayqT4CUJLiHqCvZuLin3IsFdisJL0rKHMoaZLRfmg==", "optional": true }, "@next/swc-linux-x64-gnu": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.3.tgz", - "integrity": "sha512-MbFI6413VSXiREzHwYD8YAJLTknBaC+bmjXgdHEEdloeOuBFQGE3NWn3izOCTy8kV+s98VDQO8au7EKKs+bW0g==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.5.tgz", + "integrity": "sha512-0szyAo8jMCClkjNK0hknjhmAngUppoRekW6OAezbEYwHXN/VNtsXbfzgYOqjKWxEx3OoAzrT3jLwAF0HdX2MEw==", "optional": true }, "@next/swc-linux-x64-musl": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.3.tgz", - "integrity": "sha512-jMBD0Va6fInbPih/dNySlNY2RpjkK6MXS+UGVEvuTswl1MZr+iahvurmshwGKpjaRwVU4DSFMD8+gfWxsTFs1Q==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.5.tgz", + "integrity": "sha512-zg/Y6oBar1yVnW6Il1I/08/2ukWtOG6s3acdJdEyIdsCzyQi4RLxbbhkD/EGQyhqBvd3QrC6ZXQEXighQUAZ0g==", "optional": true }, "@next/swc-win32-arm64-msvc": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.3.tgz", - "integrity": "sha512-Cq8ToPdc0jQP2C7pjChYctAsEe7+lO/B826ZCK5xFzobuHPiCyJ2Mzx/nEQwCY4SpYkeJQtCbwlCz5iyGW5zGg==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.5.tgz", + "integrity": "sha512-3/90DRNSqeeSRMMEhj4gHHQlLhhKg5SCCoYfE3kBjGpE63EfnblYUqsszGGZ9ekpKL/R4/SGB40iCQr8tR5Jiw==", "optional": true }, "@next/swc-win32-ia32-msvc": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.3.tgz", - "integrity": "sha512-BtFq4c8IpeB0sDhJMHJFgm86rPkOvmYI8k3De8Y2kgNVWSeLQ0Q929PWf7e+GqcX1015ei/gEB41ZH8Iw49NzA==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.5.tgz", + "integrity": "sha512-hGLc0ZRAwnaPL4ulwpp4D2RxmkHQLuI8CFOEEHdzZpS63/hMVzv81g8jzYA0UXbb9pus/iTc3VRbVbAM03SRrw==", "optional": true }, "@next/swc-win32-x64-msvc": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.3.tgz", - "integrity": "sha512-huSNb98KSG77Kl96CoPgCwom28aamuUsPpRmn/4s9L0RNbbHVSkp9E6HA4yOAykZCEuWcdNsRLbVVuAbt8rtIw==", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.5.tgz", + "integrity": "sha512-7h5/ahY7NeaO2xygqVrSG/Y8Vs4cdjxIjowTZ5W6CKoTKn7tmnuxlUc2h74x06FKmbhAd9agOjr/AOKyxYYm9Q==", "optional": true }, "@nodelib/fs.scandir": { @@ -7623,6 +7651,14 @@ "reusify": "^1.0.4" } }, + "feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "requires": { + "xml-js": "^1.6.11" + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -8271,28 +8307,28 @@ "dev": true }, "next": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/next/-/next-12.2.3.tgz", - "integrity": "sha512-TA0tmSA6Dk6S6kfvCNbF7CWYW8468gZUxr/3/30z4KvAQbXnl2ASYZElVe7q/hBW/1F1ee0tSBlHa4/sn+ZIBw==", - "requires": { - "@next/env": "12.2.3", - "@next/swc-android-arm-eabi": "12.2.3", - "@next/swc-android-arm64": "12.2.3", - "@next/swc-darwin-arm64": "12.2.3", - "@next/swc-darwin-x64": "12.2.3", - "@next/swc-freebsd-x64": "12.2.3", - "@next/swc-linux-arm-gnueabihf": "12.2.3", - "@next/swc-linux-arm64-gnu": "12.2.3", - "@next/swc-linux-arm64-musl": "12.2.3", - "@next/swc-linux-x64-gnu": "12.2.3", - "@next/swc-linux-x64-musl": "12.2.3", - "@next/swc-win32-arm64-msvc": "12.2.3", - "@next/swc-win32-ia32-msvc": "12.2.3", - "@next/swc-win32-x64-msvc": "12.2.3", + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/next/-/next-12.2.5.tgz", + "integrity": "sha512-tBdjqX5XC/oFs/6gxrZhjmiq90YWizUYU6qOWAfat7zJwrwapJ+BYgX2PmiacunXMaRpeVT4vz5MSPSLgNkrpA==", + "requires": { + "@next/env": "12.2.5", + "@next/swc-android-arm-eabi": "12.2.5", + "@next/swc-android-arm64": "12.2.5", + "@next/swc-darwin-arm64": "12.2.5", + "@next/swc-darwin-x64": "12.2.5", + "@next/swc-freebsd-x64": "12.2.5", + "@next/swc-linux-arm-gnueabihf": "12.2.5", + "@next/swc-linux-arm64-gnu": "12.2.5", + "@next/swc-linux-arm64-musl": "12.2.5", + "@next/swc-linux-x64-gnu": "12.2.5", + "@next/swc-linux-x64-musl": "12.2.5", + "@next/swc-win32-arm64-msvc": "12.2.5", + "@next/swc-win32-ia32-msvc": "12.2.5", + "@next/swc-win32-x64-msvc": "12.2.5", "@swc/helpers": "0.4.3", "caniuse-lite": "^1.0.30001332", "postcss": "8.4.14", - "styled-jsx": "5.0.2", + "styled-jsx": "5.0.4", "use-sync-external-store": "1.2.0" } }, @@ -8709,6 +8745,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", @@ -8837,9 +8878,9 @@ } }, "styled-jsx": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz", - "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.4.tgz", + "integrity": "sha512-sDFWLbg4zR+UkNzfk5lPilyIgtpddfxXEULxhujorr5jtePTUqiPDc5BC0v1NRqTr/WaFBGQQUoYToGlF4B2KQ==", "requires": {} }, "stylis": { @@ -9039,6 +9080,14 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "requires": { + "sax": "^1.2.4" + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index a89aef3f..3156103d 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,9 @@ "@emotion/styled": "^11.10.0", "@fontsource/lato": "^4.5.9", "@fontsource/open-sans": "^4.5.11", + "feed": "^4.2.2", "framer-motion": "^7.0.0", - "next": "12.2.3", + "next": "^12.2.5", "react": "18.2.0", "react-dom": "18.2.0", "react-icons": "^4.4.0" diff --git a/pages/_document.tsx b/pages/_document.tsx index ef9fcd3b..ca81402c 100644 --- a/pages/_document.tsx +++ b/pages/_document.tsx @@ -6,6 +6,10 @@ export default function Document() { return ( <Html lang="en"> <Head /> + <title>Michał Sapka's website</title> + <link rel="alternate" type="application/rss+xml" href="https://michal.sapka.me/rss/feed.xml" title="Recent publications RSS Feed" /> + <link rel="alternate" type="application/feed+json" href="https://michal.sapka.me/rss/feed.json" title="Recent publications RSS Feed" /> + <link rel="alternate" type="application/atom+xml" href="https://michal.sapka.me/rss/atom.xml" title="Recent publications RSS Feed" /> <body> <ColorModeScript initialColorMode={theme.config.initialColorMode} /> <Main /> diff --git a/pages/index.tsx b/pages/index.tsx index 4477d0b0..2e733685 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,8 +1,5 @@ import type { NextPage } from 'next' -import Head from 'next/head' -import Image from 'next/image' import Layout from '../components/layout' -import styles from '../styles/Home.module.css' import { VStack, HStack, @@ -17,6 +14,7 @@ import { } from '@chakra-ui/react' import { AiFillGithub,AiFillMediumCircle} from "react-icons/ai"; import Publications from "../data/publications" +import generateRssFeed from "../lib/feed" type BioEntryType = { date: string, @@ -71,7 +69,7 @@ const Home: NextPage = () => { <VStack spacing="1" alignItems="start"> {Publications.map((value, key) => { return <Box key={key}> - <Link href={value.url} isExternal>{value.name}</Link> + <Link href={value.url} isExternal>{value.title}</Link> </Box> })} @@ -103,4 +101,9 @@ const Home: NextPage = () => { ) } +export const getStaticProps = async (context : any) => { + await generateRssFeed(); + return { props: {} }; +}; + export default Home diff --git a/public/rss/atom.xml b/public/rss/atom.xml new file mode 100644 index 00000000..75ad28b3 --- /dev/null +++ b/public/rss/atom.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="utf-8"?> +<feed xmlns="http://www.w3.org/2005/Atom"> + <id>https://michal.sapka.pl</id> + <title>Michał's publications</title> + <updated>2022-09-05T20:50:45.878Z</updated> + <generator>Feed for Node.js</generator> + <author> + <name>Michał M. Sapka</name> + <email>michal@sapka.pl</email> + <uri>https://michal.sapka.pl</uri> + </author> + <link rel="alternate" href="https://michal.sapka.pl"/> + <link rel="self" href="https://michal.sapka.pl/rss/atom.xml"/> + <subtitle>Michał Sapka's recent publications</subtitle> + <rights>All rights reserved 2022, Michał M. Sapka</rights> + <entry> + <title type="html"><![CDATA[Buffers, splits and tabs in Vim]]></title> + <id>https://medium.com/@msapka/buffers-splits-and-tabs-in-vim-5bb3b6dc1c19</id> + <link href="https://medium.com/@msapka/buffers-splits-and-tabs-in-vim-5bb3b6dc1c19"/> + <updated>2022-08-17T22:00:00.000Z</updated> + <author> + <name>Michał M. Sapka</name> + <email>michal@sapka.pl</email> + <uri>https://michal.sapka.pl</uri> + </author> + <contributor> + <name>Michał M. Sapka</name> + <email>michal@sapka.pl</email> + <uri>https://michal.sapka.pl</uri> + </contributor> + </entry> + <entry> + <title type="html"><![CDATA[A month with a disgusting ThinkPad]]></title> + <id>https://medium.com/@msapka/a-month-with-a-disgusting-thinkpad-936e7c675a74</id> + <link href="https://medium.com/@msapka/a-month-with-a-disgusting-thinkpad-936e7c675a74"/> + <updated>2022-08-07T22:00:00.000Z</updated> + <author> + <name>Michał M. Sapka</name> + <email>michal@sapka.pl</email> + <uri>https://michal.sapka.pl</uri> + </author> + <contributor> + <name>Michał M. Sapka</name> + <email>michal@sapka.pl</email> + <uri>https://michal.sapka.pl</uri> + </contributor> + </entry> + <entry> + <title type="html"><![CDATA[Managing dotfiles with GNU Stow]]></title> + <id>https://medium.com/@msapka/managing-dotfiles-with-gnu-stow-72b4e3bb9434</id> + <link href="https://medium.com/@msapka/managing-dotfiles-with-gnu-stow-72b4e3bb9434"/> + <updated>2022-08-04T22:00:00.000Z</updated> + <author> + <name>Michał M. Sapka</name> + <email>michal@sapka.pl</email> + <uri>https://michal.sapka.pl</uri> + </author> + <contributor> + <name>Michał M. Sapka</name> + <email>michal@sapka.pl</email> + <uri>https://michal.sapka.pl</uri> + </contributor> + </entry> + <entry> + <title type="html"><![CDATA[Adding dynamic DNS to my home server]]></title> + <id>https://medium.com/@msapka/adding-dynamic-dns-to-my-home-server-d05bf65358cc</id> + <link href="https://medium.com/@msapka/adding-dynamic-dns-to-my-home-server-d05bf65358cc"/> + <updated>2022-08-03T22:00:00.000Z</updated> + <author> + <name>Michał M. Sapka</name> + <email>michal@sapka.pl</email> + <uri>https://michal.sapka.pl</uri> + </author> + <contributor> + <name>Michał M. Sapka</name> + <email>michal@sapka.pl</email> + <uri>https://michal.sapka.pl</uri> + </contributor> + </entry> +</feed>
\ No newline at end of file diff --git a/public/rss/feed.json b/public/rss/feed.json new file mode 100644 index 00000000..81429569 --- /dev/null +++ b/public/rss/feed.json @@ -0,0 +1,57 @@ +{ + "version": "https://jsonfeed.org/version/1", + "title": "Michał's publications", + "home_page_url": "https://michal.sapka.pl", + "feed_url": "https://michal.sapka.pl/rss/feed.json", + "description": "Michał Sapka's recent publications", + "author": { + "name": "Michał M. Sapka", + "url": "https://michal.sapka.pl" + }, + "items": [ + { + "id": "https://medium.com/@msapka/buffers-splits-and-tabs-in-vim-5bb3b6dc1c19", + "content_html": "", + "url": "https://medium.com/@msapka/buffers-splits-and-tabs-in-vim-5bb3b6dc1c19", + "title": "Buffers, splits and tabs in Vim", + "date_modified": "2022-08-17T22:00:00.000Z", + "author": { + "name": "Michał M. Sapka", + "url": "https://michal.sapka.pl" + } + }, + { + "id": "https://medium.com/@msapka/a-month-with-a-disgusting-thinkpad-936e7c675a74", + "content_html": "", + "url": "https://medium.com/@msapka/a-month-with-a-disgusting-thinkpad-936e7c675a74", + "title": "A month with a disgusting ThinkPad", + "date_modified": "2022-08-07T22:00:00.000Z", + "author": { + "name": "Michał M. Sapka", + "url": "https://michal.sapka.pl" + } + }, + { + "id": "https://medium.com/@msapka/managing-dotfiles-with-gnu-stow-72b4e3bb9434", + "content_html": "", + "url": "https://medium.com/@msapka/managing-dotfiles-with-gnu-stow-72b4e3bb9434", + "title": "Managing dotfiles with GNU Stow", + "date_modified": "2022-08-04T22:00:00.000Z", + "author": { + "name": "Michał M. Sapka", + "url": "https://michal.sapka.pl" + } + }, + { + "id": "https://medium.com/@msapka/adding-dynamic-dns-to-my-home-server-d05bf65358cc", + "content_html": "", + "url": "https://medium.com/@msapka/adding-dynamic-dns-to-my-home-server-d05bf65358cc", + "title": "Adding dynamic DNS to my home server", + "date_modified": "2022-08-03T22:00:00.000Z", + "author": { + "name": "Michał M. Sapka", + "url": "https://michal.sapka.pl" + } + } + ] +}
\ No newline at end of file diff --git a/public/rss/feed.xml b/public/rss/feed.xml new file mode 100644 index 00000000..4cdc9f3c --- /dev/null +++ b/public/rss/feed.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<rss version="2.0"> + <channel> + <title>Michał's publications</title> + <link>https://michal.sapka.pl</link> + <description>Michał Sapka's recent publications</description> + <lastBuildDate>Mon, 05 Sep 2022 20:50:45 GMT</lastBuildDate> + <docs>https://validator.w3.org/feed/docs/rss2.html</docs> + <generator>Feed for Node.js</generator> + <copyright>All rights reserved 2022, Michał M. Sapka</copyright> + <item> + <title><![CDATA[Buffers, splits and tabs in Vim]]></title> + <link>https://medium.com/@msapka/buffers-splits-and-tabs-in-vim-5bb3b6dc1c19</link> + <guid>https://medium.com/@msapka/buffers-splits-and-tabs-in-vim-5bb3b6dc1c19</guid> + <pubDate>Wed, 17 Aug 2022 22:00:00 GMT</pubDate> + <author>michal@sapka.pl (Michał M. Sapka)</author> + </item> + <item> + <title><![CDATA[A month with a disgusting ThinkPad]]></title> + <link>https://medium.com/@msapka/a-month-with-a-disgusting-thinkpad-936e7c675a74</link> + <guid>https://medium.com/@msapka/a-month-with-a-disgusting-thinkpad-936e7c675a74</guid> + <pubDate>Sun, 07 Aug 2022 22:00:00 GMT</pubDate> + <author>michal@sapka.pl (Michał M. Sapka)</author> + </item> + <item> + <title><![CDATA[Managing dotfiles with GNU Stow]]></title> + <link>https://medium.com/@msapka/managing-dotfiles-with-gnu-stow-72b4e3bb9434</link> + <guid>https://medium.com/@msapka/managing-dotfiles-with-gnu-stow-72b4e3bb9434</guid> + <pubDate>Thu, 04 Aug 2022 22:00:00 GMT</pubDate> + <author>michal@sapka.pl (Michał M. Sapka)</author> + </item> + <item> + <title><![CDATA[Adding dynamic DNS to my home server]]></title> + <link>https://medium.com/@msapka/adding-dynamic-dns-to-my-home-server-d05bf65358cc</link> + <guid>https://medium.com/@msapka/adding-dynamic-dns-to-my-home-server-d05bf65358cc</guid> + <pubDate>Wed, 03 Aug 2022 22:00:00 GMT</pubDate> + <author>michal@sapka.pl (Michał M. Sapka)</author> + </item> + </channel> +</rss>
\ No newline at end of file |