Compare commits

..

2 Commits

Author SHA1 Message Date
arifal 12f13f2049 0.4.2 2026-05-07 18:12:08 +07:00
arifal 1e7259f38a fase 0 migration metadata 2026-05-07 18:11:59 +07:00
17 changed files with 53 additions and 57 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Buat Open Trip",
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" },
robots: { index: false, follow: false },
};
+1 -1
View File
@@ -36,7 +36,7 @@ export default async function CreateTripPage() {
<div className="mb-4 sm:mb-6">
<h1 className="text-2xl font-bold text-neutral-800">Buat Trip Baru</h1>
<p className="mt-1 text-sm text-neutral-500">
Ajak teman baru naik gunung bareng!
Ajak orang baru jalan bareng!
</p>
</div>
+3 -3
View File
@@ -18,7 +18,7 @@ const geistMono = Geist_Mono({
export const metadata: Metadata = {
metadataBase: new URL(siteUrl),
title: {
default: `${siteConfig.name} — Cari Teman Pendakian, Pergi Bareng`,
default: `${siteConfig.name} — Cari Teman Trip & Aktivitas, Pergi Bareng`,
template: `%s · ${siteConfig.name}`,
},
description: siteConfig.description,
@@ -33,7 +33,7 @@ export const metadata: Metadata = {
locale: "id_ID",
url: "/",
siteName: siteConfig.name,
title: `${siteConfig.name} — Cari Teman Pendakian, Pergi Bareng`,
title: `${siteConfig.name} — Cari Teman Trip & Aktivitas, Pergi Bareng`,
description: siteConfig.description,
images: [
{
@@ -46,7 +46,7 @@ export const metadata: Metadata = {
},
twitter: {
card: "summary_large_image",
title: `${siteConfig.name} — Cari Teman Pendakian, Pergi Bareng`,
title: `${siteConfig.name} — Cari Teman Trip & Aktivitas, Pergi Bareng`,
description: siteConfig.description,
images: ["/images/SeTrip.png"],
},
+1 -1
View File
@@ -3,7 +3,7 @@ import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Masuk",
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" },
robots: { index: false, follow: true },
};
+1 -1
View File
@@ -73,7 +73,7 @@ function LoginForm() {
</span>
</Link>
<p className="text-sm text-neutral-300">
Login dan mulai petualangan ke gunung
Login dan mulai petualanganmu bareng
</p>
</div>
+8 -12
View File
@@ -6,11 +6,11 @@ import { TripCard } from "@/features/trip/components/trip-card";
import { siteConfig, siteUrl, absoluteUrl } from "@/lib/site";
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}`,
alternates: { canonical: "/" },
openGraph: {
title: `${siteConfig.name} — Cari Teman Pendakian, Gabung Trip Bareng`,
title: `${siteConfig.name} — Cari Teman Trip & Aktivitas, Gabung Bareng`,
description: siteConfig.slogan,
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">
<span className="text-xs sm:text-sm">🤝</span>
<span className="text-xs font-medium text-primary-300 sm:text-sm">
Cari teman pendakian
Cari teman trip & aktivitas
</span>
</div>
@@ -100,12 +100,13 @@ export default async function HomePage() {
</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">
Lagi pengen hiking tapi gak punya teman?{" "}
Lagi pengen jalan tapi gak punya teman?{" "}
<span className="text-primary-400">SeTrip</span> tempatnya.
</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">
Gabung open trip pendakian, ketemu orang baru, dari stranger jadi
travel buddies. Grup kecil, organizer terverifikasi.
Gabung open trip hiking, camping, snorkeling, sampai city trip.
Ketemu orang baru, dari stranger jadi travel buddies. Grup kecil,
organizer terverifikasi.
</p>
<Link
@@ -124,11 +125,6 @@ export default async function HomePage() {
<p className="text-[11px] text-neutral-400 sm:text-xs">Trip Tersedia</p>
</div>
<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>
<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>
@@ -214,7 +210,7 @@ export default async function HomePage() {
Belum ada trip tersedia
</p>
<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>
<Link
href="/create-trip"
+1 -1
View File
@@ -3,7 +3,7 @@ import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Daftar Akun",
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" },
};
+1 -1
View File
@@ -72,7 +72,7 @@ export default function RegisterPage() {
</span>
</Link>
<p className="text-sm text-neutral-300">
Daftar dan mulai cari trip pendakian
Daftar dan mulai cari teman trip & aktivitas
</p>
</div>
+3 -3
View File
@@ -4,7 +4,7 @@ import { formatRupiah } from "@/lib/utils";
import { formatTripCalendarDateRangeLong } from "@/lib/trip-dates";
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 contentType = "image/png";
@@ -116,8 +116,8 @@ export default async function TripOgImage({
color: "#86efac",
}}
>
<span style={{ fontSize: 28 }}>🏔</span>
<span>Open Trip Pendakian</span>
<span style={{ fontSize: 28 }}>🤝</span>
<span>Open Trip Bareng</span>
</div>
</div>
+6 -6
View File
@@ -15,11 +15,11 @@ export async function generateMetadata({
}: TripsPageProps): Promise<Metadata> {
const { q } = await searchParams;
const title = q
? `Cari Teman Trip "${q}" — Pendakian Bareng`
: "Cari Teman Pendakian — Daftar Open Trip Aktif";
? `Cari Teman Trip "${q}" — Gabung Bareng`
: "Cari Teman Trip & Aktivitas — Daftar Open Trip Aktif";
const description = q
? `Hasil pencarian "${q}" di ${siteConfig.name}. Temukan teman pendakian, 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.`;
? `Hasil pencarian "${q}" di ${siteConfig.name}. Temukan teman seperjalanan, lihat trip & organizer terverifikasi, langsung gabung.`
: `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 {
title,
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>
<h1 className="text-xl font-bold text-neutral-800 sm:text-2xl">
Cari Teman Pendakian
Cari Teman Trip & Aktivitas
</h1>
<p className="mt-0.5 text-sm text-neutral-500">
{hasFilters
@@ -84,7 +84,7 @@ export default async function TripsPage({ searchParams }: TripsPageProps) {
<p className="mb-5 text-sm text-neutral-500 sm:mb-6">
{hasFilters
? "Coba ubah kata kunci atau rentang tanggal pencarian"
: "Jadilah yang pertama membuat open trip pendakian!"}
: "Jadilah yang pertama membuat open trip di sini!"}
</p>
{!hasFilters && (
<Link
+1 -1
View File
@@ -23,7 +23,7 @@ export function SearchBar() {
type="text"
value={query}
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"
/>
<button
+1 -1
View File
@@ -82,7 +82,7 @@ export function TripFilter() {
type="text"
value={query}
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"
/>
</div>
+2 -2
View File
@@ -42,10 +42,10 @@ export const createTripSchema = z
mountain: z
.string()
.trim()
.min(2, "Nama gunung harus diisi")
.min(2, "Destinasi harus diisi")
.max(
LIMITS.MAX_MOUNTAIN_LENGTH,
`Nama gunung maksimal ${LIMITS.MAX_MOUNTAIN_LENGTH} karakter`
`Destinasi maksimal ${LIMITS.MAX_MOUNTAIN_LENGTH} karakter`
),
location: z
.string()
+19 -19
View File
@@ -3,32 +3,32 @@ export const siteConfig = {
brand: "SeTrip",
slogan: "Pergi bareng, bukan sendiri.",
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: [
"setrip",
"se trip",
"teman trip",
"teman pendakian",
"cari teman naik gunung",
"cari teman trip",
"teman aktivitas",
"cari teman jalan",
"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",
"cari open trip",
"papandayan",
"ciremai",
"gunung gede",
"gunung pangrango",
"gunung guntur",
"gunung malabar",
"gunung tangkuban parahu",
"trip bareng",
"social travel",
"teman pendakian",
"open trip pendakian",
"hiking bareng",
"naik gunung bareng",
"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;
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "setrip",
"version": "0.4.1",
"version": "0.4.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "setrip",
"version": "0.4.1",
"version": "0.4.2",
"dependencies": {
"@next-auth/prisma-adapter": "^1.0.7",
"@prisma/adapter-pg": "^7.7.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "setrip",
"version": "0.4.1",
"version": "0.4.2",
"private": true,
"scripts": {
"dev": "next dev",
+1 -1
View File
@@ -30,7 +30,7 @@ export const reviewService = {
if (!isPastTripLastDayForReview(trip.date, trip.endDate)) {
throw new Error(
"Ulasan bisa diberikan setelah tanggal selesai trip (hari terakhir pendakian)"
"Ulasan bisa diberikan setelah tanggal selesai trip (hari terakhir aktivitas)"
);
}