ocearo-ui 0.1.21 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/404.html +1 -1
  2. package/README.fr.md +123 -133
  3. package/README.md +120 -134
  4. package/__next.__PAGE__.txt +19 -5
  5. package/__next._full.txt +11 -11
  6. package/__next._tree.txt +2 -2
  7. package/_next/static/chunks/0-c2-u5p6bxzo.js +1 -0
  8. package/_next/static/chunks/01atsfq_4opab.js +1 -0
  9. package/_next/static/chunks/0cx639tthxlz4.js +1 -0
  10. package/_next/static/chunks/0h2qsuyze9ds1.js +1 -0
  11. package/_next/static/chunks/0iqdztntvxh3c.js +119 -0
  12. package/_next/static/chunks/0iztd835j5p1n.js +700 -0
  13. package/_next/static/chunks/{2nxsyowmuwpjy.js → 0jfox92up1jvy.js} +1 -1
  14. package/_next/static/chunks/0jpa5m78l0ib0.js +1 -0
  15. package/_next/static/chunks/0kpstejrka-7k.js +1 -0
  16. package/_next/static/chunks/0n95joti2n2py.js +3 -0
  17. package/_next/static/chunks/0oaqe70syw_b5.js +1 -0
  18. package/_next/static/chunks/0ohleay4roayh.js +353 -0
  19. package/_next/static/chunks/0on1skx9l54-9.js +1 -0
  20. package/_next/static/chunks/0w_skktmh3e48.js +1 -0
  21. package/_next/static/chunks/0y-dctk-kmqss.js +1 -0
  22. package/_next/static/chunks/0yiqocv54ogoq.js +1 -0
  23. package/_next/static/chunks/0zlk2mlkvbtj1.js +1 -0
  24. package/_next/static/chunks/0zwc9m4qgtwle.js +1 -0
  25. package/_next/static/chunks/11awvgcou7v4r.js +1 -0
  26. package/_next/static/chunks/144mjqdrx42lq.js +1 -0
  27. package/_next/static/chunks/1d81m3g9jqkob.js +1 -0
  28. package/_next/static/chunks/1ed7ayfg19cjb.js +1 -0
  29. package/_next/static/chunks/1epya-yh2wvj2.js +1 -0
  30. package/_next/static/chunks/1exvcc71cgr4t.js +446 -0
  31. package/_next/static/chunks/1fzzb4jtgv5gg.js +9 -0
  32. package/_next/static/chunks/1g8fbzv0hu0i2.js +1 -0
  33. package/_next/static/chunks/1gaiqhzy_0d7s.js +1 -0
  34. package/_next/static/chunks/1gq4t2dyr7rq3.js +1 -0
  35. package/_next/static/chunks/1l-jew0-1-3eq.js +30 -0
  36. package/_next/static/chunks/1ptj3mv8b_tzs.js +1 -0
  37. package/_next/static/chunks/1w1xks0hp_tlr.js +346 -0
  38. package/_next/static/chunks/1xekc18cyi4sx.js +1 -0
  39. package/_next/static/chunks/1y35unwvy8p98.js +1 -0
  40. package/_next/static/chunks/2aq8orcir5h03.js +1 -0
  41. package/_next/static/chunks/2fdpvhx4oo81h.js +1 -0
  42. package/_next/static/chunks/2g-xpe7xnropn.js +409 -0
  43. package/_next/static/chunks/2kmptoy43h0mx.js +1 -0
  44. package/_next/static/chunks/2n86yq1wz1yx7.js +1 -0
  45. package/_next/static/chunks/2r_h93rt76vka.js +1 -0
  46. package/_next/static/chunks/2rebcvig176xk.js +564 -0
  47. package/_next/static/chunks/2w71oj1brox5z.js +1 -0
  48. package/_next/static/chunks/2wayx8t5r5fi9.js +1 -0
  49. package/_next/static/chunks/2y3d8zopa8r5r.css +3 -0
  50. package/_next/static/chunks/3--qzv1u6c7_7.js +1 -0
  51. package/_next/static/chunks/31lugryguappr.js +1 -0
  52. package/_next/static/chunks/32j_j396qs7be.js +1 -0
  53. package/_next/static/chunks/32yn_fc-es66m.js +22 -0
  54. package/_next/static/chunks/34_oyzp8_pi_m.js +1 -0
  55. package/_next/static/chunks/34wvn5zw0a69w.js +1 -0
  56. package/_next/static/chunks/37t6vg8fb1-z8.js +1 -0
  57. package/_next/static/chunks/3k5itcabq5oqs.js +9 -0
  58. package/_next/static/chunks/3ktj0iemsr1m-.js +1 -0
  59. package/_next/static/chunks/3nm7o0eq5abhg.js +1 -0
  60. package/_next/static/chunks/3s6nzrbk-8mnv.js +31 -0
  61. package/_next/static/chunks/3td9mnhvcj9cq.js +1 -0
  62. package/_next/static/chunks/3xjnsskh0tayo.js +1 -0
  63. package/_next/static/chunks/3zqx8h9yg5-ch.js +1 -0
  64. package/_next/static/chunks/turbopack-1h111qg8l92rw.js +1 -0
  65. package/_not-found/__next._full.txt +12 -12
  66. package/_not-found/__next._not-found.__PAGE__.txt +19 -2
  67. package/_not-found/__next._tree.txt +2 -2
  68. package/_not-found.html +1 -1
  69. package/_not-found.txt +12 -12
  70. package/boats/boats.json +40 -5
  71. package/index.html +1 -1
  72. package/index.txt +11 -11
  73. package/package.json +14 -14
  74. package/settings/__next._full.txt +14 -14
  75. package/settings/__next._tree.txt +2 -2
  76. package/settings/__next.settings.__PAGE__.txt +22 -5
  77. package/settings.html +1 -1
  78. package/settings.txt +14 -14
  79. package/__next._head.txt +0 -6
  80. package/__next._index.txt +0 -5
  81. package/_next/static/chunks/009rlietvsaq2.js +0 -1
  82. package/_next/static/chunks/070stlm97b9a2.js +0 -1
  83. package/_next/static/chunks/08gn5_gd6amkq.js +0 -1
  84. package/_next/static/chunks/0abo2oxxw3hpi.js +0 -1
  85. package/_next/static/chunks/0jzbiie0nzar2.js +0 -1
  86. package/_next/static/chunks/0l9s4rhr00adq.js +0 -1
  87. package/_next/static/chunks/0ri_um14-5x7u.js +0 -1
  88. package/_next/static/chunks/0utifqhyv2cuc.js +0 -1
  89. package/_next/static/chunks/0uvr7xkt_5uno.js +0 -1
  90. package/_next/static/chunks/0wzr1__so6xme.js +0 -1
  91. package/_next/static/chunks/0zjxnzbxh76mt.js +0 -1
  92. package/_next/static/chunks/11ln9lzzbo35q.js +0 -1
  93. package/_next/static/chunks/1bz0tcmhjmjgh.js +0 -1
  94. package/_next/static/chunks/1d4h-sglyo8ft.js +0 -1
  95. package/_next/static/chunks/1gizigk3w6q7j.js +0 -31
  96. package/_next/static/chunks/1porlo35ga4zu.js +0 -1
  97. package/_next/static/chunks/1ptwltjb3h6jf.js +0 -4
  98. package/_next/static/chunks/1sq_733weprvs.js +0 -1
  99. package/_next/static/chunks/1w1ua0-p5lk1e.js +0 -38
  100. package/_next/static/chunks/1wv5e5qomv-7g.css +0 -3
  101. package/_next/static/chunks/27hn45pv56pv7.js +0 -393
  102. package/_next/static/chunks/28y-j215vt42m.js +0 -1
  103. package/_next/static/chunks/29-ag86gvlc40.js +0 -9
  104. package/_next/static/chunks/2a0yjir_3mk1m.js +0 -1
  105. package/_next/static/chunks/2atijj_pkc4uc.js +0 -2
  106. package/_next/static/chunks/2baz6j1q913qw.js +0 -1
  107. package/_next/static/chunks/2ccpehidlaq88.js +0 -1
  108. package/_next/static/chunks/2lez3uww9j4t0.js +0 -135
  109. package/_next/static/chunks/2lvvt2f1l5sfu.js +0 -1
  110. package/_next/static/chunks/2nd5amcst4lhp.js +0 -1
  111. package/_next/static/chunks/2pwmb4pkqygy_.js +0 -1
  112. package/_next/static/chunks/2rsdqsatgq9ta.js +0 -1
  113. package/_next/static/chunks/2uao1hfsz-oy8.js +0 -1
  114. package/_next/static/chunks/2urimbxg5bqv3.js +0 -1
  115. package/_next/static/chunks/2yghvponatk1x.js +0 -135
  116. package/_next/static/chunks/31i14-jemhnic.js +0 -863
  117. package/_next/static/chunks/32cbrrsp-x35l.js +0 -1
  118. package/_next/static/chunks/36ra6xjie0dsv.js +0 -9
  119. package/_next/static/chunks/3dt63tw_9r0jt.js +0 -38
  120. package/_next/static/chunks/3iuz3f0429awx.js +0 -1
  121. package/_next/static/chunks/3jh1u-s3k0bkk.js +0 -1
  122. package/_next/static/chunks/3jupxlga7r_do.js +0 -1
  123. package/_next/static/chunks/3m57lnggu30tr.js +0 -243
  124. package/_next/static/chunks/3rhgquok36e79.js +0 -1
  125. package/_next/static/chunks/3sgrkzk20mxs6.js +0 -54
  126. package/_next/static/chunks/42dfiu6iby3fq.js +0 -1
  127. package/_next/static/chunks/43ps2cu5ahf8n.js +0 -3
  128. package/_next/static/chunks/turbopack-0pirmko-w-775.js +0 -1
  129. package/_not-found/__next._head.txt +0 -6
  130. package/_not-found/__next._index.txt +0 -5
  131. package/_not-found/__next._not-found.txt +0 -5
  132. package/boats/ais/ais-30.glb +0 -0
  133. package/boats/ais/ais-31.glb +0 -0
  134. package/boats/ais/ais-35.glb +0 -0
  135. package/boats/ais/ais-36.glb +0 -0
  136. package/boats/ais/ais-37.glb +0 -0
  137. package/boats/ais/ais-40.glb +0 -0
  138. package/boats/ais/ais-50.glb +0 -0
  139. package/boats/ais/ais-60.glb +0 -0
  140. package/boats/ais/ais-70.glb +0 -0
  141. package/boats/ais/ais-80.glb +0 -0
  142. package/settings/__next._head.txt +0 -6
  143. package/settings/__next._index.txt +0 -5
  144. package/settings/__next.settings.txt +0 -5
  145. /package/_next/static/{hlKDicTyNGfd7dmHqo5m5 → baa0rBM5TIECz8JV_tLT6}/_buildManifest.js +0 -0
  146. /package/_next/static/{hlKDicTyNGfd7dmHqo5m5 → baa0rBM5TIECz8JV_tLT6}/_clientMiddlewareManifest.js +0 -0
  147. /package/_next/static/{hlKDicTyNGfd7dmHqo5m5 → baa0rBM5TIECz8JV_tLT6}/_ssgManifest.js +0 -0
package/404.html CHANGED
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/ocearo-ui/_next/static/chunks/1wv5e5qomv-7g.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/ocearo-ui/_next/static/chunks/1gizigk3w6q7j.js"/><script src="/ocearo-ui/_next/static/chunks/2lvvt2f1l5sfu.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/3jh1u-s3k0bkk.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/2atijj_pkc4uc.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/1ptwltjb3h6jf.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/turbopack-0pirmko-w-775.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><meta name="description" content="Sailing made smarter with Ocearo: touchscreen-first sailing dashboard with navigation, weather, and instrumentation."/><title>404: This page could not be found.</title><meta name="theme-color" content="#4bbcd8" media="(prefers-color-scheme: light)"/><meta name="theme-color" content="#0a2e3d" media="(prefers-color-scheme: dark)"/><title>Ocearo</title><meta name="description" content="Sailing made smarter"/><link rel="manifest" href="./manifest.json"/><meta name="format-detection" content="telephone=no"/><meta name="mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Ocearo"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="shortcut icon" href="./favicon.ico"/><link rel="icon" href="./favicon.ico" type="image/x-icon"/><link rel="icon" href="./favicon.svg" type="image/svg+xml" sizes="any"/><link rel="icon" href="./favicon-96x96.png" type="image/png" sizes="96x96"/><link rel="apple-touch-icon" href="./apple-touch-icon.png"/><script src="/ocearo-ui/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/ocearo-ui/_next/static/chunks/1gizigk3w6q7j.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"default\"]\n3:I[37457,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"default\"]\n4:I[97367,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"default\",1]\n:HL[\"/ocearo-ui/_next/static/chunks/1wv5e5qomv-7g.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/chunks/1wv5e5qomv-7g.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"meta\",null,{\"name\":\"description\",\"content\":\"Sailing made smarter with Ocearo: touchscreen-first sailing dashboard with navigation, weather, and instrumentation.\"}]}],[\"$\",\"body\",null,{\"className\":\"geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$@7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/chunks/1wv5e5qomv-7g.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"hlKDicTyNGfd7dmHqo5m5\"}\n"])</script><script>self.__next_f.push([1,"d:[]\n7:\"$Wd\"\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#4bbcd8\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"content\":\"#0a2e3d\",\"media\":\"(prefers-color-scheme: dark)\"}]]\n"])</script><script>self.__next_f.push([1,"e:I[27201,[\"/ocearo-ui/_next/static/chunks/1d4h-sglyo8ft.js\",\"/ocearo-ui/_next/static/chunks/3jupxlga7r_do.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Ocearo\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Sailing made smarter\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"./manifest.json\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"3\",{\"name\":\"format-detection\",\"content\":\"telephone=no\"}],[\"$\",\"meta\",\"4\",{\"name\":\"mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"5\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Ocearo\"}],[\"$\",\"meta\",\"6\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"7\",{\"rel\":\"shortcut icon\",\"href\":\"./favicon.ico\"}],[\"$\",\"link\",\"8\",{\"rel\":\"icon\",\"href\":\"./favicon.ico\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"9\",{\"rel\":\"icon\",\"href\":\"./favicon.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"./favicon-96x96.png\",\"type\":\"image/png\",\"sizes\":\"96x96\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"./apple-touch-icon.png\"}],[\"$\",\"$Le\",\"12\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/><link rel="stylesheet" href="/ocearo-ui/_next/static/chunks/2y3d8zopa8r5r.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/ocearo-ui/_next/static/chunks/3s6nzrbk-8mnv.js"/><script src="/ocearo-ui/_next/static/chunks/0on1skx9l54-9.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/32yn_fc-es66m.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/34wvn5zw0a69w.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/0y-dctk-kmqss.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/turbopack-1h111qg8l92rw.js" async=""></script><script src="/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js" async=""></script><meta name="robots" content="noindex"/><meta name="theme-color" content="#4bbcd8" media="(prefers-color-scheme: light)"/><meta name="theme-color" content="#0a2e3d" media="(prefers-color-scheme: dark)"/><title>Ocearo</title><meta name="description" content="Sailing made smarter"/><link rel="manifest" href="./manifest.json"/><meta name="format-detection" content="telephone=no"/><meta name="mobile-web-app-capable" content="yes"/><meta name="apple-mobile-web-app-title" content="Ocearo"/><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/><link rel="shortcut icon" href="./favicon.ico"/><link rel="icon" href="./favicon.ico" type="image/x-icon"/><link rel="icon" href="./favicon.svg" type="image/svg+xml" sizes="any"/><link rel="icon" href="./favicon-96x96.png" type="image/png" sizes="96x96"/><link rel="apple-touch-icon" href="./apple-touch-icon.png"/><meta name="next-size-adjust" content=""/><meta name="description" content="Sailing made smarter with Ocearo: touchscreen-first sailing dashboard with navigation, weather, and instrumentation."/><title>404: This page could not be found.</title><script src="/ocearo-ui/_next/static/chunks/0cz1d0mv5g_q7.js" noModule=""></script></head><body class="geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/ocearo-ui/_next/static/chunks/3s6nzrbk-8mnv.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[39756,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"default\"]\n3:I[37457,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"default\"]\n4:I[97367,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"OutletBoundary\"]\n5:\"$Sreact.suspense\"\n8:I[97367,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"ViewportBoundary\"]\na:I[97367,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"MetadataBoundary\"]\nc:I[68027,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"default\",1]\n:HL[\"/ocearo-ui/_next/static/chunks/2y3d8zopa8r5r.css\",\"style\"]\n7:X\n0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4608]},\"$undefined\",\"$undefined\",4624],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/chunks/2y3d8zopa8r5r.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[\"$\",\"meta\",null,{\"name\":\"description\",\"content\":\"Sailing made smarter with Ocearo: touchscreen-first sailing dashboard with navigation, weather, and instrumentation.\"}]}],[\"$\",\"body\",null,{\"className\":\"geistsans_fce11f57-module__b_bU6G__variable geistmono_ed61a5f9-module__6fgesq__variable antialiased\",\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@6\"}]}]]}],{},null,false,null]},null,false,\"$7\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$La\",null,{\"children\":[\"$\",\"$5\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lb\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$c\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/ocearo-ui/_next/static/chunks/2y3d8zopa8r5r.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"baa0rBM5TIECz8JV_tLT6\"}\n7:C\n9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\"}],[\"$\",\"meta\",\"2\",{\"name\":\"theme-color\",\"content\":\"#4bbcd8\",\"media\":\"(prefers-color-scheme: light)\"}],[\"$\",\"meta\",\"3\",{\"name\":\"theme-color\",\"content\":\"#0a2e3d\",\"media\":\"(prefers-color-scheme: dark)\"}]]\nd:I[27201,[\"/ocearo-ui/_next/static/chunks/0h2qsuyze9ds1.js\"],\"IconMark\"]\n6:null\nb:[[\"$\",\"title\",\"0\",{\"children\":\"Ocearo\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Sailing made smarter\"}],[\"$\",\"link\",\"2\",{\"rel\":\"manifest\",\"href\":\"./manifest.json\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"3\",{\"name\":\"format-detection\",\"content\":\"telephone=no\"}],[\"$\",\"meta\",\"4\",{\"name\":\"mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"5\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Ocearo\"}],[\"$\",\"meta\",\"6\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"black-translucent\"}],[\"$\",\"link\",\"7\",{\"rel\":\"shortcut icon\",\"href\":\"./favicon.ico\"}],[\"$\",\"link\",\"8\",{\"rel\":\"icon\",\"href\":\"./favicon.ico\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"9\",{\"rel\":\"icon\",\"href\":\"./favicon.svg\",\"type\":\"image/svg+xml\",\"sizes\":\"any\"}],[\"$\",\"link\",\"10\",{\"rel\":\"icon\",\"href\":\"./favicon-96x96.png\",\"type\":\"image/png\",\"sizes\":\"96x96\"}],[\"$\",\"link\",\"11\",{\"rel\":\"apple-touch-icon\",\"href\":\"./apple-touch-icon.png\"}],[\"$\",\"$Ld\",\"12\",{}]]\n"])</script></body></html>
package/README.fr.md CHANGED
@@ -1,198 +1,188 @@
1
+ [![Licence](https://img.shields.io/badge/Licence-Apache%202.0-blue.svg)](LICENSE)
2
+ [![npm](https://img.shields.io/npm/v/ocearo-ui.svg)](https://www.npmjs.com/package/ocearo-ui)
3
+ [![Signal K](https://img.shields.io/badge/Signal%20K-webapp-0a7ea4.svg)](https://signalk.org)
1
4
  [![GitHub Issues](https://img.shields.io/github/issues/laborima/ocearo-ui.svg)](https://github.com/laborima/ocearo-ui/issues)
2
- [![Contributions welcome](https://img.shields.io/badge/contributions-welcome-brightgreen.svg)](CONTRIBUTING.md)
3
- [![License](https://img.shields.io/badge/License-Apache%202.0-brightgreen.svg)](https://opensource.org/licenses/Apache-2.0)
4
5
 
5
- [English 🇺🇸](README.md)
6
+ [English 🇬🇧](README.md)
6
7
 
7
8
  # Ocearo UI
8
9
 
9
- **La navigation rendue plus intelligente**
10
+ **L’affichage de navigation open source pour Signal K.** Une image 3D claire et en temps réel du bateau, de la mer et du trafic autour — réglage des voiles, règles de barre, homme à la mer, veille au mouillage, bathymétrie et météo — dans une interface sobre inspirée de la visualisation de conduite Tesla. Il tourne comme webapp Signal K sur le serveur du bord (un Raspberry Pi suffit) et dans n’importe quel navigateur à bord : écran de table à cartes, tablette de cockpit ou téléphone.
10
11
 
11
- **Ocean Robot** va transformer la navigation avec une interface utilisateur (UI) intuitive et visuellement attrayante conçue pour le projet OpenPlotter. Basé sur la plateforme **Signal K**, Ocean Robot collecte et stocke les données du bateau pour fournir des informations en temps réel.
12
+ ![Sous spi à la sortie de La Rochelle : mer réaliste issue du vent réel, bandes de creux et penons, compas et marée](docs/screenshots/hero.jpg)
12
13
 
13
- Inspiré par l'interface de l'autopilote Tesla, ce système offre une expérience futuriste et épurée adaptée aux navigateurs.
14
+ > Toutes les images de cette page sont des captures de l’application, alimentée par des données réelles de La Rochelle du 4 octobre 2026 : vent Open-Meteo, marée, bathymétrie SHOM 20 m et trafic AIS scénarisé.
14
15
 
15
16
  ---
16
17
 
17
- ## **Dernières mises à jour (v0.1.19)**
18
+ ## Sommaire
18
19
 
19
- - **Plan de maintenance moteur** : Nouvel onglet maintenance avec les échéances constructeur (Volvo Penta D1/D2, Yanmar YM, diesel générique), suivi des dernières interventions et statuts en retard/à prévoir.
20
- - **Alarmes moteur** : Les 24 notifications moteur NMEA2000 (surchauffe, pression d'huile, niveau de liquide de refroidissement…) remontent désormais avec un bandeau d'alarme permanent et un badge d'onglet, plus des zones de température configurables levant des alertes sonores SignalK.
21
- - **Carte 3D à l'échelle du port** : Plan de carte à niveau de détail adaptatif — pontons visibles au ponton (OSM z19 + balisage OpenSeaMap), zone large en dézoomant, à l'échelle des cibles AIS.
22
- - **Vraie carte météo** : Le mode météo combine le fond de carte avec l'overlay vent Windy et le radar de pluie RainViewer en direct sur ~40 km.
23
- - **Océan et ciel vivants** : Houle géométrique fonction du vent (hauteur significative estimée), nuages et pluie pilotés par les prévisions, ciel océan partagé par tous les modes carte.
24
- - **Qualité de l'air via COV** : Tuile du tableau de bord pilotée par la résistance de gaz du BME680 (kΩ) avec échelle qualitative en l'absence de capteurs CO₂/PM2.5.
25
- - **Analyse carburant** : Estimation en plage (pire–moyenne conso), hypothèse plein complet après ravitaillement, heures moteur conservées moteur coupé, historique complet des pleins.
26
- - **Performances RPi5** : Les modes carte/météo utilisent un océan allégé sans passe de réflexion — la scène n'est plus rendue deux fois par image.
27
- - **Points forts précédents (v0.1.16)** : voiles 3D avec réglage physique, tensions de gréement, HUD de réglage, vue autopilote, tableau de bord, unités configurables, stack Next.js 16 / React 19 / Tailwind v4.
20
+ - [Points forts](#points-forts)
21
+ - [La vue 3D](#la-vue-3d)
22
+ - [Trafic et règles de barre](#trafic-et-règles-de-barre)
23
+ - [Sécurité : homme à la mer et mouillage](#sécurité--homme-à-la-mer-et-mouillage)
24
+ - [Instruments et systèmes du bord](#instruments-et-systèmes-du-bord)
25
+ - [Hors-ligne en mer](#hors-ligne-en-mer)
26
+ - [Installation](#installation)
27
+ - [Configuration](#configuration)
28
+ - [Développement](#développement)
29
+ - [Sources de données et crédits](#sources-de-données-et-crédits)
30
+ - [Contribuer](#contribuer) · [Licence](#licence) · [Avertissement](#avertissement-de-navigation)
28
31
 
29
32
  ---
30
33
 
31
- ## **Caractéristiques Clés**
34
+ ## Points forts
32
35
 
33
- ### **Environnement 3D Dynamique**
34
- - **Voiles Physiques** : Représentation 3D en temps réel de la grand-voile et du foc/génois avec cambrure, vrillage et prise de ris dynamiques selon le vent.
35
- - **Gréement Interactif** : Visualisation des lignes de gréement (pataras, hale-bas, cunningham, bordure) avec dégradés de couleurs selon la tension.
36
- - **Compas Intelligent** : **HUD de réglage** intégré affichant les positions recommandées des chariots pour une performance optimale.
37
- - **Ciel Jour/Nuit** : Éclairage dynamique et environnement océanique synchronisés avec l'heure du navire.
36
+ - **Un bateau qu’on règle depuis l’écran.** Grand-voile, voiles d’avant et spi asymétrique dessinés d’après le vent (creux, vrillage, ris, changements de voile), avec bandes de creux, penons, chariot de grand-voile et chariots de foc à leur place.
37
+ - **La mer autour de vous, de cinq façons.** Une mer réaliste construite à partir du vent réel, la carte en direct avec le balisage, le fond en 3D, la prévision de vent, ou un sol épuré façon FSD pour la régate.
38
+ - **Un trafic lisible d’un coup d’œil.** Les cibles AIS dessinées selon leur type et leur taille réels, qui glissent entre deux messages, colorées selon qui doit manœuvrer d’après le RIPAM — avec la manœuvre à faire.
39
+ - **La tactique.** Laylines vers le waypoint, isochrones tirées de vos polaires (où vous serez dans 5, 10 et 15 minutes), conseil VMG et bateau fantôme à la vitesse polaire.
40
+ - **La sécurité d’abord.** Repère homme à la mer avec dérive estimée, veille au mouillage avec la vraie trace d’évitage, alerte de petits fonds selon votre tirant d’eau.
41
+ - **Tout le reste du bord.** Tableau de bord, moteur et entretien, énergie, réservoirs, journal de bord avec rejeu des sorties, pilote automatique, médias et documents — en 12 langues, unités métriques, impériales ou nautiques, thèmes jour, sombre et nuit rouge.
42
+ - **Pensé pour le bateau.** Fonctionne hors-ligne une fois la zone téléchargée, s’adapte au Raspberry Pi, ne lit que des chemins Signal K standard.
38
43
 
39
- ### **Navigation et Conscience Situationnelle**
40
- - **Radar AIS** : Visualisation 3D des navires à proximité avec des panneaux d'informations détaillés.
41
- - **Routes et Navigation** : Widget dédié pour les routes Signal K, les waypoints et les calculs de navigation en temps réel.
42
- - **Contexte Environnemental** : Niveaux de marée, prévisions météo (API Signal K) et surveillance de la profondeur avec assiette du navire.
43
- - **Laylines** : Visualisation haute précision des laylines en 3D pour l'aide à la navigation tactique.
44
+ ---
44
45
 
45
- ### **Systèmes du Navire**
46
- - **Contrôle Autopilote** : Interface autopilote entièrement intégrée pour une gestion fluide du navire.
47
- - **Surveillance Moteur** : Jauges complètes pour les températures, pressions et consommation de carburant avec suivi des pleins.
48
- - **Indicateurs Style Tesla** : Barres modernes haute visibilité pour l'état des batteries et les niveaux de réservoirs.
49
- - **Interface Personnalisable** : Support de 12 langues et unités configurables (métrique, impérial, nautique).
46
+ ## La vue 3D
50
47
 
51
- ---
48
+ Le cœur d’Ocearo est une scène 3D en direct centrée sur votre bateau. Un bouton fait défiler cinq représentations du monde autour.
49
+
50
+ | | |
51
+ |---|---|
52
+ | ![Carte en direct avec balisage et AIS](docs/screenshots/chart.jpg) | ![Bathymétrie SHOM en grille de relevé](docs/screenshots/bathymetry.jpg) |
53
+ | **Carte.** OpenStreetMap avec le balisage et les feux OpenSeaMap, à l’échelle de votre bateau et des cibles AIS. Utilise un fournisseur de cartes Signal K (MBTiles) s’il est installé. | **Bathymétrie.** Le fond en grille de relevé : relief exagéré, isobathes, sondes à la marée du moment, ligne de sondeur depuis la quille, et l’eau trop peu profonde pour votre tirant d’eau hachurée en orange. Relevés SHOM de 5 à 20 m sur les côtes françaises, relief mondial ailleurs. |
54
+ | ![Calque de prévision de vent](docs/screenshots/weather.jpg) | ![Isochrones et laylines](docs/screenshots/polars.jpg) |
55
+ | **Météo.** La prévision de vent à 48 h autour du bateau (Open-Meteo) aux couleurs de Windy, avec un curseur de temps. | **Polaires et laylines.** Où les polaires vous mettent dans 5, 10 et 15 minutes à chaque cap, les laylines vers le waypoint et la VMG à suivre. |
56
+
57
+ La **mer** elle-même est générée à partir du vent réel : hauteur, longueur et direction d’une mer de vent côtière plus une houle, moutons à partir d’environ 7 nœuds, reflet du ciel et soleil à sa vraie place, et votre propre sillage qui suit la route réellement parcourue. Les voiles sont dessinées d’après le vent apparent avec leur réglage : bandes de creux avec la profondeur et la position du creux maximum, penons au guindant et à la chute, et chariots d’écoute sur leurs rails.
52
58
 
53
- ## **Vues Principales**
54
-
55
- ### **Vue Croisière**
56
- - **Visualisation 3D** : Fournit une vue 3D dynamique du navire, affichant des éléments critiques tels que :
57
- - Direction du vent avec **laylines actives**
58
- - Compas 3D de haute précision
59
- - Niveau de profondeur et assiette du navire
60
- - Navires à proximité représentés en 3D via les données AIS
61
- - **HUD de réglage des voiles** : Indicateurs en arc en temps réel pour le chariot de GV et les chariots de foc au niveau du compas.
62
- - Forme de voile basée sur la physique (cambrure et vrillage) reflétant les conditions de vent actuelles.
63
-
64
- ![Vue Croisière](docs/cruising.png)
65
-
66
- ### **Vue au Mouillage**
67
- - Représentation 3D simplifiée du navire avec les données clés au mouillage :
68
- - Position GPS
69
- - Heure
70
- - Niveaux de marée
71
- - Profondeur
72
- - État de la batterie
73
-
74
- ![Vue au Mouillage](docs/anchored.png)
75
-
76
- ### **Vue Aide au Stationnement**
77
- - Utilise les données des caméras et capteurs pour simplifier l'accostage :
78
- - Affichage des prédictions de trajectoire selon le vent et l'angle de barre
79
- - Indications de vitesse et flux vidéo en direct de la caméra avant
80
- - Mise en évidence des places de port disponibles
81
-
82
- *En cours de développement.*
83
-
84
- ![Vue Aide au Stationnement](docs/parking.png)
85
-
86
- ### **Autres Vues**
87
- Visuels additionnels améliorant les fonctionnalités du système :
88
-
89
- ![Other Views](docs/ais.png)
90
- ![Other Views](docs/ocean.png)
91
- ![Other Views](docs/meteo.png)
92
- ![Other Views](docs/navigation.png)
93
- ![Other Views](docs/instruments.png)
94
- ![Other Views](docs/webcam.png)
95
- ![Other Views](docs/battery.png)
96
- ![Other Views](docs/performances.png)
97
- ![Other Views](docs/dashboard1.png)
98
- ![Other Views](docs/dashboard2.png)
99
- ![Other Views](docs/dashboard3.png)
100
- ![Other Views](docs/engine.png)
59
+ Bateaux : un racer de 10,8 m (par défaut), un catamaran de 14 m et des modèles plus simples, au choix dans les réglages.
101
60
 
102
61
  ---
103
62
 
104
- ## **Vision pour le Futur**
105
- La feuille de route d'Ocean Robot inclut des fonctionnalités avancées visant à améliorer la sécurité et l'efficacité :
63
+ ## Trafic et règles de barre
106
64
 
107
- - **Détection d'objets par IA** pour les débris flottants et obstacles
108
- - Intégration avec des systèmes de caméras avancés (ex: **see.ai**)
109
- - **Améliorations futures** :
110
- - Surveillance par caméra des penons pour des suggestions de réglage optimal
111
- - Visualisation de la bathymétrie en 3D
112
- - Visualisation des lignes de départ en 3D
65
+ | | |
66
+ |---|---|
67
+ | ![À nous de laisser passer un chalutier en pêche](docs/screenshots/colregs.jpg) | ![Un voilier bâbord amures doit s’écarter](docs/screenshots/standon.jpg) |
68
+ | **À nous de manœuvrer.** Un navire en pêche croise devant : d’après la règle 18, le voilier s’en écarte. Le bateau et le bandeau passent en rouge orangé, le conseil nomme la règle et le changement de cap (« Éviter : 15° sur bâbord »). | **À lui de manœuvrer.** Un voilier bâbord amures qui arrive par tribord doit s’écarter (règle 12) : il passe en violet avec la manœuvre attendue de lui. S’il n’agit pas, le conseil de la règle 17 b) apparaît. |
69
+
70
+ Les couleurs ont partout le même sens : **rouge** — risque de collision et c’est à nous de manœuvrer ; **violet** — risque de collision et c’est à lui ; **orange** — proche mais sans route de collision ; gris — rien à signaler. CPA et TCPA viennent du cap et de la vitesse des deux navires ; les seuils se règlent dans les réglages. Les cibles AIS sont dessinées par type et longueur (voiliers, catamarans, ferries, cargos, remorqueurs, chalutiers, vedettes SNSM…) et estimées entre deux messages, si bien qu’elles glissent au lieu de sauter.
113
71
 
114
72
  ---
115
73
 
116
- Démo en direct : https://laborima.github.io/ocearo-ui/
74
+ ## Sécurité : homme à la mer et mouillage
75
+
76
+ | | |
77
+ |---|---|
78
+ | ![Homme à la mer](docs/screenshots/mob.jpg) | ![Veille au mouillage](docs/screenshots/anchor.jpg) |
79
+ | **Homme à la mer.** Un bouton (ou toute notification MOB Signal K) déclenche l’alarme : point de chute, position estimée de la personne maintenant d’après courant et dérive, ligne de dérive, relèvement et distance à suivre. | **Veille au mouillage.** Rayon d’alarme et anneau de veille à 80 % centrés sur l’ancre, la ligne de mouillage, et la trace réellement décrite par le bateau : une renverse ou une ancre qui chasse se voient à sa forme bien avant l’alarme. Gardée par [ocearo-core](https://github.com/laborima/ocearo-core), elle survit à un rechargement. |
117
80
 
118
- Ou installez-le dans Signal K via le paquet NPM : https://www.npmjs.com/package/ocearo-ui
81
+ ![Aide au port](docs/screenshots/parking.jpg)
82
+
83
+ **Aide au port.** Choisissez la place (cul à quai, pointe avant, à couple, coffre) et suivez la trajectoire prévue avec le vent et le courant.
119
84
 
120
85
  ---
121
86
 
122
- ## **Contribution**
87
+ ## Instruments et systèmes du bord
123
88
 
124
- Votre soutien rend Ocearo UI meilleur ! Voici comment vous pouvez contribuer :
89
+ | | |
90
+ |---|---|
91
+ | ![Tableau de bord](docs/screenshots/dashboard.jpg) | ![Tableau de bord, thème sombre](docs/screenshots/dashboard-dark.jpg) |
92
+ | **Tableau de bord.** Radar AIS, météo, route vers le waypoint, réservoirs… à côté de la vue 3D, en thème jour… | …et en thème sombre, dans l’esprit de l’affichage FSD de Tesla : anthracite, formes claires, accents lumineux. |
93
+ | ![Moteur](docs/screenshots/engine.jpg) | ![Énergie](docs/screenshots/energy.jpg) |
94
+ | **Moteur.** Régime, heures, températures, pressions, inverseur et alarmes (les 24 notifications moteur NMEA 2000), plus un calendrier d’entretien. | **Énergie.** Batteries, charge et consommation, solaire, et l’état du Raspberry Pi qui fait tourner l’ensemble. |
95
+ | ![Journal de bord](docs/screenshots/logbook.jpg) | ![Réglages](docs/screenshots/settings.jpg) |
96
+ | **Journal de bord.** Entrées automatiques et manuelles, chronologie, et sorties enregistrées à rejouer dans la vue 3D. | **Réglages.** Bateau, unités, langue, thèmes, qualité 3D (dont un profil Raspberry Pi), seuils d’alarme et données hors-ligne. |
125
97
 
126
- - Signaler des bugs : Aidez-moi à corriger les problèmes en me signalant ce qui ne fonctionne pas.
127
- - Suggérer des fonctionnalités : Partagez vos idées pour de nouvelles fonctionnalités.
128
- - Contribuer au code : Soumettez des "pull requests" pour ajouter des fonctionnalités ou corriger des bugs.
129
- - Soutenir le projet : Aidez à financer l'achat de webcams et de capteurs en m'offrant un café.
98
+ ![Thème nuit](docs/screenshots/dashboard-night.jpg)
130
99
 
131
- [![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/laborima)
100
+ **Thème nuit.** Uniquement du rouge et du rouge orangé, pour préserver la vision de nuit, avec des valeurs plus lumineuses que les libellés pour rester facile à lire. Le thème peut changer tout seul avec le soleil.
132
101
 
133
102
  ---
134
103
 
135
- ## **Développement et Déploiement**
104
+ ## Hors-ligne en mer
136
105
 
137
- ### Compilation
106
+ En mer, internet est rare. Dès qu’il y en a (Wi-Fi du port, 4G), Ocearo garde ce dont il aura besoin :
138
107
 
139
- Cloner les sources :
108
+ - Les **tuiles de carte** déjà affichées, les **prévisions de vent** et la **bathymétrie** sont gardées dans le navigateur de l’écran ; *Réglages → Données hors-ligne* télécharge d’un coup la bathymétrie et la prévision sur 5, 10 ou 20 NM autour du bateau.
109
+ - Avec **[ocearo-core](https://github.com/laborima/ocearo-core)** sur le serveur, les **relevés SHOM** (modèles numériques de terrain de 5 à 20 m des côtes françaises, données ouvertes) sont téléchargés par le serveur lui-même et partagés avec tous les écrans du bord.
110
+ - Les serveurs de tuiles OpenStreetMap interdisent le téléchargement en masse : pour une carte complète hors-ligne, ajoutez des cartes MBTiles au serveur Signal K, qu’Ocearo utilise alors automatiquement.
140
111
 
141
- ```bash
142
- git clone https://github.com/laborima/ocearo-ui.git
143
- cd ocearo-ui
144
- ```
112
+ ---
145
113
 
146
- Installer les dépendances :
114
+ ## Installation
147
115
 
148
- ```bash
149
- npm install
150
- ```
116
+ Ocearo UI est une **webapp** Signal K.
151
117
 
152
- Démarrer le serveur de développement :
118
+ 1. Sur votre serveur Signal K (≥ 2.x), ouvrez **Appstore → Available**, cherchez **ocearo-ui** et installez-le (ou `npm install ocearo-ui` dans `~/.signalk`).
119
+ 2. Redémarrez le serveur et ouvrez `http://<serveur-signalk>:3000/ocearo-ui/` sur n’importe quel écran du bord.
120
+ 3. Recommandé : installez **[ocearo-core](https://www.npmjs.com/package/ocearo-core)** pour le journal de bord, la veille au mouillage, la bathymétrie SHOM, les métriques système et le copilote IA.
153
121
 
154
- ```bash
155
- npm run dev
156
- ```
122
+ Une démo en ligne avec des données simulées : <https://laborima.github.io/ocearo-ui/>
123
+
124
+ ### Prérequis Signal K
125
+
126
+ Ocearo lit des chemins Signal K standard ; quand un chemin manque, son affichage est vide plutôt que faux. Sur un bateau NMEA 2000 typique, ces plugins publient ce qu’il lui faut :
157
127
 
158
- Accéder à l'interface sur [http://localhost:3000](http://localhost:3000).
128
+ | Plugin | Fournit | Utilisé par |
129
+ |--------|---------|-------------|
130
+ | [`signalk-derived-data`](https://www.npmjs.com/package/signalk-derived-data) | Vent réel et cap vrai (activer `heading`, `angleTrueWater`, `directionTrue`) | Vent, réglage des voiles, polaires, compas |
131
+ | [`@meri-imperiumi/signalk-autostate`](https://www.npmjs.com/package/@meri-imperiumi/signalk-autostate) | `navigation.state` | Affichage des voiles, priorité des alertes |
132
+ | [`@signalk/set-system-time`](https://www.npmjs.com/package/@signalk/set-system-time) | Horloge système depuis le GPS | Marées, jour/nuit, journal |
133
+ | [`@signalk/signalk-autopilot`](https://www.npmjs.com/package/@signalk/signalk-autopilot) | API pilote Signal K v2 | Vue pilote |
134
+ | [`ocearo-core`](https://www.npmjs.com/package/ocearo-core) | Journal, mouillage, bathymétrie, métriques système, copilote IA | Journal, veille au mouillage, bathymétrie, onglet Raspberry Pi |
159
135
 
160
- ### Modèles de Bateaux
161
- Tous les modèles 3D ont une longueur de flottaison de 10 mètres et sont positionnés à 0 sur l'axe Y. Utilisez Blender pour les ajustements.
136
+ Matériel : un Raspberry Pi 4 ou 5 fait tourner sans peine le serveur et un écran ; choisissez la qualité 3D *Raspberry Pi* sur l’écran du Pi. Tout navigateur récent sert d’écran déporté.
162
137
 
163
138
  ---
164
139
 
165
- ### Configuration des Marées
166
- Créez des fichiers JSON sous le chemin suivant :
167
- `public/tides/${harbor}/${MM}_${yyyy}.json`
140
+ ## Configuration
168
141
 
169
- Un script d'exemple permet de télécharger les données pour La Rochelle.
142
+ Tout se règle dans l’application (**Réglages**) : adresse et authentification du serveur Signal K, modèle de bateau, tirant d’eau et polaires, unités, langue, thème (manuel ou selon le soleil), qualité 3D, échelle AIS et seuils de collision (CPA, TCPA), et données hors-ligne. Les réglages sont propres à chaque écran.
170
143
 
171
- ---
144
+ Pour installer l’application en plein écran sur une tablette ou un téléphone (PWA), servez Signal K en HTTPS sur le réseau du bord : voir [docs/ssl.md](docs/ssl.md) (en anglais).
172
145
 
173
- ## **Déploiement sur OpenPlotter**
146
+ ---
174
147
 
175
- La méthode recommandée est d'utiliser le paquet npm publié.
176
- Pour déployer votre propre compilation :
148
+ ## Développement
177
149
 
178
150
  ```bash
179
151
  git clone https://github.com/laborima/ocearo-ui.git
180
152
  cd ocearo-ui
181
153
  npm install
182
- NODE_ENV=production npm run build
183
- scp -r ./out/* pi@openplotter.local:/home/pi/.signalk/node_modules/ocearo-ui
154
+ npm run dev # http://localhost:3000 — indiquez votre serveur Signal K dans les réglages
155
+ npm run lint
156
+ npm run build # export statique dans out/
184
157
  ```
185
158
 
159
+ Pour essayer un build sur un serveur Signal K, liez-le comme webapp : `npm run link` (lien symbolique de `out/` vers `~/.signalk/node_modules/ocearo-ui`), puis redémarrez le serveur.
160
+
161
+ Technologies : Next.js 16 (export statique), React 19, Three.js avec React Three Fiber, Tailwind CSS 4, i18next. Les bateaux, les voiles et la flotte AIS sont procéduraux (aucun modèle à télécharger) ; les conventions du projet sont dans [AGENTS.md](AGENTS.md).
162
+
163
+ Les tables de marée pour le hors-ligne sont dans `public/tides/<port>/<MM>_<aaaa>.json`.
164
+
165
+ ---
166
+
167
+ ## Sources de données et crédits
168
+
169
+ - Cartes © contributeurs [OpenStreetMap](https://www.openstreetmap.org/copyright) (ODbL) ; balisage © [OpenSeaMap](https://openseamap.org) (CC BY-SA).
170
+ - Bathymétrie : modèles numériques de terrain du [SHOM](https://data.shom.fr) (Licence Ouverte Etalab 2.0), servis par ocearo-core ; relief mondial issu des [tuiles Terrarium](https://registry.opendata.aws/terrain-tiles/) d’AWS Open Data (GEBCO, ETOPO, SRTM et autres).
171
+ - Prévision de vent : [Open-Meteo](https://open-meteo.com) (CC BY 4.0).
172
+ - Position du soleil : équations du calculateur solaire de la NOAA.
173
+
186
174
  ---
187
175
 
188
- ⚠ Avertissement de Navigation
176
+ ## Contribuer
177
+
178
+ Rapports de bugs, idées et pull requests sont bienvenus — voir les [issues](https://github.com/laborima/ocearo-ui/issues). Les changements sont listés dans le [CHANGELOG](CHANGELOG.md).
179
+
180
+ [![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/laborima)
189
181
 
190
- Utiliser avec précaution – Ne remplace pas les systèmes de navigation officiels.
182
+ ## Licence
191
183
 
192
- Ocearo UI est conçu pour améliorer la conscience situationnelle et visualiser les données en temps réel. Cependant, ce logiciel n'est pas un système de navigation ou de sécurité certifié.
184
+ [Apache 2.0](LICENSE).
193
185
 
194
- - Vérifiez toujours les données avec les cartes marines officielles et les appareils GPS.
195
- - Gardez une conscience situationnelle et suivez les règles de sécurité maritime.
196
- - Les développeurs d'Ocearo UI ne sont pas responsables des incidents ou erreurs de navigation liés à l'utilisation de ce logiciel.
186
+ ## Avertissement de navigation
197
187
 
198
- En utilisant Ocearo UI, vous acceptez les risques inhérents à l'utilisation d'outils de navigation non certifiés. Naviguez de manière responsable !
188
+ Ocearo UI améliore la conscience de la situation ; ce **n’est pas un système de navigation ou de sécurité certifié** et il ne doit pas être la seule source d’information de navigation. Recoupez toujours avec les cartes et instruments officiels, veillez et appliquez les règles de barre. Les auteurs déclinent toute responsabilité en cas d’incident lié à son utilisation.