getfilepress 0.0.0 → 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +178 -4
- package/package.json +89 -7
- package/packages/app/package.json +31 -0
- package/packages/app/src/app.d.ts +12 -0
- package/packages/app/src/app.html +12 -0
- package/packages/app/src/critical-theme.d.ts +4 -0
- package/packages/app/src/lib/content.server.ts +8 -0
- package/packages/app/src/lib/empty-theme.css +1 -0
- package/packages/app/src/lib/genie/GenieHost.svelte +16 -0
- package/packages/app/src/lib/genie/GeniePanel.svelte +429 -0
- package/packages/app/src/lib/genie/ops.ts +237 -0
- package/packages/app/src/lib/genie/store.ts +217 -0
- package/packages/app/src/lib/genie/types.ts +61 -0
- package/packages/app/src/lib/pages.server.ts +7 -0
- package/packages/app/src/lib/site.server.ts +52 -0
- package/packages/app/src/lib/theme-entry.ts +7 -0
- package/packages/app/src/routes/+layout.svelte +29 -0
- package/packages/app/src/routes/+layout.ts +10 -0
- package/packages/app/src/routes/+page.server.ts +28 -0
- package/packages/app/src/routes/+page.svelte +67 -0
- package/packages/app/src/routes/[slug]/+page.server.ts +20 -0
- package/packages/app/src/routes/[slug]/+page.svelte +47 -0
- package/packages/app/src/routes/page/[n]/+page.server.ts +21 -0
- package/packages/app/src/routes/page/[n]/+page.svelte +36 -0
- package/packages/app/src/routes/posts/[slug]/+page.server.ts +24 -0
- package/packages/app/src/routes/posts/[slug]/+page.svelte +95 -0
- package/packages/app/src/routes/robots.txt/+server.ts +11 -0
- package/packages/app/src/routes/rss.xml/+server.ts +13 -0
- package/packages/app/src/routes/sitemap.xml/+server.ts +19 -0
- package/packages/app/src/routes/tags/+page.server.ts +4 -0
- package/packages/app/src/routes/tags/+page.svelte +26 -0
- package/packages/app/src/routes/tags/[tag]/+page.server.ts +15 -0
- package/packages/app/src/routes/tags/[tag]/+page.svelte +23 -0
- package/packages/app/src/routes/topics/+page.server.ts +28 -0
- package/packages/app/src/routes/topics/+page.svelte +47 -0
- package/packages/app/src/routes/writing/+page.server.ts +12 -0
- package/packages/app/src/routes/writing/+page.svelte +38 -0
- package/packages/app/src/site-theme.d.ts +2 -0
- package/packages/app/static/.gitkeep +0 -0
- package/packages/app/tsconfig.json +15 -0
- package/packages/app/vite-plugin-critical-theme.ts +70 -0
- package/packages/app/vite-plugin-genie.ts +114 -0
- package/packages/app/vite.config.ts +141 -0
- package/packages/core/package.json +51 -0
- package/packages/core/src/lib/assets/favicon.svg +1 -0
- package/packages/core/src/lib/components/Newsletter.svelte +13 -0
- package/packages/core/src/lib/components/PostCard.svelte +34 -0
- package/packages/core/src/lib/components/PostIndex.svelte +86 -0
- package/packages/core/src/lib/components/SiteFooter.svelte +15 -0
- package/packages/core/src/lib/components/SiteHeader.svelte +28 -0
- package/packages/core/src/lib/config.ts +154 -0
- package/packages/core/src/lib/content/content.ts +193 -0
- package/packages/core/src/lib/content/feeds.ts +102 -0
- package/packages/core/src/lib/content/markdown.ts +78 -0
- package/packages/core/src/lib/content/pages.ts +103 -0
- package/packages/core/src/lib/content/parse.ts +214 -0
- package/packages/core/src/lib/content/rehype-figure.ts +79 -0
- package/packages/core/src/lib/content/types.ts +88 -0
- package/packages/core/src/lib/format.ts +25 -0
- package/packages/core/src/lib/index.ts +27 -0
- package/packages/core/src/lib/server.ts +33 -0
- package/packages/core/src/lib/styles/fonts.css +72 -0
- package/packages/core/src/lib/styles/theme.css +762 -0
- package/packages/core/src/lib/theme.ts +5 -0
- package/packages/import/package.json +27 -0
- package/packages/import/src/cli.ts +346 -0
- package/packages/import/src/discover.ts +190 -0
- package/packages/import/src/extract.ts +378 -0
- package/packages/import/src/fetch.ts +63 -0
- package/packages/import/src/html-to-md.ts +21 -0
- package/packages/import/src/images.ts +247 -0
- package/packages/import/src/inspire.ts +417 -0
- package/packages/import/src/ir.ts +109 -0
- package/packages/import/src/ollama.ts +145 -0
- package/packages/import/src/stock.ts +218 -0
- package/packages/import/src/theme.ts +478 -0
- package/packages/import/src/write-site.ts +371 -0
- package/packages/import/tsconfig.json +13 -0
- package/pnpm-workspace.yaml +2 -0
- package/scripts/create-site.mjs +260 -0
- package/scripts/filepress.mjs +273 -0
- package/scripts/link-embedded-packages.mjs +40 -0
- package/scripts/postinstall.mjs +56 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Catalyst Forge LLC
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,9 +1,183 @@
|
|
|
1
1
|
# FilePress
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> File-based Markdown blogs. No admin UI. No database. Just git.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
A file-based Markdown blog engine. Posts are plain `.md` files with YAML frontmatter — edit them in the GitHub mobile app, the web editor, or any text editor. There is no admin UI, no database, and no server at runtime: a static build produces HTML you can host anywhere (e.g. Cloudflare Pages).
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
| | |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| **Site** | [https://getfilepress.com](https://getfilepress.com) |
|
|
10
|
+
| **npm** | [`getfilepress`](https://www.npmjs.com/package/getfilepress) |
|
|
11
|
+
| **CLI** | `filepress` (also `getfilepress`) |
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
## Requirements
|
|
14
|
+
|
|
15
|
+
- Node.js 20+
|
|
16
|
+
- [pnpm](https://pnpm.io)
|
|
17
|
+
|
|
18
|
+
## Quick start (new site)
|
|
19
|
+
|
|
20
|
+
From a clone of this repo:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pnpm install
|
|
24
|
+
pnpm create-site my-blog --external ../my-blog --title "My Blog" --url https://my.blog
|
|
25
|
+
|
|
26
|
+
cd ../my-blog
|
|
27
|
+
pnpm install
|
|
28
|
+
pnpm dev # local preview (Genie Mode FAB in the corner)
|
|
29
|
+
pnpm build # → build/
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The site folder only needs:
|
|
33
|
+
|
|
34
|
+
- `filepress.config.ts` — title, URL, and other site settings
|
|
35
|
+
- `posts/` — Markdown posts (`/posts/<slug>`)
|
|
36
|
+
- `pages/` — optional static Markdown pages (`about.md` → `/about`)
|
|
37
|
+
- `static/` — favicon, images, etc.
|
|
38
|
+
- `package.json` — depends on this engine (`"getfilepress": "link:../filepress"` locally, `"getfilepress": "^0.1.0"` from npm, or a git URL + tag/SHA)
|
|
39
|
+
|
|
40
|
+
### Import an existing site
|
|
41
|
+
|
|
42
|
+
Crawl a public site (sitemap/RSS preferred), extract posts and pages, scaffold a sibling FilePress site, and optionally ask a local Ollama model for a token theme:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pnpm install
|
|
46
|
+
pnpm filepress import --source https://example.com \
|
|
47
|
+
--inspire https://www.catalystforge.com \
|
|
48
|
+
--inspire https://app.execfoundry.com/start \
|
|
49
|
+
--yes
|
|
50
|
+
|
|
51
|
+
# up to 3 --inspire URLs; signals are blended (first biases structure, later ones tint accent/fonts)
|
|
52
|
+
|
|
53
|
+
# dry-run first (no write):
|
|
54
|
+
pnpm filepress import --source https://example.com --dry-run --no-llm
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
See [`docs/SITE_IMPORT_SPEC.md`](docs/SITE_IMPORT_SPEC.md).
|
|
58
|
+
|
|
59
|
+
More detail: [`docs/EXTERNAL_SITES.md`](docs/EXTERNAL_SITES.md).
|
|
60
|
+
|
|
61
|
+
### In this repo
|
|
62
|
+
|
|
63
|
+
- `sites/demo` — engine fixture (drafts, scheduled posts, frontmatter cheatsheet). Root `pnpm check` / `pnpm build` target this site.
|
|
64
|
+
- `sites/getfilepress` — product site for getfilepress.com (`homePage` landing + Writing). Sibling publications live in their own repos.
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pnpm install
|
|
68
|
+
pnpm dev # → demo fixture
|
|
69
|
+
pnpm build # → sites/demo/build/
|
|
70
|
+
pnpm dev:www # → product site
|
|
71
|
+
pnpm build:www # → sites/getfilepress/build/
|
|
72
|
+
pnpm deploy:www # build + Wrangler Pages deploy (project: getfilepress)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Site configuration
|
|
76
|
+
|
|
77
|
+
```ts
|
|
78
|
+
import { defineFilepressConfig } from 'getfilepress';
|
|
79
|
+
|
|
80
|
+
export default defineFilepressConfig({
|
|
81
|
+
title: 'My Site',
|
|
82
|
+
description: 'A short site description.',
|
|
83
|
+
url: 'https://my.site', // required; canonical origin, no trailing slash
|
|
84
|
+
author: 'Me',
|
|
85
|
+
postsPerPage: 10,
|
|
86
|
+
topics: [{ label: 'Essays', tag: 'essays' }],
|
|
87
|
+
newsletter: {
|
|
88
|
+
url: 'https://buttondown.email/me',
|
|
89
|
+
blurb: 'Occasional notes.',
|
|
90
|
+
cta: 'Subscribe'
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
`title` and `url` are required; missing values fail the build with a clear error.
|
|
96
|
+
|
|
97
|
+
## Theming
|
|
98
|
+
|
|
99
|
+
The engine ships a default Essay look. To restyle a site, add `theme.css` next to
|
|
100
|
+
`filepress.config.ts`. It loads after the default theme, so you can override CSS
|
|
101
|
+
variables and structural classes without forking the app.
|
|
102
|
+
|
|
103
|
+
In local `pnpm dev`, **Genie Mode** lets you steer tokens, stock backgrounds, and
|
|
104
|
+
versioned theme activations without leaving the browser (dev-only; not in production builds).
|
|
105
|
+
|
|
106
|
+
```css
|
|
107
|
+
/* theme.css */
|
|
108
|
+
:root {
|
|
109
|
+
--accent: #1e4d6b;
|
|
110
|
+
--accent-strong: #163a52;
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Token and class reference: [`docs/THEME.md`](docs/THEME.md).
|
|
115
|
+
|
|
116
|
+
## Writing a post
|
|
117
|
+
|
|
118
|
+
Add a file under the site's `posts/` directory:
|
|
119
|
+
|
|
120
|
+
```markdown
|
|
121
|
+
---
|
|
122
|
+
title: "My Post"
|
|
123
|
+
date: 2026-07-04
|
|
124
|
+
description: A short summary used in listings and SEO.
|
|
125
|
+
tags: [notes]
|
|
126
|
+
author: Jane Roe
|
|
127
|
+
draft: false
|
|
128
|
+
updated: 2026-07-05
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
Body content in **Markdown**.
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
| Field | Required | Notes |
|
|
135
|
+
| --- | --- | --- |
|
|
136
|
+
| `title` | yes | Build fails (naming the file) if missing. |
|
|
137
|
+
| `date` | yes | Strict `YYYY-MM-DD`. Future-dated posts stay hidden until that date. |
|
|
138
|
+
| `slug` | no | Derived from the filename if omitted. |
|
|
139
|
+
| `description` / `excerpt` | no | Listings and meta tags. |
|
|
140
|
+
| `tags` | no | YAML list; lowercased and de-duplicated. |
|
|
141
|
+
| `author` | no | Per-post byline; omit on single-author sites. |
|
|
142
|
+
| `draft` | no | Hidden from production listings/feeds/sitemap; still builds at its URL. Listed with a Draft label under `pnpm dev` (localhost). |
|
|
143
|
+
| `updated` | no | Shown when different from `date`. |
|
|
144
|
+
|
|
145
|
+
**Images:** put files in `static/images/posts/<slug>/` and reference them as `/images/posts/<slug>/photo.jpg`.
|
|
146
|
+
|
|
147
|
+
**Captions:** an image alone on a line becomes a `<figure>`; the title attribute is the caption:
|
|
148
|
+
|
|
149
|
+
```markdown
|
|
150
|
+

|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Deploy
|
|
154
|
+
|
|
155
|
+
Build output is a static folder. For a site that depends on this engine:
|
|
156
|
+
|
|
157
|
+
| Setting | Value |
|
|
158
|
+
| --- | --- |
|
|
159
|
+
| Build command | `pnpm install && pnpm build` |
|
|
160
|
+
| Output directory | `build` |
|
|
161
|
+
|
|
162
|
+
Point the site's dependency at a pinned commit or tag of this repo (not a floating branch) so upgrades are intentional. If this engine repo is private, the host's build needs permission to clone it.
|
|
163
|
+
|
|
164
|
+
More at [getfilepress.com](https://getfilepress.com).
|
|
165
|
+
|
|
166
|
+
## Repository layout
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
packages/core shared engine (content pipeline, components, theme)
|
|
170
|
+
packages/app SvelteKit app (routes + Genie Mode in dev) used by the CLI
|
|
171
|
+
packages/import site crawl / scaffold CLI (also powers Genie theme helpers)
|
|
172
|
+
sites/demo engine fixture content
|
|
173
|
+
sites/getfilepress product site (getfilepress.com)
|
|
174
|
+
scripts/ filepress CLI and create-site scaffold
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
pnpm test # engine unit tests
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## License
|
|
182
|
+
|
|
183
|
+
MIT — see [LICENSE](LICENSE).
|
package/package.json
CHANGED
|
@@ -1,18 +1,100 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "getfilepress",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Placeholder — FilePress is coming soon.",
|
|
5
|
-
"license": "MIT",
|
|
3
|
+
"version": "0.1.0",
|
|
6
4
|
"private": false,
|
|
7
5
|
"type": "module",
|
|
6
|
+
"description": "FilePress — file-based Markdown blog engine. Link this package from a content-only site (config + posts), then run `filepress build`.",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"homepage": "https://getfilepress.com",
|
|
8
9
|
"repository": {
|
|
9
10
|
"type": "git",
|
|
10
11
|
"url": "git+https://github.com/Catalyst-Forge-LLC/filepress.git"
|
|
11
12
|
},
|
|
12
|
-
"
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/Catalyst-Forge-LLC/filepress/issues"
|
|
15
|
+
},
|
|
16
|
+
"bin": {
|
|
17
|
+
"filepress": "./scripts/filepress.mjs",
|
|
18
|
+
"getfilepress": "./scripts/filepress.mjs"
|
|
19
|
+
},
|
|
20
|
+
"exports": {
|
|
21
|
+
".": {
|
|
22
|
+
"types": "./packages/core/src/lib/index.ts",
|
|
23
|
+
"svelte": "./packages/core/src/lib/index.ts",
|
|
24
|
+
"default": "./packages/core/src/lib/index.ts"
|
|
25
|
+
},
|
|
26
|
+
"./server": {
|
|
27
|
+
"types": "./packages/core/src/lib/server.ts",
|
|
28
|
+
"default": "./packages/core/src/lib/server.ts"
|
|
29
|
+
},
|
|
30
|
+
"./theme": {
|
|
31
|
+
"default": "./packages/core/src/lib/theme.ts"
|
|
32
|
+
},
|
|
33
|
+
"./package.json": "./package.json"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"scripts/filepress.mjs",
|
|
37
|
+
"scripts/create-site.mjs",
|
|
38
|
+
"scripts/postinstall.mjs",
|
|
39
|
+
"scripts/link-embedded-packages.mjs",
|
|
40
|
+
"packages/core",
|
|
41
|
+
"packages/app",
|
|
42
|
+
"packages/import",
|
|
43
|
+
"pnpm-workspace.yaml",
|
|
44
|
+
"README.md",
|
|
45
|
+
"LICENSE"
|
|
46
|
+
],
|
|
15
47
|
"scripts": {
|
|
16
|
-
"postinstall": "node
|
|
48
|
+
"postinstall": "node scripts/postinstall.mjs",
|
|
49
|
+
"filepress": "node scripts/filepress.mjs",
|
|
50
|
+
"test": "pnpm --filter @filepress/core test && pnpm --filter @filepress/import test",
|
|
51
|
+
"check": "pnpm filepress check --site demo",
|
|
52
|
+
"build": "pnpm filepress build --site demo",
|
|
53
|
+
"build:demo": "pnpm filepress build --site demo",
|
|
54
|
+
"build:www": "pnpm filepress build --site getfilepress",
|
|
55
|
+
"deploy:www": "pnpm build:www && wrangler pages deploy sites/getfilepress/build --project-name getfilepress",
|
|
56
|
+
"dev": "pnpm filepress dev --site demo",
|
|
57
|
+
"dev:demo": "pnpm filepress dev --site demo",
|
|
58
|
+
"dev:www": "pnpm filepress dev --site getfilepress",
|
|
59
|
+
"create-site": "node scripts/create-site.mjs",
|
|
60
|
+
"import": "node scripts/filepress.mjs import",
|
|
61
|
+
"prepack": "node scripts/prepack.mjs",
|
|
62
|
+
"postpack": "node scripts/postpack.mjs",
|
|
63
|
+
"pack:smoke": "node scripts/pack-smoke.mjs"
|
|
64
|
+
},
|
|
65
|
+
"dependencies": {
|
|
66
|
+
"@fontsource-variable/inter": "^5.2.8",
|
|
67
|
+
"@fontsource-variable/newsreader": "^5.2.10",
|
|
68
|
+
"@sveltejs/adapter-static": "^3.0.10",
|
|
69
|
+
"@sveltejs/kit": "^2.63.0",
|
|
70
|
+
"@sveltejs/vite-plugin-svelte": "^7.1.2",
|
|
71
|
+
"@types/turndown": "^5.0.5",
|
|
72
|
+
"fast-xml-parser": "^5.2.5",
|
|
73
|
+
"gray-matter": "^4.0.3",
|
|
74
|
+
"highlight.js": "^11.11.1",
|
|
75
|
+
"linkedom": "^0.18.12",
|
|
76
|
+
"rehype-autolink-headings": "^7.1.0",
|
|
77
|
+
"rehype-highlight": "^7.0.2",
|
|
78
|
+
"rehype-raw": "^7.0.0",
|
|
79
|
+
"rehype-slug": "^6.0.0",
|
|
80
|
+
"rehype-stringify": "^10.0.1",
|
|
81
|
+
"remark-gfm": "^4.0.1",
|
|
82
|
+
"remark-parse": "^11.0.0",
|
|
83
|
+
"remark-rehype": "^11.1.2",
|
|
84
|
+
"sirv-cli": "^3.0.1",
|
|
85
|
+
"svelte": "^5.56.1",
|
|
86
|
+
"svelte-check": "^4.6.0",
|
|
87
|
+
"tsx": "^4.20.5",
|
|
88
|
+
"turndown": "^7.2.1",
|
|
89
|
+
"typescript": "^6.0.3",
|
|
90
|
+
"unified": "^11.0.5",
|
|
91
|
+
"vite": "^8.0.16"
|
|
92
|
+
},
|
|
93
|
+
"engines": {
|
|
94
|
+
"node": ">=20"
|
|
95
|
+
},
|
|
96
|
+
"packageManager": "pnpm@10.30.1",
|
|
97
|
+
"devDependencies": {
|
|
98
|
+
"wrangler": "^4.120.1"
|
|
17
99
|
}
|
|
18
100
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@filepress/app",
|
|
3
|
+
"private": true,
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "The single SvelteKit app for filepress. Sites under sites/* supply config + posts + static; this package owns all routes.",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"dev": "vite dev",
|
|
9
|
+
"build": "vite build",
|
|
10
|
+
"preview": "vite preview",
|
|
11
|
+
"prepare": "svelte-kit sync || echo ''",
|
|
12
|
+
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
|
13
|
+
"test": "vitest run --config vitest.config.ts"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@filepress/core": "workspace:*",
|
|
17
|
+
"@filepress/import": "workspace:*"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@sveltejs/adapter-static": "^3.0.10",
|
|
21
|
+
"@sveltejs/kit": "^2.63.0",
|
|
22
|
+
"@sveltejs/vite-plugin-svelte": "^7.1.2",
|
|
23
|
+
"@types/node": "^26.1.0",
|
|
24
|
+
"sirv-cli": "^3.0.1",
|
|
25
|
+
"svelte": "^5.56.1",
|
|
26
|
+
"svelte-check": "^4.6.0",
|
|
27
|
+
"typescript": "^6.0.3",
|
|
28
|
+
"vite": "^8.0.16",
|
|
29
|
+
"vitest": "^4.1.9"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<meta name="text-scale" content="scale" />
|
|
7
|
+
%sveltekit.head%
|
|
8
|
+
</head>
|
|
9
|
+
<body data-sveltekit-preload-data="hover">
|
|
10
|
+
<div style="display: contents">%sveltekit.body%</div>
|
|
11
|
+
</body>
|
|
12
|
+
</html>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createContent } from '@filepress/core/server';
|
|
2
|
+
import { getContentDir } from './site.server';
|
|
3
|
+
|
|
4
|
+
// Bound to the active site's posts/ (or FILEPRESS_CONTENT_DIR). Resolved at
|
|
5
|
+
// module load from FILEPRESS_SITE_ROOT set by scripts/filepress.mjs.
|
|
6
|
+
export const content = createContent({
|
|
7
|
+
contentDir: getContentDir()
|
|
8
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/* Intentionally empty — used when the site has no theme.css / theme.scss. */
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
/**
|
|
3
|
+
* Mount Genie only in Vite DEV. Dynamic import keeps the panel out of
|
|
4
|
+
* production client graphs when this host is tree-shaken / dead-coded.
|
|
5
|
+
*/
|
|
6
|
+
const enabled =
|
|
7
|
+
import.meta.env.DEV ||
|
|
8
|
+
import.meta.env.FILEPRESS_GENIE === '1' ||
|
|
9
|
+
import.meta.env.FILEPRESS_GENIE === 'true';
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
{#if enabled}
|
|
13
|
+
{#await import('./GeniePanel.svelte') then { default: GeniePanel }}
|
|
14
|
+
<GeniePanel />
|
|
15
|
+
{/await}
|
|
16
|
+
{/if}
|