Tags

Tags give the ability to mark specific points in history as being important
  • v1.11.0

    protected
    Feat: the owner can close a trip for good, and the list groups it under CERRADOS
  • v1.10.0

    protected
    Feat: every screen that waits on the network now shows a skeleton, Google's button included
  • v1.9.3

    protected
    Fix: uploaded photos 404'd behind /api — nginx served them from the SPA root
  • v.1.9.2

    protected
    Fix:: fit the pass to Google's 400px button
  • v1.9.1

    protected
    Fix: Google button width, avatar size, avatar staleness in the nav
  • v1.9.0

    protected
    Trips and travellers have faces now. A trip carries a banner photo, picked when you create or edit it and shown as the background of its ticket in the list and of the "Gastado" card on its detail.
     
    People have avatars: on the profile ticket, in the top bar, in a trip's member panel and in the admin user table. Photos are shrunk in the browser before they are uploaded and served over short-lived signed URLs, so an image tag never needs a token.
     
    Sign in with Google. The button on the login screen returns the same session as email and password, so nothing about staying signed in changes. An account that arrives through Google has no password — its profile menu drops the change-password action — and signing in with Google on an address that already has an account joins the two instead of duplicating them.
      
    A screen that waits for the network now shows a skeleton of what is coming instead of a "Cargando…" line, starting with the trips list, which also stopped loading in jumps. Creating a trip takes fewer taps. And make media-prune reports uploaded images that no row references any more, deleting only when asked.
  • v1.8.0

    protected
    Toast notifications replace the inline saved banners, and every form modal now runs through one shared dialog shell. Shared trips explain themselves: a role badge on the trips list, and a plain-language line saying what each role grants where one is picked or accepted.
    
    Trip detail's section switcher moved onto PrimeNG Tabs, which brings the keyboard navigation and tab-to-panel ARIA the hand-rolled strip never had. A screen's actions are now grouped by count: two or more still live in the "Más opciones" kebab, a lone one shows as itself.
     
    Mobile fixes: a form's submit button no longer opens looking pressed — a touch hover that sticks when the modal lands under the finger — and opening a form moves focus into the dialog instead of leaving it on the launcher behind the mask.
  • v1.7.0

    protected
    Added the functionality to add members to a trip with editor or reader roles
  • v1.6.1

    protected
    Installed PWAs pick up new deploys
    
    Frontend nginx sent no cache-control, so an installed iOS/Android PWA kept a stale index.html and never updated. index.html/sw.js/manifest now revalidate (ETag), hashed assets are immutable — installed apps fetch the latest version on next launch.
  • v1.6.0

    protected
    Traveler summary + destination typeahead
    
    - New "Resumen" tab: an all-time KPI screen — total spent, number of trips, days on the road, distinct destinations, trips over budget, and spend by category.
    - Trip form: destination autocomplete with Spanish place names (Nominatim), optional — free text still submits.
    - Standardized progress-bar grow-in across budget and category bars.
  • v1.5.1

    protected
    Fix mobile login/register showing an empty white band under the install banner: the top-bar space reserve now scopes to the shell layout, not the chrome-less auth screens.
  • v1.5.0

    protected
    Concept-first expense rows
    
    - Expense rows highlight the concept when the user wrote one, otherwise the category (Viaje preview + Gastos list).
    - Recent-expenses preview cap 5 → 4.
  • v1.4.0

    protected
    Account menu + mobile top bar
      
    Navigation redesign. 
    Perfil is no longer a permanent tab: personal actions (Perfil, Admin, Cerrar sesión) now live behind a "Cuenta" menu, keeping the bar for the frequent destinations.
     
    - Mobile: fixed top bar (logo + account); bottom bar keeps the content tabs (Viajes, Conversor).
    - Desktop: brand left, options centered, account pinned right.
    - Logout centralized in Session.logout(), shared by profile + nav.
    - UI polish: title sizes and FAB clearance tuned for the top bar.
  • v1.3.0

    protected
    Mobile polish, trip detail preview, and nav memory
     
    Frontend:
      - Trip detail previews the newest expenses, with the full list a tap away
      - The Viajes tab returns to the trip you were reading, and pops back to the list once you are already in it
      - Confirmation banner after saves and deletes
      - Date range picker for trips + Spanish datepicker locale
      - Mobile spacing driven by tokens: containers own the vertical rhythm via gap, children carry no margins
      - Trip detail header clears the fold on a phone; trips list tightened
     
    Backend:
      - Birth date is now optional on registration and profile (migration: users.birth_date becomes nullable — runs on deploy)
      
    Tooling: 
      - front-lint checks prettier too, matching what CI already ran
  • v1.2.2

    protected
    - Frontend: shared components extracted (boarding-pass shell, confirm-dialog, form-field, kebab menu, currency converter/picker, 401-redirect helper)
    - Frontend fixes: modal jump on load, forms auto-focus, dropdown anchoring, scroll
    - PrimeNG 22 abandoned (license gate); pinned v21
    - Swagger/OpenAPI docs (dev-only) grouped by bounded context
    - Backend test coverage to 100% (defensive 404s + GetRate 503/400 as unit tests)
    - CI: frontend gates (eslint + prettier + vitest), run on every push, tag-named images
    - Prettier applied across frontend
  • v1.2.1

    protected
    Post-release fixes
    
      - Show the "session expired" banner after a reload past the refresh-token
        TTL (bootstrap now flags expiry on devices that had a prior session)
      - Stop the add-expense datepicker auto-opening its panel on first render
      - Let the currency converter fields delete decimals instead of snapping
        back the forced trailing zeros
  • v1.2.0

    protected
    Currency conversion and password robustness
    
    FX:
      - Authenticated GET /rates endpoint; FX engine moved to the Currency context
      - Currency converter screen + FX budget hint
      - Consistent, currency-correct conversions across all screens (expenses
        shown in the user's preferred currency)
      
    Password robustness:
      - Server-side password policy (min 12 + lowercase, uppercase, digit,
        special char) enforced on registration and password change
      - HaveIBeenPwned breached-password check (fail-open on outage)
      - Frontend strength meter + rule hint on register and profile
     
    Tooling: front-lint make target (angular-eslint) wired into pre-commit.
  • v1.1.1

    protected
    Decrease Session TTL
  • v1.1.0

    protected
    Brand identity + installable PWA
  • v1.0.0

    protected
    0b731385 · fix(docker): fix dotenvs ·
    First prod tag