[v0.12.0 pre] Planning & Itinerary Overhaul, Recommendation Engine, OIDC Enhancements, and More (#931)
* Fixes [REQUEST] Email-based auto-linking for OIDC Fixes #921 * Add ClusterMap integration for regions and cities with fit-to-bounds functionality * Update COUNTRY_REGION_JSON_VERSION to v3.0 and modify state ID generation to use ISO2 code * fix: handle email verification required case during signup Updated the signup action to return a specific message when the backend responds with a 401 status, indicating that the signup succeeded but email verification is required. This allows the frontend to display the appropriate message using an i18n key. * feat: add Advanced Configuration documentation with optional environment variables * Fixes #511 * fix: update appVersion to v0.11.0-main-121425 and enhance socialProviders handling in settings page * feat: implement social signup controls and update documentation for new environment variables * fix: update LocationCard props and enhance restore data functionality - Changed the user prop to null in LocationCard component on the dashboard page. - Added isRestoring state to manage loading state during data restoration in settings. - Updated the restore button to show a loading spinner when a restore operation is in progress. * fix: update appVersion to v0.12.0-pre-dev-121625 * feat: implement itinerary planning feature with CollectionItineraryPlanner component and related updates * feat: add overnight lodging indicator and functionality to CollectionItineraryPlanner * feat: add compact display option to LocationCard and enhance lodging filtering in CollectionItineraryPlanner * feat(itinerary): add itinerary management features and link modal - Introduced ItineraryViewSet for managing itinerary items with create and reorder functionalities. - Added itinerary linking capabilities in CollectionModal and CollectionItineraryPlanner components. - Implemented new ItineraryLinkModal for linking existing items to specific dates. - Enhanced the frontend with new modals for creating locations, lodging, transportation, notes, and checklists. - Updated the backend to handle itinerary item creation and reordering with appropriate permissions. - Improved data handling for unscheduled items and their association with the itinerary. - Added new dependencies to the frontend for enhanced functionality. * feat(itinerary): implement auto-generate functionality for itinerary items based on dated records * feat(collection): enhance collection sharing logic and improve data handling on invite acceptance * fix: update appVersion to correct pre-dev version * feat(wikipedia): implement image selection from Wikipedia with enhanced results display * Refactor code structure for improved readability and maintainability * feat: add CollectionRecommendationView component for displaying location recommendations - Implemented CollectionRecommendationView.svelte to handle location recommendations based on user input and selected categories. - Added Recommendation and RecommendationResponse types to types.ts for better type safety and structure. - Updated collections/[id]/+page.svelte to include a new view for recommendations, allowing users to switch between different views seamlessly. * fix: update appVersion and improve button accessibility in collection views * feat: add canModify prop to collection components for user permission handling * feat: add itinerary removal functionality to various cards and update UI components - Implemented `removeFromItinerary` function in `LodgingCard`, `NoteCard`, and `TransportationCard` to allow users to remove items from their itinerary. - Replaced the trash icon with a calendar remove icon in `LocationCard`, `LodgingCard`, `NoteCard`, and `TransportationCard` for better visual representation. - Updated the dropdown menus in `LodgingCard`, `NoteCard`, and `TransportationCard` to include the new remove from itinerary option. - Enhanced `CollectionItineraryPlanner` to pass itinerary items to the respective cards. - Removed `PointSelectionModal.svelte` as it is no longer needed. - Refactored `LocationMedia.svelte` to integrate `ImageManagement` component and clean up unused code related to image handling. * feat: enhance itinerary management with deduplication and initial visit date handling * feat: add FullMap component for enhanced map functionality with clustering support - Introduced FullMap.svelte to handle map rendering, clustering, and marker management. - Updated map page to utilize FullMap component, replacing direct MapLibre usage. - Implemented clustering options and marker properties handling in FullMap. - Added utility functions for resolving theme colors and managing marker states. - Enhanced user experience with hover popups and improved loading states for location details. - Updated app version to v0.12.0-pre-dev-122225. * feat: enhance map interaction for touch devices with custom popup handling * feat: add progress tracker for folder views to display visited and planned locations * feat: add map center and zoom state management with URL synchronization * feat: add status and days until start fields to collections with filtering options * Component folder structure changes * feat: add LodgingMedia and LodgingModal components for managing lodging details and media attachments feat: implement LocationSearchMap component for interactive location searching and mapping functionality * fix: update contentType in ImageManagement component to 'lodging' for correct media handling * feat: enhance lodging management with date validation and update messages * feat: implement lodging detail page with server-side loading and image modal functionality - Added a new server-side load function to fetch lodging details by ID. - Created a new Svelte component for the lodging detail page, including image carousel and map integration. - Implemented a modal for displaying images with navigation. - Enhanced URL handling in the locations page to only read parameters. * feat: add Transportation modal component and related routes - Implemented TransportationModal component for creating and editing transportation entries. - Added server-side loading for transportation details in the new route [id]/+page.server.ts. - Created a new Svelte page for displaying transportation details with image and attachment handling. - Integrated modal for editing transportation in the transportation details page. - Updated lodging routes to include a modal for editing lodging entries. - Removed unused delete action from lodging server-side logic. * feat: add start_code and end_code fields to Transportation model and update related components * feat: implement date validation for itinerary items and add day picker modal for scheduling * Reorder town and county checks in geocoding.py Fix detection if only town exists for a location but county is no city name * Use address keys only if city is found * Make sure reverse geocoding uses correct key for cities (#938) * Reorder town and county checks in geocoding.py Fix detection if only town exists for a location but county is no city name * Use address keys only if city is found * Refactor code structure for improved readability and maintainability * Enhance collection management with modal updates and item handling * feat: integrate CollectionMap component in collections page and update map titles in lodging and transportation pages - Replaced inline map implementation with CollectionMap component in collections/[id]/+page.svelte for better modularity. - Updated the map title in lodging/[id]/+page.svelte to reflect lodging context. - Updated the map title in transportations/[id]/+page.svelte to reflect transportation context. - Added functionality to collect and render GeoJSON data from transportation attachments in transportations/[id]/+page.svelte. * chore: update copyright year to 2026 in various files * feat: enhance backup export functionality with itinerary items and export IDs * fix: improve dropdown close behavior by handling multiple event types * fix: remove unnecessary cache decorator from globespin function * feat: add initial visit date support in ChecklistModal and NoteModal, with UI suggestions for prefilled dates * feat: add details view for checklist and note cards with edit functionality * feat: add travel duration and GPX distance calculation to Transportation model and UI * feat: add primary image support to Collection model, serializers, and UI components * Refactor calendar components and enhance event detail handling - Replaced direct calendar implementation with a reusable CalendarComponent in the calendar route. - Introduced EventDetailsModal for displaying event details, improving modularity and readability. - Added functionality to fetch event details asynchronously when an event is clicked. - Implemented ICS calendar download functionality with loading state management. - Enhanced collections page to support calendar view, integrating event handling and timezone management. - Improved lodging and transportation pages to display local time for stays and trips, including timezone badges. - Cleaned up unused code and comments for better maintainability. * feat: enhance hero image handling in collection view by prioritizing primary image * chore: update .env.example to include account email verification configuration * feat: enhance LodgingCard and TransportationCard components with expandable details and improved layout * feat: add price and currency fields to locations, lodging, and transportation components - Introduced price and price_currency fields in LocationModal, LodgingDetails, LodgingModal, TransportationDetails, and TransportationModal components. - Implemented MoneyInput and CurrencyDropdown components for handling monetary values and currency selection. - Updated data structures and types to accommodate new price and currency fields across various models. - Enhanced cost summary calculations in collections and routes to display total costs by currency. - Added user preference for default currency in settings, affecting new item forms. - Updated UI to display price information in relevant components, ensuring consistent formatting and user experience. * feat: add Development Timeline link to overview and create timeline documentation * feat: enhance map functionality with search and zoom features - Updated availableViews in collection page to include map view based on lodging and transportation locations. - Added search functionality to the map page, allowing users to filter pins by name and category. - Implemented auto-zoom feature to adjust the map view based on filtered search results. - Introduced a search bar with a clear button for better user experience. * feat: enhance ISO code extraction and region matching logic in extractIsoCode function * feat: enhance extractIsoCode function with normalization for locality matching * feat: update extractIsoCode function to include additional ISO3166 levels for improved region matching * feat: enhance extractIsoCode function to handle cases without city information and update CollectionMap to bind user data * feat: add cron job for syncing visited regions and cities, enhance Docker and supervisord configurations * feat: add CollectionItineraryDay model and related functionality for itinerary day metadata management * feat: implement cleanup of out-of-range itinerary items and notify users of potential impacts on itinerary when dates change * Refactor collection page for improved localization and code clarity - Removed unused imports and consolidated cost category labels to be reactive. - Updated cost summary function to accept localized labels. - Enhanced localization for various UI elements, including buttons, headings, and statistics. - Improved user feedback messages for better clarity and consistency. - Ensured all relevant text is translatable using the i18n library. * feat: add collaborator serialization and display in collections - Implemented `_build_profile_pic_url` and `_serialize_collaborator` functions for user profile picture URLs and serialization. - Updated `CollectionSerializer` and `UltraSlimCollectionSerializer` to include collaborators in the serialized output. - Enhanced `CollectionViewSet` to prefetch shared_with users for optimized queries. - Modified frontend components to display collaborators in collection details, including profile pictures and initials. - Added new localization strings for collaborators. - Refactored map and location components to improve usability and functionality. - Updated app version to reflect new changes. * feat: add dynamic lodging icons based on type in CollectionMap component * feat: add CollectionStats component for detailed trip statistics - Implemented CollectionStats.svelte to display various statistics related to the collection, including distances, activities, and locations visited. - Enhanced CollectionMap.svelte to filter activities based on date range using new getActivityDate function. - Updated LocationSearchMap.svelte to handle airport mode for start and end locations. - Modified types.ts to include is_global property in CollectionItineraryItem for trip-wide items. - Updated +page.svelte to integrate the new stats view and manage view state accordingly. * feat: enhance itinerary management by removing old items on date change for notes and checklists; normalize date handling in CollectionMap * feat: add functionality to change day and move items to trip-wide itinerary - Implemented changeDay function in ChecklistCard, LocationCard, LodgingCard, NoteCard, and TransportationCard components to allow users to change the scheduled day of items. - Added a button to move items to the global (trip-wide) itinerary in the aforementioned components, with appropriate dispatch events. - Enhanced CollectionItineraryPlanner to handle moving items to the global itinerary and added UI elements for unscheduled items. - Updated ItineraryDayPickModal to support the deletion of source visits when moving locations. - Added new translations for "Change Day" and "Move Trip Wide" in the English locale. * fix: specify full path for python3 in cron job and add shell and path variables * fix: update appVersion to v0.12.0-pre-dev-010726 * feat: enhance CollectionItineraryPlanner and CollectionStats with dynamic links and transport type normalization * Add Dev Container + WSL install docs and link in install guide (#944) (#951) * feat: enhance internationalization support in CollectionMap and CollectionStats components - Added translation support for various labels and messages in CollectionMap.svelte and CollectionStats.svelte using svelte-i18n. - Updated English and Chinese locale files to include new translation keys for improved user experience. - Simplified the rendering of recommendation views in the collections page. * Refactor itinerary management and UI components - Updated ItineraryViewSet to handle visit updates and creations more efficiently, preserving visit IDs when moving between days. - Enhanced ChecklistCard, LodgingCard, TransportationCard, and NoteCard to include a new "Change Day" option in the actions menu. - Improved user experience in CollectionItineraryPlanner by tracking specific itinerary items being moved and ensuring only the relevant entries are deleted. - Added new location sharing options in LodgingCard and TransportationCard for Apple Maps, Google Maps, and OpenStreetMap. - Updated translations in en.json for consistency and clarity. - Minor UI adjustments for better accessibility and usability across various components. * feat: implement action menus and close event handling in card components * feat: refactor Dockerfile and supervisord configuration to remove cron and add periodic sync script * feat: enhance LocationSearchMap and TransportationDetails components with initialization handling and airport mode logic * feat: add airport and location search mode labels to localization file * feat: enhance periodic sync logging and improve airport mode handling in LocationSearchMap * feat: enhance unscheduled items display with improved card interactions and accessibility * Add dev compose for hot reload and update WSL dev container docs (#958) * feat: enhance localization for itinerary linking and transportation components * Localization: update localization files with new keys and values * fix: improve error messages for Overpass API responses * chore: update dependencies in frontend package.json and pnpm-lock.yaml - Updated @sveltejs/adapter-node from ^5.2.12 to ^5.4.0 - Updated @sveltejs/adapter-vercel from ^5.7.0 to ^6.3.0 - Updated tailwindcss from ^3.4.17 to ^3.4.19 - Updated typescript from ^5.8.3 to ^5.9.3 - Updated vite from ^5.4.19 to ^5.4.21 * chore: update dependencies in pnpm-lock.yaml to latest versions * Refactor code structure for improved readability and maintainability * Refactor code structure for improved readability and maintainability * fix: update package dependencies to resolve compatibility issues * Add "worldtravel" translations to multiple locale files - Added "worldtravel" key with translations for Spanish, French, Hungarian, Italian, Japanese, Korean, Dutch, Norwegian, Polish, Brazilian Portuguese, Russian, Slovak, Swedish, Turkish, Ukrainian, and Chinese. - Updated the navigation section in each locale file to include the new "worldtravel" entry. * Add new screenshots and update email verification message in locale file * feat: Implement data restoration functionality with file import - Added a new action `restoreData` in `+page.server.ts` to handle file uploads for restoring collections. - Enhanced the UI in `+page.svelte` to include an import button and a modal for import progress. - Integrated file input handling to trigger form submission upon file selection. - Removed unused GSAP animations from the login, profile, and signup pages for cleaner code. * feat: Add modals for creating locations and lodging from recommendations, enhance image import functionality * fix: Adjust styles to prevent horizontal scroll and enhance floating action button visibility * feat: Enhance error handling and messaging for Google Maps and OpenStreetMap geocoding functions * fix: Enhance error messaging for Google Maps access forbidden response * feat: Add User-Agent header to Google Maps API requests and refine error messaging for access forbidden response * fix: Update User-Agent header in Google Maps API requests for improved compatibility * fix: Disable proxy settings in Google Maps API request to prevent connection issues * fix: Update Trivy security scan configuration and add .trivyignore for known false positives * fix: Refactor update method to handle is_public cascading for related items * feat: Integrate django-invitations for user invitation management and update settings * feat: Add Tailwind CSS and DaisyUI plugin for styling * feat: Add Tailwind CSS and DaisyUI plugin for styling * feat: Add "Invite a User" guide and update navigation links * docs: Update "Invite a User" guide to include email configuration tip * feat: Update email invitation template for improved styling and clarity * fix: Remove trailing backslash from installation note in Unraid documentation * feat: Add export/import messages and user email verification prompts in multiple languages * Squashed commit of the following: commit a993a15b93ebb7521ae2e5cc31596b98b29fcd6c Author: Alex <div@alexe.at> Date: Mon Jan 12 20:44:47 2026 +0100 Translated using Weblate (German) Currently translated at 100.0% (1048 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/de/ commit fdc455d9424fbb0f6b72179d9eb1340411700773 Author: Ettore Atalan <atalanttore@googlemail.com> Date: Sat Jan 10 23:24:23 2026 +0100 Translated using Weblate (German) Currently translated at 100.0% (1048 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/de/ commit 5942129c55e89dd999a13d4df9c40e6e3189355c Author: Orhun <orhunavcu@gmail.com> Date: Sun Jan 11 13:05:31 2026 +0100 Translated using Weblate (Turkish) Currently translated at 100.0% (1048 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/tr/ commit 8712e43d8ba4a7e7fe163fb454d6577187f9a375 Author: Henrique Fonseca Veloso <henriquefv@tutamail.com> Date: Fri Jan 9 22:53:11 2026 +0100 Translated using Weblate (Portuguese (Brazil)) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/pt_BR/ commit 18ee56653470413afe8d71ecd2b5028f6e4cf118 Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:52:57 2026 +0100 Translated using Weblate (Dutch) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/nl/ commit 57783c544e583c035c8b57b5c10ca320f25f399e Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:52:14 2026 +0100 Translated using Weblate (Arabic) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/ar/ commit fb09edfd85bc85234b1c1ba7dd499f2915093fff Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:52:26 2026 +0100 Translated using Weblate (Spanish) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/es/ commit 554a207d8e454a1f7ae826e2a40d389b94be5512 Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:52:21 2026 +0100 Translated using Weblate (German) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/de/ commit b70b9db27fb8607beefeb288185601c8f5eae28d Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:53:02 2026 +0100 Translated using Weblate (Norwegian Bokmål) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/nb_NO/ commit 3b467caa9007c553e4ae7de97f53b6e462161ea3 Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:53:07 2026 +0100 Translated using Weblate (Polish) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/pl/ commit 30fbbfba3572c8f78ec7c7e1a231e363aca1ef10 Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:53:17 2026 +0100 Translated using Weblate (Russian) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/ru/ commit 8cecb492cfcac0a1f93ee8919f7b41d978d331ee Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:52:42 2026 +0100 Translated using Weblate (Italian) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/it/ commit f0d3d41029c89bfa83d5891ee7af70241f27b7be Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:52:38 2026 +0100 Translated using Weblate (Hungarian) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/hu/ commit 102e0f1912d010d38755a1713abb2a7f7564aafb Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:53:21 2026 +0100 Translated using Weblate (Slovak) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/sk/ commit 428b8f18cf6195a96b55109e0221413d82415a2f Author: Максим Горпиніч <gorpinicmaksim0@gmail.com> Date: Sat Jan 10 08:55:28 2026 +0100 Translated using Weblate (Ukrainian) Currently translated at 100.0% (1048 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/uk/ commit 1a71aaf279ecab26c0c1fede05025732e6dcfa5e Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:53:27 2026 +0100 Translated using Weblate (Swedish) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/sv/ commit 36ec3701f3a1a904e7c42ac4ffbe6a050dc6d1ed Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:53:43 2026 +0100 Translated using Weblate (Chinese (Simplified Han script)) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/zh_Hans/ commit 65d8b74b340c877cad2028b7142c783a1b568d49 Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:52:48 2026 +0100 Translated using Weblate (Japanese) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/ja/ commit 4d11d1d31022583657e93aee70301a8ffcde1340 Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:52:52 2026 +0100 Translated using Weblate (Korean) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/ko/ commit bd1135bcb965ad73cf493771b15081cc97cf513a Author: Orhun <orhunavcu@gmail.com> Date: Fri Jan 9 22:53:33 2026 +0100 Translated using Weblate (Turkish) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/tr/ commit 2c3d814119f4cf2dabd20933699f5b991f20f3e6 Author: Anonymous <noreply@weblate.org> Date: Fri Jan 9 22:52:32 2026 +0100 Translated using Weblate (French) Currently translated at 99.9% (1047 of 1048 strings) Translation: AdventureLog/Web App Translate-URL: https://hosted.weblate.org/projects/adventurelog/web-app/fr/ * Refactor code structure and remove redundant code blocks for improved readability and maintainability * fix: Correct appVersion to match the latest pre-release version * fix: Add missing vulnerability reference for jaraco.context in .trivyignore --------- Co-authored-by: Lars Lehmann <33843261+larsl-net@users.noreply.github.com> Co-authored-by: Lars Lehmann <lars@lmail.eu> Co-authored-by: Nick Petrushin <n.a.petrushin@gmail.com>
This commit is contained in:
204
documentation/docs/changelogs/development_timeline.md
Normal file
204
documentation/docs/changelogs/development_timeline.md
Normal file
@@ -0,0 +1,204 @@
|
||||
# AdventureLog: Development Timeline & Origin Story
|
||||
|
||||
By: Sean Morley, Founder & Lead Developer
|
||||
|
||||
This is the timeline of **how AdventureLog came to be, how it kept surviving my terrible early design choices, and how it slowly learned to be useful**. I wrote this as a detailed, phase-by-phase story so contributors, users, and future-me can see what decisions were made, why, and what problems we hit (and fixed) along the way.
|
||||
|
||||
> TL;DR: started as _NextVenture_, learned web dev the hard way, resurrected as _AdventureLog_, switched stacks twice, survived an chaotic Reddit launch, grew through community requests, and today the project is very much alive.
|
||||
|
||||
## Quick roadmap
|
||||
|
||||
- **Phase 0 — Ideation & Prototyping:** March 2023 → July 2023
|
||||
The seed. Lots of learning, lots of scrapped prototypes.
|
||||
- **Phase 1 — AdventureLog, SvelteKit roots:** March 2024 → July 2024
|
||||
Frontend-first, local-storage MVP, severe Docker struggles, file storage chaos, MinIO pain.
|
||||
- **Phase 2 — Django saves the day:** July 2024 → August 2024
|
||||
Backend matured quickly; REST API, Django admin, file storage sanity.
|
||||
- **Phase 3 — Definition, Community Growth, and Integrations:** Sept 2024 → June 2025
|
||||
Feature solidification, sharing, world data, Immich integration, big UX decisions.
|
||||
- **Phase 4 — Solidification & Expansion:** June 2025 → Present
|
||||
UI rebuild, rename of core concepts, activities/trails, heavy QoL and performance work.
|
||||
|
||||
## Phase 0 — Initial Ideation and Prototyping
|
||||
|
||||
**Dates:** March 2023 — July 2023
|
||||
|
||||
This phase was basically me being excited, naive, and wildly optimistic.
|
||||
|
||||
### What I planned
|
||||
|
||||
- Start as **NextVenture**: a curated list of national parks, cities, landmarks — places people check off. Simple premise, obvious joy.
|
||||
- A focus on letting users mark where they've been, build a list of places to visit, and keep a little travel log.
|
||||
|
||||
### What actually happened
|
||||
|
||||
- I was learning the **React / Node / Express** (MERN) stack on the fly. Every problem felt like a mountain and every mountain required rewriting whole parts of the codebase once I learned better practices (it was not that enjoyable to be honest).
|
||||
- I produced multiple small prototypes, each progressively less terrible than the last. Progress! But also lots of “why did I do that” moments.
|
||||
- Burnout + humility set in: I needed a break to learn fundamentals rather than pile band-aids on a shaky codebase (yeah I didn't really learn a lot during that break either, but at least I wasn't actively writing bad code).
|
||||
|
||||
### Small but important pivots
|
||||
|
||||
- While on break I renamed the project to **AdventureLog** — it felt better, cleaner, and more fitting than the working title.
|
||||
- I played with tiny experiments, tested UI ideas, and tried different stacks mentally so the next attempt wouldn’t be purely guesswork. I was very intrested in the project just lacking the right technical foundation.
|
||||
|
||||
### Takeaway
|
||||
|
||||
Phase 0 was less about shipping and more about surviving the learning curve. The project’s DNA (places, visits, memories) was clear; I just needed the right tools and patience to implement it.
|
||||
|
||||
## Phase 1 — Initial Development of AdventureLog (SvelteKit era)
|
||||
|
||||
**Dates:** March 2024 — July 2024
|
||||
**Versions:** v0.1.0-alpha → v0.3.1
|
||||
|
||||
This was the “frontend-first, learn-by-doing” era. SvelteKit won me because it’s delightful to write and let me prototype fast. I still use SvelteKit for the frontend today and love it.
|
||||
|
||||
### Core progress
|
||||
|
||||
- Built a single-page app MVP where adventures were stored in **localStorage**. Simple, demoable, and enough to prove the concept.
|
||||
- Learned SvelteKit app structure, routing, and how to think in reactive UI.
|
||||
|
||||
### Auth and backend beginnings
|
||||
|
||||
- Implemented authentication with **Lucia** so users could create accounts and persist data beyond local storage. That transition felt like leveling up.
|
||||
- Switched from local-only to a backend API using **SvelteKit’s API routes** to centralize storage and multi-device access.
|
||||
|
||||
### Deployment & DevOps pain
|
||||
|
||||
- Began containerizing everything: Dockerfiles (frontend & backend), `docker-compose`, and env variables. Took days of hair-pulling but I got a reliably deployable container. Victory was greatly needed at this point.
|
||||
- File uploads became a major sticking point: SvelteKit had no baked-in file handling story. I experimented with a self-hosted S3-compatible solution — **MinIO**. It worked, but felt hacky: extra moving parts, weird integration edges, and a general “this isn’t elegant” feeling. I pretty much knew at this point I was walking down a dead-end path...
|
||||
|
||||
### Major decision to pivot
|
||||
|
||||
- The MinIO + SvelteKit upload situation (and the need for a more robust API/admin story) made me decide to **rewrite the backend in Django**. I started the backend from scratch with a fresh project layout and a clearer architecture plan. This felt like ripping off a bandage: painful but necessary.
|
||||
|
||||
### Lessons learned
|
||||
|
||||
- Rapid frontend iteration is fantastic for shaping UX, but for persistent data and file handling, I needed a backend that provided batteries-included features (auth, file storage, admin) — enter Django.
|
||||
|
||||
## Phase 2 — Django Backend & Early Stability
|
||||
|
||||
**Dates:** July 2024 — August 2024
|
||||
**Versions:** v0.4.0 → v0.6.0
|
||||
|
||||
After the SvelteKit experiment I rewired the backend into Django + Django REST Framework. This phase is where the project matured technically in a big way.
|
||||
|
||||
### Why Django?
|
||||
|
||||
- **Django’s admin**, built-in auth, and mature file handling made life dramatically easier. I could iterate on the API fast and manage the DB through a UI when debugging or testing. Django REST Framework allowed a clean separation between API and frontend.
|
||||
|
||||
### What changed (notably)
|
||||
|
||||
- Reused frontend SvelteKit components where possible, but the API endpoints were completely reworked to talk to Django.
|
||||
- Switched file uploads from MinIO to Django’s file storage on the server filesystem — simpler and, honestly, a relief.
|
||||
- Introduced **collections**, **lodgings**, **notes**, **checklists** — broadening the scope beyond “just places” into trip planning and trip context. (Restaurants were later pruned and replaced with transportation models for better clarity.)
|
||||
|
||||
### Stability and schema work
|
||||
|
||||
- One big database change (v0.5.1): I switched primary keys to **UUIDs** instead of auto-incrementing integers. That was scary but intentional: UUIDs make merging and scaling safer later on. Happily, it was done early — before many users existed — which avoided painful migrations later.
|
||||
|
||||
### Community & launch
|
||||
|
||||
- I drafted a release post for r/selfhosted and decided to ship _before_ college started. On **August 15, 2024** I posted it, and it blew up more than I dared hope: **~400 upvotes, 180+ comments**, and a surge of installs and conversations. The repo got a large influx of attention and traffic, the kind of validation that keeps a project alive through times of doubt.
|
||||
|
||||
### Immediate aftermath
|
||||
|
||||
- I spent the next week triaging issues, helping users deploy, and shipping fixes. It was a stressful but extremely educational crunch while simultaneously moving to college. That crunch was intense, but it was also the moment I learned how real user feedback shapes a project’s priorities.
|
||||
|
||||
### Takeaway
|
||||
|
||||
Switching to Django was the right move, it reduced friction, sped up backend feature development, and made the application more maintainable.
|
||||
|
||||
## Phase 3 — Defining AdventureLog & Community-Guided Growth
|
||||
|
||||
**Dates:** September 2024 — June 2025
|
||||
**Versions:** v0.7.0 → v0.10.0
|
||||
|
||||
This phase is about defining the product: what is AdventureLog, what is it not, and how do we make it useful for other people?
|
||||
|
||||
### Core feature evolution
|
||||
|
||||
- **Multiple visits per location:** Users wanted to track repeat trips to the same place. Adding visit history became central to the data model.
|
||||
- **Collection sharing & permissions:** Collections could be shared with other accounts for collaborative trip planning, implementing the permission logic here was fiddly and involved a lot of debugging. But once it worked, collaboration felt genuinely useful.
|
||||
- **World travel data:** Initially we were manually entering countries and regions. A generous contributor pointed to a JSON dataset with countries/regions/cities - integrating that made world travel features robust and maintainable. (City support came later.)
|
||||
- **Categories & tags:** After debating categories vs tags, we leaned into categories as the primary organizational mechanism (with tags available as flexible metadata). Later, custom categories were added so users could create their own classification schemes.
|
||||
|
||||
### UX polish & identity
|
||||
|
||||
- Logo: I swapped out the placeholder Windows map emoji for a proper logo designed by a friend (thanks, Jacob!). It made the app look more “real” and brandable.
|
||||
- Localization: Frontend got translations to make AdventureLog accessible to more users.
|
||||
- Calendar view: added a calendar to visualize trips over time, another highly requested feature.
|
||||
|
||||
### Integrations & polish
|
||||
|
||||
- **Immich integration** (huge win): Sync photos from Immich to AdventureLog adventures. This solved the “where do my travel photos live?” problem for many self-hosters and reduced friction for users who already had an Immich instance.
|
||||
- **Backend optimizations:** performance tweaks, PWA support, OIDC support for enterprise-friendly auth, and other server configurability options.
|
||||
|
||||
### Community milestones
|
||||
|
||||
- Docker image downloads crossed **100K** — a concrete, surreal milestone. GitHub stars crossed **1K** shortly after. These numbers matter because they mean people are using and relying on AdventureLog.
|
||||
- Collections received “smart recommendations” — algorithmic suggestions for new locations to add to a collection based on existing entries. This added a bit of discovery and delight.
|
||||
|
||||
### Ops & deployment improvements
|
||||
|
||||
- Simplified deployment by removing an extra Nginx container. Instead the backend serves media via an internal Nginx proxy. Fewer containers made deployment easier for hobbyist hosts.
|
||||
|
||||
### Takeaway
|
||||
|
||||
Phase 3 is where AdventureLog stopped being “my little project” and started becoming a community-shaped tool. The roadmap was heavily guided by user requests, and that made the app both more useful and more fun to build.
|
||||
|
||||
## Phase 4 — Solidification & Expansion of the Core Platform
|
||||
|
||||
**Dates:** June 2025 — Present
|
||||
**Versions:** v0.11.0 → Present
|
||||
|
||||
Now the project focuses on _polish, robustness, and expanding the core platform_ rather than constantly changing directions.
|
||||
|
||||
### Primary themes
|
||||
|
||||
- **Solidifying core UX**: a major UI rebuild to improve accessibility, usability, and cohesion. The goal was not only to look nicer but to make features easier to discover and use.
|
||||
- **Expanding travel tracking & trip planning**: deeper integrations, better activity support, and more ways to view and interact with your travel history.
|
||||
|
||||
### Notable changes & features
|
||||
|
||||
- **Rename: “adventures” → “locations”**: This semantic pivot helped clarify the data model. A _location_ is a place that can have multiple _visits_; collections are groups of locations for trip planning. The rename reduced user confusion and aligned the product to real-world mental models.
|
||||
- **Activities & Trails**:
|
||||
- Activities: connect visits to activity providers (e.g., Strava imports) so users can show what they did at a location — not just that they were there.
|
||||
- Trails: link trail data either via a URL or by integrating with self-hosted platforms (like Wanderer). This enriches the outdoor-adventure use case.
|
||||
- **File attachments & broader media options:** allow PDFs and other travel documents to be attached to locations/visits.
|
||||
- **Server configurability & geocoding:** more options for self-hosted operators, plus an optional Google Maps integration for geocoding.
|
||||
|
||||
### Ongoing priorities
|
||||
|
||||
- Performance tuning and bug fixes continue to be the top priority — the fewer regressions, the more people trust the app.
|
||||
- Accessibility improvements, better testing, and expanding integrations in a way that doesn’t bloat the core experience.
|
||||
|
||||
### Takeaway
|
||||
|
||||
This phase is about turning AdventureLog from “a promising tool” into “a dependable tool.” It’s less about big rewrites and more about incremental, meaningful improvements.
|
||||
|
||||
## Lessons, patterns, and a few thoughts
|
||||
|
||||
1. **Pick the right tool for the job**
|
||||
- The SvelteKit prototype phase taught me how fast UI iteration can progress. The Django rewrite taught me you can’t ignore backend primitives (auth, file handling, admin) if you want to ship a stable self-hosted app. Each stack had strengths, use them where they matter.
|
||||
|
||||
2. **Community feedback is gold**
|
||||
- The Reddit launch pushed the project into real usage. Responding to issues and user requests shaped core features more than any design doc ever could.
|
||||
|
||||
3. **Keep breaking changes reasonable**
|
||||
- UUIDs as primary keys were scary, but doing it early saved headaches. Plan big breaking changes early; avoid them once people rely on your software.
|
||||
|
||||
4. **Simplicity wins in deployment**
|
||||
- Removing extra containers and simplifying deployment options made AdventureLog more approachable for hobbyist hosts — which is the core audience.
|
||||
|
||||
5. **Iterate visibly**
|
||||
- Small, visible wins (better login flow, calendar, Immich sync) build momentum and community trust.
|
||||
|
||||
## Current state & what’s next
|
||||
|
||||
AdventureLog is alive, maintained, and focused on being the best self-hosted travel app it can be: accessible, performant, and useful for trip planning and personal travel history.
|
||||
|
||||
Writing this made me realize how much of AdventureLog’s identity came from mistakes, feedback, and stubbornness. It’s the result of learning, throwing away things that didn’t work, embracing tools that did, and listening to people who actually used it. I’m proud of how it’s evolved and excited for the next phase.
|
||||
|
||||
If you made it this far: thanks. If you want to help — issues, PRs, ideas, or design feedback are always welcome. The project is alive because of an amazing community of users and contributors!
|
||||
|
||||
— Sean
|
||||
@@ -0,0 +1,9 @@
|
||||
# Advanced Configuration
|
||||
|
||||
In addition to the primary configuration variables listed above, there are several optional environment variables that can be set to further customize your AdventureLog instance. These variables are not required for a basic setup but can enhance functionality and security.
|
||||
|
||||
| Name | Required | Description | Default Value | Variable Location |
|
||||
| ---------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------- | ----------------- |
|
||||
| `ACCOUNT_EMAIL_VERIFICATION` | No | Enable email verification for new accounts. Options are `none`, `optional`, or `mandatory` | `none` | Backend |
|
||||
| `FORCE_SOCIALACCOUNT_LOGIN` | No | When set to `True`, only social login is allowed (no password login). The login page will show only social providers or redirect directly to the first provider if only one is configured. | `False` | Backend |
|
||||
| `SOCIALACCOUNT_ALLOW_SIGNUP` | No | When set to `True`, signup will be allowed via social providers even if registration is disabled. | `False` | Backend |
|
||||
143
documentation/docs/configuration/social_auth/pocket_id.md
Normal file
143
documentation/docs/configuration/social_auth/pocket_id.md
Normal file
@@ -0,0 +1,143 @@
|
||||
# Pocket ID OIDC Authentication
|
||||
|
||||
<img src="https://pocket-id.org/logo.png" alt="Pocket ID Logo" width="400" />
|
||||
|
||||
Pocket ID is a lightweight, self-hosted OpenID Connect (OIDC) identity provider. AdventureLog can be configured to use Pocket ID for social authentication using its built-in OpenID Connect support.
|
||||
|
||||
Once Pocket ID is configured by an administrator, users can sign in to AdventureLog using their Pocket ID account and optionally link it to an existing AdventureLog account.
|
||||
|
||||
---
|
||||
|
||||
# Configuration
|
||||
|
||||
To enable Pocket ID as an identity provider, both Pocket ID and AdventureLog must be configured correctly. The most important (and least obvious) part of this setup is the **callback URL**, which must match AdventureLog’s internal OIDC routing.
|
||||
|
||||
---
|
||||
|
||||
## Pocket ID Configuration
|
||||
|
||||
1. Log in to your Pocket ID admin interface.
|
||||
|
||||
2. Navigate to **Clients** and create a new client.
|
||||
|
||||
3. Name the client something like `AdventureLog`.
|
||||
|
||||
4. Set the **Redirect / Callback URL** to:
|
||||
|
||||
```
|
||||
https://<adventurelog-backend.example.com>/accounts/oidc/<CLIENT_ID>/login/callback/
|
||||
```
|
||||
|
||||
- Replace `<adventurelog-backend.example.com>` with the **backend** URL of your AdventureLog instance.
|
||||
- Replace `<CLIENT_ID>` with the **Pocket ID client ID** exactly as generated.
|
||||
- This path is required and currently not auto-documented by Pocket ID or AdventureLog.
|
||||
|
||||
5. Ensure the client type is **Confidential**.
|
||||
|
||||
6. Copy the generated **Client ID** and **Client Secret** — you will need both for AdventureLog.
|
||||
|
||||
---
|
||||
|
||||
## AdventureLog Configuration
|
||||
|
||||
This configuration is done in the [Admin Panel](../../guides/admin_panel.md). You can launch it from the `Settings` page or navigate directly to `/admin` on your AdventureLog server.
|
||||
|
||||
1. Log in to AdventureLog as an administrator.
|
||||
2. Navigate to **Settings** → **Administration Settings** and launch the admin panel.
|
||||
3. Go to **Social Accounts**.
|
||||
4. Under **Social applications**, click **Add**.
|
||||
5. Fill in the fields as follows:
|
||||
|
||||
### Social Application Settings
|
||||
|
||||
- **Provider**: `OpenID Connect`
|
||||
- **Provider ID**: Pocket ID Client ID
|
||||
- **Name**: `Pocket ID`
|
||||
- **Client ID**: Pocket ID Client ID
|
||||
- **Secret Key**: Pocket ID Client Secret
|
||||
- **Key**: _(leave blank)_
|
||||
- **Settings**:
|
||||
|
||||
```json
|
||||
{
|
||||
"server_url": "https://<pocketid-url>/.well-known/openid-configuration"
|
||||
}
|
||||
```
|
||||
|
||||
- Replace `<pocketid-url>` with the base URL of your Pocket ID instance.
|
||||
|
||||
::: warning
|
||||
Do **not** use `localhost` unless Pocket ID is running on the same machine and is resolvable from inside the AdventureLog container or service. Use a domain name or LAN IP instead.
|
||||
:::
|
||||
|
||||
- **Sites**: Move the sites you want Pocket ID enabled on (usually `example.com` and `www.example.com`).
|
||||
|
||||
6. Save the configuration.
|
||||
|
||||
Ensure Pocket ID is running and reachable by AdventureLog.
|
||||
|
||||
---
|
||||
|
||||
## What It Should Look Like
|
||||
|
||||
Once configured correctly:
|
||||
|
||||
- Pocket ID appears as a login option on the AdventureLog login screen.
|
||||
- Logging in redirects to Pocket ID, then back to AdventureLog without errors.
|
||||
|
||||
---
|
||||
|
||||
## Linking to an Existing Account
|
||||
|
||||
If a user already has an AdventureLog account:
|
||||
|
||||
1. Log in to AdventureLog normally.
|
||||
2. Go to **Settings**.
|
||||
3. Click **Launch Account Connections**.
|
||||
4. Choose **Pocket ID** to link the identity to the existing account.
|
||||
|
||||
This allows future logins using Pocket ID without creating a duplicate account.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### 404 Error After Login
|
||||
|
||||
Ensure that:
|
||||
|
||||
- `/accounts` routes are handled by the **backend**, not the frontend.
|
||||
- Your reverse proxy (Nginx, Traefik, Caddy, etc.) forwards `/accounts/*` correctly.
|
||||
|
||||
---
|
||||
|
||||
### Invalid Redirect URI
|
||||
|
||||
- Double-check that the callback URL in Pocket ID exactly matches:
|
||||
|
||||
```
|
||||
/accounts/oidc/<CLIENT_ID>/login/callback/
|
||||
```
|
||||
|
||||
- The `<CLIENT_ID>` must match the value used in the AdventureLog social application.
|
||||
|
||||
---
|
||||
|
||||
### Cannot Reach Pocket ID
|
||||
|
||||
- Verify that the `.well-known/openid-configuration` endpoint is accessible from the AdventureLog server.
|
||||
- Test by opening:
|
||||
|
||||
```
|
||||
https://<pocketid-url>/.well-known/openid-configuration
|
||||
```
|
||||
|
||||
in a browser.
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- Pocket ID configuration is very similar to Authentik.
|
||||
- The main difference is the **explicit callback URL requirement** and the use of the `.well-known/openid-configuration` endpoint as the `server_url`.
|
||||
- This setup works with Docker, Docker Compose, and bare-metal deployments as long as networking i
|
||||
6
documentation/docs/guides/invite_user.md
Normal file
6
documentation/docs/guides/invite_user.md
Normal file
@@ -0,0 +1,6 @@
|
||||
# Invite a User
|
||||
|
||||
AdventureLog allows for admin users to invite new users to create an account via an email invitation.
|
||||
Invites are sent from the AdventureLog [Admin Panel](admin_panel.md) or via a custom invite form. The invite section of the admin panel can be found at `/admin/invitations/invitation/add/`.
|
||||
|
||||
Tip: make sure you have a working email setup for AdventureLog to send emails. See the [Email Configuration Guide](../configuration/email.md) for more information.
|
||||
180
documentation/docs/install/dev_container_wsl.md
Normal file
180
documentation/docs/install/dev_container_wsl.md
Normal file
@@ -0,0 +1,180 @@
|
||||
# Dev Container + WSL 🧰
|
||||
|
||||
Running AdventureLog in a **Dev Container** allows you to contribute to the project or work on features locally in a fully reproducible development environment with hot reloading, debugging, and tooling isolated inside Docker.
|
||||
|
||||
This guide focuses on **Windows using WSL 2**, but the workflow is similar on other platforms.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before starting, ensure you have the following installed:
|
||||
|
||||
* **Docker Desktop**
|
||||
Download from: [https://www.docker.com/products/docker-desktop/](https://www.docker.com/products/docker-desktop/)
|
||||
|
||||
> Docker Desktop must be configured to use **WSL 2**
|
||||
> Make sure Docker Desktop is running before you start the steps below.
|
||||
|
||||
* **WSL 2 with a Linux distribution installed**
|
||||
Ubuntu is recommended.
|
||||
|
||||
```bash
|
||||
wsl --install -d Ubuntu
|
||||
```
|
||||
Run this in **Windows PowerShell** (or **Windows Terminal**).
|
||||
|
||||
* **Visual Studio Code**
|
||||
[https://code.visualstudio.com/](https://code.visualstudio.com/)
|
||||
|
||||
* **VS Code Extensions**
|
||||
|
||||
* Dev Containers
|
||||
* WSL
|
||||
|
||||
## ⚠️ Important Notes (Read First)
|
||||
|
||||
> **TIP**
|
||||
> Do not use the `docker-desktop` WSL distribution for development.
|
||||
> Always use a real Linux distro such as **Ubuntu**.
|
||||
|
||||
> **TIP**
|
||||
> Avoid working in `/mnt/c/...`.
|
||||
> Clone and work inside your Linux home directory (`/home/<user>`), otherwise file watching and container mounts may behave incorrectly.
|
||||
|
||||
> **TIP**
|
||||
> Docker must be available *inside* WSL. Make sure WSL integration is enabled in Docker Desktop:
|
||||
>
|
||||
> **Docker Desktop → Settings → Resources → WSL Integration → Enable Ubuntu**
|
||||
|
||||
## Getting Started
|
||||
|
||||
### 1. Clone the Repository (inside WSL)
|
||||
|
||||
Open a WSL terminal (search for "WSL" in the Windows Start menu and open the WSL terminal), then run:
|
||||
|
||||
```bash
|
||||
cd ~
|
||||
git clone https://github.com/seanmorley15/AdventureLog.git
|
||||
cd AdventureLog
|
||||
```
|
||||
|
||||
> **TIP**
|
||||
> If you plan to contribute changes, fork the repository on GitHub and clone your fork instead:
|
||||
>
|
||||
> ```bash
|
||||
> git clone https://github.com/<your-username>/AdventureLog.git
|
||||
> ```
|
||||
|
||||
### 2. Create the Development `.env` File (via WSL)
|
||||
|
||||
```bash
|
||||
cp .env.example .env && sed -i 's/^DEBUG=.*/DEBUG=True/' .env
|
||||
```
|
||||
|
||||
This creates the `.env` file required for the containers to start and enables DEBUG for local development.
|
||||
|
||||
> **NOTE**
|
||||
> The rest of the defaults in `.env.example` are sufficient for running the project.
|
||||
|
||||
#### Environment Variables
|
||||
|
||||
The Dev Container setup uses the same `.env` configuration as the standard Docker installation.
|
||||
|
||||
For a full list of available environment variables and optional configuration options, see the
|
||||
[**Docker 🐋 installation guide**](docker.md#configuration).
|
||||
|
||||
### 3. Open the Project in VS Code (via WSL)
|
||||
|
||||
From the project directory:
|
||||
|
||||
```bash
|
||||
code .
|
||||
```
|
||||
|
||||
VS Code should indicate that the folder is opened **in WSL**.
|
||||
|
||||
### 4. Reopen the Project in a Dev Container
|
||||
|
||||
In VS Code:
|
||||
|
||||
1. Press **Ctrl + Shift + P**
|
||||
2. Select **Dev Containers: Reopen in Container**
|
||||
|
||||
VS Code will:
|
||||
|
||||
* Build the development containers
|
||||
* Install dependencies
|
||||
* Attach the editor to the running container
|
||||
|
||||
The first build usually takes around 30 seconds.
|
||||
|
||||
## Running the Application
|
||||
|
||||
Once the Dev Container is running, the services are started using Docker Compose.
|
||||
Use the VS Code terminal (inside the Dev Container) for the commands below.
|
||||
|
||||
To start the app, enter the following command:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.dev.yml up --build
|
||||
```
|
||||
|
||||
Bringing the app up usually takes around 1-2 minutes.
|
||||
|
||||
To fully reset the database and media volumes, run:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.dev.yml down -v
|
||||
```
|
||||
|
||||
## Accessing the App
|
||||
|
||||
* **Frontend (Web UI)**
|
||||
[http://localhost:8015](http://localhost:8015)
|
||||
|
||||
* **Backend (API)**
|
||||
[http://localhost:8016](http://localhost:8016)
|
||||
|
||||
Admin credentials are taken from your `.env` file. The `docker-compose.dev.yml` setup auto-creates a superuser on startup using those values so you can log in right away.
|
||||
It also checks whether the countries/flags data already exists before re-importing it, so the first build can take longer and subsequent `down`/`up` runs are faster.
|
||||
This dev setup can feel a bit slower because hot reload, dependency installs, and initial database bootstrapping all happen inside containers.
|
||||
|
||||
## Common Issues
|
||||
|
||||
### Docker Not Found Inside WSL
|
||||
|
||||
If you see:
|
||||
|
||||
```
|
||||
The command 'docker' could not be found in this WSL 2 distro
|
||||
```
|
||||
|
||||
Ensure:
|
||||
|
||||
* Docker Desktop is running
|
||||
* WSL integration is enabled for **Ubuntu**
|
||||
* Docker Desktop has been restarted after enabling integration
|
||||
|
||||
### Accidentally Using `/mnt/c`
|
||||
|
||||
If the project lives under `/mnt/c/...`, move it to:
|
||||
|
||||
```bash
|
||||
/home/<user>/AdventureLog
|
||||
```
|
||||
|
||||
This avoids performance issues and file watcher bugs.
|
||||
|
||||
## Dev vs Production
|
||||
|
||||
| Feature | Docker Install | Dev Container |
|
||||
| ------------ | --------------- | ------------------ |
|
||||
| Intended use | Running the app | Developing the app |
|
||||
| Hot reload | ❌ | ✅ |
|
||||
| Debugging | ❌ | ✅ |
|
||||
| Code editing | ❌ | ✅ |
|
||||
|
||||
For production or personal hosting, follow the standard
|
||||
[**Docker 🐋 installation guide**](docker.md).
|
||||
|
||||
Enjoy contributing to AdventureLog! 🎉
|
||||
If you run into issues not covered here, please open a discussion or issue so the docs can be improved.
|
||||
@@ -22,6 +22,7 @@ Perfect for Docker beginners.
|
||||
|
||||
## ⚙️ Advanced & Alternative Setups
|
||||
|
||||
- [Nginx Proxy Manager](nginx_proxy_manager.md) — Easy reverse proxy config
|
||||
- [Nginx Proxy Manager](nginx_proxy_manager.md) - Easy reverse proxy config
|
||||
- [Traefik](traefik.md) — Dynamic reverse proxy with automation
|
||||
- [Caddy](caddy.md) — Automatic HTTPS with a clean config
|
||||
- [Dev Container + WSL](dev_container_wsl.md) - Windows dev environment with WSL 2 + Dev Containers
|
||||
|
||||
@@ -7,7 +7,7 @@ Community Applications Page for PostGIS: [PostGIS on CA Store](https://unraid.ne
|
||||
|
||||
## Installation Configuration
|
||||
|
||||
- **Note:** It is recommended to install the applications in the order of these instructions, as failing to do so could cause issues.\
|
||||
- **Note:** It is recommended to install the applications in the order of these instructions, as failing to do so could cause issues.
|
||||
- Container names can be set to whatever you desire.
|
||||
- Also ensure they are all on the same custom network so they can communicate with one another. You can create one by running the following command in your command line, with `example` being set to your desired name. This network will then show up for selection when making the apps/containers.
|
||||
|
||||
|
||||
@@ -31,3 +31,5 @@ AdventureLog is open-source software, licensed under the GPL-3.0 license. This m
|
||||
Hi, I'm [Sean Morley](https://seanmorley.com), the creator of AdventureLog. I'm an Electrical Engineering student at the University of Connecticut, and I'm passionate about open-source software and building modern tools that help people solve real-world problems. I created AdventureLog to solve a problem: the lack of a modern, open-source, user-friendly travel companion. Many existing travel apps are either too complex, too expensive, or too closed-off to be useful for the average traveler. AdventureLog aims to be the opposite: simple, beautiful, and open to everyone.
|
||||
|
||||
I hope you enjoy using AdventureLog as much as I enjoy creating it! If you have any questions, feedback, or suggestions, feel free to reach out to me via the email address listed on my website. I'm always happy to hear from users and help in any way I can. Thank you for using AdventureLog, and happy travels! 🌍
|
||||
|
||||
If you want to check out the origins of AdventureLog and the timeline, process, and story of its development, check out the [Development Timeline](/docs/changelogs/development_timeline.md).
|
||||
|
||||
Reference in New Issue
Block a user