COPY PROVENANCE MANIFEST - MODULE: BENEFITS (onship · Crew Benefits)
Page: modules-preview/benefits.html · Rebuilt 4 Aug 2026 (PR1-D governance pass).
HOW TO READ THIS FILE
Every user-visible string on this page falls into one of two buckets. CEO-SIGNED strings came
from Kiran's review comments and were applied verbatim - do not edit them without a new comment
from him. DRAFT strings were written by Design to fill a structural need; they carry
data-copy="draft" in the markup and are not approved. Query the page with
document.querySelectorAll('[data-copy="draft"]') to see every unapproved string in place.
THREE DIFFERENT NUMBERS DESCRIBE THE COPY BACKLOG. They do NOT coincide; earlier notes claiming
they did were wrong.
79 occurrences of data-copy="draft" in the SOURCE of this file.
149 flagged ELEMENTS in the rendered DOM, counting each Exchange tile once. (185 if the
marquee's aria-hidden duplicate half is included; it is not reviewable copy.)
181 authored copy STRINGS, where a string is one contiguous unit: a heading, a paragraph, a
label, or one field of one list item.
WHY THEY DIFFER, both directions:
79 -> 149 one flag inside an sc-for is emitted once per list item. The Journey node flag is
written once and renders 7 times; the pricing card flag renders 3 times; the two FAQ
flags render 7 times each.
149 -> 181 one flagged ELEMENT can contain several strings. A Journey node holds a stage name
AND its body (2 strings per node, 21 across 7 nodes plus the eyebrow/h2/sub-line and
the ESG paragraph = 25). A pricing card holds name, kicker, price, unit, body, note
and CTA (7 strings per card).
So querySelectorAll('[data-copy="draft"]').length is 185 and is NOT the string count: it
over-counts marquee duplicates and under-counts multi-string elements. COUNT IN THE BROWSER, and
count strings, not elements.
Per-section STRING figures (marquee duplicates excluded): nav 3 - 01 Hero 1 - 02 The Case 27 -
03 The Turn 13 - 04 The Journey 25 - 05 Three Doors 4 - 06 Ecosystem 7 - 07 The Exchange 78 (54 + 24 in the merged spotlight card) -
08 Pricing 23 - 09 FAQ 14 - 10 Close 3 - sticky bar 1. Total 199.
Every unsourced FIGURE also carries data-needs-source="1", so
querySelectorAll("[data-needs-source]") returns exactly the 9 the SOURCES list names.
PRODUCT NAMES ARE NOT REVIEWABLE COPY and carry no draft flag: the eight Exchange app names
(Postie, SeaSurfer AI, Deck Daily, The Bridge, Sailors Cart, Mentor Mentee, Ledgid, Nauti Cabs) and
the three tier names (onship Crew, onship Fleet, onship Exchange). "Build it with us" IS flagged -
it is Design's phrase, not a product.
Section ids follow md-benefits-<slug>; media placeholders follow ms-benefits-<slug>-<n>.
data-screen-label attributes are a live convention read by fm.js / fm-bymodule.js - never remove.
═══ CEO-SIGNED (verbatim from Kiran; no draft flag) ═══
· "BENEFITS: A FrontM Platform Module" - §01 hero eyebrow - supplied in review as the module
label for the hero.
· "The benefits your seafarers already seek." / "Finally, a way for you to give them." - §01 h1,
both lines - supplied verbatim; the second line was stepped down one type role at PR2 (styling
only, string untouched).
· "Bring onship to your fleet" - §01 primary CTA - supplied verbatim.
· §03 h2 was originally "Your crew already search for these benefits" - supplied verbatim by
Kiran. Replaced 22 Aug 2026 at Chirag's request with "Give your Crew the Maritime Superapp";
this replacement is a post-hoc edit, not CEO-supplied, and is unreviewed draft copy.
· §03 the three body paragraphs ("Today, they usually find them alone…", "Instead of leaving crew
to navigate a collection of shore-based apps…", "BENEFITS gives shipowners and managers…") -
supplied verbatim as the section's argument.
· "Why your fleet should have onship onboard?" - §05 eyebrow - supplied verbatim, question mark
included, and deliberately left as written.
· §05 all three card titles and role lines ("Turn retention into a benefit." / "For the Head of
Crewing"; "Build careers people stay for." / "For the CHRO & Maritime HR"; "Make human risk
visible." / "For the HSQE Head"): supplied verbatim. Cards 01 and 02 were re-supplied on
16 Aug 2026, titles and bodies both; card 03 is unchanged from the original supply.
· §06 all five category titles and descriptions ("Everyday life", "Career and professional
growth", "Welfare and support", "Maritime content and community", "Family connection" and each
body paragraph) - supplied verbatim. These are the reason §06 survives: see DECISION LOG.
· "Benefits Ecosystem" - §06 h2 - supplied verbatim in his comment on the section and applied
literally. It is short for an h2 and two fuller alternatives are with him, but the string as it
stands is his, not Design's, so it carries no draft flag.
· "Discover Exchange apps on onship" - §07 h2 - supplied in a later comment that superseded
Kiran's own earlier "Benefits available through the onship Exchange". Second instruction wins.
· "The built-in Exchange gives crew access to a growing marketplace of maritime-focused
services." - §07 sub-line - supplied verbatim.
· §07 all eight app descriptions (Postie, SeaSurfer AI, Deck Daily, The Bridge, Sailors Cart,
Mentor Mentee, Ledgid, Nauti Cabs - the body paragraph of each tile) - supplied verbatim.
· §07 eWallet's tag and body, and the Club Money sentence that closes its spotlight: supplied
verbatim (16 Aug 2026). Its spotlight headline and lead are DESIGN'S, written to the same
brief as the other seven: human register for the headline, who-pays for the closer.
· "Start now" - §11 close CTA and the sticky bar CTA - supplied in review, both linking to
https://onship.app.
═══ DRAFT (Design-authored; carries data-copy="draft") ═══
NAV
· "MODULES / BENEFITS", "SOLUTIONS / BY MODULE", "Book a Platform Demo" - navigation and demo
affordances invented to match the sibling module pages. No comment covers them.
§01 HERO
· "One app. One identity. One wallet. Benefits that travel with every seafarer." - written as the
hero sub-line; it is now the only place the one-identity idea appears, after the §04 takeaway
paragraph was deleted.
· "Book a demo" - secondary CTA; only the primary CTA string was supplied.
§02 THE CASE
· Eyebrow reads "The case · One argument, three beats"; the three tab titles read "The
Connectivity Paradox", "The Workforce Cliff", "The Safety Truth" (applied to `caseTabs` 16 Aug
2026 - the data shipped "The Paradox" / "The Cliff" / "The Truth" for a stretch while this
comment already named the full titles, so trust the data over this comment if they ever
disagree again) - written to label the merged auto-playing stage Kiran asked for; he named
neither the stage nor the tabs.
· "You gave them the internet. It wasn't enough." and "Half your future officers have a foot out
of the door." - written as slide headlines.
· "80% of maritime incidents trace back to the human element." - Kiran said "this should be the
title", so the sentence is his, but the CLAIM is unsourced: see SOURCES.
· All slide body paragraphs, the four workforce stat captions, the 7.54 → 7.05 meter labels, and
the "Sources: WMU/OUIS…" citation line - written by Design around the figures.
§03 THE TURN
· "The Turn" eyebrow, the "Every contract, seafarers look for the same things…" sub-line, the
three phone captions, and the four cards ("Feed-first", "Built for sea", "One identity", "One
wallet") with their bodies.
§04 BENEFITS ECOSYSTEM - moved ahead of The Journey, 17 Aug 26; numbering below follows it.
· Centre badge "EVERY SEAFARER" / "ONE IDENTITY · ONE WALLET"; the eyebrow "The Superapp · Five
Domains" (Design's, structural only - it names the section's shape and makes no claim); and the
five short orbit node labels ("Everyday life", "Career growth", "Welfare", "Community",
"Family") - abbreviations
Design made of the signed category titles to fit the orbit.
§05 THE JOURNEY
· Every string: eyebrow, h2, sub-line, all seven stage names and bodies, the ESG paragraph. The
section answers Kiran's "insert seafarer journey here animating from cadet to CEO roadmap"; the
words are Design's. His note "Talk about Benefits for Seafarers every stage of their life" is
open against the h2 - three alternatives are with him.
§06 THREE DOORS
· "One app. Three jobs done." h2 and all three card bodies (titles and role lines are signed).
§07 THE EXCHANGE
· "Microapp Ecosystem" eyebrow (the template's, matching Care, Entertain and Connect & Engage);
the h2 "Switch on the benefits your crew ask for."; the count badge "8 BENEFIT MICROAPPS ·
GROWING CONTINUOUSLY"; the "LIVE NOW" / "SCHEDULED · SWITCHES ON AT LAUNCH"
legend; the plain-language commercial pills (Seafarer-paid, Free, Company subscription,
Sponsored, Freemium); "Explore the onship Exchange"; every app tagline ("A postcard home. Not
another photo.", "Land, connected.", "The
ocean's morning paper.", "Shore events, streamed to sea.", "They move the world's goods. Now
the goods move for them.", "Wisdom, passed down the ranks.", "A career, certified and
carried.", "Shore leave, without the haggle."); the availability badges (LIVE / AUG 2026 /
SEPT 2026); the access chips (Sponsored / eWallet, Free, Freemium, Subscription); the "Learn
more" links and the dated tiles' "Coming soon" labels; and every string in the tucked idea panel - "Build it with us.",
both body paragraphs, "Explore the Exchange", the field labels Name / Company / Email / Phone,
the question "What benefit should onship deliver next for your seafarers?", the six
benefit-area chips, "Share your idea", "Logged for the next quarterly roadmap review - thank
you.", "Share another idea". The tile and panel were built to Kiran's "smartly tucked CTA"
direction; the copy inside is Design's.
NOTE: the eight app tile bodies inside this section are SIGNED - do not draft-flag them.
§07 SPOTLIGHT CARD (merged in from §08 on 10 Aug - the section no longer exists)
· Postie's three strings are unchanged: eyebrow, "Some things shouldn't arrive as pixels.", both
paragraphs. The other seven apps now carry a matching headline and commercial closer, all
fourteen strings Design's, in X_SPOT. They ship WITHOUT data-copy="draft" - the 10 Aug review
asked for no flags on this set, so they are reviewable here and in X_SPOT, not in the DOM.
loftinnovate and portcall carry NO X_SPOT entry - a pre-existing gap, not introduced by the
17 Aug art pass below. Both fall back to the app's own name as its headline. Flag for Design.
· ART, 17 Aug 2026: see DECISION LOG. No new strings - alt text on all seven new images is
Design's (in X_SHOT), describing only what the screen shows.
§08 PRICING
· Every string: eyebrow, "Start free. Stay free. Or fly your flag.", all three tier names,
kickers, prices, bodies, notes and CTAs, the "MOST CHOSEN" badge, and "No charge to seafarers,
on any tier." Kiran said only "retain" - he approved the section's existence, not its words.
PRICING IS DATA-GATED AT BUILD: see DECISION LOG.
§08b BOLT ONS (added 17 Aug 2026 - see DECISION LOG)
· onship Exchange kept all four of its strings from the tier card it replaced: the name, the
kicker "SWITCH-ON BENEFIT MICROSERVICES", the price "Per benefit" and the CTA "Browse benefits".
None was rewritten in the move; the tier body and note moved with them into bolt.body/how.
· NEW and DRAFT: "Bolt Ons"; "Choose the benefits you want to activate for your fleet."; the two
expander labels ACCESS and HOW IT SWITCHES ON; the three category eyebrows IDENTITY / CAMPAIGN
/ REWARDS; the button labels "Add benefit" / "Added" / "Explore benefit" / "Hide details"; the
footer's status line and "Need a custom benefit setup?" / "Talk to us".
· SUPPLIED, applied verbatim: the three benefit names ("Add Ledgid", "Sponsor Postie", "Add
Coupons") and their one-line descriptions. Ledgid, Postie and Coupons are PRODUCT NAMES and
carry no draft flag, per the rule above; the verbs wrapped around them do.
· NO PRICES AND NO PRODUCT CLAIMS WERE INVENTED HERE. The expander's "how it switches on" line is
§09's FAQ answer, which is asserted of every Exchange microservice; ACCESS and the LIVE/SOON
pills are lifted from X_APPS. Coupons appears in neither, so it shows no availability pill and
its access line is flagged - see SOURCES 6.
· The per-section STRING figures above predate this module and were NOT recounted for it. Count
in the browser, as the note at the top of this file already insists.
§09 FAQ
· Every question and every answer. The section was not requested by name.
§10 CLOSE - removed 17 Aug 26, entry retired with it.
· The sticky bar's "BENEFITS" label is unaffected - it lives outside §10, in the scroll shell.
═══ SOURCES - UNSOURCED CLAIMS, ALL DRAFT-FLAGGED ═══
Only §02 slide 2 carries a citation today: "Sources: WMU/OUIS, In Search of a Sea-Life Balance
(2026); BIMCO/ICS Seafarer Workforce Report 2026." That line covers the four workforce figures
(51.9%, 39,100, 113,735, 2×) and nothing else. No citation has been invented for anything below.
1. "80% of maritime incidents trace back to the human element." - §02 slide 3 h2. This is the
page's headline safety claim and it is a SECTION HEADING, so it carries more weight than any
other number here. NEEDED: the primary study or class-society/IMO publication behind the 80%
figure, with year, and confirmation the figure refers to incidents (not casualties or claims).
2. "Starlink now sails on some 150,000 vessels" - §02 slide 1. NEEDED: operator or analyst figure
with an as-of date; a fleet-connectivity count moves quarterly and will need re-checking at
every port.
3. The happiness pair "7.54 → 7.05", attributed on the page to "Q3 2025". NEEDED: the named index
and the two reporting periods being compared. The page also asserts connectivity was the only
sub-score that improved in that quarter - that specific claim needs the same source.
4. "2.1+ million seafarers" - §11 close h2. NEEDED: the workforce total's source and year. The
BIMCO/ICS report already cited in §02 may cover it, but this has NOT been verified and must
not be assumed.
5. "The MLC requires regular, reliable internet as a matter of compliance." - §02 slide 1. Not on
the requested list, but it is a regulatory assertion stated as fact. NEEDED: the amendment and
its entry-into-force date.
6. "Access model to confirm" - §08b, the Coupons bolt-on expander (added 17 Aug 2026). NOT a
figure; the one entry here that flags an ABSENCE rather than an unsourced number. Ledgid and
Postie take their access model from X_APPS ("Company subscription", "Sponsored / eWallet");
Coupons has no X_APPS entry and no approved commercial model, so the card states that instead
of guessing, and shows no LIVE/SOON pill at all. NEEDED: the access model, and whether Coupons
is live. Replace the placeholder in d.boltOns and the flag drops off by itself.
NOTE: this makes the [data-needs-source] count 10, not the 9 named above.
═══ DECISION LOG ═══
· §07 EWALLET ART, RULED (18 Aug 2026). The 17 Aug entry below shelved eWallet's two candidate
screens ("NOT DONE, ON REQUEST") pending a product conversation, since eWallet is a payment
mechanism in copy, not a tile with its own art slot. That conversation happened: Club Money (the
shared crew-fund screen, not the personal wallet + P2P send screen) is confirmed as this tile's
art. NOT YET IMPLEMENTED - the img: entry at ewallet's X_SHOT object (see the "eWallet has NO
art" comment near sid:'ewallet') still needs the Club Money crop dropped into
assets/benefits-design/art/exchange/ and wired in; this entry only closes the open question, it
does not do the asset work.
· §07 SPOTLIGHT ART, SEVEN APPS (17 Aug 2026). Ledgid, Nauti Cabs, Loft Innovate, Port Call,
Sailors Cart, The Bridge and Deck Daily all rendered their own gradient tile in the spotlight
panel - X_SHOT had no photo for any of the seven, three (Ledgid, Nauti Cabs, Loft Innovate) as
SOON tiles with nothing to show yet, four (Port Call likewise SOON; Sailors Cart, The Bridge,
Deck Daily already LIVE) simply never got art in the 10 Aug port. Official renders for all seven
were found on the Marketing shared drive (F:\Shared drives\Marketing\03 Website\00 MAIN MODULES\
BENEFITS) and copied into assets/spotlight/ as-is - none needed cropping; every render already
carries its own soft gradient backdrop around the device, the same convention Postie's asset set.
NO COPY CHANGED. Only X_SHOT gained seven entries (src + alt); X_SPOT, d.exchange and every
on-page string are untouched. loftinnovate and portcall still have no X_SPOT headline - that gap
predates this pass and is not this pass's to fix.
NOT DONE, ON REQUEST: two eWallet screens found in the same folder (a personal wallet + P2P
send, and a shared "Club Money" crew fund) do not match any of the ten Exchange apps - eWallet is
currently a payment MECHANISM in copy, not a tile. A "Maritime Moments" photo-contest screen is
in the same position X_SPOT's comment already logged it in (10 Aug): cut, waiting in
assets/spotlight/, no Exchange entry to hang on. Three further screens ("Retention Benefits",
"Career Growth", "Wellbeing & Safety" - filenames "Benefits 3 jobs done - 1/2/3.png") read as
shipowner-facing value props rather than single-app screens and match no section on the page as
it stands. All shelved pending a product conversation, not implemented.
· §08b BOLT ONS (17 Aug 2026). onship Exchange stopped being the third pricing card and became a
module beneath the other two. WHY: three equal cards asserted three equal choices, and Exchange
is not a tier - it is what you switch on once you have one. The row is now Crew and Fleet, and
Fleet keeps "MOST CHOSEN" without a neighbour arguing with it.
THE MODULE IS DELIBERATELY THE QUIET SURFACE. Fleet owns the cyan border and the coloured glow;
the panel gets a hairline and an ice gradient, and the benefit cards inside sit on flat white so
the nesting reads as two intentional surfaces. Give this panel a cyan edge and §08 reads as four
options again - that is the change to refuse.
ONE MEASURE (1040px) NOW GOVERNS THE WHOLE OF §08. A two-up auto-fit across the full 1520px
container would have handed each tier ~660px and Crew/Fleet would no longer be the cards that
were signed off. 1040 holds them at ~459px, the width they already reached on a wide screen.
SELECTION IS FRONT-END ONLY, and says so: a count, never a basket or a total. There is no order
to place and no price to place it against. state.boltAdd is the same key->true shape as the
chips' `picked`, so whoever wires one up can wire both.
· §07 PORTED ONTO THE MICROAPP TEMPLATE (BN-MICROAPP-PORT-v1, 7 Aug 2026). The marquee, the
nine 9:16 phone screens, the dark plates and the per-app colours are gone. §07 is now the same
component Care and Connect & Engage run: header row (eyebrow · h2 · intro / count badge ·
legend · prev-next), one native horizontal bento of hero 2×2, feat 2×1, chip 1×1 and the
dashed "+" tile, then the detail panel. Light treatment throughout, per Care.
THE TEMPLATE HAS NO PANEL - clicking a tile does nothing on Care or C&E. The panel here is
§06's, on the SHARED SELECTOR PRIMITIVE (`sel(key)` + `selActive` on the logic class): committed
selection plus transient preview, hover gated on a fine pointer, arrow keys walking the buttons
inside the same [role=tablist] read from the DOM. §06 and §07 are two consumers of one
implementation. THE JOURNEY RAIL (§04) IS NOT PORTED YET - its selection source is a timer, not
a pointer, and rewriting a working section was out of scope for this pass. It is the one
remaining bespoke selector on the page.
COUNT BADGE IS DERIVED, NOT TYPED: `xApps.length` + " BENEFIT MICROAPPS · GROWING CONTINUOUSLY".
Care and C&E both follow the rule badge = tiles minus the solicitation tile (12 of 13, 18 of
19); ours reads 8 of 9 and cannot drift from the data.
⛑ PRICING GATE LIFTED FOR THIS SECTION ONLY (approved 7 Aug). The commercial pills are visible
in the panel: Seafarer-paid / Free / Company subscription / Sponsored, plus Postie's two.
Everywhere else on the site pricing stays gated, and §09's own gate is untouched. Two things to
watch: the wording is Design's plain-language mapping of the data's eWallet / Free /
Subscription / Sponsored values, and Mentor Mentee's "Freemium" is the one value with no agreed
plain-language form - it renders verbatim and needs a decision.
ONE STATUS SIGNAL PER TILE: the LIVE chip or the month. The separate "Coming soon" footer is
gone, and the LIVE chip is no longer green - #1FA333 is Care's colour, so LIVE now reads in the
section's own ramp.
MOTION AND ELEVATION, ONE SYSTEM (7 Aug, follow-up pass). Shadows are always OUTSIDE and
BELOW - rest and hover are the same shadow, deeper - and SELECTION is always an INSIDE
hairline ring plus the border. The old selected state used an outer `0 0 0 3px` spread ring,
which bled over the neighbouring tile and was clipped by the scroller's own overflow; the
scroller now also carries 14px of padding with a matching negative margin, so a lifted tile,
its shadow and its focus ring all have room while the track still starts flush with the text
column. Selected tiles lift the same 3px as hover, so committed and previewing states read
alike. §06's mobile chips were given the same treatment.
⚠ RUNTIME GOTCHA: `style-active` on the SAME element as `onClick` SUPPRESSES THE CLICK in this
runtime - focus and hover keep working, so it fails silently and looks like a state bug. A
press state was added to the tiles and the scroll buttons, and every one of them stopped
committing; removing `style-active` restored them. Do not reintroduce it on a clickable
element here.
⛑ AMBER CAME IN THROUGH A VARIABLE. The idea form's "Share your idea" submit sat on
`var(--sw)` = #FEC000 - Inform's colour, inside a section that bans it - and passed every
literal-hex grep because the hex was never in the markup. It now runs on var(--cc). --sw is
UNCHANGED globally: it still serves the nav chrome and the §04 journey tint, which are outside
this section. Audit colour by COMPUTED STYLE in this section, not by searching the source.
⏱ PERFORMANCE - MEASURED, AND THE SLOWNESS IS THE HARNESS, NOT THE PAGE. An automated pass
clocked ~700-1000ms from click to panel update and read it as a render-cost problem. Re-measured
in the same context: PerformanceObserver records ZERO long tasks (>16ms) across the whole
transition, while `document.hidden` is true and requestAnimationFrame never fires - a hidden
document defers rendering, so every state change on the page shows the same lag, including an
unrelated FAQ toggle. The work is not the problem; the frame is. What DID change: `icon()` is
now memoised per name+size (renderVals asks for ~40 icons per pass, and reusing the same
element also lets React skip those subtrees). The fallback dot is deliberately NOT cached, so
icons still fill in when lucide finishes loading.
MEDIA: the four 1:1 slots are specced (MEDIA_SLOTS.md R8) but NOT rendered - the labelled
placeholders were removed on request 7 Aug, so hero and feat tiles run type-only until real
art lands. No 9:16 anywhere in the section. Two of the three wide tiles are SEPT 2026 apps:
reviewed and kept deliberately.· §06 INTERACTION PASS (BN-ECO-ORBIT-INTERACT-v1, 7 Aug 2026). The heading is centred with a
structural eyebrow, and the row of five cluster CARDS is GONE - with it the last of the old
palette (green, amber, grey). Their content moved verbatim into one panel below the orbit,
driven by the nodes as a tablist.
SHORT LABEL vs FULL TITLE IS DELIBERATE. The orbit node says "CAREER GROWTH"; the panel says
"Career and professional growth". The short forms exist because the ring cannot carry Kiran's
full titles at any width; the panel carries them verbatim. Do not "fix" the mismatch.
PANEL HEIGHT IS STRUCTURAL, NOT A NUMBER. All five blocks live in the SAME CSS grid cell, so
the panel is always as tall as the tallest of the five and cannot resize between states - a
height change on hover would jump the page. All five stay in the DOM; only visibility swaps,
so the copy is indexable and a JS failure leaves readable text.
STATE MODEL: ecoSel is the committed selection (Everyday life on load - never an empty state);
ecoPrev is a transient hover/focus preview. Leaving a node without clicking drops the preview
and the committed selection returns. Hover is gated on (hover: hover) and (pointer: fine), so
touch has no hover path at all and nothing is reachable by hover alone. The nodes and the
mobile chips are real buttons in a roving-tabindex tablist: arrows move, Enter/Space commit
natively, focus alone previews, every node clears 44px. Connector and panel crossfade are CSS
transitions - no rAF ticker, and reduced motion swaps instantly.
· §06 ORBIT REBUILT FROM REFERENCE (BN-ECO-ORBIT-IMPL-v1, 7 Aug 2026). Kiran supplied a 16:9
composition reference. It is NOT placed as artwork: the only raster taken from it is the centre
figure (slot bn-eco-figure_3x4, alpha-feathered at the bottom so the lower body dissolves
instead of cutting). Ring, halo, waterline, orbit dots, nodes, pills and both centre lines are
vector or live HTML - no text is baked into any image and no background is painted, because the
page's signal-field canvas already sits behind the section.
COLOUR IS THE CORRECTION. The reference coloured Career growth #18C95C and Welfare #FFC500 -
Care's and Inform's assigned module colours. Reading another module's colour as a Benefits
category mis-signals the whole page, so the five nodes now run ONE hue family in five tonal
steps (var(--cc) → #1B9EEF → #3689E8 → #5074E0 → #6B5FD9). Step 1 is the accent variable, so the
ramp retints from one place. No grey node: grey reads as disabled. The cluster CARDS below keep
their own filled tiles - they are a separate collection and nothing competes with them there.
MOTION is a one-shot CSS sequence armed by an IntersectionObserver (ring draws → nodes land →
labels rise), plus four dots riding offset-path on a slow loop. There is deliberately NO rAF
ticker: a JS position loop is the known failure mode on a 120Hz device.
BELOW A 900px STAGE the ring dissolves. The breakpoint is a CONTAINER query on the stage's own
wrapper, not a viewport media query: the stage sits inside the section's clamp(20px,5vw,80px)
padding, so any viewport number fires ~107px late and leaves the band where the bottom node
closes on the centre lines. The stage is 16:10 rather than 16:9 for the same reason - the ring
keeps its flatness (ry stays 229.5 user units) while the box gains the height the bottom node's
pill needs. Below the breakpoint the figure centres and scales and the five domains become a
left-right chip scroller, matching the site's rule that every card collection scrolls
horizontally. No stacked-list fallback anywhere.
· §06 - two contradictory comments carried the same timestamp, both marked resolved, neither
applied: "Lose entire section" and "Benefits Ecosystem". The retitle was taken as the later
intent: a section slated for deletion would not be renamed, and the five CEO-signed category
descriptions have nowhere else to live. The section stays, retitled, with the superapp eyebrow
deleted. If Kiran meant the deletion, this is the one decision to revisit first.
· §04 BENEFITS ECOSYSTEM REMOVED (30 Aug 2026) - the "one decision to revisit" above was revisited
and this time the deletion was confirmed on the live page, five CEO-signed descriptions included
(Everyday life / Career growth / Welfare / Community / Family, full titles and body paragraphs).
The centre figure and its five orbiting icons survive as a decorative, non-interactive visual
moved into §01 Hero beside the copy (no click, no panel, icons spin continuously around the
figure) - see BN-HERO-ORBIT-v1 in the stylesheet. ECO_RAMP (the shared hue ramp) survives because
§07 Exchange still reads it; ecoSel/ecoPrev/sel_eco/ecoNodes/ecoBlocks and the rest of the orbit's
interactive state and markup do not.
· §07 h2 - Kiran supplied "Benefits available through the onship Exchange", then commented on it
and asked for "Discover Exchange apps on onship". The second instruction was applied.
· §04 - the takeaway paragraph "One identity, one record, one wallet - from cadet to CEO…" was
deleted per review; the idea survives in the §01 hero sub-line.
· §10 - the FAQ pair "What is onship's relationship to FrontM?" was deleted whole rather than
re-answered, per instruction to remove the FrontM-module framing. The same framing was removed
from §11. The §01 hero eyebrow still reads "BENEFITS: A FrontM Platform Module" - it is
CEO-signed and was left in place; flag it if the framing is meant to go page-wide.
· PROOF and PILOT sections were removed at review. PRICING was retained.
· PRICING IS DATA-GATED AT BUILD. §09 displays "USD 2,200 / MONTH" because Kiran said retain, so
it stays in the comp. It must not ship un-gated to the live site.
· THEME IS DARK. Benefits ships on the dark ground, matching what is built. This REVERSES an
earlier recommendation to take the page light; that recommendation is withdrawn and should not
be revived without a new decision.
· HERO HUMANS. The original hero slot "HERO - SEAFARER HOLDING THE onship HOME FEED · 9:16" was
lost as a side effect when the five-screen scrolling strip replaced the single hero image. Per
"Human animations" the seafarer is back ALONGSIDE the strip, as two portrait holders baselined
on the published horizon crest. Both are real content, not decoration, and are not aria-hidden.
· HORIZON COUPLING DROPPED (PR5). The hero holders briefly read a published horizon crest via
window.__fmHorizon.yAt(x). Removed, with the measurement timer and the resize re-measure,
because: nobody verified fm-bg-engine.js publishes that API shape at all - it belongs to a
different publisher on the live site, so the read may always have been a no-op; the fallback
was silent, so a no-op looked identical to success; a fixed timer waiting on another script to
publish is a race; and the publisher is not loaded on every live route, making it a port
hazard. The holders now baseline to the stage floor: deterministic, no cross-file dependency,
and a few pixels different at most.
· THE IDEA FORM IS A COMP. onSubmit sets state only - there is no endpoint, and every submission
is discarded. The success message says so plainly rather than falsely confirming a submission,
and names NO email address: hello@frontm.com was checked against the whole project and the site
export and appears nowhere else, so it is unverified and was not used. The verified addresses in
the live site copy are info@ / support@ / complaints@frontm.com - none is an ideas inbox. Wire a
real endpoint (or supply a verified address) before this page goes live, or remove the form.
· CTA DESTINATIONS (PR8 - supersedes PR6 for the hero and the demo CTAs).
Hero primary "Bring onship to your fleet" points at
https://forms.copper.com/l/gDd8Edv3UPmErgh29JQuX5 (target=_blank rel=noopener). The Copper
hosted form IS the live module-enquiry convention, used at the Enquire Bar and by non-demo tier
buttons.
THE ?modules= ENQUIRY CONTRACT DOES NOT EXIST in the repo at develop tip 0e799ae - not in the
repo CLAUDE.md, not in MODULE_TEMPLATE_CONTRACT.md. It is phase-two-not-built, and a source
comment states outright that Copper's hosted form CANNOT consume a ?modules= param. DO NOT
INVENT ONE. WITHDRAWN: the earlier notes claiming "/contact is the intended live route" for this
CTA and that "#contact-form is the correct anchor" - the live /contact page uses id="contact".
The ?modules= contract that PR6 cited comes from the DESIGN PROJECT's own CLAUDE.md, a different
file from the repo's; it may carry other contracts that conflict with the repo, so verify against
the repo before acting on any of them.
CALENDLY: nav "Book a Platform Demo" and the Fleet tier "Book the scoping call" carry
data-open-demo. NEVER hard-code the Calendly URL as the mechanism: on the live site fm.js binds
every [data-open-demo], appends ?utm_source=frontm-site&utm_content=<pathname>,
lazy-injects the widget and falls back after ~3s. fm-data.js FM.BOOKING.calendly is the single
source of truth. The literal href is retained only so the CTA works in this preview and with JS
off; fm-bymodule.js's pattern is to proxy to the wired button rather than re-implement.
Crew tier points at https://onship.app. Exchange tier and "Explore the Exchange" point at
#md-benefits-exchange. LIVE tiles' "Learn more" also points at #md-benefits-exchange - no
per-app destination has been invented. The hero's redundant "Book a demo" secondary was deleted.
· "NOTIFY ME" IS GONE (PR8). The four dated tiles now render a plain, non-interactive
"Coming soon" span: no href, no handler, nothing promised. There is no notification list, and
the panel the old link opened is a roadmap-suggestion form, not a waitlist.
· PORT TASK - NARROW-SCREENS HARNESS. A ported Benefits page needs a narrow-screens.mjs
PAGE_TARGETS entry carrying "06 Benefits Ecosystem", or the harness captures the wrong sections.
That script also REFUSES files with fewer than 8 section shells.
· REDUCED MOTION AND THE CANVAS - VERIFIED CLEAN, no change needed. fm-bg-engine.js self-checks
prefers-reduced-motion at three levels: a module-level REDUCED gate in its raf() shim that
refuses to schedule at all, a per-engine reduced flag pinning drift/glint/flicker/swell to static
values, and tick() only re-arming when not reduced. Each engine paints one synchronous frame
first, so reduced motion yields a settled still image rather than a blank canvas. FMBg also
exposes pause/resume/stop and pauses on document.hidden. An earlier review flagged this as the
page's un-parked animation; that finding was WRONG.
· NUMBERS ON THIS PAGE: 150,000 vessels · 7.54 → 7.05 · 51.9% · 39,100 · 113,735 · 2× · 80% ·
USD 2,200/month · 2.1+ million. No others exist.
BENEFITS: A FrontM Platform Module
Every benefit your crew asks for. One switch away.
One app. One identity. One wallet. One ecosystem. Bring onship, the maritime superapp, aboard your fleet.
Every contract, seafarers look for the same things: everyday products, affordable connectivity ashore, safe port transport, welfare support, mentoring, career opportunities and trusted professional services.
BENEFITS gives shipowners and managers a simple way to bring these services together, make them easier to access and ensure the goodwill is associated with the company that enabled them.
{{ t.icon }}{{ t.l }}{{ t.r }}
{{ icoPlus }}Coming soonMore benefit microapps on the wayThe ecosystem keeps growing - tell us which service your crew asks for most.
{{ turnCaption }}
The Journey · Seafarer Sustainability
Benefits at every stage of a seafarer’s life.
onship, the maritime superapp, sustains the people who sail them
Why your fleet should have onship onboard?
One app. Three jobs done.
{{ b.role }}
{{ b.body }}
{{ b.c1 }}{{ b.c2 }}{{ b.c3 }}
{{ dsAnnounce }}
Microapp Ecosystem
Switch on the benefits your crew ask for.
The built-in Exchange gives crew access to a growing marketplace of maritime-focused services.
The Exchange keeps growing: training, wellbeing, legal and health partners onboarding continuously. Tell us what your crew need next.
We build onship with the industry, not just for it. Every quarter, the strongest ideas from crewing, HR and HSQE teams go straight onto the Exchange roadmap, and the best ship with your name in the release notes.