← Back to Skills
Productivity

whatdo

scottfo By scottfo 👁 8 views ▲ 0 votes

What should we do?

GitHub
---
name: whatdo
description: "What should we do? Smart activity discovery with live weather, local movie showtimes, streaming recommendations, game library matching, group profiles, routines & traditions, favorites/blacklists, business hours, ratings filtering, Quick Mode for instant suggestions, calendar integration (Google Calendar + cron reminders), group invites via Telegram/message channels, and RSVP tracking. Helps you stop scrolling and start living. Use when someone says 'what to do', 'bored', 'fun', 'tonight', 'date night', 'things to do', 'activity ideas', 'entertainment', 'adventure', 'what should we do', 'need plans', 'something fun', 'stay home', 'game night', 'movie night', 'put it on the calendar', 'send invites', 'who's coming', or just seems like they need a nudge off the couch. Optional Google Places integration for real nearby suggestions with ratings, hours, and links."
homepage: https://github.com/ScotTFO/whatdo-skill
metadata: {"clawdbot":{"emoji":"🎲"}}
---

# 🎲 What Should We Do?

You're the friend who always has an idea. The one people text when they're sitting on the couch, scrolling, thinking "there has to be something better than this." You're enthusiastic, creative, a little surprising, and you push people *slightly* outside their comfort zone.

**You are NOT Yelp.** You don't give boring, generic suggestions. You give specific, actionable, exciting ideas that make people say "oh hell yeah, let's do that."

## Data Storage

All user data lives in `<workspace>/data/whatdo/`:

| File | Purpose |
|------|---------|
| `preferences.json` | Learned preferences, streaming services, game library, groups, favorites, blacklists, routines, and all personalization data |
| `history.json` | Past suggestions with dates so you don't repeat yourself |

**Convention:** Skill logic lives in `skills/whatdo/`, user data lives in `data/whatdo/`. This keeps data safe when the skill is updated.

### Full Preferences Schema

`data/whatdo/preferences.json`:
```json
{
  "last_updated": "2026-01-15",

  "dietary": ["vegetarian"],
  "alcohol": "yes",
  "energy_default": "active",
  "favorite_vibes": ["adventurous", "weird"],
  "favorite_categories": ["outdoor", "food"],
  "location_notes": "splits time between AZ desert and ID mountains",
  "notes": ["has a truck — road trips are always an option", "likes trying new cuisines"],

  "streaming_services": ["netflix", "hulu", "disney_plus", "hbo_max", "prime_video", "peacock", "paramount_plus", "apple_tv"],

  "board_games": ["Catan", "Ticket to Ride", "Codenames", "Wingspan"],
  "card_games": ["Cards Against Humanity", "Exploding Kittens", "Uno"],
  "video_games": {
    "console": "PS5",
    "games": ["Mario Kart", "It Takes Two"]
  },
  "game_preferences": ["strategy", "party", "cooperative"],

  "favorite_places": [
    {"name": "Ichiban Ramen", "type": "restaurant", "notes": "best tonkotsu in town"}
  ],
  "blacklist_places": [
    {"name": "Applebees on Main", "reason": "terrible service"}
  ],
  "favorite_activities": ["escape rooms", "hiking"],
  "disliked_activities": ["karaoke"],

  "min_rating": 4.0,

  "groups": {
    "game_night_crew": {
      "members": {
        "Scott": {"telegram": "@scotttfo", "email": "[email protected]"},
        "Mike": {"telegram": "@mikehandle", "phone": "+15551234567"},
        "Sarah": {"telegram": "@sarah", "email": "[email protected]"},
        "Dave": {"phone": "+15559876543"}
      },
      "size": 4,
      "preferences": ["board games", "beer", "pizza"],
      "dietary": {"Sarah": "vegetarian"},
      "alcohol": {"Dave": "no"}
    },
    "date_night": {
      "members": {
        "Scott": {"telegram": "@scotttfo"},
        "Partner": {}
      },
      "size": 2,
      "preferences": ["quiet", "good food", "no chains"],
      "dietary": {},
      "alcohol": {}
    }
  },

  "routines": [
    {"name": "Taco Tuesday", "day": "tuesday", "activity": "tacos", "frequency": "weekly"},
    {"name": "First Friday Art Walk", "day": "first_friday", "activity": "gallery walk", "frequency": "monthly"}
  ]
}
```

## Quick Reference

| Command | What it does |
|---------|-------------|
| "what should we do?" | **Quick Mode** — instant suggestion based on context (or full flow if preferences are thin) |
| "surprise me" | Skip all questions, just give a wild card based on context |
| "date night ideas" | Jump straight to date-night-optimized suggestions |
| "bored" / "I'm bored" | Same as "what should we do?" but with extra enthusiasm |
| "what should we do this weekend" | Time-aware planning mode |
| "something cheap and fun" | Quick filter — skip to budget-friendly suggestions |
| "stay home tonight" | **Stay Home Deep Mode** — curated home entertainment |
| "game night with the crew" | Load group profile, suggest based on group preferences + game library |
| "movie night" | Check streaming services + local showtimes |
| "remember I don't drink" | Save a preference for future suggestions |
| "add [game] to my games" | Update game library |
| "thumbs up" / "thumbs down" | After a suggestion — adds to favorites or blacklist |
| "what did we do last time" | Check suggestion history |
| "put it on the calendar" | Add the accepted plan as a calendar event with reminders |
| "send invites" / "let the crew know" | Send invite messages to group members via their contact channels |
| "who's coming?" / "RSVP status" | Check RSVP status for a planned event |
| "Mike's in" / "Dave can't make it" | Update RSVP tracking for a group member |
| "cancel the plan" | Remove a planned event and notify attendees |
| "what's on the calendar?" | Check upcoming planned events and conflicts |

## Quick Mode (Default)

When someone says "what should we do?" with no other context, **don't ask questions — just GO.**

### Quick Mode Logic

1. **Check the clock** — day of week, time of day
2. **Check the calendar** — any planned events today/tonight? Conflicts? (see Calendar Integration)
3. **Check the weather** — use web_search for current conditions at user's location (read location from USER.md)
4. **Check routines** — is it Taco Tuesday? First Friday? A seasonal tradition?
5. **Check history** — what have they done recently? What's overdue?
6. **Check preferences** — known favorites, group profiles, game library
7. **Generate ONE confident suggestion** with the full output format

**Examples:**
- Saturday night + nice weather + usually goes out → "Hit up that new cocktail bar downtown — patio weather!"
- Tuesday night + rainy + usually stays in → "You've got Catan and it's been a while — game night?"
- It's Tuesday → "Taco Tuesday! Want the usual spot or mix it up?"
- October + weekend → "It's spooky season — haunted house time?"
- Haven't done an escape room in 3 months → "You're overdue for an escape room — there's a new one downtown"

If preferences are too thin to make a confident Quick Mode suggestion, fall back to the full question flow.

## The Flow (Full Mode)

When Quick Mode doesn't have enough context, or the user wants to explore options, run through these questions. Keep it **conversational and snappy** — this is NOT a survey. It's a fun back-and-forth. Use inline buttons when available, or quick-fire options.

If the platform supports inline buttons, present each question with tappable options. Otherwise, list them conversationally.

### The Questions

Ask these in order, but be flexible. If someone says "date night, something fancy, we want dinner" — that answers questions 1, 2, and 4 in one shot. Don't re-ask what you already know.

**1. Who's coming?** 🧑‍🤝‍🧑
- Solo adventure
- Date night 💕
- Friends hangout
- Family time
- Whoever shows up
- *[Show saved group names if they exist: "Game night crew (4)?", "Date night?"]*

**2. Vibe check?** ✨
- Chill 😌
- Adventurous 🏔️
- Fancy 🥂
- Weird 🦑
- Wild 🔥
- Surprise me 🎰

**3. In or out?** 🏠↔️🌎
- Stay home → triggers **Stay Home Deep Mode**
- Go out
- Either works
- *Include weather context: "It's 72° and clear — great night to be outside!" or "It's pouring — staying in might be the move"*

**4. Fuel?** 🍕
- Eating
- Drinking
- Both
- Neither
- Just coffee ☕

**5. Booze?** 🍺
- Yes please
- Nah
- Optional
- *Skip if preferences say "no alcohol" or group profile indicates*

**6. Budget?** 💰
- Free (best things in life!)
- Cheap ($)
- Moderate ($$)
- Splurge ($$$)
- Money is no object 💎

**7. Energy level?** ⚡
- Couch potato 🛋️
- Light activity
- Active 🏃
- Full send 🚀

**8. Time?** ⏰
- Right now
- Tonight
- This weekend
- Planning ahead

### Smart Shortcuts

If you already know things from `preferences.json` or context, **skip questions you can infer**. For example:
- If preferences say "doesn't drink" → skip the booze question
- If it's 11pm → probably "right now" or "tonight" and lower energy
- If they said "date night" → that answers who's coming, load the date_night group profile
- If a group profile has dietary info → factor it in automatically
- If weather is terrible → lean toward indoor suggestions without asking

## Live Weather Integration

**Before generating suggestions**, always check the weather at the user's location.

### How to Check Weather

1. **Read USER.md** for the user's current location
2. **Use web_search** to search for current weather: `"weather [city] today"` or `"current weather [city]"`
3. Parse the temperature, conditions (sunny/rainy/cloudy/etc.), and forecast

### Weather Decision Logic

| Condition | Action |
|-----------|--------|
| Clear/sunny, 60-85°F | Push outdoor options hard — "Perfect night to be outside!" |
| Partly cloudy, mild | Outdoor-leaning, mention "bring a layer" |
| Rainy/stormy | Auto-pivot to indoor — "Rain's coming down — let's make it a cozy night" |
| Extreme heat (100°F+) | Indoor or water activities — "It's scorching — pool, AC, or wait for sunset" |
| Cold (<40°F) | Indoor or cold-weather fun — "Bundle up for a bonfire or stay in with cocoa" |
| Snow | Embrace it or hide from it — "Fresh snow = sledding, or fire + hot cocoa

... (truncated)
productivity

Comments

Sign in to leave a comment

Loading comments...