# Journal

> Run the daily logger. This skill has three logging modes plus weekly summaries. Pick the mode from the argument (or the user's wording):

- Skill: `tylerprogramming/journal` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tylerprogramming/journal`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tylerprogramming/journal/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tylerprogramming (https://skillmd.com/u/tylerprogramming)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tylerprogramming/journal

---


Run the daily logger. This skill has three logging modes plus weekly summaries. Pick the mode from the argument (or the user's wording):

| Argument / intent | Mode |
|-------------------|------|
| blank, "log", "entry", "journal" | **Journal entry** (personal daily reflection) |
| "standup" | **Standup** (technical work status) |
| "eod", "end of day", "how was my day" | **End-of-day report** (automated, pulls from all sources) |
| "summary", "week" | **Weekly summary** (display only) |
| "email", "email summary" | **Weekly summary + email** |

Always get today's date from the current date, not from memory. Date format is always `YYYY-MM-DD`. Never use em dashes in saved content — use a plain hyphen with spaces or a comma.

---

## Mode 1: Journal entry (default)

Personal daily reflection. Ask these **one at a time, conversationally** — wait for each answer:

1. **What did you accomplish today?** (work, personal, anything worth noting)
2. **What are you planning to work on next?**
3. **Any blockers, concerns, or things on your mind?**
4. **Anything else you want to remember?** (optional — skip if they say no)

Save to `~/content/journal/YYYY-MM-DD.txt`:

```
# Journal — YYYY-MM-DD (Day of Week)

## Done
- [their answers as bullet points]

## Next
- [their answers as bullet points]

## Blockers
- [their answers, or "None"]

## Notes
- [optional — omit section if empty]
```

If an entry already exists for today, ask whether to **append** or **replace**.

---

## Mode 2: Standup

Technical, tighter than a journal entry. Ask these **one at a time, conversationally**:

1. **What did you work on?** (the focus / project / area)
2. **What did you get done?** (concrete accomplishments)
3. **What's next?** (what you're picking up next)
4. **Any blockers?** ("none" is fine)

Save to `~/content/standup/YYYY-MM-DD.md`:

```
# Standup — YYYY-MM-DD (Day of Week)

## Worked On
- [their answer]

## Done
- [accomplishments]

## Next
- [what's next]

## Blockers
- [their answer, or "None"]
```

Break run-on answers into clean, scannable bullets. Keep the wording theirs — tighten, don't editorialize. If a standup already exists for today, ask whether to **append** or **replace**. After saving, print the final standup and confirm the path.

- "standup show" / "standup last" → display the most recent file in `~/content/standup/`
- "standup week" → 7-day rollup of standups: what got done, what's in progress, recurring blockers (display only)

---

## Mode 3: End-of-day report

A comprehensive automated report of what got done and what's still pending.

### Step 1: Determine the date
Use the user-provided date, else today.

### Step 2: Gather data from all sources (run IN PARALLEL via the Agent tool or multiple Bash calls)

**Social Media (Blotato)** — use `mcp__blotato__blotato_list_schedules` for posts published/scheduled today across YouTube, TikTok, Instagram, LinkedIn, X.

**Skool** — recent post timestamps (Playwright if needed) + new member signups:
```
sqlite3 ~/.claude/skills/skool/data/skool.db "SELECT COUNT(*) FROM skool_members WHERE created_at LIKE 'YYYY-MM-DD%';"
```

**YouTube uploads:**
```
yt-dlp --flat-playlist --print "%(upload_date)s %(title)s" "https://www.youtube.com/@TylerReedAI/videos" 2>/dev/null | head -5
```

**Nutrition / Fitness** — query the `lifestyle` Supabase project (project id in your own config) via the Supabase MCP (replace the date):
```sql
select * from activity_log     where date = 'YYYY-MM-DD';  -- flags + macro totals
select * from cardio_log       where date = 'YYYY-MM-DD';  -- runs
select * from strength_entries where date = 'YYYY-MM-DD';  -- lifts
select * from water_log        where date = 'YYYY-MM-DD';
select * from caffeine_log     where date = 'YYYY-MM-DD';
select * from reading_log      where date = 'YYYY-MM-DD';
select * from daily_checkin    where date = 'YYYY-MM-DD';
```
Compare against `meal_plan` rows (planned vs `actual_*`). If water or caffeine is not logged, flag it.

**Content created** — check `~/content/YYYY-MM-DD/`, `~/content/youtube/shorts/`, `~/content/youtube/*/social/`, and any new carousels/PDFs/visuals created today.

**Files modified today:**
```
find ~/content ~/content/youtube ~/content/research -name "*.md" -mtime 0 2>/dev/null | head -30
```

**Journal / standup** — read `~/content/journal/YYYY-MM-DD.txt` and `~/content/standup/YYYY-MM-DD.md` if they exist.

**Schedule** — most recent `filming-schedule.md` in `~/content/` subdirs and `~/content/youtube/shorts/*/filming-plan.md`. Determine planned vs actual, and pull TOMORROW's items.

### Step 3: Build the report

```
# End of Day Summary - YYYY-MM-DD (Day of Week)

## What Got Done
- [accomplishments, grouped by category]

## Social Media Published
| Platform | Post | Status |
|----------|------|--------|

## Leads / Revenue
- New Skool members today: X
- Total Skool members: X
- LinkedIn engagement / DMs / post performance
- Sales / Revenue / new leads

## Nutrition
- Breakfast / Lunch / Dinner
- Water: X oz / goal (or "Not logged")
- Caffeine: X mg (or "Not logged")
- Calories: est. total | Protein: Xg
- Workout: [what was done, or "Rest day"]

## Still Pending
- [scheduled items not yet done; planned-but-unposted content]

## Tomorrow (Day of Week, YYYY-MM-DD)
- [from filming schedule; content that needs to go out; workout suggestion]

## Productivity Rating: X/10
[brief explanation: planned vs accomplished]
```

### Step 4: Save
Save to `~/content/journal/eod-YYYY-MM-DD.md`. If the user says "don't save" or "just show me", skip saving.

### Step 5: Present
Display the full report, then ask: (1) "Did you track water and caffeine today?" if not logged, (2) "Anything else to note?", (3) "Want me to save this?"

### Rating guidelines
- **9-10**: Exceeded the plan. Everything scheduled got done plus extra.
- **7-8**: Solid. Most things done, 1-2 pushed.
- **5-6**: Average. Some done, significant items missed.
- **3-4**: Light day.
- **1-2**: Basically a rest day.

Be honest but motivating. Context matters — a filming day where filming happened is a 10 even if posts didn't go out. Infrastructure/tool-building days count as high productivity even with no published content.

---

## Weekly summary

### "summary" / "week"
Read all entries from the past 7 days in `~/content/journal/` (exclude `weekly_summary.txt` and `eod-*.md`) and generate:
- What was accomplished
- Recurring themes or blockers
- What's planned ahead

Display it.

### "email" / "email summary"
1. Generate the weekly summary (above).
2. Send it:
   ```
   python3 ~/.claude/skills/journal/send_summary.py
   ```
   The script reads the latest `~/content/journal/weekly_summary.txt` and emails it.
3. Confirm the email was sent.

---

## Rules
- Storage: journal + eod → `~/content/journal/`; standups → `~/content/standup/`. Never save elsewhere.
- Be conversational and encouraging, not robotic — ask one question at a time.
- Keep entries concise — capture what matters, don't over-format.
- Never use em dashes in saved content.

