Skip to content

Iain Broome

I'm the author of the novel, A is for Angelica. Every week, I send Draft Mode, a newsletter full of tips and tools that help you improve your craft and promote your writing.

The Handmaid’s Tale by Margaret Atwood

I reread Margaret Atwood’s The Handmaid’s Tale [https://amzn.to/2MCtwcC] earlier this year and my goodness, it felt more pertinent and devastating this time around. It is brilliant. Beautifully written. A powerful and painful experience that I highly recommend. I first read The Handmaid’s Tale – ooh,

Stories

Weeds

A piece of flash fiction brought to life by my good pal and ace illustrator and designer-type, Rich Wells.

Weeds
pen

My dad made me a pen

Not one typically for emotion, my dad whittled me a pen on his new lathe and it felt pretty all right.

My dad made me a pen

Some habits for 2018

Some thoughts and plans for the year ahead and how I’m hoping to focus on habits, not goals.

Some habits for 2018

All the time and often

Why do we use technology all the time if we feel so negatively about what it is and does to us?

All the time and often
creativity

CreativeMornings Sheffield

CreativeMornings [https://creativemornings.com/] is a monthly event that tales place in cities all over the world. Creative folk get up early and gather at a lovely venue to drink coffee, eat too much pastry and hear a talk by someone marvellous. CreativeMornings comes to Sheffield Sheffield, my home city,

Édouard Louis

Fact or fiction: autobiographical novels with Édouard Louis

This episode of the Guardian Books podcast featuring Édouard Louis [https://soundcloud.com/guardianbookspodcast/fact-or-fiction-autobiographical-novels-with-edouard-louis-books-podcast] had me absolutely hooked. I hadn’t heard anything about Édouard Louis before, but two things struck me about his interview. First, the eloquence and clarity with which he talks about his childhood and the

children

The Very Persistent Gappers of Frip by George Saunders

George Saunders is one of those authors I’ve heard other people rave about for years but never read myself. After rewatching his brilliant advice on storytelling [http://iainbroome.com/blog/george-saunders-on-the-mystery-of-storytelling], I decided to give him a go. Drawn in by the amazing cover and title, I chose a

austin kleon

Art is theft

This is a gorgeous short film by Daniel Cordero [https://vimeo.com/197324296]. It outlines the idea that creativity comes from the artists and art that inspire us – that we ‘steal’ it to make something new. > Creation is not inspired by one man, woman or one thing. We are

business

The $100 Startup

I’m trying to make sure I read more in 2017. One way of doing that is to share some short thoughts about the books I get through here on the site. Let’s get cracking. The $100 Startup [http://amzn.to/2iyou0I] is both a book and the kind

/** * Micro.blog integration for Ghost using App Token (recommended approach) * To use this script: * 1. Go to your Ghost Admin Panel * 2. Navigate to Settings → Code Injection * 3. Paste this code in the "Site Footer" section * 4. Replace the placeholders with your actual values */ (function() { // Configuration const config = { microblogUsername: 'iainbroome', // Your micro.blog username appToken: '5FCF352BBF139DA801F8', // Your micro.blog app token (if using authenticated API) postsPerPage: 10, targetElement: '#microblog-posts' // The element where posts will be displayed }; // Only run on the micro.blog page if (!document.querySelector(config.targetElement)) { return; } // Styles const styles = ` .mb-container { margin: 2rem 0; } .mb-post { margin-bottom: 2rem; padding-bottom: 1.5rem; border-bottom: 1px solid var(--ghost-accent-color, #eee); } .mb-post:last-child { border-bottom: none; } .mb-date { font-size: 0.9rem; color: var(--ghost-secondary-color, #666); margin-bottom: 0.5rem; } .mb-content { margin-bottom: 0.5rem; } .mb-content img { max-width: 100%; border-radius: 4px; margin: 0.5rem 0; } .mb-link { font-size: 0.9rem; } .mb-link a { color: var(--ghost-accent-color, #1a73e8); text-decoration: none; } .mb-link a:hover { text-decoration: underline; } .mb-pagination { display: flex; justify-content: space-between; margin-top: 2rem; } .mb-pagination button { background-color: var(--ghost-accent-color, #1a73e8); color: white; border: none; padding: 8px 16px; border-radius: 4px; cursor: pointer; } .mb-pagination button:disabled { background-color: #ccc; cursor: not-allowed; } .mb-error { color: #d32f2f; padding: 15px; border: 1px solid #ffd7d7; background-color: #fff8f8; border-radius: 4px; } .mb-loading { text-align: center; padding: 20px; color: var(--ghost-secondary-color, #666); } `; // Add styles to head const styleElement = document.createElement('style'); styleElement.textContent = styles; document.head.appendChild(styleElement); // State let currentPage = 1; // DOM elements const targetElement = document.querySelector(config.targetElement); if (!targetElement) return; // Create container elements const container = document.createElement('div'); container.className = 'mb-container'; const postsContainer = document.createElement('div'); postsContainer.className = 'mb-posts'; const paginationContainer = document.createElement('div'); paginationContainer.className = 'mb-pagination'; paginationContainer.innerHTML = ` `; container.appendChild(postsContainer); container.appendChild(paginationContainer); targetElement.appendChild(container); const prevButton = paginationContainer.querySelector('.mb-prev'); const nextButton = paginationContainer.querySelector('.mb-next'); // Fetch posts function fetchPosts(page = 1) { postsContainer.innerHTML = '
Loading micro.blog posts...
'; let endpoint, headers = {}; if (config.appToken) { // Authenticated API (preferred) endpoint = `https://micro.blog/posts?count=${config.postsPerPage}&page=${page}`; headers = { 'Authorization': `Bearer ${config.appToken}` }; } else { // Public JSON feed (limited) endpoint = `https://micro.blog/posts/${config.microblogUsername}`; } fetch(endpoint, { headers }) .then(response => { if (!response.ok) { throw new Error(`Failed to fetch posts (${response.status})`); } return response.json(); }) .then(data => { displayPosts(data.items || []); updatePagination((data.items || []).length < config.postsPerPage); }) .catch(error => { postsContainer.innerHTML = `

Error loading micro.blog posts: ${error.message}

Note: For best results, obtain an app token from micro.blog.

`; }); } // Display posts function displayPosts(posts) { if (!posts || posts.length === 0) { postsContainer.innerHTML = '

No micro.blog posts found.

'; return; } postsContainer.innerHTML = ''; posts.forEach(post => { const postDate = new Date(post.date_published); const postElement = document.createElement('div'); postElement.className = 'mb-post'; let postHTML = `
${formatDate(postDate)}
${post.content_html}
`; if (post.url) { postHTML += ` `; } postElement.innerHTML = postHTML; postsContainer.appendChild(postElement); }); } // Update pagination buttons function updatePagination(isLastPage) { prevButton.disabled = currentPage === 1; nextButton.disabled = isLastPage; } // Format date function formatDate(date) { const options = { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit' }; return date.toLocaleDateString(undefined, options); } // Event listeners for pagination prevButton.addEventListener('click', function() { if (currentPage > 1) { currentPage--; fetchPosts(currentPage); scrollToTop(); } }); nextButton.addEventListener('click', function() { currentPage++; fetchPosts(currentPage); scrollToTop(); }); // Scroll to top of posts container function scrollToTop() { container.scrollIntoView({ behavior: 'smooth' }); } // Initial fetch fetchPosts(); })();