Files
exposedgays/src/lib/mock-data.ts

374 lines
11 KiB
TypeScript

import type { Profile, CruisingSpot } from "@/types";
import { distanceMiles } from "@/lib/profile-stats";
const DEFAULT_LAT = parseFloat(process.env.NEXT_PUBLIC_DEFAULT_LAT || "26.1224");
const DEFAULT_LNG = parseFloat(process.env.NEXT_PUBLIC_DEFAULT_LNG || "-80.1373");
function jitter(base: number, range: number) {
return base + (Math.random() - 0.5) * range;
}
function withDistance(p: Omit<Profile, "distance_miles">): Profile {
const lat = p.lat ?? DEFAULT_LAT;
const lng = p.lng ?? DEFAULT_LNG;
return {
...p,
distance_miles: distanceMiles(DEFAULT_LAT, DEFAULT_LNG, lat, lng),
};
}
export const MOCK_PROFILES: Profile[] = [
withDistance({
id: "1",
username: "ftl_top",
display_name: "Mike",
age: 31,
position: "top",
bio: "Hosting tonight near Wilton Drive. HMU.",
avatar_url: "https://images.unsplash.com/photo-1568602471122-7832951cc4c5?w=200&h=200&fit=crop",
status: "hosting",
is_anonymous: false,
is_verified: true,
kinks: ["oral", "rimming", "daddy", "exhibitionism"],
sti_status: "Negative, On PrEP",
on_prep: true,
last_active: new Date().toISOString(),
lat: jitter(DEFAULT_LAT, 0.02),
lng: jitter(DEFAULT_LNG, 0.02),
city: "Fort Lauderdale",
state: "FL",
id_verified: true,
id_verified_at: new Date().toISOString(),
vanilla_mode: false,
created_at: new Date().toISOString(),
height_in: 74,
weight_lb: 180,
body_type: "average",
endowment: `7" cut`,
orientation: "gay",
headline: "No Pic, No Chat",
into_public: ["Outdoors", "Parks"],
fetishes: ["Armpits", "Ass", "Feet", "Jockstraps"],
practices: ["Bareback Only"],
interaction: ["Anonymous", "Cum and Go"],
hiv_status: "Negative, On PrEP",
hiv_tested: "May 1, 2026",
sti_tested: "May 1, 2026",
safeguards: ["COVID Vaccinated", "Mpox Vaccinated / Immune"],
comfort_levels: ["No Tobacco", "No Alcohol", "No PnP"],
carries: ["Lube"],
hosting: "Can host",
gallery: [
{ url: "https://images.unsplash.com/photo-1568602471122-7832951cc4c5?w=400&h=500&fit=crop", is_explicit: false },
{ url: "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=400&h=500&fit=crop", is_explicit: false },
{ url: "https://placehold.co/400x500/1a1220/ff2d6b?text=Explicit", is_explicit: true },
{ url: "https://placehold.co/400x500/1a1220/8b2fc9?text=Explicit", is_explicit: true },
],
}),
withDistance({
id: "2",
username: null,
display_name: null,
age: 28,
position: "bottom",
bio: "At the beach. Looking now.",
avatar_url: "https://images.unsplash.com/photo-1506794778202-cad84cf45f1d?w=200&h=200&fit=crop",
status: "looking",
is_anonymous: true,
is_verified: false,
kinks: ["anon", "oral", "group", "gloryholes"],
sti_status: null,
on_prep: false,
last_active: new Date(Date.now() - 120000).toISOString(),
lat: jitter(DEFAULT_LAT, 0.03),
lng: jitter(DEFAULT_LNG, 0.03),
city: "Fort Lauderdale",
state: "FL",
id_verified: false,
id_verified_at: null,
vanilla_mode: false,
created_at: new Date().toISOString(),
height_in: 69,
weight_lb: 165,
body_type: "fit",
endowment: `8" uncut`,
orientation: "gay",
headline: "Into guys around my age",
into_public: ["Parks", "Gyms"],
fetishes: ["Socks"],
practices: [],
interaction: ["Anonymous"],
hosting: "Can travel",
gallery: [
{ url: "https://images.unsplash.com/photo-1506794778202-cad84cf45f1d?w=400&h=500&fit=crop", is_explicit: false },
{ url: "https://placehold.co/400x500/1a1220/ff2d6b?text=Explicit", is_explicit: true },
],
}),
withDistance({
id: "3",
username: "vers_bear",
display_name: "Jake",
age: 45,
position: "vers",
bio: "Bear. Leather friendly. Gym rat.",
avatar_url: "https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=200&h=200&fit=crop",
status: "online",
is_anonymous: false,
is_verified: true,
kinks: ["leather", "bdsm", "oral", "fisting"],
sti_status: "Negative",
on_prep: true,
last_active: new Date(Date.now() - 300000).toISOString(),
lat: jitter(DEFAULT_LAT, 0.025),
lng: jitter(DEFAULT_LNG, 0.025),
city: "Fort Lauderdale",
state: "FL",
id_verified: true,
id_verified_at: null,
vanilla_mode: false,
created_at: new Date().toISOString(),
height_in: 71,
weight_lb: 210,
body_type: "stocky",
endowment: `6.5" cut`,
orientation: "gay",
headline: "Leather & beer",
fetishes: ["Leather", "Bondage"],
practices: ["Condoms OK"],
interaction: ["Drop Pants"],
hiv_status: "Negative, On PrEP",
hiv_tested: "Jan 2026",
sti_tested: "Jan 2026",
safeguards: ["COVID Vaccinated"],
comfort_levels: ["No PnP"],
gallery: [
{ url: "https://images.unsplash.com/photo-1500648767791-00dcc994a43e?w=400&h=500&fit=crop", is_explicit: false },
],
}),
withDistance({
id: "4",
username: "pup_play",
display_name: "Rex",
age: 26,
position: "side",
bio: "Pup scene. Woof.",
avatar_url: "https://images.unsplash.com/photo-1519085360753-af0119f7cbe7?w=200&h=200&fit=crop",
status: "looking",
is_anonymous: false,
is_verified: false,
kinks: ["pup", "bondage", "roleplay"],
sti_status: null,
on_prep: true,
last_active: new Date(Date.now() - 60000).toISOString(),
lat: jitter(DEFAULT_LAT, 0.015),
lng: jitter(DEFAULT_LNG, 0.015),
city: "Fort Lauderdale",
state: "FL",
id_verified: false,
id_verified_at: null,
vanilla_mode: false,
created_at: new Date().toISOString(),
height_in: 68,
weight_lb: 155,
body_type: "slim",
orientation: "gay",
headline: "Woof",
hosting: "Can travel",
gallery: [
{ url: "https://images.unsplash.com/photo-1519085360753-af0119f7cbe7?w=400&h=500&fit=crop", is_explicit: false },
],
}),
withDistance({
id: "5",
username: "traveler_mia",
display_name: "Alex",
age: 35,
position: "vers",
bio: "Visiting from Miami. Here till Sunday.",
avatar_url: "https://images.unsplash.com/photo-1492562080023-ab3db95bfbce?w=200&h=200&fit=crop",
status: "traveling",
is_anonymous: false,
is_verified: true,
kinks: ["cruising", "anon", "oral"],
sti_status: "Negative · tested Dec 2025",
on_prep: true,
last_active: new Date(Date.now() - 180000).toISOString(),
lat: jitter(DEFAULT_LAT, 0.01),
lng: jitter(DEFAULT_LNG, 0.01),
city: "Fort Lauderdale",
state: "FL",
id_verified: false,
id_verified_at: null,
vanilla_mode: false,
created_at: new Date().toISOString(),
height_in: 72,
weight_lb: 175,
body_type: "athletic",
endowment: `7.5" cut`,
orientation: "gay",
headline: "Miami visitor",
hosting: "Can travel",
gallery: [
{ url: "https://images.unsplash.com/photo-1492562080023-ab3db95bfbce?w=400&h=500&fit=crop", is_explicit: false },
{ url: "https://placehold.co/400x500/1a1220/ff2d6b?text=Explicit", is_explicit: true },
],
}),
withDistance({
id: "6",
username: "gym_sauna",
display_name: "Chris",
age: 33,
position: "bottom",
bio: "LA Fitness sauna regular.",
avatar_url: "https://images.unsplash.com/photo-1539571696357-5a90c39a553c?w=200&h=200&fit=crop",
status: "online",
is_anonymous: false,
is_verified: false,
kinks: ["oral", "underwear", "cruising"],
sti_status: null,
on_prep: true,
last_active: new Date(Date.now() - 45000).toISOString(),
lat: jitter(DEFAULT_LAT, 0.018),
lng: jitter(DEFAULT_LNG, 0.022),
city: "Fort Lauderdale",
state: "FL",
id_verified: false,
id_verified_at: null,
vanilla_mode: false,
created_at: new Date().toISOString(),
height_in: 70,
weight_lb: 170,
body_type: "fit",
orientation: "gay",
gallery: [
{ url: "https://images.unsplash.com/photo-1539571696357-5a90c39a553c?w=400&h=500&fit=crop", is_explicit: false },
],
}),
withDistance({
id: "7",
username: "beach_vers",
display_name: "Danny",
age: 29,
position: "vers",
bio: "Sebastian beach afternoons.",
avatar_url: "https://images.unsplash.com/photo-1504257432389-52343af06da3?w=200&h=200&fit=crop",
status: "looking",
is_anonymous: false,
is_verified: true,
kinks: ["anon", "oral", "exhibitionism"],
sti_status: "Negative",
on_prep: false,
last_active: new Date(Date.now() - 90000).toISOString(),
lat: jitter(DEFAULT_LAT, 0.028),
lng: jitter(DEFAULT_LNG, 0.012),
city: "Fort Lauderdale",
state: "FL",
id_verified: true,
id_verified_at: null,
vanilla_mode: false,
created_at: new Date().toISOString(),
height_in: 69,
weight_lb: 160,
body_type: "average",
orientation: "gay",
into_public: ["Outdoors", "Beaches"],
gallery: [
{ url: "https://images.unsplash.com/photo-1504257432389-52343af06da3?w=400&h=500&fit=crop", is_explicit: false },
{ url: "https://placehold.co/400x500/1a1220/ff2d6b?text=Explicit", is_explicit: true },
],
}),
];
export const MOCK_SPOTS: CruisingSpot[] = [
{
id: "s1",
name: "Hugh Taylor Birch State Park",
description: "Popular trails behind the nature center. Active after dark.",
category: "park",
lat: 26.1452,
lng: -80.1048,
city: "Fort Lauderdale",
rating: 4.2,
active_count: 8,
is_popular: true,
created_at: new Date().toISOString(),
},
{
id: "s2",
name: "Sebastian Street Beach",
description: "Gay beach section. Day and night action.",
category: "beach",
lat: 26.1175,
lng: -80.1042,
city: "Fort Lauderdale",
rating: 4.5,
active_count: 12,
is_popular: true,
created_at: new Date().toISOString(),
},
{
id: "s3",
name: "LA Fitness — Oakland Park",
description: "Locker room and sauna. Peak hours 5-8pm.",
category: "gym",
lat: 26.1723,
lng: -80.1317,
city: "Fort Lauderdale",
rating: 3.8,
active_count: 4,
is_popular: false,
created_at: new Date().toISOString(),
},
{
id: "s4",
name: "Ramrod Bar",
description: "Back bar area. Weekend nights.",
category: "club",
lat: 26.1603,
lng: -80.1389,
city: "Fort Lauderdale",
rating: 3.5,
active_count: 2,
is_popular: false,
created_at: new Date().toISOString(),
},
{
id: "s5",
name: "Eagle Ft Lauderdale",
description: "Leather bar. Active weekends.",
category: "club",
lat: 26.1588,
lng: -80.1412,
city: "Fort Lauderdale",
rating: 4.1,
active_count: 6,
is_popular: true,
created_at: new Date().toISOString(),
},
{
id: "s6",
name: "Hunter's Bar",
description: "Neighborhood gay bar.",
category: "club",
lat: 26.1555,
lng: -80.1365,
city: "Wilton Manors",
rating: 4.0,
active_count: 5,
is_popular: true,
created_at: new Date().toISOString(),
},
{
id: "s7",
name: "Triple Crown Bookstore",
description: "Adult bookstore with viewing booths.",
category: "bookstore",
lat: 26.1912,
lng: -80.1534,
city: "Oakland Park",
rating: 4.0,
active_count: 6,
is_popular: true,
created_at: new Date().toISOString(),
},
];