Bug Fixes + Speed Improvements (#871)

* Show timezone information on visits list (#865)

* Initial plan

* Initial investigation: Show timezone on visits list - planning implementation

Co-authored-by: seanmorley15 <98704938+seanmorley15@users.noreply.github.com>

* Show timezone on visits list - add timezone badge display

Co-authored-by: seanmorley15 <98704938+seanmorley15@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: seanmorley15 <98704938+seanmorley15@users.noreply.github.com>

* fix: add additional timezones (#852)

* [BUG] Transportation node does not accept complex links in link parameter
Fixes #856

* Squashed commit of the following:

commit 59d5128cc642d133b0c166fbaf2d41a88c237d92
Merge: 0f9d31f4 7b8961e0
Author: Hosted Weblate <hosted@weblate.org>
Date:   Fri Sep 19 04:22:36 2025 +0200

    Merge branch 'origin/development' into Weblate.

commit 7b8961e02430b9b6fab7b22a7a8c1f7b06ff950b
Author: Orhun <orhunavcu@gmail.com>
Date:   Fri Sep 19 00:30:25 2025 +0200

    Translated using Weblate (Turkish)

    Currently translated at 16.7% (160 of 958 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/tr/

commit a8134bdbda318d00175c984785d150e38a1e24bf
Author: Orhun <orhunavcu@gmail.com>
Date:   Thu Sep 18 22:52:56 2025 +0200

    Added translation using Weblate (Turkish)

commit ac8a8ee8c9fc55da2d4ded1c4beac04a1ea66bb8
Merge: 2527e345 3fca3872
Author: Hosted Weblate <hosted@weblate.org>
Date:   Thu Sep 18 14:11:58 2025 +0200

    Merge branch 'origin/development' into Weblate.

commit 3fca387272d52dfcb634751a74e4a4b4fcf7ac6b
Merge: 4907ba87 85d8b45c
Author: Hosted Weblate <hosted@weblate.org>
Date:   Thu Sep 18 05:13:16 2025 +0200

    Merge branch 'origin/development' into Weblate.

commit 85d8b45c4eff77bcc9d5708f7fd8a4fcea91890b
Merge: 9f5cc9cc ae07c440
Author: Sean Morley <mail@seanmorley.com>
Date:   Wed Sep 17 19:25:35 2025 -0400

    Merge branch 'development' of github.com:seanmorley15/AdventureLog into development

commit 9f5cc9ccb8809cd5ae0c01e979dae271e9197987
Author: Sean Morley <mail@seanmorley.com>
Date:   Wed Sep 17 19:23:47 2025 -0400

    Remove duplicate comment for syncing development branch with main in .env.example

commit 77c1f516266b2db5e1c97c5cbc8a3fb9e08d40cd
Author: Sean Morley <mail@seanmorley.com>
Date:   Wed Sep 17 19:22:36 2025 -0400

    Squashed commit of the following:

    commit 9d4f1b8f534a3cdfb22812f2a25ababd7a236a87
    Author: Jacob <jacob.aulin@proton.me>
    Date:   Sat Sep 13 15:17:22 2025 +0200

        Translated using Weblate (Swedish)

        Currently translated at 99.8% (957 of 958 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/sv/

    commit 8fac40cfde425c989521c891b3ba9c75ab32e57e
    Author: Christian S <schuld.christian@gmail.com>
    Date:   Sat Sep 13 12:54:52 2025 +0200

        Translated using Weblate (German)

        Currently translated at 100.0% (958 of 958 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/de/

    commit 8e8c42396ec77b763983155e8b1e89cabf38ce17
    Author: Patricio Carrau <duckycb@proton.me>
    Date:   Tue Sep 9 21:59:48 2025 +0200

        Translated using Weblate (Spanish)

        Currently translated at 100.0% (958 of 958 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

    commit be818ab408d00c5c26dfb3b25632604a415d3570
    Author: pplulee <hi@pplulee.me>
    Date:   Mon Sep 8 04:06:54 2025 +0100

        fix(i18n): update Chinese translations for location-related terms (#829)

        Co-authored-by: Sean Morley <98704938+seanmorley15@users.noreply.github.com>

    commit 9e40dcf6a1dc194d4694a114b3c7e88135121016
    Merge: af2f2809 733eefce
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sun Sep 7 23:03:57 2025 -0400

        Merge remote-tracking branch 'weblate/development' into development

    commit af2f28090b9242fb7ab263fa5bbb95a5bcc1b27f
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sun Sep 7 23:00:33 2025 -0400

        [BUG] Location Visit End Date not affected by Location Timezone
        Fixes #843

    commit 733eefceddbdad01726364e5d4523605f095fde2
    Author: Alex <div@alexe.at>
    Date:   Sun Sep 7 23:28:20 2025 +0200

        Translated using Weblate (German)

        Currently translated at 100.0% (958 of 958 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/de/

    commit 6c750d1c8f95b42418893e15ad46c3d4ed86d053
    Author: fantastron27 <fantastron27@gmail.com>
    Date:   Sun Sep 7 09:17:16 2025 +0200

        Translated using Weblate (Slovak)

        Currently translated at 100.0% (958 of 958 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/sk/

    commit f733b3b96bbddc71d426f2e60320a5ad2f6755af
    Merge: 769ea6ad af4e541c
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 21:36:35 2025 -0400

        Merge branch 'development' of github.com:seanmorley15/AdventureLog into development

    commit 769ea6ad710890e931aabace2c00dc37436f869f
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 21:36:33 2025 -0400

        Implement code changes to enhance functionality and improve performance

    commit af4e541c1c9e7309857102287199279aec339387
    Author: fantastron27 <fantastron27@gmail.com>
    Date:   Sun Sep 7 03:36:23 2025 +0200

        Added Slovak translations (#815)

        * Created sk.json

        * Update Navbar.svelte

        * Update +layout.svelte

        ---------

        Co-authored-by: Sean Morley <98704938+seanmorley15@users.noreply.github.com>

    commit 904474d757577229b47441d1378a6fd6788fbe40
    Merge: d4709434 f87a5fe3
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 21:31:58 2025 -0400

        Merge remote-tracking branch 'weblate/development' into development

    commit d47094346c0b63ea753294a0786414e5e070ae7f
    Merge: 4a5f59bf 6366a3eb
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 21:29:39 2025 -0400

        Merge remote-tracking branch 'weblate/development' into development

    commit f87a5fe3bcc2fe28cfc206fb5cba517bbffa8df6
    Author: Sergio <garcia.sergio@me.com>
    Date:   Sun Sep 7 01:12:50 2025 +0200

        Translated using Weblate (Spanish)

        Currently translated at 100.0% (956 of 956 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

    commit 4a5f59bfd24e32fdf3558b009a8f636636cb3663
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 21:06:17 2025 -0400

        Fixes #654

    commit c1302bb54ab272c2a98c53ce0d508b7d39e9674b
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 20:52:05 2025 -0400

        [BUG] Single day Collections will think location visits are out of date range
        Fixes #827

    commit 773f2d65bbfb2a9591b31fabfd6844612b840f1a
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 19:52:28 2025 -0400

        [BUG] Server Error (500) when trying to access the API docs
        Fixes #712

    commit 4228db249ed5e3261931a1cdb3895d0ddd3ac4ac
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 19:44:00 2025 -0400

        [BUG]Ordered Itinerary includes visits that are outside itinerary date range
        Fixes #746

    commit 26f36cabb0a860f10d7ba62b5279ddd1e282c78e
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 18:36:50 2025 +0200

        Translated using Weblate (Spanish)

        Currently translated at 100.0% (956 of 956 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

    commit 3bfd2dd5615afdbd04e3451c2ef728f1d7caf466
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 12:33:23 2025 -0400

        Remove empty English (United States) locale file

    commit 6366a3eba6ab72090e52be474212a663799dfe19
    Author: Nikolai Eidsheim <nikolai.eidsheim@gmail.com>
    Date:   Sat Sep 6 18:10:15 2025 +0200

        Translated using Weblate (Norwegian Bokmål)

        Currently translated at 100.0% (956 of 956 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/nb_NO/

    commit 671cd3701fc5a601f2f1bad9aef93106f91eec0b
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 16:58:04 2025 +0200

        Added translation using Weblate (English (United States))

    commit bdbbe5f4978f041f620f0503da69fa870cb1997c
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 16:54:43 2025 +0200

        Translated using Weblate (Spanish)

        Currently translated at 100.0% (956 of 956 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

commit f310771702291be93e1c6b3bdb5a76e02fb8cae8
Author: Sean Morley <98704938+seanmorley15@users.noreply.github.com>
Date:   Mon Sep 8 22:38:08 2025 -0400

    Update issue templates for bug reports, deployment issues, and feature requests (#849)

commit 02ed89fa46fa22f8c5d96b0e7f0948204dec9306
Author: Sean Morley <98704938+seanmorley15@users.noreply.github.com>
Date:   Sun Sep 7 23:16:12 2025 -0400

    Timezone fixes, Translations, and Misc Fixes (#844)

    * Translated using Weblate (Spanish)

    Currently translated at 100.0% (956 of 956 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

    * Added translation using Weblate (English (United States))

    * Translated using Weblate (Norwegian Bokmål)

    Currently translated at 100.0% (956 of 956 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/nb_NO/

    * Remove empty English (United States) locale file

    * Translated using Weblate (Spanish)

    Currently translated at 100.0% (956 of 956 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

    * [BUG]Ordered Itinerary includes visits that are outside itinerary date range
    Fixes #746

    * [BUG] Server Error (500) when trying to access the API docs
    Fixes #712

    * [BUG] Single day Collections will think location visits are out of date range
    Fixes #827

    * Fixes #654

    * Translated using Weblate (Spanish)

    Currently translated at 100.0% (956 of 956 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

    * Added Slovak translations (#815)

    * Created sk.json

    * Update Navbar.svelte

    * Update +layout.svelte

    ---------

    Co-authored-by: Sean Morley <98704938+seanmorley15@users.noreply.github.com>

    * Implement code changes to enhance functionality and improve performance

    * Translated using Weblate (Slovak)

    Currently translated at 100.0% (958 of 958 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/sk/

    * Translated using Weblate (German)

    Currently translated at 100.0% (958 of 958 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/de/

    * [BUG] Location Visit End Date not affected by Location Timezone
    Fixes #843

    * fix(i18n): update Chinese translations for location-related terms (#829)

    Co-authored-by: Sean Morley <98704938+seanmorley15@users.noreply.github.com>

    ---------

    Co-authored-by: Nikolai Eidsheim <nikolai.eidsheim@gmail.com>
    Co-authored-by: Sergio <garcia.sergio@me.com>
    Co-authored-by: fantastron27 <fantastron27@gmail.com>
    Co-authored-by: Alex <div@alexe.at>
    Co-authored-by: pplulee <hi@pplulee.me>

commit ae07c44030ff597be80988b63460595e8bea132f
Author: Sean Morley <mail@seanmorley.com>
Date:   Wed Sep 17 19:23:47 2025 -0400

    Remove duplicate comment for syncing development branch with main in .env.example

commit 94964f1fb16583f1ff63ddf4aee2469a532b0c6c
Author: Sean Morley <mail@seanmorley.com>
Date:   Wed Sep 17 19:22:36 2025 -0400

    Squashed commit of the following:

    commit 9d4f1b8f534a3cdfb22812f2a25ababd7a236a87
    Author: Jacob <jacob.aulin@proton.me>
    Date:   Sat Sep 13 15:17:22 2025 +0200

        Translated using Weblate (Swedish)

        Currently translated at 99.8% (957 of 958 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/sv/

    commit 8fac40cfde425c989521c891b3ba9c75ab32e57e
    Author: Christian S <schuld.christian@gmail.com>
    Date:   Sat Sep 13 12:54:52 2025 +0200

        Translated using Weblate (German)

        Currently translated at 100.0% (958 of 958 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/de/

    commit 8e8c42396ec77b763983155e8b1e89cabf38ce17
    Author: Patricio Carrau <duckycb@proton.me>
    Date:   Tue Sep 9 21:59:48 2025 +0200

        Translated using Weblate (Spanish)

        Currently translated at 100.0% (958 of 958 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

    commit be818ab408d00c5c26dfb3b25632604a415d3570
    Author: pplulee <hi@pplulee.me>
    Date:   Mon Sep 8 04:06:54 2025 +0100

        fix(i18n): update Chinese translations for location-related terms (#829)

        Co-authored-by: Sean Morley <98704938+seanmorley15@users.noreply.github.com>

    commit 9e40dcf6a1dc194d4694a114b3c7e88135121016
    Merge: af2f2809 733eefce
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sun Sep 7 23:03:57 2025 -0400

        Merge remote-tracking branch 'weblate/development' into development

    commit af2f28090b9242fb7ab263fa5bbb95a5bcc1b27f
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sun Sep 7 23:00:33 2025 -0400

        [BUG] Location Visit End Date not affected by Location Timezone
        Fixes #843

    commit 733eefceddbdad01726364e5d4523605f095fde2
    Author: Alex <div@alexe.at>
    Date:   Sun Sep 7 23:28:20 2025 +0200

        Translated using Weblate (German)

        Currently translated at 100.0% (958 of 958 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/de/

    commit 6c750d1c8f95b42418893e15ad46c3d4ed86d053
    Author: fantastron27 <fantastron27@gmail.com>
    Date:   Sun Sep 7 09:17:16 2025 +0200

        Translated using Weblate (Slovak)

        Currently translated at 100.0% (958 of 958 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/sk/

    commit f733b3b96bbddc71d426f2e60320a5ad2f6755af
    Merge: 769ea6ad af4e541c
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 21:36:35 2025 -0400

        Merge branch 'development' of github.com:seanmorley15/AdventureLog into development

    commit 769ea6ad710890e931aabace2c00dc37436f869f
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 21:36:33 2025 -0400

        Implement code changes to enhance functionality and improve performance

    commit af4e541c1c9e7309857102287199279aec339387
    Author: fantastron27 <fantastron27@gmail.com>
    Date:   Sun Sep 7 03:36:23 2025 +0200

        Added Slovak translations (#815)

        * Created sk.json

        * Update Navbar.svelte

        * Update +layout.svelte

        ---------

        Co-authored-by: Sean Morley <98704938+seanmorley15@users.noreply.github.com>

    commit 904474d757577229b47441d1378a6fd6788fbe40
    Merge: d4709434 f87a5fe3
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 21:31:58 2025 -0400

        Merge remote-tracking branch 'weblate/development' into development

    commit d47094346c0b63ea753294a0786414e5e070ae7f
    Merge: 4a5f59bf 6366a3eb
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 21:29:39 2025 -0400

        Merge remote-tracking branch 'weblate/development' into development

    commit f87a5fe3bcc2fe28cfc206fb5cba517bbffa8df6
    Author: Sergio <garcia.sergio@me.com>
    Date:   Sun Sep 7 01:12:50 2025 +0200

        Translated using Weblate (Spanish)

        Currently translated at 100.0% (956 of 956 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

    commit 4a5f59bfd24e32fdf3558b009a8f636636cb3663
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 21:06:17 2025 -0400

        Fixes #654

    commit c1302bb54ab272c2a98c53ce0d508b7d39e9674b
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 20:52:05 2025 -0400

        [BUG] Single day Collections will think location visits are out of date range
        Fixes #827

    commit 773f2d65bbfb2a9591b31fabfd6844612b840f1a
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 19:52:28 2025 -0400

        [BUG] Server Error (500) when trying to access the API docs
        Fixes #712

    commit 4228db249ed5e3261931a1cdb3895d0ddd3ac4ac
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 19:44:00 2025 -0400

        [BUG]Ordered Itinerary includes visits that are outside itinerary date range
        Fixes #746

    commit 26f36cabb0a860f10d7ba62b5279ddd1e282c78e
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 18:36:50 2025 +0200

        Translated using Weblate (Spanish)

        Currently translated at 100.0% (956 of 956 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

    commit 3bfd2dd5615afdbd04e3451c2ef728f1d7caf466
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 12:33:23 2025 -0400

        Remove empty English (United States) locale file

    commit 6366a3eba6ab72090e52be474212a663799dfe19
    Author: Nikolai Eidsheim <nikolai.eidsheim@gmail.com>
    Date:   Sat Sep 6 18:10:15 2025 +0200

        Translated using Weblate (Norwegian Bokmål)

        Currently translated at 100.0% (956 of 956 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/nb_NO/

    commit 671cd3701fc5a601f2f1bad9aef93106f91eec0b
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 16:58:04 2025 +0200

        Added translation using Weblate (English (United States))

    commit bdbbe5f4978f041f620f0503da69fa870cb1997c
    Author: Sean Morley <mail@seanmorley.com>
    Date:   Sat Sep 6 16:54:43 2025 +0200

        Translated using Weblate (Spanish)

        Currently translated at 100.0% (956 of 956 strings)

        Translation: AdventureLog/Web App
        Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

commit 9d4f1b8f534a3cdfb22812f2a25ababd7a236a87
Author: Jacob <jacob.aulin@proton.me>
Date:   Sat Sep 13 15:17:22 2025 +0200

    Translated using Weblate (Swedish)

    Currently translated at 99.8% (957 of 958 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/sv/

commit 8fac40cfde425c989521c891b3ba9c75ab32e57e
Author: Christian S <schuld.christian@gmail.com>
Date:   Sat Sep 13 12:54:52 2025 +0200

    Translated using Weblate (German)

    Currently translated at 100.0% (958 of 958 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/de/

commit 8e8c42396ec77b763983155e8b1e89cabf38ce17
Author: Patricio Carrau <duckycb@proton.me>
Date:   Tue Sep 9 21:59:48 2025 +0200

    Translated using Weblate (Spanish)

    Currently translated at 100.0% (958 of 958 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

commit be818ab408d00c5c26dfb3b25632604a415d3570
Author: pplulee <hi@pplulee.me>
Date:   Mon Sep 8 04:06:54 2025 +0100

    fix(i18n): update Chinese translations for location-related terms (#829)

    Co-authored-by: Sean Morley <98704938+seanmorley15@users.noreply.github.com>

commit 9e40dcf6a1dc194d4694a114b3c7e88135121016
Merge: af2f2809 733eefce
Author: Sean Morley <mail@seanmorley.com>
Date:   Sun Sep 7 23:03:57 2025 -0400

    Merge remote-tracking branch 'weblate/development' into development

commit af2f28090b9242fb7ab263fa5bbb95a5bcc1b27f
Author: Sean Morley <mail@seanmorley.com>
Date:   Sun Sep 7 23:00:33 2025 -0400

    [BUG] Location Visit End Date not affected by Location Timezone
    Fixes #843

commit 733eefceddbdad01726364e5d4523605f095fde2
Author: Alex <div@alexe.at>
Date:   Sun Sep 7 23:28:20 2025 +0200

    Translated using Weblate (German)

    Currently translated at 100.0% (958 of 958 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/de/

commit 6c750d1c8f95b42418893e15ad46c3d4ed86d053
Author: fantastron27 <fantastron27@gmail.com>
Date:   Sun Sep 7 09:17:16 2025 +0200

    Translated using Weblate (Slovak)

    Currently translated at 100.0% (958 of 958 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/sk/

commit f733b3b96bbddc71d426f2e60320a5ad2f6755af
Merge: 769ea6ad af4e541c
Author: Sean Morley <mail@seanmorley.com>
Date:   Sat Sep 6 21:36:35 2025 -0400

    Merge branch 'development' of github.com:seanmorley15/AdventureLog into development

commit 769ea6ad710890e931aabace2c00dc37436f869f
Author: Sean Morley <mail@seanmorley.com>
Date:   Sat Sep 6 21:36:33 2025 -0400

    Implement code changes to enhance functionality and improve performance

commit af4e541c1c9e7309857102287199279aec339387
Author: fantastron27 <fantastron27@gmail.com>
Date:   Sun Sep 7 03:36:23 2025 +0200

    Added Slovak translations (#815)

    * Created sk.json

    * Update Navbar.svelte

    * Update +layout.svelte

    ---------

    Co-authored-by: Sean Morley <98704938+seanmorley15@users.noreply.github.com>

commit 904474d757577229b47441d1378a6fd6788fbe40
Merge: d4709434 f87a5fe3
Author: Sean Morley <mail@seanmorley.com>
Date:   Sat Sep 6 21:31:58 2025 -0400

    Merge remote-tracking branch 'weblate/development' into development

commit d47094346c0b63ea753294a0786414e5e070ae7f
Merge: 4a5f59bf 6366a3eb
Author: Sean Morley <mail@seanmorley.com>
Date:   Sat Sep 6 21:29:39 2025 -0400

    Merge remote-tracking branch 'weblate/development' into development

commit f87a5fe3bcc2fe28cfc206fb5cba517bbffa8df6
Author: Sergio <garcia.sergio@me.com>
Date:   Sun Sep 7 01:12:50 2025 +0200

    Translated using Weblate (Spanish)

    Currently translated at 100.0% (956 of 956 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

commit 4a5f59bfd24e32fdf3558b009a8f636636cb3663
Author: Sean Morley <mail@seanmorley.com>
Date:   Sat Sep 6 21:06:17 2025 -0400

    Fixes #654

commit c1302bb54ab272c2a98c53ce0d508b7d39e9674b
Author: Sean Morley <mail@seanmorley.com>
Date:   Sat Sep 6 20:52:05 2025 -0400

    [BUG] Single day Collections will think location visits are out of date range
    Fixes #827

commit 773f2d65bbfb2a9591b31fabfd6844612b840f1a
Author: Sean Morley <mail@seanmorley.com>
Date:   Sat Sep 6 19:52:28 2025 -0400

    [BUG] Server Error (500) when trying to access the API docs
    Fixes #712

commit 4228db249ed5e3261931a1cdb3895d0ddd3ac4ac
Author: Sean Morley <mail@seanmorley.com>
Date:   Sat Sep 6 19:44:00 2025 -0400

    [BUG]Ordered Itinerary includes visits that are outside itinerary date range
    Fixes #746

commit 26f36cabb0a860f10d7ba62b5279ddd1e282c78e
Author: Sean Morley <mail@seanmorley.com>
Date:   Sat Sep 6 18:36:50 2025 +0200

    Translated using Weblate (Spanish)

    Currently translated at 100.0% (956 of 956 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

commit 3bfd2dd5615afdbd04e3451c2ef728f1d7caf466
Author: Sean Morley <mail@seanmorley.com>
Date:   Sat Sep 6 12:33:23 2025 -0400

    Remove empty English (United States) locale file

commit 6366a3eba6ab72090e52be474212a663799dfe19
Author: Nikolai Eidsheim <nikolai.eidsheim@gmail.com>
Date:   Sat Sep 6 18:10:15 2025 +0200

    Translated using Weblate (Norwegian Bokmål)

    Currently translated at 100.0% (956 of 956 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/nb_NO/

commit 671cd3701fc5a601f2f1bad9aef93106f91eec0b
Author: Sean Morley <mail@seanmorley.com>
Date:   Sat Sep 6 16:58:04 2025 +0200

    Added translation using Weblate (English (United States))

commit bdbbe5f4978f041f620f0503da69fa870cb1997c
Author: Sean Morley <mail@seanmorley.com>
Date:   Sat Sep 6 16:54:43 2025 +0200

    Translated using Weblate (Spanish)

    Currently translated at 100.0% (956 of 956 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/

* Translated using Weblate (French)

Currently translated at 100.0% (958 of 958 strings)

Translation: AdventureLog/Web App
Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/fr/

* Translated using Weblate (Turkish)

Currently translated at 100.0% (958 of 958 strings)

Translation: AdventureLog/Web App
Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/tr/

* feat: enhance serializers and views for nested representations and lightweight data fetching

* feat: implement caching for visits by country and region endpoints

* feat: update LocationSerializer to include debug logging and adjust nested context handling in CollectionSerializer

* feat: enhance CollectionSerializer and CollectionViewSet to support nested context handling

* feat(worldtravel): add globe spin feature with loading and result display

- Introduced a toggle button for the globe spin feature.
- Implemented fetch logic for globe spin data from the API.
- Added loading state with a spinning globe animation.
- Displayed country information, including flag, subregion, and visit statistics.
- Enhanced UI with animations for loading and displaying results.
- Included error handling for API fetch failures.

* Add Turkish language support to the application

* feat(map): enhance pin styling with gradient backgrounds and improved hover effects

* Squashed commit of the following:

commit 990b0645059421c4a293fbf64830a6d864ceb40e
Author: Henrique Fonseca Veloso <henriquefv@tutamail.com>
Date:   Sun Sep 21 00:27:59 2025 +0200

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 100.0% (958 of 958 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/pt_BR/

commit 03a4b9235faa849fb817348a2774e834a6851dc3
Author: Orhun <orhunavcu@gmail.com>
Date:   Fri Sep 19 19:38:12 2025 +0200

    Translated using Weblate (Turkish)

    Currently translated at 100.0% (958 of 958 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/tr/

commit 1ccdc678627eb5915b56a8bfb3465928c80a524f
Author: Henrique Fonseca Veloso <henriquefv@tutamail.com>
Date:   Sat Sep 20 20:01:36 2025 +0200

    Translated using Weblate (Portuguese (Brazil))

    Currently translated at 97.0% (930 of 958 strings)

    Translation: AdventureLog/Web App
    Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/pt_BR/

* fix(config): update appVersion to v0.11.0-main-09212025

* fix duration calculation on ordered collection view (#867)

Co-authored-by: Sean Morley <98704938+seanmorley15@users.noreply.github.com>

* Update frontend/src/routes/worldtravel/+page.svelte

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update backend/server/worldtravel/views.py

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update frontend/src/routes/map/+page.svelte

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Rohan <Alchez@users.noreply.github.com>
Co-authored-by: Orhun <orhunavcu@gmail.com>
Co-authored-by: vorbeiei <vorbeiei@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
Sean Morley
2025-09-21 22:06:24 -04:00
committed by GitHub
parent 4907ba8700
commit 240c617010
43 changed files with 13002 additions and 5398 deletions

File diff suppressed because one or more lines are too long

View File

@@ -305,7 +305,7 @@ class Transportation(models.Model):
name = models.CharField(max_length=200)
description = models.TextField(blank=True, null=True)
rating = models.FloatField(blank=True, null=True)
link = models.URLField(blank=True, null=True)
link = models.URLField(blank=True, null=True, max_length=2083)
date = models.DateTimeField(blank=True, null=True)
end_date = models.DateTimeField(blank=True, null=True)
start_timezone = models.CharField(max_length=50, choices=[(tz, tz) for tz in TIMEZONES], null=True, blank=True)

View File

@@ -234,9 +234,26 @@ class LocationSerializer(CustomModelSerializer):
# Makes it so the whole user object is returned in the serializer instead of just the user uuid
def to_representation(self, instance):
representation = super().to_representation(instance)
representation['user'] = CustomUserDetailsSerializer(instance.user, context=self.context).data
is_nested = self.context.get('nested', False)
allowed_nested_fields = set(self.context.get('allowed_nested_fields', []))
if not is_nested:
# Full representation for standalone locations
representation['user'] = CustomUserDetailsSerializer(instance.user, context=self.context).data
else:
# Slim representation for nested contexts, but keep allowed fields
fields_to_remove = [
'visits', 'attachments', 'trails', 'collections',
'user', 'city', 'country', 'region'
]
for field in fields_to_remove:
# Keep field if explicitly allowed for nested mode
if field not in allowed_nested_fields:
representation.pop(field, None)
return representation
def get_images(self, obj):
serializer = ContentImageSerializer(obj.images.all(), many=True, context=self.context)
# Filter out None values from the serialized data
@@ -349,7 +366,6 @@ class LocationSerializer(CustomModelSerializer):
category_data = validated_data.pop('category', None)
collections_data = validated_data.pop('collections', [])
print(category_data)
location = Location.objects.create(**validated_data)
# Handle category
@@ -391,6 +407,18 @@ class LocationSerializer(CustomModelSerializer):
instance.save()
return instance
class MapPinSerializer(serializers.ModelSerializer):
is_visited = serializers.SerializerMethodField()
category = CategorySerializer(read_only=True, required=False)
class Meta:
model = Location
fields = ['id', 'name', 'latitude', 'longitude', 'is_visited', 'category']
read_only_fields = ['id', 'name', 'latitude', 'longitude', 'is_visited', 'category']
def get_is_visited(self, obj):
return obj.is_visited_status()
class TransportationSerializer(CustomModelSerializer):
distance = serializers.SerializerMethodField()
@@ -555,24 +583,67 @@ class ChecklistSerializer(CustomModelSerializer):
return data
class CollectionSerializer(CustomModelSerializer):
locations = LocationSerializer(many=True, read_only=True)
transportations = TransportationSerializer(many=True, read_only=True, source='transportation_set')
notes = NoteSerializer(many=True, read_only=True, source='note_set')
checklists = ChecklistSerializer(many=True, read_only=True, source='checklist_set')
lodging = LodgingSerializer(many=True, read_only=True, source='lodging_set')
locations = serializers.SerializerMethodField()
transportations = serializers.SerializerMethodField()
notes = serializers.SerializerMethodField()
checklists = serializers.SerializerMethodField()
lodging = serializers.SerializerMethodField()
class Meta:
model = Collection
fields = ['id', 'description', 'user', 'name', 'is_public', 'locations', 'created_at', 'start_date', 'end_date', 'transportations', 'notes', 'updated_at', 'checklists', 'is_archived', 'shared_with', 'link', 'lodging']
read_only_fields = ['id', 'created_at', 'updated_at', 'user', 'shared_with']
def get_locations(self, obj):
if self.context.get('nested', False):
allowed_nested_fields = set(self.context.get('allowed_nested_fields', []))
return LocationSerializer(
obj.locations.all(),
many=True,
context={**self.context, 'nested': True, 'allowed_nested_fields': allowed_nested_fields}
).data
return LocationSerializer(obj.locations.all(), many=True, context=self.context).data
def get_transportations(self, obj):
# Only include transportations if not in nested context
if self.context.get('nested', False):
return []
return TransportationSerializer(obj.transportation_set.all(), many=True, context=self.context).data
def get_notes(self, obj):
# Only include notes if not in nested context
if self.context.get('nested', False):
return []
return NoteSerializer(obj.note_set.all(), many=True, context=self.context).data
def get_checklists(self, obj):
# Only include checklists if not in nested context
if self.context.get('nested', False):
return []
return ChecklistSerializer(obj.checklist_set.all(), many=True, context=self.context).data
def get_lodging(self, obj):
# Only include lodging if not in nested context
if self.context.get('nested', False):
return []
return LodgingSerializer(obj.lodging_set.all(), many=True, context=self.context).data
def to_representation(self, instance):
representation = super().to_representation(instance)
# Make it display the user uuid for the shared users instead of the PK
shared_uuids = []
for user in instance.shared_with.all():
shared_uuids.append(str(user.uuid))
representation['shared_with'] = shared_uuids
# If nested, remove the heavy fields entirely from the response
if self.context.get('nested', False):
fields_to_remove = ['transportations', 'notes', 'checklists', 'lodging']
for field in fields_to_remove:
representation.pop(field, None)
return representation
class CollectionInviteSerializer(serializers.ModelSerializer):

View File

@@ -3,6 +3,7 @@ TIMEZONES = [
"Africa/Accra",
"Africa/Addis_Ababa",
"Africa/Algiers",
"Africa/Asmara",
"Africa/Asmera",
"Africa/Bamako",
"Africa/Bangui",
@@ -56,7 +57,12 @@ TIMEZONES = [
"America/Anguilla",
"America/Antigua",
"America/Araguaina",
"America/Argentina/Buenos_Aires",
"America/Argentina/Catamarca",
"America/Argentina/Cordoba",
"America/Argentina/Jujuy",
"America/Argentina/La_Rioja",
"America/Argentina/Mendoza",
"America/Argentina/Rio_Gallegos",
"America/Argentina/Salta",
"America/Argentina/San_Juan",
@@ -65,6 +71,7 @@ TIMEZONES = [
"America/Argentina/Ushuaia",
"America/Aruba",
"America/Asuncion",
"America/Atikokan",
"America/Bahia",
"America/Bahia_Banderas",
"America/Barbados",
@@ -88,6 +95,7 @@ TIMEZONES = [
"America/Coral_Harbour",
"America/Cordoba",
"America/Costa_Rica",
"America/Coyhaique",
"America/Creston",
"America/Cuiaba",
"America/Curacao",
@@ -114,6 +122,7 @@ TIMEZONES = [
"America/Halifax",
"America/Havana",
"America/Hermosillo",
"America/Indiana/Indianapolis",
"America/Indiana/Knox",
"America/Indiana/Marengo",
"America/Indiana/Petersburg",
@@ -127,6 +136,7 @@ TIMEZONES = [
"America/Jamaica",
"America/Jujuy",
"America/Juneau",
"America/Kentucky/Louisville",
"America/Kentucky/Monticello",
"America/Kralendijk",
"America/La_Paz",
@@ -158,6 +168,7 @@ TIMEZONES = [
"America/North_Dakota/Beulah",
"America/North_Dakota/Center",
"America/North_Dakota/New_Salem",
"America/Nuuk",
"America/Ojinaga",
"America/Panama",
"America/Paramaribo",
@@ -233,6 +244,7 @@ TIMEZONES = [
"Asia/Famagusta",
"Asia/Gaza",
"Asia/Hebron",
"Asia/Ho_Chi_Minh",
"Asia/Hong_Kong",
"Asia/Hovd",
"Asia/Irkutsk",
@@ -243,7 +255,9 @@ TIMEZONES = [
"Asia/Kamchatka",
"Asia/Karachi",
"Asia/Katmandu",
"Asia/Kathmandu",
"Asia/Khandyga",
"Asia/Kolkata",
"Asia/Krasnoyarsk",
"Asia/Kuala_Lumpur",
"Asia/Kuching",
@@ -286,6 +300,7 @@ TIMEZONES = [
"Asia/Vientiane",
"Asia/Vladivostok",
"Asia/Yakutsk",
"Asia/Yangon",
"Asia/Yekaterinburg",
"Asia/Yerevan",
"Atlantic/Azores",
@@ -309,6 +324,32 @@ TIMEZONES = [
"Australia/Melbourne",
"Australia/Perth",
"Australia/Sydney",
"Etc/GMT+1",
"Etc/GMT+10",
"Etc/GMT+11",
"Etc/GMT+12",
"Etc/GMT+2",
"Etc/GMT+3",
"Etc/GMT+4",
"Etc/GMT+5",
"Etc/GMT+6",
"Etc/GMT+7",
"Etc/GMT+8",
"Etc/GMT+9",
"Etc/GMT-1",
"Etc/GMT-10",
"Etc/GMT-11",
"Etc/GMT-12",
"Etc/GMT-13",
"Etc/GMT-14",
"Etc/GMT-2",
"Etc/GMT-3",
"Etc/GMT-4",
"Etc/GMT-5",
"Etc/GMT-6",
"Etc/GMT-7",
"Etc/GMT-8",
"Etc/GMT-9",
"Europe/Amsterdam",
"Europe/Andorra",
"Europe/Astrakhan",
@@ -332,6 +373,7 @@ TIMEZONES = [
"Europe/Kaliningrad",
"Europe/Kiev",
"Europe/Kirov",
"Europe/Kyiv",
"Europe/Lisbon",
"Europe/Ljubljana",
"Europe/London",
@@ -382,6 +424,7 @@ TIMEZONES = [
"Pacific/Auckland",
"Pacific/Bougainville",
"Pacific/Chatham",
"Pacific/Chuuk",
"Pacific/Easter",
"Pacific/Efate",
"Pacific/Enderbury",
@@ -393,6 +436,7 @@ TIMEZONES = [
"Pacific/Guadalcanal",
"Pacific/Guam",
"Pacific/Honolulu",
"Pacific/Kanton",
"Pacific/Kiritimati",
"Pacific/Kosrae",
"Pacific/Kwajalein",
@@ -407,6 +451,7 @@ TIMEZONES = [
"Pacific/Palau",
"Pacific/Pitcairn",
"Pacific/Ponape",
"Pacific/Pohnpei",
"Pacific/Port_Moresby",
"Pacific/Rarotonga",
"Pacific/Saipan",

View File

@@ -16,7 +16,6 @@ class CollectionViewSet(viewsets.ModelViewSet):
permission_classes = [CollectionShared]
pagination_class = pagination.StandardResultsSetPagination
def apply_sorting(self, queryset):
order_by = self.request.query_params.get('order_by', 'name')
order_direction = self.request.query_params.get('order_direction', 'asc')
@@ -48,14 +47,36 @@ class CollectionViewSet(viewsets.ModelViewSet):
return queryset.order_by(ordering)
def list(self, request, *args, **kwargs):
def get_serializer_context(self):
"""Override to add nested and exclusion contexts based on query parameters"""
context = super().get_serializer_context()
# Handle nested parameter
is_nested = self.request.query_params.get('nested', 'false').lower() == 'true'
if is_nested:
context['nested'] = True
# Handle individual exclusion parameters (if using granular approach)
exclude_params = [
'exclude_transportations',
'exclude_notes',
'exclude_checklists',
'exclude_lodging'
]
for param in exclude_params:
if self.request.query_params.get(param, 'false').lower() == 'true':
context[param] = True
return context
def list(self, request):
# make sure the user is authenticated
if not request.user.is_authenticated:
return Response({"error": "User is not authenticated"}, status=400)
queryset = Collection.objects.filter(user=request.user, is_archived=False)
queryset = self.apply_sorting(queryset)
collections = self.paginate_and_respond(queryset, request)
return collections
return self.paginate_and_respond(queryset, request)
@action(detail=False, methods=['get'])
def all(self, request):
@@ -415,3 +436,12 @@ class CollectionViewSet(viewsets.ModelViewSet):
return paginator.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
def get_serializer(self, *args, **kwargs):
# Add nested=True to serializer context for GET list requests
context = self.get_serializer_context()
# If this is a list action, make sure nested=True in context
if self.action == 'list':
context['nested'] = True
kwargs['context'] = context
return super().get_serializer(*args, **kwargs)

View File

@@ -13,7 +13,8 @@ class IcsCalendarGeneratorViewSet(viewsets.ViewSet):
@action(detail=False, methods=['get'])
def generate(self, request):
locations = Location.objects.filter(user=request.user)
serializer = LocationSerializer(locations, many=True)
context={'nested': True, 'allowed_nested_fields': ['visits']}
serializer = LocationSerializer(locations, many=True, context=context)
user = request.user
name = f"{user.first_name} {user.last_name}"

View File

@@ -9,7 +9,7 @@ from rest_framework.response import Response
import requests
from adventures.models import Location, Category
from adventures.permissions import IsOwnerOrSharedWithFullAccess
from adventures.serializers import LocationSerializer
from adventures.serializers import LocationSerializer, MapPinSerializer
from adventures.utils import pagination
class LocationViewSet(viewsets.ModelViewSet):
@@ -193,6 +193,8 @@ class LocationViewSet(viewsets.ModelViewSet):
return Response({"error": "User is not authenticated"}, status=400)
include_collections = request.query_params.get('include_collections', 'false') == 'true'
nested = request.query_params.get('nested', 'false') == 'true'
allowedNestedFields = request.query_params.get('allowed_nested_fields', '').split(',')
# Build queryset with collection filtering
base_filter = Q(user=request.user.id)
@@ -203,7 +205,7 @@ class LocationViewSet(viewsets.ModelViewSet):
queryset = Location.objects.filter(base_filter, collections__isnull=True)
queryset = self.apply_sorting(queryset)
serializer = self.get_serializer(queryset, many=True)
serializer = self.get_serializer(queryset, many=True, context={'nested': nested, 'allowed_nested_fields': allowedNestedFields})
return Response(serializer.data)
@action(detail=True, methods=['get'], url_path='additional-info')
@@ -227,6 +229,17 @@ class LocationViewSet(viewsets.ModelViewSet):
response_data['sun_times'] = self._get_sun_times(adventure, response_data.get('visits', []))
return Response(response_data)
# view to return location name and lat/lon for all locations a user owns for the golobal map
@action(detail=False, methods=['get'], url_path='pins')
def map_locations(self, request):
"""Get all locations with name and lat/lon for map display."""
if not request.user.is_authenticated:
return Response({"error": "User is not authenticated"}, status=400)
locations = Location.objects.filter(user=request.user)
serializer = MapPinSerializer(locations, many=True)
return Response(serializer.data)
# ==================== HELPER METHODS ====================