Built a thing: Crosspost to Inkwell — submitted to WordPress.org today 🎉Written on March 10, 2026 by ΞVΞ🦋
Categories: Blog

Here’s how this plugin came together over the past two weeks:
02/27/26, 1:02 AM EST — Started with a simple idea: I wanted my WordPress posts to automatically show up in my Inkwell journal without copy-pasting. Asked Claude to build the initial plugin. First version had auto-crosspost on publish, a manual crosspost button in the editor sidebar, featured image upload, tags, privacy settings, and per-post overrides.
03/01/26, 12:55 AM EST — Pulled in the actual Inkwell API docs from inkwell.social/developers and rebuilt the API layer to match the real endpoints. Discovered a double-posting bug almost immediately — WordPress fires transition_post_status multiple times on a single save, so entries were being sent twice. Fixed it with a static lock + transient guard + post meta check. Also sorted out the plugin naming.
03/05/26, 9:12 AM EST — Hit some errors with a version of the double-post fix, rolled back, sorted it out.
03/06/26, 12:39 AM EST — Mapped out the full checklist for submitting to the WordPress.org plugin directory.
03/06/26, 06:00 PM EST — Had planned on adding the finishing touches and submitting to WordPress this weekend, but got hit with the covid. Man down. 🧍🏾♀️🛌🏾😭
03/09/26, 8:00 AM EST — Recovered. 💪🏾
03/09/26, 4:02 PM EST — Submission prep day. Wrote the readme.txt, hit a validator note about the readme format, added a donate link. Looked up the WP.org plugin naming guidelines and renamed the plugin from “WP Inkwell Crosspost” to “Crosspost to Inkwell” to avoid naming guideline issues. Updated Tested up to: 6.9.
03/09/26, 6:15 PM EST — Ran the Plugin Check (PCP) tool and got a batch of errors. Did a full security audit pass against the WordPress escaping, sanitizing, and nonces documentation: fixed every $_POST read, output escape, and nonce call in the file. Added full internationalization — ~99 strings. Removed a nested <form> element. Moved all JavaScript out of inline <script> blocks into properly enqueued handles. Set version to 1.0.0.
03/09/26, 10:02 PM EST — Final round of fixes: moved script enqueue calls into the proper hook, replaced deprecated current_time('mysql') with wp_date(), fixed a License URI inconsistency between files, added Requires at least and Requires PHP to the PHP header, renamed the plugin slug to crosspost-to-inkwell throughout. Submitted.
Pretty excited because this is the first WordPress plugin I’ve ever created, so if it gets approved, it’ll show up at wordpress.org/plugins/crosspost-to-inkwell.

