Claude Code Timesheets: Track Your AI-Assisted Development Time

I’ve been freelancing and using Claude Code for client work. Claude saves your full conversation history w/timestamps on disk. I wrote cctimesheet to parse these files and give me data I can use for billing. Tracking 15 minute increments, it’s much more granular than the way I track it myself. Usage # Last 30 days pipx run cctimesheet 30 # Since October 1, 2025 pipx run cctimesheet 20251001 # Filter by client/project pipx run cctimesheet 20251001 -p "*acme*" -g Output ================================================================================ CLAUDE CODE TIMESHEET ================================================================================ Since October 01, 2025 | Filter: *client-project* WEEKLY SUMMARY -------------------------------------------------------------------------------- Oct 27 - Nov 02, 2025 19.75 hrs Oct 20 - Oct 26, 2025 21.50 hrs Oct 13 - Oct 19, 2025 5.25 hrs Oct 06 - Oct 12, 2025 11.00 hrs DAILY BREAKDOWN -------------------------------------------------------------------------------- Friday, Nov 01, 2025 client-project/api 3.50 hrs client-project/frontend 1.25 hrs ----------------------------------------------------------------- --------- Daily Total 4.75 hrs Thursday, Oct 31, 2025 client-project/api 5.00 hrs ----------------------------------------------------------------- --------- Daily Total 5.00 hrs [...] ================================================================================ TOTAL HOURS 57.50 hrs ================================================================================ Why 15-minute blocks? Messages are grouped into 15-minute intervals. Multiple messages in the same interval count as one block (0.25 hours). Gaps with no activity are automatically excluded. ...

November 3, 2025 · 2 min

Git Diff Awesomeness

Big upgrades to my git diff experience today! Mouse scrolling in git diffs and much easier to read syntax-highlighted diffs with word-level changes. Mouse scrolling in git diffs First, install a newer version of less because of course macOS doesn’t ship updated core tools. brew install less && brew link less Next, configure iTerm2 to pass arrow keys on scroll in alternate screen mode. Go to Preferences → Advanced and search for “scroll” to find the setting “Scroll wheel sends arrow keys when in alternate screen mode” and set it to Yes. ...

October 2, 2025 · 2 min

Getting Claude Code to Work with Browser MCP

If you’re trying to set up Browser MCP (https://browsermcp.io/) with Claude Code here’s what you actually need to run: claude mcp add --scope user browsermcp npx @browsermcp/mcp@latest That’s it! Browser MCP will be available from any directory you’re running claude in to whichever browser tab you are currently sharing What is Browser MCP? Browser MCP (Model Context Protocol) is a tool that allows Claude to control a browser instance, enabling it to: ...

August 11, 2025 · 1 min

SideNotes: zero‑friction project notes next to your code

I wanted a scratchpad that lives with the code but never in Git. SideNotes is a tiny shell helper that gives every repo a persistent notes that are already available in your editor. It shows up as a SideNotes folder in your project tree, but the notes live outside the repo and are globally git ignored. Why Mostly because I always use VS Code for scratch notes anyway Keep brainstorming and temporary thinking near the code without polluting commits or PRs One consistent place for notes across all repos Fast to open and create notes from the shell Plain Markdown on disk, editor‑agnostic How it works Per-project notes live under a central directory (e.g. ~/Code/SideNotes/<project>/) A SideNotes symlink is created in your repo so notes appear in your editor’s file tree Git ignores the SideNotes symlink globally, so nothing lands in version control # Create a new note note first-idea #=> Created: SideNotes/2025-08-08_14-22_first-idea.md # Disk location ~/Code/SideNotes/your-repo/2025-08-08_14-22_first-idea.md # You and your editor see ./your-repo/SideNotes/2025-08-08_14-22_first-idea.md # Git sees git status #=> On branch develop #=> nothing to commit, working tree clean Commands notes_init [project_name]: Initialize notes for the current repo (optional custom name) note <slug>: Create a timestamped Markdown file and open it (e.g. note performance-sweep) notes: Show usage and list notes newest‑first notes_latest: Open the most recent note notes_projects: List all projects with notes and counts Tips Set your editor with export EDITOR=vim (or nvim, nano, etc.) Want a different base directory? export SIDENOTES_DIR=~/Notes/Projects The symlink name (SideNotes) can be changed in the script if you prefer something else Why not keep notes in the repo? Documentation should be kept in the repo but can’t keep every little thing in there for someone else to review. ...

August 8, 2025 · 2 min

Laravel Cache Remember Forever if Truthy

I kept needing a cache method that would only store a value permanently if the result was truthy. For expensive operations that might return null or false, I wanted to keep trying until I got a real result, then cache that forever. The problem Laravel’s Cache::rememberForever() caches any result, including null/false values. Fairly often I want to cache successful results and keep retrying failed ones. The solution Add this macro to your AppServiceProvider boot method: ...

June 19, 2025 · 2 min

Better File Formatting When Working With LLMs

Copilot, Cursor, Claude Code, etc are convenient for automatically pulling relevant files from your codebase when asking questions but with difficult or sprawling questions I get much better results by manually selecting the files I want to include. To simplify this manual process, I wrote a small script named catcopy. What catcopy does catcopy takes a regex pattern, searches the codebase for matching filenames, gets the contents of each, and copies to the clipboard broke up with big markdown headers. ...

April 12, 2025 · 2 min

Git file history

View the commit history for a particular file with git on the command line: git log --follow -p -- filename

March 10, 2017 · 1 min · Paul

Disable Full Screen Shortcut on Mac OSX 10.10 Yosemite

Full screen is super annoying on OS X lately. I use SizeUp which gives me a shortcut for expanding the windows instead of using the green button but i’m still having random encounters with full screen mode because of the shortcut ctrl+shift+f. So here’s how to disable that..or at least make it harder to do by accident: # Change full screen shortcut to Shift + Ctrl + Opt + Cmd + F defaults write -g NSUserKeyEquivalents -dict-add "Enter Full Screen" "$~^@F"

May 24, 2015 · 1 min · Paul

Remove all images from JQuery UI CSS

/* remove all default background images from jquery ui */ .ui-icon,.ui-widget-content .ui-icon, .ui-state-active .ui-icon, .ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active, .ui-state-default .ui-icon, .ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default, .ui-state-error .ui-icon,.ui-state-error-text .ui-icon, .ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error, .ui-state-highlight .ui-icon, .ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight, .ui-state-hover .ui-icon,.ui-state-focus .ui-icon, .ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus, .ui-widget-content, .ui-widget-header, .ui-widget-header .ui-icon, .ui-widget-overlay, .ui-widget-shadow { background-image: none; }

May 4, 2015 · 1 min · Paul

Updating git on OS X Mavericks

The easiest way to update git to 2.2.1 or higher is to use homebrew. brew install git If you get a command not found error, you can install homebrew from brew.sh (scroll down for a one liner, i won’t copy it here in case it updates). If you get a different error, check out Updating homebrew on yosemite.

January 13, 2015 · 1 min · Paul