Skip to content

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 08 Oct 13:08
· 110 commits to main since this release
510302f

What's Changed

⚠️ Breaking changes

  • feat(location)!: one place picker and one place label everywhere by @aleskiontherun in #281
  • feat(dives)!: the profile chart on a millisecond axis, readouts and salinity per recording, and the widened agency list by @aleskiontherun in #286
  • feat(contacts)!: a contact picker replaces the training-center text by @aleskiontherun in #290
  • feat(people)!: a people picker on dives, trips and courses, and a People page by @aleskiontherun in #301
  • feat(dives)!: a count and a note per species on the dive form and the dive page by @aleskiontherun in #306
  • feat(cards)!: cards show the server's map picture, and stop drawing maps by @aleskiontherun in #376
  • feat(maps)!: the renderer draws map tiles, and cards and heroes compose them by @aleskiontherun in #378
  • feat(check-in)!: the check-in details object, with an email and lists of contacts and policies by @aleskiontherun in #408

Features

  • feat(dives): twin sets sit below every single-cylinder group by @aleskiontherun in #282
  • feat(settings): the import preview edits the check-in facts, and the form takes the format's bounds and anchors by @aleskiontherun in #283
  • feat(check-in): a portrait for the desk, and both pictures save and adjust with their forms by @aleskiontherun in #284
  • feat(import): the archive's portrait in the import preview, and what an import applies by @aleskiontherun in #285
  • feat(dives): a dive whose time of day is unknown shows and edits as a date by @aleskiontherun in #287
  • feat(pwa): install OpenDiving on a phone by @aleskiontherun in #291
  • feat(settings): renewal and year-in-review toggles, named on the privacy page by @aleskiontherun in #292
  • feat(checkin): share the check-in page as a link or QR code by @aleskiontherun in #293
  • feat(settings): split settings into sections, and move import and export to /data by @aleskiontherun in #295
  • feat(ui): a pass over the app on a phone, and every page names its tab by @aleskiontherun in #298
  • feat(brand): set the wordmark in Outfit 700 by @aleskiontherun in #300
  • feat(data): cloud icons on the /data cards, and the import picker laid out as an export row by @aleskiontherun in #299
  • feat(ui): one card for every sign-in page, a profile picture at onboarding, and a bigger portrait by @aleskiontherun in #302
  • feat(contacts): show the address inline and label its first line Address by @aleskiontherun in #303
  • feat(forms): one card for cylinders and trip parts, labelled part fields, and a new trip opens with a part by @aleskiontherun in #307
  • feat(dives): species rows on the shared row card, with labelled count and notes by @aleskiontherun in #310
  • feat(landing): coral/teal band background and simpler format copy by @aleskiontherun in #313
  • feat(settings): a Storage section shows what is stored against the limit by @aleskiontherun in #314
  • feat(admin): daily totals of accounts and sign-ins under /admin/stats by @aleskiontherun in #323
  • feat(auth): /join lands a channel link on the sign-in form by @aleskiontherun in #324
  • feat(landing): reword the hero paragraph by @aleskiontherun in #322
  • feat(dives): the dive form takes any format the app reads, labelled as the importer labels it by @aleskiontherun in #325
  • feat(map): the dark basemap is Liberty recoloured, with teal water in both themes by @aleskiontherun in #326
  • feat(gear): duplicate a gear set into the new-set form by @aleskiontherun in #327
  • feat(ui): detail page actions sit on the back link's row, with the secondary ones in a menu by @aleskiontherun in #328
  • feat(dashboard): sparkles icon on the Getting Started card title by @aleskiontherun in #330
  • feat(dashboard): one small-title layout for the notice cards, icon included by @aleskiontherun in #331
  • feat(dives): rating, tags, type and conditions on the dive form, the dive page, the dive list and a Tags card by @aleskiontherun in #332
  • feat(dives): the dive form in collapsible sections with sticky headings by @aleskiontherun in #333
  • feat(places): a region hint on every place row, and one row per place by @aleskiontherun in #334
  • feat(import): one Import page takes any files at once and lists the dives they become by @aleskiontherun in #335
  • feat(trips): trips as cards with a map backdrop, on /trips and the dashboard by @aleskiontherun in #336
  • feat(trips): trip place search rows read and save place, region, country by @aleskiontherun in #337
  • feat(dives): dives as cards with a map backdrop in every dive list by @aleskiontherun in #338
  • feat(dives): a card with no place is the map's water, not brand teal by @aleskiontherun in #339
  • feat(dives): filter toggle uses the funnel icon by @aleskiontherun in #340
  • feat: a list page's New opens the created item's page by @aleskiontherun in #341
  • feat(header): account menu's Import and Export use the cloud icons by @aleskiontherun in #345
  • feat(lists): the count badge reads "N dives found" under a search or filter by @aleskiontherun in #344
  • feat(gear): an empty gear or gear sets card drops its header by @aleskiontherun in #347
  • feat(header): move the dashboard's service-due and renewals cards behind a notifications bell by @aleskiontherun in #349
  • feat(places): a picked place saves the geocoder's name everywhere, and full_name goes by @aleskiontherun in #351
  • feat(dives): a dive card draws its depth profile across the foot of its map by @aleskiontherun in #353
  • feat(cards): dive and trip cards show the figures they have, in equal columns by @aleskiontherun in #355
  • feat(maps): a map renderer ships in the web image, run as its own command by @aleskiontherun in #358
  • feat(sites): a site's details on its form and its page, a summary of its dives, and a new dive prefilled from its site by @aleskiontherun in #359
  • feat(sites): dive sites as cards with a map backdrop, and every label in sentence case by @aleskiontherun in #361
  • feat(dives): a parsed file prefills the rest of the dive it states by @aleskiontherun in #363
  • feat(heroes): the trip, site and dive pages open on their map by @aleskiontherun in #365
  • feat(import): suggest renumbering when an import tangles the log's numbers by @aleskiontherun in #367
  • feat(dives): the gas card is Tanks, and exposure follows consumption by @aleskiontherun in #368
  • feat(nav): a record page goes back to the page it was opened from by @aleskiontherun in #369
  • feat(gear): the gear page opens on the record pages' hero, without a map by @aleskiontherun in #370
  • feat(ui): an empty dive list on a record page drops its header, and a course leads with its certifications by @aleskiontherun in #372
  • feat(ui): the course, person and species pages open on the gear page's hero by @aleskiontherun in #373
  • feat(icons): the twin-tank icon draws two bands across both cylinders and knobs on its valves by @aleskiontherun in #374
  • feat(ui): gear and person pages title their notes card Notes, and an archived item says so in its hero by @aleskiontherun in #375
  • feat(icons): dive sites get their own icon, a map pin holding the brand's bubbles by @aleskiontherun in #377
  • feat(ui): dive cards and heroes share a title, chips and line; training dives carry the course icon by @aleskiontherun in #379
  • feat(ui): bold hero titles, every dive site in Location, and dive cards that follow a site's edits by @aleskiontherun in #380
  • feat(pickers): every picker reads the lookup, and the dive form puts the trip's and course's people first by @aleskiontherun in #381
  • feat(dives): the dive center joins the Location card with its city, province and country by @aleskiontherun in #383
  • feat(people): people on a dive can be dragged into order by @aleskiontherun in #384
  • feat(trips): a trip's dives are grouped into a card per part by @aleskiontherun in #385
  • feat(dives): the new dive form fills from picks and marks what it filled in by @aleskiontherun in #390
  • feat(species): call the life list Marine Life by @aleskiontherun in #397
  • feat(trips): the trip page lists its candidate dives muted, with Add to trip, on scroll by @aleskiontherun in #400
  • feat(checkin): put date of birth and phone under the diver's name, marked by icons by @aleskiontherun in #401
  • feat(dives): a paperclip marks a dive with a recording, on its card and hero by @aleskiontherun in #402
  • feat(dives): the volume dropdown leads with the diver's recently used volumes by @aleskiontherun in #403
  • feat(ui): list pages and the dashboard open on the hero layout, their actions on its top row by @aleskiontherun in #404
  • feat(sites): search a dive site's location in its own dialog, opened beside the Location field by @aleskiontherun in #405
  • feat(header): priority+ nav with a More menu, and an account menu that holds only the account by @aleskiontherun in #406
  • feat(header): the dashboard becomes Home, first in the bar; Import and Admin join the account menu by @aleskiontherun in #407
  • feat(dives): the species picker reads the suggestions and says why a row is first by @aleskiontherun in #409
  • feat(admin): the species catalog page, with hide, replace and re-fetch by @aleskiontherun in #410
  • feat(dive-form): a file's stated figure replaces one an earlier file derived by @aleskiontherun in #411
  • feat(ui): phone spacing at 10px around cards and 12px inside them, page-size headings, and the dive form under the shared hero by @aleskiontherun in #413
  • feat(ui): list pages carry their actions on the title's line and their description behind an info icon, and the site hero drops sea level and its rating by @aleskiontherun in #414
  • feat(home): the home hero maps the diver's trip places and carries the logbook's figures by @aleskiontherun in #415
  • feat(home): chart cards keep the scope switch on the title's line, stats at the dive cards' size, and descriptions gone or under the chart by @aleskiontherun in #416

Fixes

Other changes

  • docs: a trip is a sequence of parts, each with its own place and dates by @aleskiontherun in #278
  • refactor(support): the contact page becomes /support by @aleskiontherun in #289
  • docs(decisions): the dashboard entry stops denying the Species Seen tile by @aleskiontherun in #315
  • chore(deps): update dependency @types/node to v24.19.0 by @renovate[bot] in #276
  • chore(deps): update dependency prettier to v3.9.9 by @renovate[bot] in #277
  • chore(deps): update vitest monorepo to v5.0.2 - autoclosed by @renovate[bot] in #279
  • chore(deps): update dependency eslint to v10.11.0 by @renovate[bot] in #280
  • chore(deps): update dependency @next/bundle-analyzer to v16.3.6 by @renovate[bot] in #304
  • chore(deps): update dependency @typescript-eslint/parser to v8.70.1 - autoclosed by @renovate[bot] in #305
  • chore(deps): update dependency sharp to v0.35.5 by @renovate[bot] in #308
  • chore(deps): update nextjs monorepo to v16.3.6 by @renovate[bot] in #309
  • chore(deps): update dependency lucide-react to v1.48.0 by @renovate[bot] in #312
  • chore(deps): update docker/build-push-action action to v7.4.0 by @renovate[bot] in #316
  • chore(deps): update docker/setup-buildx-action action to v4.4.1 by @renovate[bot] in #317
  • chore(deps): update dependency maplibre-gl to v6.11.2 by @renovate[bot] in #318
  • chore(deps): update dependency react-hook-form to v7.89.0 by @renovate[bot] in #319
  • docs(privacy): §4.4 names the trip and dive lists that draw a map by @aleskiontherun in #342
  • ci: install Chromium without apt, run the unit suite without coverage by @aleskiontherun in #343
  • ci: shard the unit suite across two jobs by @aleskiontherun in #346
  • chore(import): the import notes know value_derived, and a truncated list is not a prefix by @aleskiontherun in #364
  • docs(ui): the combobox debounce comment names the lookup endpoints by @aleskiontherun in #382
  • chore(deps): update dependency @next/bundle-analyzer to v16.3.8 by @renovate[bot] in #386
  • chore(deps): update dependency react-day-picker to v10.0.2 by @renovate[bot] in #387
  • chore(deps): update dependency @types/node to v24.19.1 by @renovate[bot] in #388
  • chore(deps): update vitest monorepo to v5.0.3 by @renovate[bot] in #391
  • chore(deps): update nextjs monorepo to v16.3.8 by @renovate[bot] in #389
  • chore(deps): update dependency jsdom to v30.1.2 by @renovate[bot] in #311
  • chore(deps): update dependency @typescript-eslint/parser to v8.71.0 by @renovate[bot] in #392
  • chore(deps): update dependency eslint to v10.12.0 by @renovate[bot] in #393
  • chore(deps): update dependency lucide-react to v1.52.0 by @renovate[bot] in #394
  • perf(checkin): shrink pictures to print size before the sheet prints by @aleskiontherun in #396
  • chore(deps): update dependency maplibre-gl to v6.13.0 by @renovate[bot] in #398
  • docs(privacy): the export leaves this copy's sign-in address and username behind, and the page's list says so by @aleskiontherun in #412
  • chore(release): v0.4.0 by @opendiving-release-bot[bot] in #417

Full Changelog: v0.3.0...v0.4.0