fase 0 migration metadata
This commit is contained in:
@@ -3,7 +3,7 @@ import type { Metadata } from "next";
|
|||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Buat Open Trip",
|
title: "Buat Open Trip",
|
||||||
description:
|
description:
|
||||||
"Buat open trip pendakian gunung di SeTrip. Atur itinerary, harga, dan ajak pendaki lain ikut serta.",
|
"Buat open trip di SeTrip — hiking, camping, snorkeling, city trip, dan aktivitas bareng lainnya. Atur itinerary, harga, dan ajak orang lain ikut serta.",
|
||||||
alternates: { canonical: "/create-trip" },
|
alternates: { canonical: "/create-trip" },
|
||||||
robots: { index: false, follow: false },
|
robots: { index: false, follow: false },
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ export default async function CreateTripPage() {
|
|||||||
<div className="mb-4 sm:mb-6">
|
<div className="mb-4 sm:mb-6">
|
||||||
<h1 className="text-2xl font-bold text-neutral-800">Buat Trip Baru</h1>
|
<h1 className="text-2xl font-bold text-neutral-800">Buat Trip Baru</h1>
|
||||||
<p className="mt-1 text-sm text-neutral-500">
|
<p className="mt-1 text-sm text-neutral-500">
|
||||||
Ajak teman baru naik gunung bareng!
|
Ajak orang baru jalan bareng!
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -18,7 +18,7 @@ const geistMono = Geist_Mono({
|
|||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
metadataBase: new URL(siteUrl),
|
metadataBase: new URL(siteUrl),
|
||||||
title: {
|
title: {
|
||||||
default: `${siteConfig.name} — Cari Teman Pendakian, Pergi Bareng`,
|
default: `${siteConfig.name} — Cari Teman Trip & Aktivitas, Pergi Bareng`,
|
||||||
template: `%s · ${siteConfig.name}`,
|
template: `%s · ${siteConfig.name}`,
|
||||||
},
|
},
|
||||||
description: siteConfig.description,
|
description: siteConfig.description,
|
||||||
@@ -33,7 +33,7 @@ export const metadata: Metadata = {
|
|||||||
locale: "id_ID",
|
locale: "id_ID",
|
||||||
url: "/",
|
url: "/",
|
||||||
siteName: siteConfig.name,
|
siteName: siteConfig.name,
|
||||||
title: `${siteConfig.name} — Cari Teman Pendakian, Pergi Bareng`,
|
title: `${siteConfig.name} — Cari Teman Trip & Aktivitas, Pergi Bareng`,
|
||||||
description: siteConfig.description,
|
description: siteConfig.description,
|
||||||
images: [
|
images: [
|
||||||
{
|
{
|
||||||
@@ -46,7 +46,7 @@ export const metadata: Metadata = {
|
|||||||
},
|
},
|
||||||
twitter: {
|
twitter: {
|
||||||
card: "summary_large_image",
|
card: "summary_large_image",
|
||||||
title: `${siteConfig.name} — Cari Teman Pendakian, Pergi Bareng`,
|
title: `${siteConfig.name} — Cari Teman Trip & Aktivitas, Pergi Bareng`,
|
||||||
description: siteConfig.description,
|
description: siteConfig.description,
|
||||||
images: ["/images/SeTrip.png"],
|
images: ["/images/SeTrip.png"],
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import type { Metadata } from "next";
|
|||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Masuk",
|
title: "Masuk",
|
||||||
description:
|
description:
|
||||||
"Masuk ke akun SeTrip untuk gabung open trip pendakian dan kelola perjalananmu.",
|
"Masuk ke akun SeTrip untuk gabung open trip & aktivitas bareng dan kelola perjalananmu.",
|
||||||
alternates: { canonical: "/login" },
|
alternates: { canonical: "/login" },
|
||||||
robots: { index: false, follow: true },
|
robots: { index: false, follow: true },
|
||||||
};
|
};
|
||||||
|
|||||||
+1
-1
@@ -73,7 +73,7 @@ function LoginForm() {
|
|||||||
</span>
|
</span>
|
||||||
</Link>
|
</Link>
|
||||||
<p className="text-sm text-neutral-300">
|
<p className="text-sm text-neutral-300">
|
||||||
Login dan mulai petualangan ke gunung
|
Login dan mulai petualanganmu bareng
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
+8
-12
@@ -6,11 +6,11 @@ import { TripCard } from "@/features/trip/components/trip-card";
|
|||||||
import { siteConfig, siteUrl, absoluteUrl } from "@/lib/site";
|
import { siteConfig, siteUrl, absoluteUrl } from "@/lib/site";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Cari Teman Pendakian — Pergi Bareng, Bukan Sendiri",
|
title: "Cari Teman Trip & Aktivitas — Pergi Bareng, Bukan Sendiri",
|
||||||
description: `${siteConfig.slogan} ${siteConfig.description}`,
|
description: `${siteConfig.slogan} ${siteConfig.description}`,
|
||||||
alternates: { canonical: "/" },
|
alternates: { canonical: "/" },
|
||||||
openGraph: {
|
openGraph: {
|
||||||
title: `${siteConfig.name} — Cari Teman Pendakian, Gabung Trip Bareng`,
|
title: `${siteConfig.name} — Cari Teman Trip & Aktivitas, Gabung Bareng`,
|
||||||
description: siteConfig.slogan,
|
description: siteConfig.slogan,
|
||||||
url: "/",
|
url: "/",
|
||||||
},
|
},
|
||||||
@@ -90,7 +90,7 @@ export default async function HomePage() {
|
|||||||
<div className="mb-4 inline-flex items-center gap-1.5 rounded-full border border-primary-400/30 bg-primary-600/20 px-3 py-1 sm:mb-6 sm:gap-2 sm:px-4 sm:py-1.5">
|
<div className="mb-4 inline-flex items-center gap-1.5 rounded-full border border-primary-400/30 bg-primary-600/20 px-3 py-1 sm:mb-6 sm:gap-2 sm:px-4 sm:py-1.5">
|
||||||
<span className="text-xs sm:text-sm">🤝</span>
|
<span className="text-xs sm:text-sm">🤝</span>
|
||||||
<span className="text-xs font-medium text-primary-300 sm:text-sm">
|
<span className="text-xs font-medium text-primary-300 sm:text-sm">
|
||||||
Cari teman pendakian
|
Cari teman trip & aktivitas
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -100,12 +100,13 @@ export default async function HomePage() {
|
|||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<p className="mx-auto mb-2 max-w-sm text-base font-medium text-neutral-300 sm:mb-3 sm:max-w-lg sm:text-lg">
|
<p className="mx-auto mb-2 max-w-sm text-base font-medium text-neutral-300 sm:mb-3 sm:max-w-lg sm:text-lg">
|
||||||
Lagi pengen hiking tapi gak punya teman?{" "}
|
Lagi pengen jalan tapi gak punya teman?{" "}
|
||||||
<span className="text-primary-400">SeTrip</span> tempatnya.
|
<span className="text-primary-400">SeTrip</span> tempatnya.
|
||||||
</p>
|
</p>
|
||||||
<p className="mx-auto mb-6 max-w-xs text-sm text-neutral-400 sm:mb-8 sm:max-w-md sm:text-base">
|
<p className="mx-auto mb-6 max-w-xs text-sm text-neutral-400 sm:mb-8 sm:max-w-md sm:text-base">
|
||||||
Gabung open trip pendakian, ketemu orang baru, dari stranger jadi
|
Gabung open trip — hiking, camping, snorkeling, sampai city trip.
|
||||||
travel buddies. Grup kecil, organizer terverifikasi.
|
Ketemu orang baru, dari stranger jadi travel buddies. Grup kecil,
|
||||||
|
organizer terverifikasi.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<Link
|
<Link
|
||||||
@@ -124,11 +125,6 @@ export default async function HomePage() {
|
|||||||
<p className="text-[11px] text-neutral-400 sm:text-xs">Trip Tersedia</p>
|
<p className="text-[11px] text-neutral-400 sm:text-xs">Trip Tersedia</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="h-8 w-px bg-neutral-700 sm:h-10" />
|
<div className="h-8 w-px bg-neutral-700 sm:h-10" />
|
||||||
<div>
|
|
||||||
<p className="text-xl font-bold text-secondary-400 sm:text-2xl">8</p>
|
|
||||||
<p className="text-[11px] text-neutral-400 sm:text-xs">Gunung Jabar</p>
|
|
||||||
</div>
|
|
||||||
<div className="h-8 w-px bg-neutral-700 sm:h-10" />
|
|
||||||
<div>
|
<div>
|
||||||
<p className="text-xl font-bold text-white sm:text-2xl">100%</p>
|
<p className="text-xl font-bold text-white sm:text-2xl">100%</p>
|
||||||
<p className="text-[11px] text-neutral-400 sm:text-xs">Seru</p>
|
<p className="text-[11px] text-neutral-400 sm:text-xs">Seru</p>
|
||||||
@@ -214,7 +210,7 @@ export default async function HomePage() {
|
|||||||
Belum ada trip tersedia
|
Belum ada trip tersedia
|
||||||
</p>
|
</p>
|
||||||
<p className="mb-5 text-sm text-neutral-500 sm:mb-6">
|
<p className="mb-5 text-sm text-neutral-500 sm:mb-6">
|
||||||
Jadilah yang pertama buat open trip pendakian!
|
Jadilah yang pertama buat open trip di sini!
|
||||||
</p>
|
</p>
|
||||||
<Link
|
<Link
|
||||||
href="/create-trip"
|
href="/create-trip"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import type { Metadata } from "next";
|
|||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Daftar Akun",
|
title: "Daftar Akun",
|
||||||
description:
|
description:
|
||||||
"Buat akun SeTrip gratis. Cari open trip pendakian gunung, gabung bareng, dan mulai petualanganmu.",
|
"Buat akun SeTrip gratis. Cari open trip & aktivitas bareng, gabung bareng, dan mulai petualanganmu.",
|
||||||
alternates: { canonical: "/register" },
|
alternates: { canonical: "/register" },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ export default function RegisterPage() {
|
|||||||
</span>
|
</span>
|
||||||
</Link>
|
</Link>
|
||||||
<p className="text-sm text-neutral-300">
|
<p className="text-sm text-neutral-300">
|
||||||
Daftar dan mulai cari trip pendakian
|
Daftar dan mulai cari teman trip & aktivitas
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { formatRupiah } from "@/lib/utils";
|
|||||||
import { formatTripCalendarDateRangeLong } from "@/lib/trip-dates";
|
import { formatTripCalendarDateRangeLong } from "@/lib/trip-dates";
|
||||||
import { siteConfig } from "@/lib/site";
|
import { siteConfig } from "@/lib/site";
|
||||||
|
|
||||||
export const alt = `${siteConfig.name} — Open Trip Pendakian`;
|
export const alt = `${siteConfig.name} — Open Trip & Aktivitas Bareng`;
|
||||||
export const size = { width: 1200, height: 630 };
|
export const size = { width: 1200, height: 630 };
|
||||||
export const contentType = "image/png";
|
export const contentType = "image/png";
|
||||||
|
|
||||||
@@ -116,8 +116,8 @@ export default async function TripOgImage({
|
|||||||
color: "#86efac",
|
color: "#86efac",
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<span style={{ fontSize: 28 }}>🏔️</span>
|
<span style={{ fontSize: 28 }}>🤝</span>
|
||||||
<span>Open Trip Pendakian</span>
|
<span>Open Trip Bareng</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -15,11 +15,11 @@ export async function generateMetadata({
|
|||||||
}: TripsPageProps): Promise<Metadata> {
|
}: TripsPageProps): Promise<Metadata> {
|
||||||
const { q } = await searchParams;
|
const { q } = await searchParams;
|
||||||
const title = q
|
const title = q
|
||||||
? `Cari Teman Trip "${q}" — Pendakian Bareng`
|
? `Cari Teman Trip "${q}" — Gabung Bareng`
|
||||||
: "Cari Teman Pendakian — Daftar Open Trip Aktif";
|
: "Cari Teman Trip & Aktivitas — Daftar Open Trip Aktif";
|
||||||
const description = q
|
const description = q
|
||||||
? `Hasil pencarian "${q}" di ${siteConfig.name}. Temukan teman pendakian, lihat trip & organizer terverifikasi, langsung gabung.`
|
? `Hasil pencarian "${q}" di ${siteConfig.name}. Temukan teman seperjalanan, lihat trip & organizer terverifikasi, langsung gabung.`
|
||||||
: `Daftar open trip pendakian aktif di ${siteConfig.name}. Pilih trip, kenal calon teman seperjalanan, dan gabung bareng — grup kecil & organizer terverifikasi.`;
|
: `Daftar open trip aktif di ${siteConfig.name} — hiking, camping, snorkeling, city trip, dan aktivitas bareng lainnya. Pilih trip, kenal calon teman seperjalanan, dan gabung bareng — grup kecil & organizer terverifikasi.`;
|
||||||
return {
|
return {
|
||||||
title,
|
title,
|
||||||
description,
|
description,
|
||||||
@@ -48,7 +48,7 @@ export default async function TripsPage({ searchParams }: TripsPageProps) {
|
|||||||
<div className="mb-6 flex flex-col gap-3 sm:mb-8 sm:flex-row sm:items-center sm:justify-between">
|
<div className="mb-6 flex flex-col gap-3 sm:mb-8 sm:flex-row sm:items-center sm:justify-between">
|
||||||
<div>
|
<div>
|
||||||
<h1 className="text-xl font-bold text-neutral-800 sm:text-2xl">
|
<h1 className="text-xl font-bold text-neutral-800 sm:text-2xl">
|
||||||
Cari Teman Pendakian
|
Cari Teman Trip & Aktivitas
|
||||||
</h1>
|
</h1>
|
||||||
<p className="mt-0.5 text-sm text-neutral-500">
|
<p className="mt-0.5 text-sm text-neutral-500">
|
||||||
{hasFilters
|
{hasFilters
|
||||||
@@ -84,7 +84,7 @@ export default async function TripsPage({ searchParams }: TripsPageProps) {
|
|||||||
<p className="mb-5 text-sm text-neutral-500 sm:mb-6">
|
<p className="mb-5 text-sm text-neutral-500 sm:mb-6">
|
||||||
{hasFilters
|
{hasFilters
|
||||||
? "Coba ubah kata kunci atau rentang tanggal pencarian"
|
? "Coba ubah kata kunci atau rentang tanggal pencarian"
|
||||||
: "Jadilah yang pertama membuat open trip pendakian!"}
|
: "Jadilah yang pertama membuat open trip di sini!"}
|
||||||
</p>
|
</p>
|
||||||
{!hasFilters && (
|
{!hasFilters && (
|
||||||
<Link
|
<Link
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export function SearchBar() {
|
|||||||
type="text"
|
type="text"
|
||||||
value={query}
|
value={query}
|
||||||
onChange={(e) => setQuery(e.target.value)}
|
onChange={(e) => setQuery(e.target.value)}
|
||||||
placeholder="Cari gunung, lokasi, atau trip..."
|
placeholder="Cari destinasi, lokasi, atau trip..."
|
||||||
className="min-w-0 flex-1 border-none bg-transparent px-3.5 py-3 text-sm text-white outline-none placeholder:text-neutral-400 sm:px-5 sm:py-3.5"
|
className="min-w-0 flex-1 border-none bg-transparent px-3.5 py-3 text-sm text-white outline-none placeholder:text-neutral-400 sm:px-5 sm:py-3.5"
|
||||||
/>
|
/>
|
||||||
<button
|
<button
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ export function TripFilter() {
|
|||||||
type="text"
|
type="text"
|
||||||
value={query}
|
value={query}
|
||||||
onChange={(e) => setQuery(e.target.value)}
|
onChange={(e) => setQuery(e.target.value)}
|
||||||
placeholder="Gunung, lokasi, atau nama trip..."
|
placeholder="Destinasi, lokasi, atau nama trip..."
|
||||||
className="w-full rounded-xl border border-neutral-200 bg-neutral-50 py-2.5 pl-9 pr-3 text-sm text-neutral-800 placeholder:text-neutral-400 focus:border-primary-500 focus:bg-white"
|
className="w-full rounded-xl border border-neutral-200 bg-neutral-50 py-2.5 pl-9 pr-3 text-sm text-neutral-800 placeholder:text-neutral-400 focus:border-primary-500 focus:bg-white"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -42,10 +42,10 @@ export const createTripSchema = z
|
|||||||
mountain: z
|
mountain: z
|
||||||
.string()
|
.string()
|
||||||
.trim()
|
.trim()
|
||||||
.min(2, "Nama gunung harus diisi")
|
.min(2, "Destinasi harus diisi")
|
||||||
.max(
|
.max(
|
||||||
LIMITS.MAX_MOUNTAIN_LENGTH,
|
LIMITS.MAX_MOUNTAIN_LENGTH,
|
||||||
`Nama gunung maksimal ${LIMITS.MAX_MOUNTAIN_LENGTH} karakter`
|
`Destinasi maksimal ${LIMITS.MAX_MOUNTAIN_LENGTH} karakter`
|
||||||
),
|
),
|
||||||
location: z
|
location: z
|
||||||
.string()
|
.string()
|
||||||
|
|||||||
+19
-19
@@ -3,32 +3,32 @@ export const siteConfig = {
|
|||||||
brand: "SeTrip",
|
brand: "SeTrip",
|
||||||
slogan: "Pergi bareng, bukan sendiri.",
|
slogan: "Pergi bareng, bukan sendiri.",
|
||||||
description:
|
description:
|
||||||
"SeTrip adalah tempat menemukan teman pendakian — bukan sekadar daftar trip. Gabung open trip, kenal stranger, jadi circle baru. Grup kecil, organizer terverifikasi.",
|
"SeTrip adalah tempat menemukan teman aktivitas & trip bareng — bukan sekadar daftar trip. Gabung open trip, kenal stranger, jadi circle baru. Grup kecil, organizer terverifikasi.",
|
||||||
keywords: [
|
keywords: [
|
||||||
"setrip",
|
"setrip",
|
||||||
"se trip",
|
"se trip",
|
||||||
"teman trip",
|
"teman trip",
|
||||||
"teman pendakian",
|
"cari teman trip",
|
||||||
"cari teman naik gunung",
|
"teman aktivitas",
|
||||||
|
"cari teman jalan",
|
||||||
"open trip",
|
"open trip",
|
||||||
"open trip gunung",
|
|
||||||
"open trip pendakian",
|
|
||||||
"open trip jawa barat",
|
|
||||||
"hiking bareng",
|
|
||||||
"mendaki bersama",
|
|
||||||
"naik gunung bareng",
|
|
||||||
"pendakian gunung",
|
|
||||||
"trip gunung",
|
|
||||||
"trip pendakian",
|
|
||||||
"gabung open trip",
|
"gabung open trip",
|
||||||
"cari open trip",
|
"cari open trip",
|
||||||
"papandayan",
|
"trip bareng",
|
||||||
"ciremai",
|
"social travel",
|
||||||
"gunung gede",
|
"teman pendakian",
|
||||||
"gunung pangrango",
|
"open trip pendakian",
|
||||||
"gunung guntur",
|
"hiking bareng",
|
||||||
"gunung malabar",
|
"naik gunung bareng",
|
||||||
"gunung tangkuban parahu",
|
"open trip camping",
|
||||||
|
"open trip snorkeling",
|
||||||
|
"open trip diving",
|
||||||
|
"open trip island hopping",
|
||||||
|
"city trip bareng",
|
||||||
|
"kulineran bareng",
|
||||||
|
"konser bareng",
|
||||||
|
"workshop outdoor",
|
||||||
|
"retreat bareng",
|
||||||
],
|
],
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export const reviewService = {
|
|||||||
|
|
||||||
if (!isPastTripLastDayForReview(trip.date, trip.endDate)) {
|
if (!isPastTripLastDayForReview(trip.date, trip.endDate)) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
"Ulasan bisa diberikan setelah tanggal selesai trip (hari terakhir pendakian)"
|
"Ulasan bisa diberikan setelah tanggal selesai trip (hari terakhir aktivitas)"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user