Skip to main content

Overview

The AndanDo marketplace provides an intuitive interface for discovering unique tour experiences. This guide will help you navigate the platform, use search and filtering features, and find the perfect tour for your next adventure.

Accessing the Marketplace

1

Navigate to Marketplace

Visit /marketplace to access the main tour browsing interface. The marketplace displays all active and upcoming tours in a card-based grid layout.
2

Explore Tour Cards

Each tour card displays:
  • High-quality tour image or “Próximamente” placeholder for upcoming tours
  • Location with pin icon
  • Tour title
  • Star rating and review count
  • Price starting from (in RD$)
  • “Ver” button to view details

Search and Discovery

The marketplace hero section features a prominent search bar that accepts:

Tour Names

Search by the tour title or service name to find specific experiences

Locations

Enter city names, regions, or landmarks to discover tours in specific areas
The search is case-insensitive and matches partial keywords across tour names and locations.

Search Implementation

The search functionality (in Marketplace.razor:414) uses reactive binding:
<input class="mp-search-input"
       type="text"
       placeholder="Buscar por nombre o ubicación..."
       @bind="_searchQuery"
       @bind:event="oninput" />
Results update automatically as you type, filtering tours based on:
  • Tour title
  • Location label

Filtering Tours

AndanDo provides multiple filter options to refine your search:

Filter Categories

  • Corta duración: Tours lasting hours or including “hora” or “min” in duration
  • Larga duración: Multi-day tours including “día”, “dia”, or “semana” in duration
Duration filters use heuristic matching based on DurationLabel keywords (see Marketplace.razor:690-704).
  • Económico: Tours priced at or below RD$3,000
  • Premium: Tours priced above RD$3,000
Price filtering uses the FromPrice property from active ticket types.
  • Próximamente: Shows only upcoming tours that haven’t started selling tickets yet
Tours marked as upcoming display a gray placeholder instead of an image and are non-clickable until they become available.
You can combine multiple filters! For example, filter by “Económico” + “Corta duración” to find affordable day trips.

Clearing Filters

Click the “Todos” chip to reset all active filters and return to the full tour listing.

Sorting Options

Use the sort dropdown to organize results:

Predeterminado

Default marketplace order

Precio: Menor a mayor

Shows most affordable tours first

Precio: Mayor a menor

Shows premium experiences first

Liking Tours

Save your favorite tours for later by clicking the heart icon on any tour card.
1

Locate the Heart Button

The heart icon appears in the top-right corner of each tour image (Marketplace.razor:556-572).
2

Click to Like

Click the heart to save the tour. The button changes color to indicate it’s liked.
3

Authentication Required

If you’re not logged in, you’ll see a toast message: “Inicia sesión para dar like.”
Your likes are stored persistently in the database using PostLikeService. You can view all your liked tours from your profile.

Like Functionality Code

The like system integrates with the backend:
private async Task ToggleLikeAsync(TourCardViewModel card)
{
    if (!Session.IsAuthenticated || Session.Current is null)
    {
        await ShowLikeToastAsync("Inicia sesion para dar like.", card.Tour.TourId);
        return;
    }
    
    if (IsLiked(card.Tour.TourId))
    {
        await PostLikeService.RemoveLikeAsync(Session.Current.UserId, card.Tour.TourId);
        _likedTours.Remove(card.Tour.TourId);
    }
    else
    {
        await PostLikeService.AddLikeAsync(Session.Current.UserId, card.Tour.TourId);
        _likedTours.Add(card.Tour.TourId);
    }
}

Pagination

The marketplace displays 12 tours per page. Navigate between pages using:
  • Arrow buttons: Previous/Next page navigation
  • Page numbers: Click any number to jump to that page
  • Ellipsis (…): Indicates skipped page numbers in large result sets
The current page is highlighted in orange, and pagination controls are disabled when reaching the first or last page.

Tour Visibility Rules

Not all tours appear in the marketplace. Tours are filtered based on:
1

Status Check

Inactive tours (Status = “I”) are excluded from search results (Marketplace.razor:950-953).
2

Date-Based Visibility

Tours past their end date are automatically hidden. Upcoming tours only show if within 3 days of start date (unless MuestraInstantanea is enabled).
3

Ticket Availability

Tours display their minimum price only if active tickets are currently available for sale.

Mobile Experience

The marketplace is fully responsive:
  • Grid adapts from 4 columns on desktop to 2 on tablet and 1 on mobile
  • Search bar maintains full functionality
  • Filter chips wrap gracefully on smaller screens
  • Touch-friendly card interactions
@media (max-width: 640px) {
    .mp-hero { padding: 30px 0 24px; }
    .mp-grid { grid-template-columns: 1fr 1fr; gap: 14px; }
}
@media (max-width: 420px) {
    .mp-grid { grid-template-columns: 1fr; }
}

Search Results Page

Beyond the main marketplace, AndanDo offers a dedicated search results page at /search:

Search URL Parameters

Plain Query

Use ?q=keyword for simple text searches

Encoded Filter

Use ?f=base64url for advanced filters including location, coordinates, and dates

Search Filter DTO

The search page accepts structured filters:
public sealed record SearchFilterDto(
    string? Location,
    string? NearLabel,
    double? Latitude,
    double? Longitude,
    string? DateLabel
);
The search page displays active filters as chips at the top, making it easy to see what criteria are being applied.

Next Steps

Making Reservations

Learn how to book tours and complete the checkout process

Reviews & Likes

Discover how to leave reviews and manage your liked tours

Build docs developers (and LLMs) love