Four Kenyan seafarer groups form united front to engage government on welfare, maritime reforms

Stakeholders representing various seafarers’ organisations. The groups have united to push for jobs, welfare and policy reforms. (Photo: Farhiya Hussein)

Listen to article

4 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.

Seafarers union urges government to establish national wage structure for Kenyan maritime workers

Farhiya Hussein

 · 

3 weeks agoRead nextOpens a fresh page.

The four organisations say the new partnership will strengthen their engagement with the government on employment, welfare, training and maritime policy while giving Kenyan seafarers a unified voice.

Four organisations representing Kenyan seafarers have signed a memorandum of understanding to coordinate their engagement on employment, welfare and maritime policy, saying the partnership will enable them to present their concerns to the government through a single platform.
The agreement brings together the Seafarers Union of Kenya, Kenya Seafarers Welfare, Seafarers Movement and Mkulazini Independent Seafarers amid growing calls for stronger representation of workers in Kenya’s maritime sector.
Speaking during the signing ceremony in Mombasa, Seafarers Union of Kenya Chairman Captain Munga said the organisations had agreed to work together to address challenges facing seafarers instead of pursuing separate agendas.

More To Read

  • Seafarers union urges government to establish national wage structure for Kenyan maritime workers

“This is the beginning of a joint effort by seafarers to engage the government on issues affecting our members and seek lasting solutions,” he said.
Captain Munga said the organisations would develop a joint action plan outlining their immediate, medium-term and long-term priorities before submitting it to the government for consideration.
He said that although Kenya has continued to invest in the blue economy, seafarers still face challenges that require greater attention, including access to training, employment opportunities and welfare support.

Latest Stories

  • Community mediators trained to resolve disputes before they reach court
  • Kenya-Tanzania rail link moves closer as Voi–Taveta project hits 70 per cent
  • ECOWAS backs Ghana’s anti-xenophobia push at AU, endorses reparatory justice agenda
  • Kindiki says political differences should not destroy national unity, urges Kenyans to reject division

He added that the organisations would seek closer engagement with both the national and county governments to address these issues.
“We want to engage the government through one coordinated platform instead of having different groups raising the same concerns independently,” he said.
Albert Andembesa said the collaboration comes at a time when the maritime sector is shifting its focus from policy formulation to implementation, noting that existing legislation should be fully enforced to benefit Kenyan seafarers.
He said effective implementation of maritime laws would improve employment opportunities and working conditions for trained seafarers.
Maritime stakeholder Hamisi Mwaguya said the agreement followed years of discussions on the need to unite organisations representing seafarers.
He said a unified platform would make it easier for stakeholders to engage the government on issues affecting the maritime sector.
During the event, Seafarers Union of Kenya Shop Steward Alfan Jilani urged the national government to invest in commercial vessels, saying this would create more employment opportunities for qualified Kenyan seafarers.
He also raised concerns about poor working conditions in parts of the industry, saying some seafarers are paid low wages while others work without formal employment contracts, leaving them vulnerable to exploitation.
Jilani said the organisations hoped that speaking with one voice would strengthen efforts to address these challenges through dialogue with the relevant authorities.
Stakeholders said better coordination among industry players could help address labour concerns while supporting Kenya’s efforts to expand opportunities in shipping and other marine-related industries.

Other Topics To Read

Top Stories Today

  • Kindiki urges Kenyans to reject division and protect national unity
  • Professional mediators trained to ease court case backlog
  • Voi–Taveta railway upgrade hits 70 per cent completion
  • ECOWAS backs Ghana’s anti-xenophobia push at AU
  • US praises Somalia after suspect in Sh32 billion Covid fraud is extradited
  • DCI investigates violence and armed goons in Ol Kalou mini-poll

`;
}

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

Kenyans withdraw billions from Boma Yangu despite growth in housing savingsNews
|Lucy Mumbi
|14 hours ago
Kenya-Tanzania rail link moves closer as Voi–Taveta project hits 70 per centNews
|Rachael Mutabasi
|1 hour ago
Lamu Leaders, residents back Sh2.2 trillion Dangote-linked oil refinery, demand local inclusionCoast
|Farhiya Hussein
|11 hours ago
Sh32 billion Covid relief fraud suspect flown to US as Somalia deepens law enforcement cooperationSomalia
|Abdirahman Khalif
|2 hours ago
Kindiki says political differences should not destroy national unity, urges Kenyans to reject divisionPolitics
|Rachael Mutabasi
|2 hours ago
UN humanitarians step up Ebola response amid growing violence in DR CongoRegional
|XINHUA
|1 day ago
Shadows of past political violence shape lives of young Africans for years: A study of nine countriesAfrica
|The Conversation
|4 hours ago
Katiba Institute, Muite demand answers over alleged quarantine of seven Americans at Laikipia Air BaseNews
|Rachael Mutabasi
|1 day ago
Ol Kalou violence: Amnesty Kenya wants CS Murkomen to account for police failure during pollsNews
|Lucy Mumbi
|10 hours ago

Two American service members killed in Jordan amid renewed US-Iran hostilitiesWorld
|Bashir Mbuthia
|1 day ago

Share.
Leave A Reply

Exit mobile version