getfilepress 0.1.18 → 0.1.20

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/README.md CHANGED
@@ -1,230 +1,62 @@
1
1
  # FilePress
2
2
 
3
- > File-based Markdown blogs. No admin UI. No database. Just git.
3
+ Markdown blogs from git. No CMS. No database. A static `build/` folder.
4
4
 
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 (for example Cloudflare Pages).
5
+ Written **FilePress**. npm **`getfilepress`**. CLI **`filepress`** (same script as `getfilepress`).
6
6
 
7
- | | |
8
- | --- | --- |
9
- | **Site** | [https://getfilepress.com](https://getfilepress.com) |
10
- | **npm** | [`getfilepress`](https://www.npmjs.com/package/getfilepress) |
11
- | **CLI** | `filepress` (also `getfilepress`) |
12
-
13
- ## Requirements
7
+ **Site:** [getfilepress.com](https://getfilepress.com) · **Docs:** [getting started](https://getfilepress.com/getting-started)
14
8
 
15
- - Node.js 20+
16
- - [pnpm](https://pnpm.io)
17
-
18
- ## Quick start (new site)
9
+ ## Start a site
19
10
 
20
11
  From a clone of this repo:
21
12
 
22
13
  ```bash
23
14
  pnpm install
24
15
  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/
16
+ cd ../my-blog && pnpm install && pnpm dev
30
17
  ```
31
18
 
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
- - `paths` mounts — optional site-owned HTML/CSS/JS trees at a URL prefix (e.g. `/docs`)
38
- - `static/` — favicon, images, etc.
39
- - `package.json` — depends on this engine (`"getfilepress": "link:../filepress"` locally, `"getfilepress": "^0.1.3"` from npm, or a git URL + tag/SHA)
19
+ `filepress new "Title"` stamps `posts/YYYY-MM-DD-slug.md`. Config, frontmatter, images, and commands: [Getting started](https://getfilepress.com/getting-started).
40
20
 
41
- ### Import an existing site
21
+ Pin CI on npm (`getfilepress` current is `0.1.19`) or a git SHA / existing tag. `link:` is local only.
42
22
 
43
- Crawl a public site (sitemap/RSS preferred), extract posts and pages, scaffold a sibling FilePress site, and optionally ask Ollama (local or a host found with `--scan`) for a token theme:
23
+ ## Import
44
24
 
45
25
  ```bash
46
- pnpm install
47
- pnpm filepress import --source https://example.com \
48
- --inspire https://www.catalystforge.com \
49
- --inspire https://app.execfoundry.com/start \
50
- --yes
51
-
52
- # up to 3 --inspire URLs; signals are blended (first biases structure, later ones tint accent/fonts)
53
-
54
- # dry-run first (no write):
26
+ pnpm filepress import --source https://example.com --yes
55
27
  pnpm filepress import --source https://example.com --dry-run --no-llm
56
28
  ```
57
29
 
58
- See [`docs/SITE_IMPORT_SPEC.md`](docs/SITE_IMPORT_SPEC.md).
59
-
60
- More detail: [`docs/EXTERNAL_SITES.md`](docs/EXTERNAL_SITES.md).
30
+ Crawls a public site (sitemap/RSS preferred) into a sibling content tree. Optional `--inspire` URLs (up to three) and Ollama. `--no-llm` stays deterministic. [Import](https://getfilepress.com/import) · [spec](docs/SITE_IMPORT_SPEC.md).
61
31
 
62
- ### In this repo
63
-
64
- - `sites/demo` — engine fixture (drafts, scheduled posts, frontmatter cheatsheet). Root `pnpm check` / `pnpm build` target this site.
65
- - `sites/getfilepress` — product site for getfilepress.com (`homePage` landing + Writing). Sibling publications live in their own repos.
66
-
67
- ```bash
68
- pnpm install
69
- pnpm dev # → demo fixture
70
- pnpm build # → sites/demo/build/
71
- pnpm dev:www # → product site
72
- pnpm build:www # → sites/getfilepress/build/
73
- pnpm ship # build + Wrangler Pages deploy (project: getfilepress)
74
- ```
75
-
76
- Two `filepress dev` processes share Vite **5173** unless you pin the port. With [LocalBerth](https://www.npmjs.com/package/localberth) 0.2+, `filepress dev` reads a named lease. Claim once; see [docs/LOCALBERTH.md](docs/LOCALBERTH.md).
77
-
78
- ## Site configuration
79
-
80
- ```ts
81
- import { defineFilepressConfig } from 'getfilepress';
82
-
83
- export default defineFilepressConfig({
84
- title: 'My Site',
85
- description: 'A short site description.',
86
- url: 'https://my.site', // required; canonical origin, no trailing slash
87
- author: 'Me',
88
- postsPerPage: 10,
89
- topics: [{ label: 'Essays', tag: 'essays' }],
90
- nav: [
91
- { label: 'Posts', href: '/' },
92
- { label: 'GitHub', href: 'https://github.com/acme/site', icon: 'github' }
93
- ],
94
- // Replaces the default RSS + Topics row when set.
95
- footerLinks: [
96
- { label: 'RSS', href: '/rss.xml' },
97
- { label: 'GitHub', href: 'https://github.com/acme/site', icon: 'github' }
98
- ],
99
- theme: 'essay', // or 'ink' | 'folio'; site theme.css still wins last
100
- newsletter: {
101
- url: 'https://buttondown.email/me',
102
- blurb: 'Occasional notes.',
103
- cta: 'Subscribe'
104
- }
105
- });
106
- ```
107
-
108
- `title` and `url` are required; missing values fail the build with a clear error.
109
-
110
- **Nav / footer:** `nav` is the header; `footerLinks` replaces the default RSS + Topics footer row when set (include those entries yourself if you still want them). Items may set `icon: 'github'` for a built-in mark (`.nav-github` in themes).
111
-
112
- ### Path mounts
113
-
114
- Attach a site-owned HTML/CSS/JS tree at a URL prefix. FilePress copies it into `build/` after the Kit build and serves it in `filepress dev`. It does **not** parse Markdown or inject Essay chrome into the mount. The site owns the shell (for example a docs sidebar).
115
-
116
- ```ts
117
- paths: [
118
- { url: '/docs', dir: 'docs/dist' }
119
- ]
120
- ```
121
-
122
- - `dir` is site-relative; `url` starts with `/` and must not collide with engine routes (`posts`, `writing`, `tags`, …).
123
- - The first URL segment is reserved against `pages/<slug>.md`.
124
- - HTML files under the mount are included in `sitemap.xml`.
125
-
126
- ## Theming
127
-
128
- The engine ships a default Essay look, plus two token presets (`ink`, `folio`)
129
- via config `theme`. To restyle a site, add `theme.css` next to
130
- `filepress.config.ts`. It loads last, so you can override CSS
131
- variables and structural classes without forking the app.
132
-
133
- In local `filepress dev` / `pnpm dev`, **Genie Mode** (floating FAB) is a design cockpit:
134
- steers, Openverse / uploads, live inspire URLs, optional Ollama refine, and
135
- `lede` / `tagline` / `logo` config patches. Experiments live under `.filepress-genie/`.
136
- Activate writes `theme.css`, `static/`, and config. Dev-only; absent from
137
- `preview` and production builds. See [`docs/GENIE_MODE_SPEC.md`](docs/GENIE_MODE_SPEC.md)
138
- and [getfilepress.com/genie](https://getfilepress.com/genie).
139
-
140
- ```css
141
- /* theme.css */
142
- :root {
143
- --accent: #1e4d6b;
144
- --accent-strong: #163a52;
145
- }
146
- ```
32
+ ## Docs
147
33
 
148
- Token and class reference: [`docs/THEME.md`](docs/THEME.md).
34
+ | Topic | Where |
35
+ | --- | --- |
36
+ | Scaffold, config, posts | [Getting started](https://getfilepress.com/getting-started) |
37
+ | Theme tokens and presets | [docs/THEME.md](docs/THEME.md) |
38
+ | Genie (dev only) | [Genie](https://getfilepress.com/genie) · [spec](docs/GENIE_MODE_SPEC.md) |
39
+ | Deploy | [Deploy](https://getfilepress.com/deploy) · [docs/DEPLOY.md](docs/DEPLOY.md) |
40
+ | Sibling / external sites | [docs/EXTERNAL_SITES.md](docs/EXTERNAL_SITES.md) |
41
+ | Local ports | [docs/LOCALBERTH.md](docs/LOCALBERTH.md) |
42
+ | Agent skill page | [Skill page](https://getfilepress.com/skill-page) · [docs/SKILL_PAGE.md](docs/SKILL_PAGE.md) |
149
43
 
150
- ## Writing a post
44
+ ## In this repo
151
45
 
152
- From the site root (or with `--site` / `--root` in this monorepo):
46
+ - `sites/demo` engine fixture (drafts, scheduled posts, image convention)
47
+ - `sites/getfilepress` — getfilepress.com
153
48
 
154
49
  ```bash
155
- filepress new "My Post"
156
- filepress new "My Post" --draft
157
- ```
158
-
159
- That writes `posts/YYYY-MM-DD-my-post.md`. Or add a file by hand:
160
-
161
- ```markdown
162
- ---
163
- title: "My Post"
164
- date: 2026-07-04
165
- description: A short summary used in listings and SEO.
166
- tags: [notes]
167
- author: Jane Roe
168
- draft: false
169
- updated: 2026-07-05
170
- ---
171
-
172
- Body content in **Markdown**.
173
- ```
174
-
175
- | Field | Required | Notes |
176
- | --- | --- | --- |
177
- | `title` | yes | Build fails (naming the file) if missing. |
178
- | `date` | yes | Strict `YYYY-MM-DD`. Future-dated posts stay hidden until that date. |
179
- | `slug` | no | Derived from the filename if omitted. |
180
- | `description` / `excerpt` | no | Listings and meta tags. |
181
- | `tags` | no | YAML list; lowercased and de-duplicated. |
182
- | `author` | no | Per-post byline; omit on single-author sites. |
183
- | `draft` | no | Hidden from production listings/feeds/sitemap; still builds at its URL. Listed with a Draft label under `pnpm dev` (localhost). |
184
- | `updated` | no | Shown when different from `date`. |
185
-
186
- **Images:** put files in `static/images/posts/<slug>/` and reference them as `/images/posts/<slug>/photo.jpg`. The demo site’s [Images in posts](sites/demo/posts/images-in-posts.md) post is a worked example.
187
-
188
- **Captions:** an image alone on a line becomes a `<figure>`; the title attribute is the caption:
189
-
190
- ```markdown
191
- ![alt text](/images/posts/my-post/photo.jpg "Caption under the image")
50
+ pnpm install
51
+ pnpm test
52
+ pnpm dev # demo
53
+ pnpm dev:www # product site
54
+ pnpm ship # build getfilepress + Wrangler Pages
192
55
  ```
193
56
 
194
- ## Deploy
195
-
196
- `filepress build` emits a static `build/` folder. No Node server in production.
197
-
198
- **Happy path: [Cloudflare Pages](https://pages.cloudflare.com/)** (git-connected site repo or Wrangler upload).
57
+ ## Not a CMS
199
58
 
200
- | Setting | Value |
201
- | --- | --- |
202
- | Build command | `pnpm install && pnpm build` |
203
- | Output directory | `build` |
204
- | Node | 20+ |
205
-
206
- Pin the engine in the site `package.json` (`"getfilepress": "^0.1.3"` or `github:Catalyst-Forge-LLC/filepress#v0.1.3`). Do not use `link:` in CI. Set config `url` to the live origin.
207
-
208
- Any other static host works the same way: publish `build/` as the web root. The build also writes a `_headers` file (HSTS, no framing, no wildcard CORS) for Cloudflare Pages; override it with `static/_headers`.
209
-
210
- Full notes (including an agent checklist): [`docs/DEPLOY.md`](docs/DEPLOY.md) · product page: [getfilepress.com/deploy](https://getfilepress.com/deploy).
211
-
212
- If the site ships an agent skill, write the install page from [`docs/SKILL_PAGE.md`](docs/SKILL_PAGE.md) · [getfilepress.com/skill-page](https://getfilepress.com/skill-page).
213
-
214
- ## Repository layout
215
-
216
- ```
217
- packages/core shared engine (content pipeline, components, theme)
218
- packages/app SvelteKit app (routes + Genie Mode in dev) used by the CLI
219
- packages/import site crawl / scaffold CLI (also powers Genie theme helpers)
220
- sites/demo engine fixture content
221
- sites/getfilepress product site (getfilepress.com)
222
- scripts/ filepress CLI and create-site scaffold
223
- ```
224
-
225
- ```bash
226
- pnpm test # engine unit tests
227
- ```
59
+ No admin UI. No visitor comments — permanent. Genie is `filepress dev` only; `preview` and `build/` do not include it. Production is files.
228
60
 
229
61
  <!-- xfacts-nutrition-label -->
230
62
 
@@ -234,4 +66,4 @@ pnpm test # engine unit tests
234
66
 
235
67
  ## License
236
68
 
237
- MIT see [LICENSE](LICENSE).
69
+ MIT. Copyright Catalyst Forge LLC.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "getfilepress",
3
- "version": "0.1.18",
3
+ "version": "0.1.20",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "FilePress — file-based Markdown blog engine. Link this package from a content-only site (config + posts), then run `filepress build`.",
@@ -192,6 +192,10 @@ export default defineConfig(async () => {
192
192
  if (pathMounts.some((m) => path === m.url || path.startsWith(`${m.url}/`))) {
193
193
  return;
194
194
  }
195
+ // Layout always links these; sites may ship only one.
196
+ if (path === '/favicon.png' || path === '/favicon.svg') {
197
+ return;
198
+ }
195
199
  throw new Error(message);
196
200
  },
197
201
  handleUnseenRoutes: ({ routes }) => {