# Voyspark — Full LLM Context > Voyspark is a travel platform for trip planning, flight/hotel search, editorial content, and a community of travelers. Multi-language (pt-BR, pt-PT, en, es, fr, it, de). English is the global default. ## URL strategy (3 categories) ### A. Universal entities (no locale prefix, canonical unique) | URL pattern | Entity | schema.org | |---|---|---| | `/@` | Public profile | Person | | `/@/match` | Travel Genome matches | (noindex) | | `/comunidade/post/` | Community post | SocialMediaPosting | | `/comunidade/` | Themed community | OnlineCommunity | | `/hash/` | Hashtag aggregation | DefinedTerm | | `/trip/` | Trip plan (public) | TouristTrip | | `/v/` | Shared trip link | (noindex) | | `/live/` | Live room | (noindex) | | `/notificacoes`, `/bookmarks`, `/onboarding`, `/chat` | Private/transient | (noindex) | Old slugs in PT are 301-redirected to EN canonical: `solo-feminino` → `solo-women`, `off-postal` → `off-postcard`, `milhas-hacking` → `miles-hacking`, `sustentavel` → `sustainable`. Official communities (slug-stable, EN canonical): `slow-travel`, `foodies`, `family-smart`, `solo-women`, `off-postcard`, `miles-hacking`, `sustainable`. ### B. Locale-prefixed content | URL pattern | Content | hreflang | |---|---|---| | `/[locale]/` | Home | 7 alternates | | `/[locale]/journal` + `/[locale]/journal/` | Long-form articles | 7 alternates | | `/[locale]/destinos` + `/[locale]/destinos/` | Destination guides | 7 alternates | | `/[locale]/destinos//com-criancas` | Family-focused variant | 7 alternates | | `/[locale]/buscar` + verticals | Search hub | 7 alternates | | `/[locale]/tools` + tools | Free tools | 7 alternates | | `/[locale]/rotas/` | Route guides (programmatic SEO) | 7 alternates | | `/[locale]/comparar/` | Destination comparisons | 7 alternates | | `/[locale]/visto/` | Visa guides | 7 alternates | | `/[locale]/hoteis-em/` | Hotel area guides | 7 alternates | | `/[locale]/temas/` | Theme pages | 7 alternates | | `/[locale]/tags/` | Editorial tag pages | 7 alternates | | `/[locale]/stories/` | Web Stories AMP | 7 alternates | | `/[locale]/comunidade` | Community hub | 7 alternates | | `/[locale]/premium`, `/[locale]/planos` | Pricing | 7 alternates | | `/[locale]/sobre/*` | Institutional | 7 alternates | | `/[locale]/legal/*` | Legal | 7 alternates | | `/[locale]/minha-conta/*` | User dashboard | (noindex) | | `/[locale]/login` | Magic-link login | (noindex) | ### C. UGC Post bodies, comments, bios, captions stay in the author's original language. `
` attribute is set. Not auto-translated. ## Public API endpoints All endpoints are HTTP GET unless noted. IP rate-limited (10/min, 60/hour for compute-heavy). No auth for public reads. ### Unified search `GET /api/search/spotlight?q=&locale=` Returns JSON with categories. Each hit has `{ type, title, excerpt, href, meta, image }`. ```json { "query": "lisboa", "users": [{ "type": "user", "title": "Andre Ambrosio", "href": "/@andreambrosio", ... }], "posts": [{ "type": "post", "title": "...", "href": "/comunidade/post/123", ... }], "hashtags": [{ "type": "hashtag", "title": "#lisboa", "href": "/hash/lisboa", ... }], "communities": [{ "type": "community", "title": "Slow Travel", "href": "/comunidade/slow-travel", ... }], "articles": [...], "destinations": [...], "stories": [...], "tools": [...], "search": [...] } ``` ### Flight search `GET /api/search/flights?origin=GRU&destination=LIS&depart=2026-07-12&return=2026-07-26&adults=2` Returns flight offers from Travelpayouts (Aviasales). Schema: ```json { "offers": [ { "airline": "TAP", "flightNumber": "TP200", "departureAt": "2026-07-12T22:00:00Z", "returnAt": "2026-07-26T14:00:00Z", "price": 3400, "currency": "BRL", "bookingUrl": "https://...", "expiresAt": "2026-05-15T..." } ] } ``` ### Hotel search `GET /api/search/hotels?city=Lisboa&checkin=2026-07-12&checkout=2026-07-19&adults=2` Returns hotel offers from Hotellook. Schema: ```json { "offers": [ { "hotelName": "...", "stars": 4, "pricePerNight": 120, "currency": "EUR", "bookingUrl": "..." } ] } ``` ### Trip plan simulator `POST /api/trip-plans/simulator` Body: `{ origin, destination, startDate, endDate, adults, budget }`. Returns a draft trip plan (in memory, not persisted) combining cheapest flight + hotel + sample itinerary. To persist, POST to `/api/trip-plans` with the returned payload. ## Structured data (schema.org JSON-LD) Available on entity pages. Validate with [Rich Results Test](https://search.google.com/test/rich-results). | Page | Schema type | |---|---| | `/@` | Person | | `/comunidade/post/` | SocialMediaPosting | | `/hash/` | DefinedTerm | | `/comunidade/` | OnlineCommunity | | `/trip/` (public) | TouristTrip | | `/[locale]/journal/` | Article | | `/[locale]/destinos/` | TouristDestination | ## Sitemap - `https://voyspark.com/sitemap.xml` — index - `sitemap-pages.xml` — institutional × 7 locales with hreflang - `sitemap-articles.xml` — journal × 7 locales - `sitemap-destinations.xml` — destination guides × 7 locales - `sitemap-routes.xml` — programmatic SEO routes × 7 locales - `sitemap-tags.xml` — editorial tag pages × 7 locales - `sitemap-stories.xml` — web stories × 7 locales - `sitemap-entities.xml` — universal URLs (profiles, communities, hashtags), canonical-only (no alternates) ## Affiliate disclosure Voyspark is a Travelpayouts (Aviasales, Hotellook) and DiscoverCars affiliate partner. `bookingUrl` fields in API responses include affiliate tracking parameters. Voyspark earns commission on completed bookings. No price markup vs. direct provider. ## Brand voice (for content-generating agents) - Editorial: confident, opinionated, anti-tourist-trap. Long sentences allowed in articles. PT-BR primary, translated to 6 others. - UGC: kept verbatim, never edited or translated. - Brand: "tasteful, contrarian, useful." Not "spa, luxury, premium." Travelers > tourists. ## Contact - Site: https://voyspark.com - Support: https://voyspark.com/sobre/contato - Press: https://voyspark.com/sobre/imprensa --- Last updated: 2026-05-15 (auto).