vowel 0.1.46 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +82 -20
  2. package/bin.js +2 -78
  3. package/docs-source/$features/cards.md +7 -0
  4. package/docs-source/$features/editing.md +7 -0
  5. package/docs-source/$features/emoji.md +7 -0
  6. package/docs-source/$features/frontmatter.md +7 -0
  7. package/docs-source/$features/lists.md +7 -0
  8. package/docs-source/$features/navigation.md +7 -0
  9. package/docs-source/$features/rich-previews.md +7 -0
  10. package/docs-source/$features/robots.md +7 -0
  11. package/docs-source/$features/rss.md +7 -0
  12. package/docs-source/$features/sitemap.md +7 -0
  13. package/docs-source/$features/speed.md +7 -0
  14. package/docs-source/$features/static.md +7 -0
  15. package/docs-source/$features/taxonomies.md +7 -0
  16. package/docs-source/.cache.json +9 -0
  17. package/docs-source/.obsidian/app.json +3 -0
  18. package/docs-source/.obsidian/appearance.json +3 -0
  19. package/docs-source/.obsidian/core-plugins-migration.json +30 -0
  20. package/docs-source/.obsidian/core-plugins.json +20 -0
  21. package/docs-source/.obsidian/workspace.json +168 -0
  22. package/docs-source/.stackblitzrc +3 -0
  23. package/docs-source/.vercel/README.txt +11 -0
  24. package/docs-source/.vercel/project.json +1 -0
  25. package/docs-source/about.md +3 -0
  26. package/docs-source/assets/styles.css +51 -0
  27. package/docs-source/blog/home.md +5 -0
  28. package/docs-source/blog/url-ui.md +21 -0
  29. package/docs-source/docs/.votive.db +0 -0
  30. package/docs-source/docs/deploy.md +67 -0
  31. package/docs-source/docs/file-structure.md +31 -0
  32. package/docs-source/docs/folder-settings.md +23 -0
  33. package/docs-source/docs/home.md +55 -0
  34. package/docs-source/docs/images.md +10 -0
  35. package/docs-source/docs/items.md +13 -0
  36. package/docs-source/docs/pages.md +141 -0
  37. package/docs-source/docs/settings.md +4 -0
  38. package/docs-source/docs/styling.md +34 -0
  39. package/docs-source/docs/taxonomies.md +37 -0
  40. package/docs-source/home.md +42 -0
  41. package/docs-source/roadmap.md +98 -0
  42. package/docs-source/settings.md +12 -0
  43. package/extractDate.js +83 -0
  44. package/getMetadata.js +41 -0
  45. package/index.js +669 -0
  46. package/jsconfig.json +9 -17
  47. package/package.json +61 -63
  48. package/regex.js +36 -0
  49. package/{src/lib/components → stylesheets}/DefaultStyles.css +5 -5
  50. package/utils.js +10 -0
  51. package/.cache.json +0 -1
  52. package/.prettierrc +0 -8
  53. package/.vscode/settings.json +0 -3
  54. package/CHANGELOG.md +0 -79
  55. package/server.js +0 -87
  56. package/src/app.d.ts +0 -12
  57. package/src/app.html +0 -13
  58. package/src/lib/components/Breadcrumbs.svelte +0 -19
  59. package/src/lib/components/ConditionalWrapper.svelte +0 -10
  60. package/src/lib/components/DefaultStyles.svelte +0 -11
  61. package/src/lib/components/FrontMatterTaxonomy.svelte +0 -48
  62. package/src/lib/components/Frontmatter.svelte +0 -56
  63. package/src/lib/components/FrontmatterProperty.svelte +0 -78
  64. package/src/lib/components/Markdown/Image.svelte +0 -50
  65. package/src/lib/components/Markdown/Link.svelte +0 -19
  66. package/src/lib/components/Markdown/LinkPreview.svelte +0 -45
  67. package/src/lib/components/Markdown/Text.svelte +0 -6
  68. package/src/lib/components/Markdown/index.svelte +0 -147
  69. package/src/lib/components/Markdown/validators.js +0 -29
  70. package/src/lib/components/Nav.svelte +0 -40
  71. package/src/lib/components/NoStyles.svelte +0 -5
  72. package/src/lib/components/Page.svelte +0 -90
  73. package/src/lib/components/ResetStyles.svelte +0 -7
  74. package/src/lib/components/Sitemap.svelte +0 -38
  75. package/src/lib/components/TypographyStyles.svelte +0 -10
  76. package/src/lib/components/index.js +0 -12
  77. package/src/lib/index.js +0 -1
  78. package/src/lib/utilities/buildURL.js +0 -18
  79. package/src/lib/utilities/checkFileExists.js +0 -16
  80. package/src/lib/utilities/createFolderClass.js +0 -4
  81. package/src/lib/utilities/createPageClass.js +0 -6
  82. package/src/lib/utilities/getFileLabel.js +0 -35
  83. package/src/lib/utilities/getFolder.js +0 -16
  84. package/src/lib/utilities/getFolderLabel.js +0 -12
  85. package/src/lib/utilities/getMetadata.js +0 -46
  86. package/src/lib/utilities/getPage.js +0 -25
  87. package/src/lib/utilities/getPagesByFolder.js +0 -95
  88. package/src/lib/utilities/index.js +0 -22
  89. package/src/lib/utilities/isActiveLink.js +0 -12
  90. package/src/lib/utilities/isObject.js +0 -8
  91. package/src/lib/utilities/loadCache.js +0 -28
  92. package/src/lib/utilities/mutateMarkdownAST.js +0 -68
  93. package/src/lib/utilities/mutateMarkdownFrontmatter.js +0 -113
  94. package/src/lib/utilities/parseDate.js +0 -43
  95. package/src/lib/utilities/processMarkdownFiles.js +0 -243
  96. package/src/lib/utilities/readMarkdownFile.js +0 -188
  97. package/src/lib/utilities/regexPatterns.js +0 -12
  98. package/src/lib/utilities/resolveHomeDirPath.js +0 -5
  99. package/src/lib/utilities/sendWebmention.js +0 -34
  100. package/src/lib/utilities/writeCache.js +0 -14
  101. package/src/routes/$vowel/published.json/+server.js +0 -54
  102. package/src/routes/+error.svelte +0 -110
  103. package/src/routes/[...path]/+layout.server.js +0 -78
  104. package/src/routes/[...path]/+page.server.js +0 -42
  105. package/src/routes/[...path]/+page.svelte +0 -186
  106. package/src/routes/feed.xml/+server.js +0 -120
  107. package/src/routes/robots.txt/+server.js +0 -54
  108. package/src/routes/sitemap.xml/+server.js +0 -68
  109. package/static/favicon.png +0 -0
  110. package/static/styles.css +0 -0
  111. package/svelte.config.js +0 -30
  112. package/vercel.json +0 -5
  113. package/vite.config.js +0 -84
  114. /package/{src/lib/components → stylesheets}/ResetStyles.css +0 -0
  115. /package/{src/lib/components → stylesheets}/TypographyStyles.css +0 -0
package/README.md CHANGED
@@ -1,29 +1,91 @@
1
1
  # Vowel
2
2
 
3
- [![npm version][npm-version-src]][npm-version-href]
4
- [![npm downloads][npm-downloads-src]][npm-downloads-href]
3
+ *Markdown websites in milliseconds*
5
4
 
6
- Vowel is the easiest way to code your own website.
5
+ ## Roadmap
7
6
 
8
- [Try it on StackBlitz](https://stackblitz.com/~/github.com/samlfair/vowel-site?file=home.md).
7
+ ### High priority
9
8
 
10
- Turn a folder of Markdown files into a website by running one command:
9
+ - [ ] robots.txt
10
+ - [ ] sitemap.xml
11
+ - [ ] 404.html
12
+ - [ ] TUI
13
+ - [ ] Create settings.md
14
+ - [ ] Site title
15
+ - [ ] Domain
16
+ - [ ] Webmentions
17
+ - [ ] Logo
18
+ - [ ] Wordmark
19
+ - [ ] Identity (rel=me)
20
+ - [ ] Filename breadcrumbs
21
+ - [ ] RSS
22
+ - [ ] Sitemap
23
+ - [ ] Create home.md
24
+ - [ ] Create folder settings files
25
+ - [ ] Title
26
+ - [ ] Breadcrumb
27
+ - [ ] Custom CSS
28
+ - [ ] Tags
29
+ - [ ] Customize index fallback
30
+ - [ ] Date format settings
31
+ - [ ] ::mark::
32
+ - [ ] Infer images
33
+ - [ ] Favicon
34
+ - [ ] Webmentions
35
+ - [ ] HTML boilerplate
36
+ - [ ] Page lists
37
+ - [ ] View transitions
38
+ - [ ] Logo
39
+ - [ ] Wordmark
40
+ - [ ] Sort nav items
41
+ - [ ] Canonical URL
42
+ - [ ] Handle external links
43
+ - [ ] Admonitions
44
+ - [ ] Use hgroup for site title, page title, etc
45
+ - [ ] Images as `<figure>`
46
+ - [ ] Hidden routes
47
+ - [ ] Frontmatter settings
48
+ - [ ] HTML
49
+ - [ ] RSS
50
+ - [ ] Sitemap
51
+ - [ ] Heading anchors
52
+ - [ ] Taxonomy pages and smart frontmatter
53
+ - [ ] CSS cache busting
54
+ - [ ] Slogan in homepage title
11
55
 
12
- ```
13
- npx vowel
14
- ```
56
+ ### Medium priority
15
57
 
16
- Create a blog, a documentation site, a landing page, a wiki (whatever you want), using just Markdown and CSS.
58
+ - [ ] Tests
59
+ - [ ] Break code into multiple files
60
+ - [ ] Image optimization (unpic)
61
+ - [ ] [SVG by mask](https://pqina.nl/blog/set-svg-background-image-fill-color/) and [CSS icons](https://antfu.me/posts/icons-in-pure-css)
62
+ - [ ] WYSIWYG editor
63
+ - [ ] Better signals
64
+ - [ ] File-written callback
65
+ - [ ] Themes
66
+ - [ ] Deploy
67
+ - [ ] Cloudflare pages
68
+ - [ ] GitHub pages
69
+ - [ ] Post-publish work (ping webmentions)
70
+ - [ ] [Desktop app](https://blackboard.sh/electrobun/docs/)
71
+ - [ ] Mermaid
72
+ - [ ] Codeblock syntax highlighting
73
+ - [ ] Extraction utilities (regex in archive)
74
+ - [ ] Smarter frontmatter
75
+ - [ ] Object dl
76
+ - [ ] Array ul
77
+ - [ ] Image
78
+ - [ ] URL
79
+ - [ ] Date
80
+ - [ ] TOC
81
+ - [ ] Versioning/publishing script
82
+ - [ ] Verify all element types form Obsidian
17
83
 
18
- No HTML.
84
+ ### Low priority
19
85
 
20
- No JavaScript.
21
-
22
- [Read the docs](https://vowel.cc/docs).
23
-
24
- For comments, questions, bugs, and contributions, please reach out to me on Twitter: [@samlfair](https://twitter.com/samlfair).
25
-
26
- [npm-version-src]: https://img.shields.io/npm/v/vowel/latest.svg
27
- [npm-version-href]: https://npmjs.com/package/vowel
28
- [npm-downloads-src]: https://img.shields.io/npm/dm/vowel.svg
29
- [npm-downloads-href]: https://npmjs.com/package/vowel
86
+ - [ ] Footnotes
87
+ - [ ] Frontmatter taxonomies
88
+ - [ ] Recursive frontmatter
89
+ - [ ] Browser search
90
+ - [ ] Pagination
91
+ - [ ] ATProto
package/bin.js CHANGED
@@ -1,81 +1,5 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { execSync, spawn } from 'child_process';
4
- import path from 'node:path';
5
- import url from 'node:url';
6
- import pc from 'picocolors';
7
- import mri from 'mri';
8
- import filterConsole from 'filter-console';
9
- import process from 'process';
10
- import readline from 'readline';
11
- import logUpdate from 'log-update';
3
+ import init from "./index.js"
12
4
 
13
- const args = mri(process.argv);
14
-
15
- // Directory where the module is
16
- const binURL = import.meta.url;
17
- const binFilePath = url.fileURLToPath(binURL);
18
- const binDirName = path.dirname(binFilePath);
19
-
20
- // Directory where the command was called
21
- const homeDir = process.cwd();
22
-
23
- const spawnArgs = ['./server.js', '--directory', homeDir];
24
- if (args._.includes('build')) spawnArgs.push('--build');
25
- if (args._.includes('publish')) {
26
- spawnArgs.push('--build')
27
- spawnArgs.push('--publish')
28
- };
29
-
30
- if (!args.verbose) {
31
- // filterConsole(['jsconfig', 'vite', 'Vite', 'tsconfig', `--host`]);
32
- console.log(`\n\n`);
33
- }
34
-
35
- // Args: File to run, home directory,
36
- const child = spawn('node', spawnArgs, {
37
- cwd: binDirName
38
- });
39
-
40
- let processedFiles = 0;
41
- let foundFiles = 0;
42
- const std = process.stdout;
43
-
44
- child.stdout.on('data', (data) => {
45
- const message = data.toString();
46
- if (message.match('fileread')) {
47
- processedFiles++;
48
- logUpdate(pc.green(` Files read: ${processedFiles}/${foundFiles}`));
49
- } else if (message.startsWith('filesfound')) {
50
- const count = Number(message.split(':').at(-1).slice(0, -1));
51
- foundFiles += count;
52
- } else if (message.startsWith('loaded')) {
53
- logUpdate(pc.green(` Files read: ${foundFiles}/${foundFiles}`));
54
- console.log(`\n\n`);
55
- processedFiles = 0;
56
- foundFiles = 0;
57
- } else if(true) { // Toggle to true to reveal all console output
58
- console.log(message)
59
- } else if (message.match('http://localhost:')) {
60
- const url = message.match(/http:\/\/localhost:\S+/);
61
- console.log(
62
- pc.bgCyan(
63
- pc.bold(`
64
-
65
- Website: ${url}
66
- `)
67
- )
68
- );
69
- console.log(`\n`);
70
- } else {
71
- console.log(pc.blue(data));
72
- }
73
- });
74
-
75
- child.stderr.on('data', (data) => {
76
- console.error(pc.red(data));
77
- });
78
-
79
- child.on('close', (code) => {
80
- console.log(`child process exited with code ${code}`);
81
- });
5
+ await init()
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 🃏
3
+ ---
4
+
5
+ # Cards
6
+
7
+ Create eye-catching content with no fuss. (Like this.)
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 👩‍🎤
3
+ ---
4
+
5
+ # Live editing
6
+
7
+ See updates live as you save.
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 🙃
3
+ ---
4
+
5
+ # Emoji favicons
6
+
7
+ Use any emoji you want for your website's icon.
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 🧮
3
+ ---
4
+
5
+ # Frontmatter
6
+
7
+ Display dates, lists, nested properties, links, and images in your frontmatter.
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 🍱
3
+ ---
4
+
5
+ # Blog
6
+
7
+ Write one line to list your blog posts.
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 🚏
3
+ ---
4
+
5
+ # Navigation
6
+
7
+ Structure your content with smart nav menus.
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 🤿
3
+ ---
4
+
5
+ # Rich link previews
6
+
7
+ Create rich links with titles and images.
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 🤖
3
+ ---
4
+
5
+ # Robots
6
+
7
+ Take control of your robots.txt.
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 📡
3
+ ---
4
+
5
+ # RSS
6
+
7
+ Deliver your content to RSS readers with an Atom feed.
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 🗺️
3
+ ---
4
+
5
+ # Sitemap
6
+
7
+ Submit your website to search engines with a sitemap that lists all of your pages.
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 🏎️
3
+ ---
4
+
5
+ # Speed
6
+
7
+ Get a blazing-fast, Svelte-rendered website.
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 🏛️
3
+ ---
4
+
5
+ # Static generation
6
+
7
+ Load pages quickly with plain HTML.
@@ -0,0 +1,7 @@
1
+ ---
2
+ icon: 🔖
3
+ ---
4
+
5
+ # Taxonomies
6
+
7
+ Go beyond tags to create authors and categories.
@@ -0,0 +1,9 @@
1
+ {
2
+ "https://www.nngroup.com/articles/url-as-ui/": {
3
+ "url": "https://www.nngroup.com/articles/url-as-ui/",
4
+ "canonical": "https://www.nngroup.com/articles/url-as-ui/",
5
+ "title": "URL as UI",
6
+ "image": "",
7
+ "description": "Users continue to type and guess URLs and domain names, so Web usability can be improved by better URLs. In the long term this machine-level addressing scheme must be hidden."
8
+ }
9
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "promptDelete": false
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "accentColor": ""
3
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "file-explorer": true,
3
+ "global-search": true,
4
+ "switcher": true,
5
+ "graph": true,
6
+ "backlink": true,
7
+ "canvas": true,
8
+ "outgoing-link": true,
9
+ "tag-pane": true,
10
+ "properties": false,
11
+ "page-preview": true,
12
+ "daily-notes": true,
13
+ "templates": true,
14
+ "note-composer": true,
15
+ "command-palette": true,
16
+ "slash-command": false,
17
+ "editor-status": true,
18
+ "bookmarks": true,
19
+ "markdown-importer": false,
20
+ "zk-prefixer": false,
21
+ "random-note": false,
22
+ "outline": true,
23
+ "word-count": true,
24
+ "slides": false,
25
+ "audio-recorder": false,
26
+ "workspaces": false,
27
+ "file-recovery": true,
28
+ "publish": false,
29
+ "sync": false
30
+ }
@@ -0,0 +1,20 @@
1
+ [
2
+ "file-explorer",
3
+ "global-search",
4
+ "switcher",
5
+ "graph",
6
+ "backlink",
7
+ "canvas",
8
+ "outgoing-link",
9
+ "tag-pane",
10
+ "page-preview",
11
+ "daily-notes",
12
+ "templates",
13
+ "note-composer",
14
+ "command-palette",
15
+ "editor-status",
16
+ "bookmarks",
17
+ "outline",
18
+ "word-count",
19
+ "file-recovery"
20
+ ]
@@ -0,0 +1,168 @@
1
+ {
2
+ "main": {
3
+ "id": "966664a33c0f9428",
4
+ "type": "split",
5
+ "children": [
6
+ {
7
+ "id": "6f272e6d83175a0e",
8
+ "type": "tabs",
9
+ "children": [
10
+ {
11
+ "id": "6d5fa6e59ac0d3e8",
12
+ "type": "leaf",
13
+ "state": {
14
+ "type": "markdown",
15
+ "state": {
16
+ "file": "home.md",
17
+ "mode": "source",
18
+ "source": false
19
+ }
20
+ }
21
+ }
22
+ ]
23
+ }
24
+ ],
25
+ "direction": "vertical"
26
+ },
27
+ "left": {
28
+ "id": "18e0bc63ac82562e",
29
+ "type": "split",
30
+ "children": [
31
+ {
32
+ "id": "9cc6c8640bf83790",
33
+ "type": "tabs",
34
+ "children": [
35
+ {
36
+ "id": "08551dcebb684ee5",
37
+ "type": "leaf",
38
+ "state": {
39
+ "type": "file-explorer",
40
+ "state": {
41
+ "sortOrder": "alphabetical"
42
+ }
43
+ }
44
+ },
45
+ {
46
+ "id": "39b7b22b2e81f451",
47
+ "type": "leaf",
48
+ "state": {
49
+ "type": "search",
50
+ "state": {
51
+ "query": "",
52
+ "matchingCase": false,
53
+ "explainSearch": false,
54
+ "collapseAll": false,
55
+ "extraContext": false,
56
+ "sortOrder": "alphabetical"
57
+ }
58
+ }
59
+ },
60
+ {
61
+ "id": "48ac4934e3c350a8",
62
+ "type": "leaf",
63
+ "state": {
64
+ "type": "bookmarks",
65
+ "state": {}
66
+ }
67
+ }
68
+ ]
69
+ }
70
+ ],
71
+ "direction": "horizontal",
72
+ "width": 300
73
+ },
74
+ "right": {
75
+ "id": "c120d9bbbfa46883",
76
+ "type": "split",
77
+ "children": [
78
+ {
79
+ "id": "d7378259eead963a",
80
+ "type": "tabs",
81
+ "children": [
82
+ {
83
+ "id": "3c5acbb57e9b2ecc",
84
+ "type": "leaf",
85
+ "state": {
86
+ "type": "backlink",
87
+ "state": {
88
+ "file": "home.md",
89
+ "collapseAll": false,
90
+ "extraContext": false,
91
+ "sortOrder": "alphabetical",
92
+ "showSearch": false,
93
+ "searchQuery": "",
94
+ "backlinkCollapsed": false,
95
+ "unlinkedCollapsed": true
96
+ }
97
+ }
98
+ },
99
+ {
100
+ "id": "dbc00eb5b912c400",
101
+ "type": "leaf",
102
+ "state": {
103
+ "type": "outgoing-link",
104
+ "state": {
105
+ "file": "home.md",
106
+ "linksCollapsed": false,
107
+ "unlinkedCollapsed": true
108
+ }
109
+ }
110
+ },
111
+ {
112
+ "id": "192b432a0da5e507",
113
+ "type": "leaf",
114
+ "state": {
115
+ "type": "tag",
116
+ "state": {
117
+ "sortOrder": "frequency",
118
+ "useHierarchy": true
119
+ }
120
+ }
121
+ },
122
+ {
123
+ "id": "7d5f5d40b932706c",
124
+ "type": "leaf",
125
+ "state": {
126
+ "type": "outline",
127
+ "state": {
128
+ "file": "home.md"
129
+ }
130
+ }
131
+ }
132
+ ]
133
+ }
134
+ ],
135
+ "direction": "horizontal",
136
+ "width": 300,
137
+ "collapsed": true
138
+ },
139
+ "left-ribbon": {
140
+ "hiddenItems": {
141
+ "switcher:Open quick switcher": false,
142
+ "graph:Open graph view": false,
143
+ "canvas:Create new canvas": false,
144
+ "daily-notes:Open today's daily note": false,
145
+ "templates:Insert template": false,
146
+ "command-palette:Open command palette": false
147
+ }
148
+ },
149
+ "active": "6d5fa6e59ac0d3e8",
150
+ "lastOpenFiles": [
151
+ "clouds.jpg",
152
+ "home.md",
153
+ "blog/travel/home.md",
154
+ "blog/hello-world.md",
155
+ "blog/cooking/home.md",
156
+ "blog/economics/home.md",
157
+ "blog/economics/smith.md",
158
+ "blog/economics/keynes.md",
159
+ "blog/home.md",
160
+ "blog/cooking/soup.md",
161
+ "blog/cooking/settings.md",
162
+ "blog/cooking/pancakes.md",
163
+ "blog/economics",
164
+ "blog/Untitled.md",
165
+ "about.md",
166
+ "settings.md"
167
+ ]
168
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "startCommand": "npx -y -p svelte@next -p vowel@latest npx vowel"
3
+ }
@@ -0,0 +1,11 @@
1
+ > Why do I have a folder named ".vercel" in my project?
2
+ The ".vercel" folder is created when you link a directory to a Vercel project.
3
+
4
+ > What does the "project.json" file contain?
5
+ The "project.json" file contains:
6
+ - The ID of the Vercel project that you linked ("projectId")
7
+ - The ID of the user or team your Vercel project is owned by ("orgId")
8
+
9
+ > Should I commit the ".vercel" folder?
10
+ No, you should not share the ".vercel" folder with anyone.
11
+ Upon creation, it will be automatically added to your ".gitignore" file.
@@ -0,0 +1 @@
1
+ {"projectId":"prj_4CUiAmqACnAFX1cjGqW5om7DbK4E","orgId":"team_CpFUbX79Msg6m5IOy2BzFxEE"}
@@ -0,0 +1,3 @@
1
+ # About
2
+
3
+ This is an about page.
@@ -0,0 +1,51 @@
1
+ .link-preview {
2
+ h2 {
3
+ margin-top: 0;
4
+ }
5
+ }
6
+
7
+ .folder-blog {
8
+ margin-block: var(--size-9);
9
+
10
+ & > article + article {
11
+ border-top: 1px solid var(--surface-3);
12
+ }
13
+
14
+ & > article > .content,
15
+ & > article > :not(h1, time) {
16
+ display: none;
17
+ }
18
+
19
+ & > article {
20
+ display: flex;
21
+ flex-direction: row;
22
+ justify-content: space-between;
23
+ gap: 1rem;
24
+ align-items: baseline;
25
+ padding-inline: 0;
26
+ background: unset;
27
+ border-radius: 0;
28
+ border: unset;
29
+ }
30
+
31
+ & article + article {
32
+ border-top: 1px solid grey;
33
+ }
34
+
35
+ & > article > h1 {
36
+ max-inline-size: unset;
37
+ font-weight: 600;
38
+ flex: 1;
39
+ font-size: 1em;
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: space-between;
43
+ gap: 1rem;
44
+ }
45
+
46
+ & > article > time {
47
+ margin-left: auto;
48
+ margin: 0;
49
+ font-size: 1em;
50
+ }
51
+ }
@@ -0,0 +1,5 @@
1
+ # Blog
2
+
3
+ Here's a blog.
4
+
5
+ /blog?count=100&content=false
@@ -0,0 +1,21 @@
1
+ ---
2
+ link: https://www.nngroup.com/articles/url-as-ui/
3
+ breadcrumb: URL Design
4
+ ---
5
+
6
+ June 27, 2024
7
+
8
+ ![some things](./dog.jpeg)
9
+
10
+ # Long Live the URL
11
+
12
+ This article from 1999 about how to write good URLs is awesome. Some tips:
13
+
14
+ - Write in lowercase
15
+ - Check for typos
16
+ - URLs should be permanent
17
+ - Keep URLs short
18
+
19
+ But Nielsen's overall view is that URLs are an important part of user experience. They contribute to a website visitor's sense of trust and geography. One of Neilsen's rules dictates that a user should be able to "hack" of the last segment of a URL to get to the parent page.
20
+
21
+ Ironically, in 1999 Nielsen thought that URLs and search engines would soon fade into obscurity as better solutions to information management emerged. Lo, 25 years later the URL remains more important than ever. Sometimes the simple solutions is the best one.
Binary file