It always helps me to see the working code... when it's done...here's how I've implemented this custom component - which lists the 5 most recent blog posts.
notes:
1. The query is where the target blog is identified.... so the code is reusable in a different component with minimal changes.
2. I've included the class model/structure in the bottom half, so that the component will pick up the CSS styling rules for our community.
 
<#-- Blog teaser   v4-->
<#-- change the "board.id" in the query to focus on a different blog/board  -->
<#include "message-macros"/>
<#assign qry = "SELECT id, view_href, author.id, author.view_href, author.login, subject, teaser, body, post_time, post_time_friendly, conversation.style,  board.id, board.title, board.view_href, current_revision.last_edit_time FROM messages WHERE conversation.style = 'blog' AND board.id='sws-22'ORDER BY post_time DESC LIMIT 5" />
<#assign messages = executeLiQLQuery(qry) />
<#if messages?size gt 0>
<#assign brd = messages[0] />
<div class="lia-panel lia-panel-standard  custom-component-blogteaser">
	<div class="lia-decoration-border">
		<div class="lia-decoration-border-top">
			<div class="lia-decoration-border-content">
				<div class="lia-panel-heading-bar-wrapper">
					<div class= "lia-panel-heading-bar">
						<div class= "lia-panel-heading-bar-title">
							<h1> Recent blogs from:   <a href="${getFieldValue(brd.board.view_href)}"> ${getFieldValue(brd.board.title)} </a> </h1>
							<hr /> 
						</div>
						<div class = "lia-panel-content-wrapper">
							<div class="lia-panel-content">
								<#list messages as msg>
								<a href="${getFieldValue(msg.view_href)}" target="_top">
							         <h3 style='display:inline'>-  ${getFieldValue(msg.subject)}  </h3></a>  <p style='display:inline'>    By:   ${getFieldValue(msg.author.login)}</p>
								 	<hr /> 
								 </#list>
							</div>
						</div>
					</div>
				</div>
			</div>
		</div>
	</div>
</div>
</#if> 
Hope this helps someone else.
 
John