smirky 1.0.0 → 1.0.1

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,203 +1,186 @@
1
- Below is a clean, professional, publication‑ready **README.md** for Smirky.
2
- No emojis. No fluff. Just a clear, well‑structured document that positions Smirky as a serious static site generator with a Tailwind‑based default theme and Fabform integration.
1
+ # Smirky Minimalist Static Website Generator
3
2
 
4
- You can drop this directly into your repository.
3
+ Smirky is a minimalist static website generator for people who just want to write Markdown and get a website — no ceremony, no plugins, no magic.
4
+
5
+ It is perfect for building blogs, landing pages, or any static site quickly.
5
6
 
6
7
  ---
7
8
 
8
- # Smirky
9
- A lightweight, theme‑friendly static website generator powered by Markdown and Node.js. Smirky focuses on clarity, simplicity, and extensibility, making it an ideal choice for blogs, documentation sites, and small business websites.
9
+ ## Why Smirky?
10
10
 
11
- Smirky ships with a default Tailwind CSS theme that includes a fully functional contact form powered by the Fabform backend service. You can use the included theme as‑is or create your own custom themes with complete control over layout, styling, and structure.
11
+ * Write Markdown and get a website
12
+ * Supports tags in Markdown posts
13
+ * Minimal templates with header, navbar, footer, and content
14
+ * Blog posts and tag pages generated automatically
15
+ * Assets copied automatically
16
+ * No complex configuration
17
+ * Works with [Fabform.io](https://fabform.io) for contact forms
12
18
 
13
19
  ---
14
20
 
15
21
  ## Features
16
22
 
17
- - Markdown‑based content and pages
18
- - Clean, minimal templating system
19
- - Theme‑driven architecture
20
- - Built‑in blog system with tags
21
- - Tailwind CSS default theme
22
- - Fabform‑powered contact form integration
23
- - Zero configuration required
24
- - Fast builds and simple folder structure
23
+ * Simple Markdown pages (`pages/`)
24
+ * Blog posts (`content/`) with tags
25
+ * Tag pages (`/tags/`) and blog index (`/blog/`)
26
+ * Clean templates and partials (`theme/`)
27
+ * Static assets copied automatically (`theme/assets/`)
28
+ * Contact forms via [Fabform.io](https://fabform.io)
29
+ * Generates everything in `dist/` for deployment
25
30
 
26
31
  ---
27
32
 
28
- ## Folder Structure
29
-
30
- A typical Smirky project looks like this:
31
-
32
- ```
33
- project/
34
- smirky/
35
- smirky.js
36
- content/
37
- pages/
38
- theme/
39
- layout.html
40
- index.html
41
- page.html
42
- post.html
43
- blog.html
44
- tags.html
45
- partials/
46
- head.html
47
- navbar.html
48
- footer.html
49
- blog_post_card.html
50
- tag_pill.html
51
- assets/
52
- site.json
53
- dist/
54
- ```
33
+ ## Getting Started
55
34
 
56
- ---
35
+ 1. Install Smirky globally or as a dev dependency:
57
36
 
58
- ## Installation
37
+ ```bash
38
+ # global installation
39
+ npm install -g smirky
59
40
 
60
- Smirky can be installed locally within your project:
61
-
62
- ```
63
- npm install smirky
41
+ # or as a dev dependency in your project
42
+ npm install --save-dev smirky
64
43
  ```
65
44
 
66
- Or used directly via npx:
45
+ 2. Create your project structure:
67
46
 
68
47
  ```
69
- npx smirky
48
+ my-site/
49
+ ├── pages/ # Static pages in Markdown
50
+ ├── content/ # Blog posts in Markdown
51
+ ├── theme/ # Optional: custom templates, partials, assets
52
+ └── package.json
70
53
  ```
71
54
 
72
- ---
55
+ 3. Add your pages to `pages/` and your blog posts to `content/`:
73
56
 
74
- ## Usage
57
+ **Example page**: `pages/about.md`
75
58
 
76
- Smirky is designed to be simple and predictable. Once your content, pages, and theme are in place, you can build your site with a single command.
59
+ ```md
60
+ ---
61
+ title: About
62
+ slug: about
63
+ ---
77
64
 
78
- ### Build your site
65
+ ## About Smirky
79
66
 
67
+ Smirky is a minimalist static site generator. Write Markdown, run Smirky, done.
80
68
  ```
81
- npm run build
82
- ```
83
-
84
- This generates a fully static website inside the `dist/` directory.
85
-
86
- ### Development mode
87
69
 
88
- If you prefer to rebuild manually during development:
89
-
90
- ```
91
- npm run dev
92
- ```
70
+ **Example blog post with tags**: `content/my-first-post.md`
93
71
 
72
+ ```md
73
+ ---
74
+ title: My First Post
75
+ date: 2026-01-08
76
+ tags:
77
+ - JavaScript
78
+ - Static Sites
94
79
  ---
95
80
 
96
- ## Content and Pages
81
+ Hello! This is my first blog post powered by Smirky.
82
+ ```
97
83
 
98
- Smirky uses two types of Markdown files:
84
+ > The `tags` field lets Smirky automatically generate tag pages and link posts to them.
99
85
 
100
- ### Pages
101
- Stored in `/pages`, each file becomes a standalone route:
86
+ 4. Build your site:
102
87
 
103
- ```
104
- /pages/about.md /about/index.html
88
+ ```bash
89
+ npm run build
105
90
  ```
106
91
 
107
- ### Blog Posts
108
- Stored in `/content`, each file becomes a blog post:
92
+ > **Note:** Make sure your `package.json` has this script:
109
93
 
110
- ```
111
- /content/my-first-post.md → /blog/my-first-post/index.html
94
+ ```json
95
+ "scripts": {
96
+ "build": "smirky"
97
+ }
112
98
  ```
113
99
 
114
- Both support front‑matter:
115
-
116
- ```yaml
117
- ---
118
- title: About Us
119
- slug: about
120
- tags: [company, mission]
121
- ---
122
- ```
100
+ The generated site will be in the `dist/` folder. Deploy it anywhere: Netlify, Vercel, GitHub Pages, etc.
123
101
 
124
102
  ---
125
103
 
126
- ## Default Theme
104
+ ## How Themes Work
127
105
 
128
- Smirky includes a Tailwind CSS theme located in the `/theme` directory. It provides:
106
+ Smirky uses templates and partials to assemble your pages:
129
107
 
130
- - Responsive layout
131
- - Navigation bar
132
- - Blog index and post templates
133
- - Tag pages
134
- - Footer
135
- - Contact form powered by Fabform
108
+ * `layout.html` — main wrapper
109
+ * `index.html` — home page
110
+ * `page.html` static pages
111
+ * `post.html` — individual blog posts
112
+ * `blog.html` — blog index and tag pages
113
+ * `tags.html` tag index
136
114
 
137
- ### Fabform Integration
115
+ Partials are reusable components:
138
116
 
139
- The default theme includes a ready‑to‑use contact form that posts directly to Fabform.
140
- To enable it, update the form action in your theme’s HTML:
141
-
142
- ```
143
- <form action="https://fabform.io/f/your-form-id" method="POST">
144
- ```
117
+ * `head.html` meta tags, CSS
118
+ * `navbar.html` navigation bar
119
+ * `footer.html` — footer content
120
+ * `blog_post_card.html` — blog summary card
121
+ * `tag_pill.html` — tag label
145
122
 
146
- No backend code is required.
123
+ Variables such as `{{ title }}`, `{{ content }}`, `{{ tag_pills }}`, `{{ site_title }}` are replaced automatically.
147
124
 
148
125
  ---
149
126
 
150
- ## Creating Your Own Themes
127
+ ## Tags
151
128
 
152
- Smirky is fully theme‑driven. A theme consists of:
129
+ * Tags are defined in Markdown frontmatter with `tags: [Tag1, Tag2]`
130
+ * Smirky generates:
153
131
 
154
- - HTML templates
155
- - Partials
156
- - Assets (CSS, JS, images)
157
- - A `site.json` configuration file
132
+ * `/tags/` — index of all tags
133
+ * `/tags/{tag}/` — all posts with that tag
158
134
 
159
- You can create a new theme by duplicating the default theme and modifying:
135
+ Tag pages automatically list posts that have the tag. Example URL:
160
136
 
161
- - Layout structure
162
- - Tailwind classes or CSS framework
163
- - Partials
164
- - Blog card design
165
- - Tag pill design
137
+ ```
138
+ /tags/javascript/
139
+ ```
166
140
 
167
- Smirky does not enforce any styling framework. You may use Tailwind, Bootstrap, custom CSS, or anything else.
141
+ ---
168
142
 
169
- ### Required template placeholders
143
+ ## Contact Forms (Fabform.io)
170
144
 
171
- Every theme must include the following tokens:
145
+ Smirky works with [Fabform.io](https://fabform.io) for contact forms without a backend.
172
146
 
147
+ **Example Contact Form:**
148
+
149
+ ```html
150
+ <form
151
+ action="https://fabform.io/f/FORM_ID"
152
+ method="POST"
153
+ >
154
+ <input type="text" name="name" placeholder="Your name" required />
155
+ <input type="email" name="email" placeholder="Your email" required />
156
+ <textarea name="message" placeholder="Your message"></textarea>
157
+ <button type="submit">Send</button>
158
+ </form>
173
159
  ```
174
- {{ head }}
175
- {{ navbar }}
176
- {{ footer }}
177
- {{ content }}
178
- {{ title }}
179
- ```
180
160
 
181
- Smirky replaces these during the build process.
161
+ * Replace `FORM_ID` with your Fabform ID
162
+ * Works directly on your static site
163
+ * No server, no backend
164
+
165
+ [Visit Fabform.io](https://fabform.io)
182
166
 
183
167
  ---
184
168
 
185
169
  ## Deployment
186
170
 
187
- Since Smirky outputs a fully static site, you can deploy the `dist/` folder to any static hosting provider:
171
+ After running `npm run build`, deploy the `dist/` folder to any static host:
188
172
 
189
- - Netlify
190
- - Vercel
191
- - GitHub Pages
192
- - Cloudflare Pages
193
- - AWS S3
194
- - Any static file server
173
+ * [Netlify](https://www.netlify.com/)
174
+ * [Vercel](https://vercel.com/)
175
+ * [Cloudflare Pages](https://pages.cloudflare.com/)
176
+ * [GitHub Pages](https://pages.github.com/)
195
177
 
196
178
  ---
197
179
 
198
- ## License
180
+ ## Philosophy
181
+
182
+ Smirky is for people who want simple static sites. No plugins, no hidden configs, no ceremony.
183
+
184
+ **Write Markdown, run Smirky, done.**
199
185
 
200
- MIT License
201
- Copyright © Geoffrey Callaghan
202
186
 
203
- ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "smirky",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "A tiny, theme-friendly static website generator powered by Markdown.",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -1,60 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <link rel="stylesheet" href="/assets/site.css">
5
-
6
-
7
- <meta charset="UTF-8" />
8
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
-
10
- <title>About - My Site</title>
11
- <meta name="description" content="A simple static site powered by a KISS SSG." />
12
- </head>
13
- <body class="bg-slate-50 text-slate-900">
14
-
15
- <nav class="bg-white shadow-sm">
16
- <div class="max-w-5xl mx-auto px-4 h-16 flex items-center justify-between">
17
-
18
- <a href="/" class="text-xl font-bold text-indigo-600">
19
- My Site
20
- </a>
21
-
22
- <div class="space-x-6 text-sm font-medium">
23
- <a href="/about/" class="text-indigo-600 font-semibold">About</a>
24
- <a href="/contact/" class="text-slate-700 hover:text-slate-900">Contact</a>
25
- <a href="/blog/" class="text-slate-700 hover:text-slate-900">Blog</a>
26
- <a href="/tags/" class="text-slate-700 hover:text-slate-900">Tags</a>
27
- </div>
28
-
29
- </div>
30
- </nav>
31
-
32
-
33
-
34
- <main class="max-w-5xl mx-auto px-4 py-10">
35
- <article class="prose prose-slate max-w-none">
36
- <h1>About</h1>
37
- <h1>About This Site</h1>
38
- <p>This website is built using a tiny static site generator that follows the KISS principle.</p>
39
- <p>Everything is intentionally simple:</p>
40
- <ul>
41
- <li>No complex frameworks </li>
42
- <li>No heavy build tools </li>
43
- <li>No unnecessary features</li>
44
- </ul>
45
- <p>Just clean Markdown, simple templates, and fast static HTML output.</p>
46
-
47
- </article>
48
-
49
-
50
- </main>
51
-
52
- <footer class="mt-12 border-t border-slate-200 py-6 text-sm text-slate-500 text-center">
53
- © 2026 My Site
54
- </footer>
55
-
56
-
57
-
58
- </body>
59
- </html>
60
-
@@ -1,92 +0,0 @@
1
- @import "tailwindcss";
2
-
3
- /* ---------------------------
4
- Global Markdown Typography
5
- Tailwind v4 — No Config File
6
- ---------------------------- */
7
-
8
- /* Headings */
9
- h1 {
10
- @apply text-4xl font-bold leading-tight mt-8 mb-4;
11
- }
12
-
13
- h2 {
14
- @apply text-3xl font-semibold leading-snug mt-6 mb-3;
15
- }
16
-
17
- h3 {
18
- @apply text-2xl font-semibold leading-snug mt-5 mb-2;
19
- }
20
-
21
- h4 {
22
- @apply text-xl font-semibold mt-4 mb-2;
23
- }
24
-
25
- h5 {
26
- @apply text-lg font-medium mt-3 mb-2;
27
- }
28
-
29
- h6 {
30
- @apply text-base font-medium mt-2 mb-2;
31
- }
32
-
33
- /* Paragraphs */
34
- p {
35
- @apply text-base leading-relaxed mb-4;
36
- }
37
-
38
- /* Links */
39
- a {
40
- @apply text-blue-600 underline hover:text-blue-800;
41
- }
42
-
43
- /* Images */
44
- img {
45
- @apply rounded-lg my-4;
46
- }
47
-
48
- /* Lists */
49
- ul {
50
- @apply list-disc pl-6 mb-4;
51
- }
52
-
53
- ol {
54
- @apply list-decimal pl-6 mb-4;
55
- }
56
-
57
- li {
58
- @apply mb-1;
59
- }
60
-
61
- /* Blockquotes */
62
- blockquote {
63
- @apply border-l-4 border-gray-300 pl-4 italic text-gray-700 my-4;
64
- }
65
-
66
- /* Code blocks */
67
- pre {
68
- @apply bg-gray-900 text-gray-100 p-4 rounded-lg overflow-x-auto my-4;
69
- }
70
-
71
- code {
72
- @apply bg-gray-100 text-red-600 px-1 py-0.5 rounded;
73
- }
74
-
75
- /* Horizontal rule */
76
- hr {
77
- @apply border-gray-300 my-8;
78
- }
79
-
80
- /* Tables */
81
- table {
82
- @apply w-full border-collapse my-6;
83
- }
84
-
85
- th {
86
- @apply border-b font-semibold p-2 text-left;
87
- }
88
-
89
- td {
90
- @apply border-b p-2;
91
- }
92
-