this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: add a rss feed

+102 -1
+3 -1
package.json
··· 20 20 "prettier": "^3.8.1", 21 21 "sass": "^1.97.3", 22 22 "typescript": "^5.9.3", 23 + "url": "^0.11.4", 23 24 "vitest": "^4.0.18", 24 25 "vue": "^3.5.29", 25 26 "vue-tsc": "^3.2.5" 26 27 }, 27 28 "dependencies": { 28 29 "@atproto/api": "^0.19.0", 30 + "@islands/feed": "^0.10.0", 29 31 "chart.xkcd": "^1.1.15", 30 32 "marked": "^17.0.3", 31 33 "md4x": "^0.0.25", 32 34 "nanoid": "^5.1.6", 33 35 "pinia": "^3.0.4" 34 36 }, 35 - "packageManager": "pnpm@10.32.1" 37 + "packageManager": "pnpm@10.33.2" 36 38 }
+63
pnpm-lock.yaml
··· 11 11 '@atproto/api': 12 12 specifier: ^0.19.0 13 13 version: 0.19.0 14 + '@islands/feed': 15 + specifier: ^0.10.0 16 + version: 0.10.0(iles@0.10.0-beta.1(@babel/parser@7.29.0)(@types/node@24.10.1)(rollup@2.79.2)(sass@1.97.3)(terser@5.44.1)(typescript@5.9.3))(vue@3.5.29(typescript@5.9.3)) 14 17 chart.xkcd: 15 18 specifier: ^1.1.15 16 19 version: 1.1.15 ··· 51 54 typescript: 52 55 specifier: ^5.9.3 53 56 version: 5.9.3 57 + url: 58 + specifier: ^0.11.4 59 + version: 0.11.4 54 60 vitest: 55 61 specifier: ^4.0.18 56 62 version: 4.0.18(@types/node@24.10.1)(sass@1.97.3)(terser@5.44.1) ··· 893 899 engines: {node: '>=18'} 894 900 cpu: [x64] 895 901 os: [win32] 902 + 903 + '@islands/feed@0.10.0': 904 + resolution: {integrity: sha512-EiHNnzglDVdDwVoseW+c4dSOg9ENalcLvxHOdACL7iHkw0mF2oIEnJv+3zs5/qplJ8agXbYymUjvTHlzUuxh8A==} 905 + peerDependencies: 906 + iles: 0.10.0 907 + vue: ^3.5.12 896 908 897 909 '@islands/headings@0.10.0-beta.1': 898 910 resolution: {integrity: sha512-eEgbjOovUWyqbcXb+Qu5FmpO8WCvKzfMaxiXtV/zsc7PaC+oVFpxbfaW6IcRfAFibzYXgHyG1+dqDYWkDkLb1Q==} ··· 1800 1812 peerDependenciesMeta: 1801 1813 picomatch: 1802 1814 optional: true 1815 + 1816 + feed@4.2.2: 1817 + resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} 1818 + engines: {node: '>=0.4.0'} 1803 1819 1804 1820 filelist@1.0.4: 1805 1821 resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} ··· 2506 2522 property-information@7.1.0: 2507 2523 resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} 2508 2524 2525 + punycode@1.4.1: 2526 + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} 2527 + 2509 2528 punycode@2.3.1: 2510 2529 resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 2511 2530 engines: {node: '>=6'} 2531 + 2532 + qs@6.15.1: 2533 + resolution: {integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==} 2534 + engines: {node: '>=0.6'} 2512 2535 2513 2536 queue-microtask@1.2.3: 2514 2537 resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} ··· 2617 2640 engines: {node: '>=14.0.0'} 2618 2641 hasBin: true 2619 2642 2643 + sax@1.6.0: 2644 + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} 2645 + engines: {node: '>=11.0.0'} 2646 + 2620 2647 section-matter@1.0.0: 2621 2648 resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} 2622 2649 engines: {node: '>=4'} ··· 2932 2959 peerDependencies: 2933 2960 browserslist: '>= 4.21.0' 2934 2961 2962 + url@0.11.4: 2963 + resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} 2964 + engines: {node: '>= 0.4'} 2965 + 2935 2966 vfile-message@4.0.3: 2936 2967 resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} 2937 2968 ··· 3166 3197 wrappy@1.0.2: 3167 3198 resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3168 3199 3200 + xml-js@1.6.11: 3201 + resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} 3202 + hasBin: true 3203 + 3169 3204 yallist@3.1.1: 3170 3205 resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 3171 3206 ··· 4050 4085 '@esbuild/win32-x64@0.27.2': 4051 4086 optional: true 4052 4087 4088 + '@islands/feed@0.10.0(iles@0.10.0-beta.1(@babel/parser@7.29.0)(@types/node@24.10.1)(rollup@2.79.2)(sass@1.97.3)(terser@5.44.1)(typescript@5.9.3))(vue@3.5.29(typescript@5.9.3))': 4089 + dependencies: 4090 + feed: 4.2.2 4091 + iles: 0.10.0-beta.1(@babel/parser@7.29.0)(@types/node@24.10.1)(rollup@2.79.2)(sass@1.97.3)(terser@5.44.1)(typescript@5.9.3) 4092 + pathe: 1.1.2 4093 + vue: 3.5.29(typescript@5.9.3) 4094 + 4053 4095 '@islands/headings@0.10.0-beta.1': 4054 4096 dependencies: 4055 4097 hast-util-heading-rank: 3.0.0 ··· 5128 5170 optionalDependencies: 5129 5171 picomatch: 4.0.3 5130 5172 5173 + feed@4.2.2: 5174 + dependencies: 5175 + xml-js: 1.6.11 5176 + 5131 5177 filelist@1.0.4: 5132 5178 dependencies: 5133 5179 minimatch: 5.1.6 ··· 6084 6130 prismjs@1.30.0: {} 6085 6131 6086 6132 property-information@7.1.0: {} 6133 + 6134 + punycode@1.4.1: {} 6087 6135 6088 6136 punycode@2.3.1: {} 6089 6137 6138 + qs@6.15.1: 6139 + dependencies: 6140 + side-channel: 1.1.0 6141 + 6090 6142 queue-microtask@1.2.3: {} 6091 6143 6092 6144 randombytes@2.1.0: ··· 6257 6309 source-map-js: 1.2.1 6258 6310 optionalDependencies: 6259 6311 '@parcel/watcher': 2.5.1 6312 + 6313 + sax@1.6.0: {} 6260 6314 6261 6315 section-matter@1.0.0: 6262 6316 dependencies: ··· 6625 6679 escalade: 3.2.0 6626 6680 picocolors: 1.1.1 6627 6681 6682 + url@0.11.4: 6683 + dependencies: 6684 + punycode: 1.4.1 6685 + qs: 6.15.1 6686 + 6628 6687 vfile-message@4.0.3: 6629 6688 dependencies: 6630 6689 '@types/unist': 3.0.3 ··· 6905 6964 workbox-core: 6.6.0 6906 6965 6907 6966 wrappy@1.0.2: {} 6967 + 6968 + xml-js@1.6.11: 6969 + dependencies: 6970 + sax: 1.6.0 6908 6971 6909 6972 yallist@3.1.1: {} 6910 6973
+36
src/pages/feed.vue
··· 1 + <page> 2 + path: /feed.rss 3 + </page> 4 + 5 + <script setup lang="ts"> 6 + import RenderFeed from "@islands/feed" 7 + import type { FeedOptions, FeedItem } from "@islands/feed" 8 + import { fetchNotes } from "~/api/fetch-notes" 9 + 10 + const { site } = usePage() 11 + 12 + const url = site.url 13 + 14 + const options: FeedOptions = { 15 + title: "Apoena's distracted mind", 16 + description: "Where I write about what I read.", 17 + id: url, 18 + link: url, 19 + language: "en", 20 + image: "https://apoena.dev/pwa-512x512.png", 21 + copyright: "No copyright, just don't forget me", 22 + } 23 + 24 + const notes = await fetchNotes() 25 + 26 + const items = notes.map<FeedItem>((note) => ({ 27 + link: note.canonicalUrl, 28 + date: new Date(note.publishedAt), 29 + title: note.title, 30 + content: note, 31 + })) 32 + </script> 33 + 34 + <template> 35 + <RenderFeed format="feed" :options="options" :items="items" /> 36 + </template>