ARTICLE PUBLISHING ENGINE

You wrote the article.
Why are you still moving files?

Wrenik turns long-form MDX into an object you manage rather than a directory you maintain. One slug organises the article file, its media workspace, its public URL and every reference pointing at it — across as many projects as you keep.

Lifecycle Create. Write. Add media. Validate. Publish.

01The article is the object

One slug. Everything else follows.

Name an article and Wrenik builds its whole workspace: the MDX file where it belongs, and a media directory that mirrors it, split the way article media actually divides.

  • Media paths are generated against this project's media root, never a hard-coded one.
  • Frontmatter arrives complete and consistent — author and date filled in, status always draft.
  • The scaffold's example components sit inside MDX comments, so an unfinished draft renders clean.
  • A slug that already exists is never overwritten. Open it, rename it, or cancel.
PROJECT_ROOT/ ├── content/learn/ │ └── yapivo-vs-wispr-flow.mdx │ └── public/learn/ └── yapivo-vs-wispr-flow/ ├── images/ ├── videos/ ├── posters/ └── graphics/

02Workflow

The filesystem is an implementation detail

Ten operations, one menu. Wrenik owns structure, media, metadata, lifecycle and validation. Your website keeps owning rendering — no route, component or config is ever touched.

CreateType, title, slug. File and media workspace in one step.
WritePaste from the clipboard and Wrenik formats it, or edit in Cursor.
Add mediaDrop files in the folder, then place and reorder them by section.
PreviewRead it as prose, media resolved, live-reloading as you write.
ValidateMetadata, media, links and CTA, split into errors and warnings.
PublishFlip status. Archiving is metadata — nothing moves, nothing is deleted.

LIST

Read straight from frontmatter

Published, draft and archived, grouped and filterable by category. No database, no index to rebuild.

DELETE

Previewed, and it defaults to no

Shows the file, the media tree and every article that references it — then asks you to type the slug.

TEMPLATES

Outlines, not filler

Five article shapes. Guidance lives in MDX comments and disappears from the rendered page.

PREVIEW

Read it before anyone else does

Prose set as prose, screenshots and recordings resolved from disk, validation at the top, reloading on every save.

FORMAT

Paste it, don't tag it

Copy an article from anywhere. Wrenik repairs tables, unwraps hard-wrapped lines, promotes bold lines to headings — structure only, shown as a diff first.

03Rename

Renaming is the whole workspace

A slug is not just a filename. It is in the media directory's name, in every src inside the article, in the links other articles use to reach it, and in their related lists.

Wrenik counts all of it first, shows you the number, and only then moves anything. Edits are textual, so your YAML comments, quoting and blank-line grouping survive untouched — nothing is re-serialised.

If a target path is occupied the rename refuses to start rather than finishing halfway.

Rename preview
yapivo-vs-wispr-flow  yapivo-vs-wispr-flow-mac

This will update:

  1 MDX file
  1 media directory
  3 media paths
  4 references in 2 other articles

    voice-control-mac.mdx      (2)
    agentic-voice-control.mdx  (2)

? Continue? (Y/n)

04Validation

Errors and warnings, kept apart

Every media reference is resolved against the project's own media root and checked against real bytes on disk. Commented-out examples and fenced code are masked first, so a scaffold never reports a missing file it was only demonstrating.

Internal links have to resolve to an article that exists. Outbound links are judged against the project's own domain policy — Wrenik holds no opinion about which domains are yours.

Validate · yapivo-vs-wispr-flow
 frontmatter valid
 title · description · category · author
 media folder matches slug
 2 image references resolve
 1 poster exists
 3 internal article links resolve
 no duplicate slug

ERRORS
 file not found: /learn/…/videos/demo.mp4
  ~/…/public/learn/…/videos/demo.mp4

WARNINGS
! seoDescription is empty
! external link to wispr.ai (line 31)

1 error, 2 warnings.

05Projects

The engine knows articles. Config knows the product.

Nothing about any one product lives in Wrenik. Paths, route pattern, author, CTA, allowed domains and even your MDX component names are per-project configuration, discovered at startup from ~/.wrenik/projects/.

Yapivo

Content
content/learn
Media
public/learn
Route
/learn/{slug}
CTA
ProductCTA

Ekkovia

Content
src/content/journal
Media
static/media
Route
/journal/{slug}
CTA
Callout

SETUP

Finder picks the root

Add a project and choose its directory in Finder. Wrenik reports what it detected and warns — honestly — when it finds no MDX renderer.

SAFETY

Removing a project deletes nothing

It drops the saved configuration. Your articles and media stay exactly where they are.

ERRORS

Prose, not ENOENT

A missing directory says which one, where it looked, and where to change it.

06Templates

Five shapes for an argument

Educational first, experience-driven second, technical where useful, commercial only after value is established. Every scaffold ends on a tradeoff before it ends on a CTA.

Educational

  1. Short answer
  2. The problem
  3. Explanation
  4. Example
  5. Evidence
  6. Tradeoff

Comparison

  1. Short version
  2. Common ground
  3. Key difference
  4. Real-world test
  5. Choose A / choose B
  6. Honest trade

Experience

  1. What happened
  2. What I tried
  3. What changed
  4. What surprised me
  5. Evidence
  6. Limitation

How-to

  1. The goal
  2. Requirements
  3. Steps
  4. Media
  5. Common mistakes
  6. Verification

Technical

  1. The problem
  2. System model
  3. Architecture
  4. Experiment
  5. Results
  6. Limitations

07Download

Wrenik for macOS

Universal binary, Apple Silicon and Intel. Nothing to install first — the runtime ships inside.

Download Wrenik 1.0.0 macOS 11 or later · 71 MB
Universal · arm64 + x86_64 No Node required Notarized by Apple Nothing leaves your machine
Already have Node 22+?
$ git clone … && npm install
$ npm run build && npm link
$ wrenik