Listen to article
3 min listen
Audio reading is not supported on this browser.
Ready
Thanks for listening. Continue with a related story, or tap the speaker icon on the next page to listen.

Kilifi Governor Mung’aro overhauls Finance, Water and Blue Economy leadership in fresh reshuffle
Farhiya Hussein
·
2 days agoRead nextOpens a fresh page.
Mombasa County has introduced specialised maritime, hospitality and technical courses under the KBEST programme to equip young people with industry-relevant skills and expand employment opportunities in the blue economy.
Mombasa County has introduced specialised vocational training courses in maritime, hospitality and technical fields to equip young people with skills aligned with employment opportunities in the blue economy.
The new programmes were launched at Mtongwe Vocational Training Centre in Likoni and will also be offered at Kisauni Vocational Training Centre, expanding access to technical and vocational education across the county.
The courses include outboard engine repair under boat building and repair, marine refrigeration and air conditioning, baking technology, accommodation operations, and basic safety and firefighting. They are designed to prepare learners for careers in maritime transport, tourism, hospitality and marine services.
More To Read
- Kilifi Governor Mung’aro overhauls Finance, Water and Blue Economy leadership in fresh reshuffle
- Pwani Innovation Week targets 2 million youth as Coast region hunts for jobs and investment
- Mombasa Woman Rep Zamzam Mohammed urges county to reopen road to GBV centre
- Kwale residents want ecotourism jobs after restoring 288 hectares of mangrove forest
- MPs urge TVETs to intensify student recruitment amid enrolment decline
- Sifuna wants employers barred from using CRB records in job recruitment
To support young mothers pursuing vocational education, the county also commissioned a daycare facility under the Second Chance Programme. The centre will provide childcare services, enabling students with children to continue their training.
The county is also constructing an automotive workshop to strengthen practical skills training, alongside two early childhood development and education (ECDE) classrooms to expand learning space.
Mombasa County has launched specialised vocational training programmes to equip young people with skills for jobs in the blue economy, tourism and technical sectors. (Photo: Handout)
Latest Stories
- Edwin Sifuna hints at 2027 presidential run as Linda Mwananchi weighs next move
- Push to make mrangi a scheduled crop gains momentum as Senate invites public input
- AFC Leopards sign Eric Namaan Balecho from Bandari on two-year deal
- Somalia’s Finance Minister urges shift from aid dependence as donor funding drops 25 per cent
Speaking during the launch, Governor Abdulswamad Shariff Nassir said vocational training should equip young people with skills that translate into employment and income-generating opportunities.
He said the courses had been introduced under the Kenya Blue Economy Skills Training (KBEST) Programme, which is being implemented in partnership with Colleges and Institutes Canada (CICan).
“The blue economy presents opportunities in sectors such as maritime transport, tourism and ship repair. Our responsibility is to ensure young people acquire the skills needed to take part in these sectors through employment, enterprise and self-employment,” the governor said.
Abdulswamad said the county would continue expanding vocational training programmes while strengthening collaboration between training institutions and industry to ensure the courses meet labour market demands.
He added that partnerships with training institutions, development organisations and private sector players would play a key role in creating employment opportunities for graduates both within Kenya and abroad.
The governor also highlighted the county’s Tourism Innovation Hub as one of the initiatives aimed at linking graduates to employment, innovation and entrepreneurship opportunities in tourism and maritime-related sectors.
The programme is part of broader efforts to strengthen technical and vocational education and training (TVET) and tackle youth unemployment by developing skills tailored to emerging industries along Kenya’s coast.
Other Topics To Read
Top Stories Today
- Edwin Sifuna signals openness to 2027 presidential contest
- Senate seeks public views on bid to recognise mrangi as official cash crop
- Somalia’s Finance Minister urges shift from aid dependence as donor funding drops 25 per cent
- Kenya joins AU’s top paying nations in major financial milestone
- High Court dismisses bid to halt 2027 poll preparations pending constitutional review
- Somalia, US deepen security and trade ties in Mogadishu talks
`;
}
return “;
}
function commentActionsMarkup(comment, canComment) {
const likeLabel = comment.liked_by_me ? ‘Liked’ : ‘Like’;
const likeCount = Number(comment.like_count || 0) > 0
? “
: ”;
const likeButton = canComment && comment.status === ‘approved’
? “
: “;
const replyButton = canComment && comment.status === ‘approved’
? “
: ”;
return `
`;
}
function commentMarkup(comment, canComment, isReply = false) {
const pendingBadge = comment.status && comment.status !== ‘approved’
? “
: ”;
const edited = comment.is_edited
? “
: ”;
const repliesHtml = Array.isArray(comment.replies) && comment.replies.length
? `
`
: “;
return `
`;
}
function replyFormMarkup(commentId) {
return `
`;
}
function setNotice(widget, message, type = ‘info’) {
const notice = widget.querySelector(‘[data-role=”notice”]’);
if (!notice) return;
if (!message) {
notice.hidden = true;
notice.textContent = ”;
notice.classList.remove(‘is-error’);
return;
}
notice.hidden = false;
notice.textContent = message;
notice.classList.toggle(‘is-error’, type === ‘error’);
}
function setCount(widget, total) {
const count = widget.querySelector(‘[data-role=”count”]’);
if (!count) return;
const num = Number(total || 0);
count.textContent = num === 1 ? ‘1 comment’ : `${num} comments`;
}
function openReplyBox(widget, commentId) {
widget.querySelectorAll(‘[data-role=”reply-box”]’).forEach(box => {
box.hidden = true;
box.innerHTML = ”;
});
const targetItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (!targetItem) return;
const replyBox = targetItem.querySelector(‘[data-role=”reply-box”]’);
if (!replyBox) return;
replyBox.hidden = false;
replyBox.innerHTML = replyFormMarkup(commentId);
const textarea = replyBox.querySelector(‘textarea’);
if (textarea) textarea.focus();
}
function closeReplyBox(container) {
if (!container) return;
container.hidden = true;
container.innerHTML = ”;
}
async function initCommentsWidget(widget) {
const state = {
articleId: Number(widget.dataset.articleId),
loadUrl: widget.dataset.loadUrl,
storeUrl: widget.dataset.storeUrl,
commentsBaseUrl: widget.dataset.commentsBaseUrl,
canComment: widget.dataset.canComment === ‘1’,
page: 1,
perPage: 10,
sort: ‘newest’,
total: 0,
hasMore: false,
busy: false
};
const list = widget.querySelector(‘[data-role=”list”]’);
const loading = widget.querySelector(‘[data-role=”loading”]’);
const empty = widget.querySelector(‘[data-role=”empty”]’);
const loadMoreBtn = widget.querySelector(‘[data-role=”load-more”]’);
const sortSelect = widget.querySelector(‘[data-role=”sort”]’);
const composerForm = widget.querySelector(‘[data-role=”composer-form”]’);
async function loadComments(reset = true) {
if (state.busy) return;
state.busy = true;
setNotice(widget, ”);
loading.hidden = false;
if (reset) {
state.page = 1;
list.innerHTML = ”;
empty.hidden = true;
}
try {
const url = new URL(state.loadUrl, window.location.origin);
url.searchParams.set(‘page’, state.page);
url.searchParams.set(‘per_page’, state.perPage);
url.searchParams.set(‘sort’, state.sort);
const response = await requestJson(url.toString(), {
method: ‘GET’,
headers: {
‘Accept’: ‘application/json’,
‘X-Requested-With’: ‘XMLHttpRequest’
}
});
const items = Array.isArray(response.data) ? response.data : [];
const meta = response.meta || {};
state.total = Number(meta.total || 0);
state.hasMore = !!meta.has_more;
setCount(widget, state.total);
if (reset) {
list.innerHTML = ”;
}
if (!items.length && reset) {
empty.hidden = false;
} else {
empty.hidden = true;
list.insertAdjacentHTML(
‘beforeend’,
items.map(item => commentMarkup(item, state.canComment, false)).join(”)
);
}
loadMoreBtn.hidden = !state.hasMore;
} catch (error) {
if (!list.children.length) {
empty.hidden = false;
empty.textContent = ‘Unable to load comments right now.’;
}
setNotice(widget, error.message || ‘Unable to load comments.’, ‘error’);
} finally {
loading.hidden = true;
state.busy = false;
}
}
async function submitTopLevelComment(form) {
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘[data-role=”submit-comment”]’);
if (!textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(state.storeUrl, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
textarea.value = ”;
if (response?.data) {
list.insertAdjacentHTML(
‘afterbegin’,
commentMarkup(response.data, state.canComment, false)
);
empty.hidden = true;
if ((response.data.status || ”) === ‘approved’) {
state.total += 1;
setCount(widget, state.total);
}
}
setNotice(widget, response.message || ‘Comment posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post comment.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post comment’;
}
}
}
async function submitReply(form) {
const commentId = Number(form.dataset.commentId || 0);
const textarea = form.querySelector(‘textarea[name=”content”]’);
const button = form.querySelector(‘.ev-comments__reply-submit’);
if (!commentId || !textarea) return;
const content = textarea.value.trim();
if (!content) return;
const originalText = button ? button.textContent : ”;
try {
if (button) {
button.disabled = true;
button.textContent = ‘Posting…’;
}
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/reply`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({
article_id: state.articleId,
content: content,
source_url: window.location.href
})
});
if (response?.data) {
const parentItem = widget.querySelector(`.ev-comments__item[data-comment-id=”${commentId}”]`);
if (parentItem) {
const repliesWrap = parentItem.querySelector(‘.ev-comments__replies’);
if (repliesWrap) {
repliesWrap.insertAdjacentHTML(
‘beforeend’,
commentMarkup(response.data, state.canComment, true)
);
}
}
}
closeReplyBox(form.closest(‘[data-role=”reply-box”]’));
setNotice(widget, response.message || ‘Reply posted successfully.’);
} catch (error) {
setNotice(widget, error.message || ‘Unable to post reply.’, ‘error’);
} finally {
if (button) {
button.disabled = false;
button.textContent = originalText || ‘Post reply’;
}
}
}
async function toggleLike(button) {
const commentId = Number(button.dataset.commentId || 0);
if (!commentId) return;
const originalHtml = button.innerHTML;
try {
button.disabled = true;
button.innerHTML = ‘Working…’;
const response = await requestJson(`${state.commentsBaseUrl}/${commentId}/like`, {
method: ‘POST’,
headers: buildJsonHeaders(),
body: JSON.stringify({})
});
const liked = !!response?.data?.liked;
const likeCount = Number(response?.data?.like_count || 0);
button.classList.toggle(‘is-liked’, liked);
button.innerHTML = `${liked ? ‘Liked’ : ‘Like’} ${likeCount > 0 ? “ : ”}`;
} catch (error) {
button.innerHTML = originalHtml;
setNotice(widget, error.message || ‘Unable to update like.’, ‘error’);
} finally {
button.disabled = false;
}
}
if (composerForm) {
composerForm.addEventListener(‘submit’, function (e) {
e.preventDefault();
submitTopLevelComment(composerForm);
});
}
if (sortSelect) {
sortSelect.addEventListener(‘change’, function () {
state.sort = this.value || ‘newest’;
loadComments(true);
});
}
if (loadMoreBtn) {
loadMoreBtn.addEventListener(‘click’, function () {
if (state.busy || !state.hasMore) return;
state.page += 1;
loadComments(false);
});
}
widget.addEventListener(‘click’, function (e) {
const likeBtn = e.target.closest(‘[data-action=”toggle-like”]’);
if (likeBtn) {
e.preventDefault();
toggleLike(likeBtn);
return;
}
const replyBtn = e.target.closest(‘[data-action=”toggle-reply”]’);
if (replyBtn) {
e.preventDefault();
openReplyBox(widget, Number(replyBtn.dataset.commentId || 0));
return;
}
const cancelReplyBtn = e.target.closest(‘[data-action=”cancel-reply”]’);
if (cancelReplyBtn) {
e.preventDefault();
closeReplyBox(cancelReplyBtn.closest(‘[data-role=”reply-box”]’));
}
});
widget.addEventListener(‘submit’, function (e) {
const replyForm = e.target.closest(‘.ev-comments__reply-form’);
if (replyForm) {
e.preventDefault();
submitReply(replyForm);
}
});
loadComments(true);
}
document.addEventListener(‘DOMContentLoaded’, function () {
document.querySelectorAll(‘.ev-comments’).forEach(initCommentsWidget);
});
})();
Trending
AFC Leopards sign Eric Namaan Balecho from Bandari on two-year dealSports
|Bashir Mbuthia
|4 hours ago
Finland-Canada scholarship scam: Victims storm Uasin Gishu offices demanding refundsNews
|Lucy Mumbi
|12 hours ago
Glasgow 2026 Commonwealth Games Medal StandingsInfographics
|Charity Pancras
|9 hours ago
Edwin Sifuna hints at 2027 presidential run as Linda Mwananchi weighs next movePolitics
|Bashir Mbuthia
|3 hours ago
Kenya hits VAT ceiling, leaving little to no room for further tax hikes, KIPPRA study showsBusiness
|Alfred Onyango
|6 hours ago

High Court dismisses bid to halt 2027 General Election preparations pending constitutional reviewNews
|Carolyne Kubwa
|5 hours ago
FAA orders inspections of hundreds of Boeing 737 MAX jets over seat safety concernsNews
|Mary Wambui
|14 hours ago

High Court declares shisha ban unconstitutional, stops enforcement of 2017 rulesNews
|Carolyne Kubwa
|13 hours ago
Somalia opposition calls for transitional council, urges international backing amid political crisisSomalia
|Abdirahman Khalif
|1 day ago
Inside agreement that eased ars ago
