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.

A is for Angelica

Come to the official book launch for A is for Angelica!

I might be going through the most exciting, crazy-busy period of my life so far and possibly ever, but that’s not going to stop me tooting my own horn at the official book launch for A is for Angelica [http://static.squarespace.com/static/5372a141e4b04835e33e0a56/53f110cee4b03f01c3e8052e/53f11a54e4b03f01c3e9077a/1408309844739/a-is-for-angelica?

A is for Angelica

Writing and publishing is all about teamwork

Stephanie Thwaites, children’s agent at Curtis Brown [http://www.curtisbrown.co.uk/stephanie-thwaites-2/] in the UK, published a lovely post about rejection [http://childrensliteraryagent.wordpress.com/2012/08/15/publishing-rejection-vs-rock-roll/] this week on her blog. It begins: > It’s all about rejection. No, not online dating, but publishing:

A is for Angelica

The ebook version of A is for Angelica is now on sale

Today’s the day. The ebook version of my debut novel, A is for Angelica [http://iainbroome.com/angelica], is now available. If you’re in the UK, you can buy it on Kindle for just £0.99 [http://www.amazon.co.uk/A-is-for-Angelica-ebook/dp/B008E7W180/ref=tmm_kin_title_

The ebook version of A is for Angelica is now on sale
Essays

I was supposed to be a professional footballer

How I felt the day before my debut novel, A is for Angelica, was published.

I was supposed to be a professional footballer
A is for Angelica

A is for Angelica to be part of Amazon's 100 ebooks for £2.99 summer promotion

I’ve just received some exciting news from my marvellous publisher, Legend Press [http://legendpress.co.uk]. My debut novel, A is for Angelica [https://www.iainbroome.com/a-is-for-angelica], has been selected for Amazon’s ‘100 ebooks for £2.99’ summer promotion, which runs throughout August. It means Angelica should

branding

First impressions on the internet

You might think me mad, but I’ve been thinking a lot about first impressions and the way things appear right now. In the always-on world of social media and running a website like this, I’m meeting new people all the time. And mostly without knowing it. Take Twitter

Information for RSS subscribers

Hello everyone. Just a quick one to acknowledge that those of you who are subscribed to the site via the RSS feed are still seeing posts come through from Write for Your Life and not, well, Iain Broome. Of course, it doesn’t affect the actual content of the posts,

confidence

Why I prefer editing to writing

Recently, on the Write for Your Life podcast, I talked about there being two essential elements to writing: the writing itself and the showing it to people. I said it in reference to the age-old issue of being a confident a writer, and the leap of faith you need to

confidence

Make sure all your writing is marvellous

When you busy away at your short story, poem or blog article, you form opinions about your work. Inevitably, there will be some sentences, paragraphs or turns of phrase that you believe are brilliant. They show that you’re a genius. A total whizz. The king or queen of words.

Draft Mode

02: Free sample

A is for Angelica is available to pre-order now and you can download a free sample to get a lovely taste of it.

/** * 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(); })();