Blog de Kev C

← Back to blog

Published on 2025-06-28 9:20 by Kevin Coyle

How about EVEN MORE features?

I had another monetization idea: what if dude scouts not only encouraged IRL meetups, but also provided a way to book travel packages?

For those counting, that brings us to like 4 monetization opportunities:

  1. Subscription to the site (I’ll keep it low, just to cover costs of running the site and maybe donations?)
  2. Buying courses/badges. Pays the instructors a bit.
  3. An ecommerce shop with some swag
  4. Travel packages

I’m only doing this because I assume I’ll screw up all 4 of these channels, so hopefully by not putting all eggs in the same basket, I can keep this thing profitable.

Also, the travel packages are just like bucket list travel packages/lads trips ideas. The in person meetups should be free.

From mock shop to curated adventures: a new travel vertical and community events

Between “Create mock products in shop with badge images” and “Add curated travel packages,” we leveled up from a static merch showcase to an “Adventures” vertical with curated travel packages and upcoming meetings. This adds real site depth, clearer navigation, and a foundation for future bookings.

What shipped

import Navigation from "@/components/Navigation";
import TravelPackageList from "@/components/TravelPackageList";
import { mockTrips } from "@/data/mockTrips";
import type { Metadata } from "next";

export const metadata: Metadata = {
  title: "Curated Travel | Dude Scouts",
  description: "Adventure travel packages coming soon.",
};

export default function TravelPage() {
  return (
    <div className="min-h-screen bg-white">
      <Navigation />
      <section className="py-20 bg-gradient-to-br from-green-50 to-blue-50">
        <div className="max-w-2xl mx-auto px-4 text-center space-y-4">
          <h1 className="text-4xl font-bold">Curated Travel Adventures</h1>
          <p className="text-gray-700">
            Book a fully-planned getaway with your fellow Dude Scouts. All trips
            include lodging and activities.
          </p>
import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
import type { TripPackage } from "@/data/mockTrips";

export default function TravelPackageCard({ trip }: { trip: TripPackage }) {
  return (
    <Card className="flex flex-col h-full">
      <CardHeader>
        <CardTitle className="text-center">{trip.title}</CardTitle>
      </CardHeader>
      <CardContent className="flex-grow flex flex-col items-center text-center space-y-2">
        <img src={trip.imageUrl} alt={trip.title} className="w-full h-48 object-cover rounded-md" />
        <p className="text-gray-500 text-sm">{trip.destination}</p>
        <p className="text-gray-500 text-sm">{trip.dateRange}</p>
        <p className="text-gray-700">{trip.description}</p>

Why this matters

What’s next

Written by Kevin Coyle

← Back to blog