Categories
- Unstructured learning
- Double shift for search in VS Code
- Feels like it’s always been this way
- What is craft?
- Ignore all whitespace with git diff -w
- My simple method of tackling a to-do list
- Set a direction, not a goal
- Day 90: Concluding my work journal
- Day 89: Marketing Dashify Search
- Day 88: Inspired by Record Club
- Day 87: Easy to measure
- Day 86: Can the feature be found in Google?
- Doing things until completion
- Day 85: Redoing Dashify Pro update code
- Day 84: WordPress.org screenshots and authentication error
- Day 83: Cleaning up the code for Dashify Search
- Day 82: Making money from ads versus purchases
- Day 81: 4th of July holiday
- Day 80: Searching for WooCommerce orders by ID
- Day 79: The plan for July
- Day 78: June reflection as a bootstrapped founder
- Day 77: Marketing by helping
- Day 76: Dashify has 100 users!
- Day 75: The first major Dashify Pro feature
- Day 74: Got distracted
- Day 73: Dashify website updates
- Day 72: Restoring functionality complete
- Day 71: Wrapping up restoring functionality and a bug fix
- Day 70: Dashify has 90 users and its first paying customer!
- Day 69: Restoring functionality, continued
- Day 68: Restoring functionality that Dashify removed
- Day 67: Understanding WordPress to fix a tricky bug
- Day 66: Another work journal catch up day
- Day 65: Dashify has 80 users!
- Day 64: Search and bulk actions improvements
- Day 63: Planting seeds and chatbot dangers
- Day 62: Catching up on the work journal
- Day 61: Dashify Pro is live
- Day 60: Final day before Dashify Pro launch
- Day 59: So close to launching Dashify Pro
- Day 58: Dashify has 70 users!
- Day 57: Why I chose to not use Freemius
- Day 56: Tempted to work
- Day 55: License key activation edge cases
- Day 54: Dashify Pro’s first feature
- Day 53: Dashify has 60 users!
- Is Twitter worth my time?
- Day 52: Rewrite or restyle?
- Day 51: Dashify has 50 users!
- Day 50: Setting up email verification in Laravel (Breeze, Mailpit, and Postmark)
- Day 49: Banana bread
- Day 48: May reflection as a bootstrapped founder
- Day 47: I discovered Bruno, an Insomnia and Postman alternative that does not require an account
- Day 46: Dashify has 40 users!
- Day 45: License key generation for my WordPress plugin
- Day 44: Laravel makes file downloads easy
- Day 43: Creating a dashboard with Laravel Breeze and Cashier
- Day 42: One day off per week
- Day 41: A public roadmap for Dashify
- Day 40: Dashify has 30 users!
- Day 39: Buy me a coffee
- Day 38: Catching up on the journal entries
- Day 37: Can you make enough money from selling a WooCommerce plugin?
- Day 36: How should I implement license keys for my WordPress plugin?
- Day 35: “Trialware is not permitted” meaning in WordPress
- Day 34: Conversion rates for a typical WordPress plugin?
- Day 33: What should I introduce in Dashify Pro?
- Day 32: Creating a backlog of content
- Day 31: Dashify has 20 users!
- Day 30: Content creation machine
- Day 29: $1 a day Google Ads
- Day 28: Worries
- Day 27: I discovered that one of my “abandoned” projects is successful
- Day 26: Adding testimonials to the website
- Day 25: Are these journal entries worth it?
- Day 24: I did something that didn’t scale
- Day 23: Launching support for WooCommerce Subscriptions
- Day 22: Being mindful of over-engineering
- Day 21: Are Google Ads effective for bootstrapped founders?
- Day 20: The plan for May
- Day 19: An effective deep work session
- Day 18: April reflection
- Day 17: Sponsoring WooWeekly and pausing Google Ads
- Day 16: Upward trends
- Day 15: Programming better
- Day 14: My vision for Dashify
- Hugo detecting CSS changes but not rendering new styles
- Day 13: Pricing
- Day 12: Early customers are awesome
- Day 11: Visual improvements to the order view
- Day 10: Be careful with Google Ads
- Day 9: Dashify has 10 users!
- Day 8: Dashify has a long way to go
- Day 7: Earliest signs of content marketing working
- Day 6: Self-doubt and Google Ads
- Day 5: Email follow-ups for Dashify
- Day 4: Abandoned competition
- Day 3: First blog post on the Dashify website
- Day 2: Cold email results
- Day 1: Cold emails to WooCommerce agencies
- March reflection
- Dashify’s first 5-star reviews!
- Two open source projects with great documentation
- Three months to make a living
- This month, I’m only focusing on Dashify
- First impressions of Framer from a developer’s perspective
- Dashify’s first users
- February reflection
- I made something called LinkQR
- Dashify is live!
- WordPress AJAX example with fetch and nonce verification
- January reflection
- Fixing Google Search only indexing my homepage
- When a tool becomes a platform
- Design your website without CSS
- We’ve submitted Dashify to WordPress.org for review!
- Waiting for 51 days
- Dashify is launching this week
- Hide trending topics on X with uBlock Origin
- Hide the LinkedIn news feed with uBlock Origin
- Personal blogs I enjoyed reading in 2023
- Validating a product idea without talking to users
- It seems the App source '/Applications/Docker.app' is not there
- Pausing the first idea, starting another
- A new purpose for undo.studio
- Traits of blogs I genuinely enjoy reading
- A less heard of reason to single-task
- Effort is noticeable
- A fair B2B SaaS pricing model
- One hour is a lot of time
- LLM precision problem
- Nothing is difficult, blame the tools
- Analytics aren’t evil
- Where product marketing falls short
- Is typography commercially worth it?
- Feedback fuels progress
- Barely started projects I’ll never finish
- A consistent setup is a productivity hack
- The biggest problem with programming languages
- Bye Linux, hello Mac
- Source Serif and Charter: a tale of two typefaces
- Take on less than you think
- To-do lists are terrible for your health
- Why do we append to digital documents?
- A new typeface for my blog
- I like living near a busy street
- A roundabout approach to solving problems
- Your level of zoom determines your audience
- Choosing good personal domain names
- Reading 2,000 resumes
- Serifs are back in business
- I tried npm install after a few years, and this is what happened
- Tech is overrepresented in blogging
- Learn Linux the hard way
- No-code platforms cannot replace code
- Working for vs working with
- My upload script is 176 times faster than Travis CI
- To get it ready, use it in production
- Depth first, then breadth
- How to make choices
- Clojure vs Go: Making a spell checker
- Great content that no one has ever heard of
- XML signal-to-noise ratio
- Measuring a personal blog’s success
- My Git and other shell aliases
- Be careful about overfitting when learning new skills
- Things I didn’t know about TypeScript
- Hiring is hard
- Programming blogs that go deep
- Scraping a website with Node.js and json2csv
- TypeScript has oddly specific types like Pick
- Learn programming by doing
- Need more memory on your cheap VPS?
- You can’t recommend books without context
- Programming’s built-in feedback loop
- Making a command line countdown timer
- The maintenance cost of JavaScript frameworks
- Living in the terminal
- Cache busting with Bash
- The discomfort compass
- Hash tables for unsorted array lookups
- A repository for your dotfiles
- A guide to dwm on Debian
- Cache busting static assets in Hugo
- Make bootable USB drives with dd
- Clojure: Checking for uppercase letters in a string
- Why I moved back to GitHub
- The typographer’s serif system font stack
- Typefaces included with Ubuntu 18.04
- Off to a good start
- Blogroll
- Colophon
- Contact me
- Projects