
Say goodbye to cumbersome writing tools and hello to PootleWriter – the revolutionary writing app that puts simplicity and speed at your fingertips.
Unlike AI-powered alternatives, PootleWriter is a human-designed solution that prioritizes your writing experience.
Key Features:
- No Login Required: Jump straight into writing without any barriers.
- Lightning-Fast: Get your thoughts down quickly and effortlessly.
- Distraction-Free Interface: Focus solely on your words, not complex technology.
- Markdown support: Automatic conversion to html when publishing.
- Publish to WordPress: One-click publishing to your WordPress website
- Post status toggle: Set posts as either Draft or Published
- Offline mode: PootleWriter works offline thanks to its local-first architecture.
PootleWriter isn’t about AI taking over your writing process. Instead, it’s a tool crafted to enhance your natural creativity. The technology fades into the background, allowing your ideas to flow freely onto the page.
Whether you’re a student racing against a deadline, a professional crafting important documents, or a creative soul exploring new ideas, PootleWriter adapts to your needs. It’s the writing companion that empowers you to produce your best work without getting in your way.
Experience the joy of friction-free writing with PootleWriter – where simplicity meets productivity, and your words take center stage.
Publishing from PootleWriter to WordPress
Linking PootleWriter to your WordPress website is very simple.
- Go to Users / Profile in your WordPress website
- Type ‘pootlewriter’ in the ‘New Application Password Name’ field
- Copy the password that is created
- Click on the settings icon in PootleWriter
- Paste in your password
- Type in your website address
- Type in your username (of your WordPress website)
- Click ‘Save Configuration’
- Now you are ready to publish ❤️
Core Architecture
- Frontend Stack
- Built with React + TypeScript
- Uses Vite as the build tool
- Styled with Tailwind CSS
- Icons from Lucide React
- Custom serif fonts (Lora for headings, Libre Baskerville for body text)
- State Management
- Uses React’s built-in useState and useEffect hooks
- Local storage for data persistence
- No external state management library needed due to the app’s scope
Key Features
- Post Management
- CRUD operations for posts
- Automatic saving to localStorage
- Unique ID generation using crypto.randomUUID()
- Last modified timestamp tracking
- Editor Component
- Rich text editing capabilities
- Unsaved changes detection
- Custom Enter key handling for better writing experience
- Confetti animation on save
- Beforeunload warning for unsaved changes
- WordPress Integration
- Basic authentication support
- Create/Update posts via WordPress REST API
- Configuration persistence in localStorage
- Connection testing functionality
- Published status tracking
- Theme System
- Light/dark mode support
- Theme persistence in localStorage
- Smooth transitions between themes
- System preference detection (defaulting to dark)
Data Flow
- Post Storage
- Posts are stored in localStorage under ‘writing-app-posts’
- Loaded on application start
- Automatically saved on any changes
- WordPress Publishing
- Two-way sync with WordPress
- Maintains WordPress post IDs for updates
- Handles both new posts and updates
- Error handling for failed publications
- UI State Management
- Toggle between list and editor views
- Current post tracking
- Unsaved changes detection
Security Features
- WordPress Authentication
- Auth using application passwords
- Connection testing before saving credentials
- Data Safety
- Unsaved changes warnings
- Confirmation dialogs for destructive actions
- Automatic saving to localStorage
- Encryption: Added AES-GCM encryption for WordPress credentials using the Web Crypto API
- Secure Storage: Credentials are encrypted before being stored in localStorage
- Error Handling: Proper error handling for encryption/decryption operations
- Async Operations: WordPress configuration handling to work with async encryption
The credentials are encrypted using AES-GCM encryption before being stored in localStorage.
WordPress Application Passwords and their security benefits in PootleWriter
WordPress Application Passwords are a secure authentication method specifically designed for external applications like PootleWriter. Unlike your main WordPress login credentials, these are special purpose-specific passwords that provide limited access to your WordPress site through the API.
When you create an Application Password in WordPress, you can:
- Set specific permissions for what the password can access
- Generate multiple passwords for different applications
- Easily revoke access without changing your main password
- Track which application is using which password
In PootleWriter, we take security seriously. Your Application Password is encrypted using AES-GCM encryption before being stored locally in your browser. This means:
- Your credentials never touch our servers
- The data is encrypted at rest in your browser
- Only your browser can decrypt and use the credentials
- You can revoke access at any time from your WordPress dashboard
This approach provides a secure way to connect PootleWriter to your WordPress site while maintaining strong security practices and giving you full control over the access permissions.
Performance Considerations
- Optimizations
- Lazy loading of components
- Efficient localStorage operations
- Smooth transitions and animations
- Minimal re-renders through proper state management
- Progressive Enhancement
- Works offline (except WordPress features)
- Responsive design
- Keyboard shortcuts and accessibility
This architecture provides a solid foundation for a writing application with WordPress integration, focusing on user experience and data safety while maintaining simplicity in implementation.
Markdown support
PootleWriter now allows you to write your content using Markdown syntax directly within the app. This means you can focus on your writing while using simple, intuitive formatting that doesn’t interrupt your flow. Here are some key benefits of this new feature:
- Efficiency: Quickly format your text without taking your hands off the keyboard.
- Portability: Your Markdown documents can be easily opened and edited in any text editor.
- Readability: Markdown syntax is designed to be as readable as possible, even in its raw form.
Works offline
PootleWriter works offline thanks to its local-first architecture.
Here are the key components that enable offline functionality:
- Local Storage for Posts:
// src/utils/storage.ts handles all post data locally
export const savePosts = (posts: Post[]) => {
localStorage.setItem('writing-app-posts', JSON.stringify(posts));
};
export const loadPosts = (): Post[] => {
const posts = localStorage.getItem('writing-app-posts');
return posts ? JSON.parse(posts) : [];
};
- Local Theme Persistence:
// src/utils/theme.ts stores theme preference locally
export const saveTheme = (theme: Theme) => {
localStorage.setItem(THEME_KEY, theme);
};
- Encrypted WordPress Credentials:
// src/utils/wordpress.ts stores encrypted WordPress config locally
export const saveWordPressConfig = async (config: WordPressConfig) => {
const encryptedConfig = await encryptData(config);
localStorage.setItem(STORAGE_KEY, encryptedConfig);
};
The app only requires an internet connection when:
- Publishing posts to WordPress
- Testing WordPress credentials
Everything else – writing, editing, saving posts, and managing themes – works completely offline because the data is stored in your browser’s localStorage. This makes PootleWriter reliable and usable even without an internet connection.
Comments
19 responses to “Introducing PootleWriter: Your Friction-Free WordPress Writing Companion”
[…] Introducing PootleWriter: Your Friction-Free WordPress Writing Companion […]
I really like the idea of this app. For me I’d like to see the posts go to ‘draft’ rather than immediately be published. This would give me a chance to do further editing in wordpress. like adding a photo etc.
Hi Peter, I’ve just rolled out functionality to let you set as draft or published 💪 You’ll see the option in settings.
Great! Thanks!!
Love this.
I’ve added a recurring todoist to write a daily prayer for my site after using this and finding how quickly it enables me to do the main thing.
So much cognitive load removed, I can literally just write and hit publish.
Great resource Jamie!
Wonderful, that’s so great to hear Joe 👍🙏
But does it work for WordPress.com? I’ve generated an app password and it gives an error “Connection failed. Please check your credentials.”.
It works for me on WordPress.com – could you double check credentials?
It keeps failing: “Connection failed. Please check your credentials.” I create an app password in Profile > Security > Two-Step Authentication, checking that I have an active password.
Hi Antonio,
You need to create an application password , not a two-step authentication password.
Instructions in the video above
jamie
Sorry but I don’t see that option in “Users > Profile” 🙁
[…] for WP… Jamie Marsland has created an online writer editor called PootleWriter that prioritizes your writing experience. The online […]
I found this link via the WP Weekly newsletter.
This is interesting. I got it connected quickly and published a post. But I still have to go into my WP admin to add taxonomies, image/featured image, etc. And the text is added to a Classic block instead of Gutenberg blocks.
For these reasons I’d make the same recommendation as Peter and have the posts go to Draft. Or make draft/published an option, with Draft being the default. It’s rare that an entire blog post doesn’t need one or more of these elements.
Noted tks
Hi Matt, I’ve just rolled out functionality to let you set as draft or published 💪 You’ll see the option in settings.
Re classic blocks instead of Gutenburg … I see a button at the top of the page in edit mode to convert to blocks Don’t know if this is my theme (Kadence), my plugins (Kadence) or if it’s standard WordPress. It’s all converted to paragraphs.
Hi Peter, yes that’s expected behaviour (unless you’ve added markdown into your document)
Jamie, have you see Dave Winer’s WordLand? It’s quite similar but built on the wp.com REST API so you can sign in once and access all your sites from the simeple writer interface.
https://wordland.social/
Details here: https://canada.wordcamp.org/2025/hello-i-am-dave-winer-and-welcome-to-wordland/
thanks Dan, i’ll take a look.