Latest Posts (20 found)
Cassidy Williams 2 weeks ago

Whitespace in Astro 7.0

There’s some new default whitespace handling in the latest version of Astro! I noticed that when I updated my blog template (this blog! Right here!) to the new Astro 7.0 , a bunch of words and spacing were broken up in weird ways. Turns out, in the brand new Rust compiler, there’s some very specific JSX changes. Before, if you had two elements one after the other, like so: It would render as “Howdy y’all” on the page. But, in version 7.0, it would render as “Howdyy’all” instead, with no space. If you wanted to fix it, you’d have to do: Which is very JSX-y like React and other similar frameworks. It was a bit of an annoying change for me, because my blog template has lines like this in a few components that were now rendering incorrectly: But! There’s a solution here, if you don’t want to edit all of your components and templates (like me). In your , add the following in : You can see it in context in my template here , if you’d like. I hope this is helpful for ya! Here’s the upgrade guide for more details!

0 views
Cassidy Williams 1 months ago

KeyCon 2026 recap

I attended and spoke at KeyCon 2026 ! KeyCon is an annual mechanical keyboard convention in the United States. I’ve always wanted to go! It rotates locations every year, and this year it was in Chicago, so I had to attend on my home turf. At these keyboard events (which I’ve written about before ), people put their keyboards out on big tables and you get to try out the different setups and keycaps and switches that everyone has. It ends up being like a mechanical keyboard museum, where everyone’s displays are brought with a fair amount of nerdy passion. My display was a similar set of keyboards that I’ve brought to meetups before. I did, however, include my latest build, the CSTM80 with DSA Royal Navy ! This board is special to me. It’s made with a bunch of parts that you can’t buy anymore, and it was fun getting to geek out about that with folks who understand what a big deal it is for me to have what I have. It was so great attending this year and meeting up with people, some of whom I hadn’t seen since my Seattle keyboard meetup days pre-pandemic! Besides seeing and trying cool keyboards, I also gave a talk on Writer Decks, which was a really fun topic to speak about with this group. I’ve written about my Micro Journal and my BYOK before, so if you’ve seen those posts, just imagine my talk is that, but with some more details and opinions about the Writer Deck community and the importance of controlling your computing. I put my fairly minimal slides in my talks repo if you want to check those out! There should be a video recording coming soon. Having a place and time to be amongst people who geek out as much as you do (if not more so) on any given thing is the best. I love being a part of the mechanical keyboard community, and am so grateful to the organizers for making these events happen!

0 views
Cassidy Williams 1 months ago

Microsoft Build 2026 recap

I spoke at Microsoft Build last week! A lot! In lieu of redoing work, here’s just a handy little link dump clipped from my latest newsletter issue : I spoke in the opening keynote (demoing the GitHub Copilot App and a new technology called Rayfin) and in a silly session about vibe coding (in this one, I implemented SQLite in CSS, don’t try this at home) and in a session about agentic coding (in this one, we talked about the state of the industry, and piled in some demo content) and in a session about the GitHub Copilot CLI (in this one we talked about some specifics in the CLI and then did some live demoing) and in a live stream talking about the event and live-coding (my teammate Andrea and I had a great time gabbing here), as well as on some yet-to-be-released podcast and video interviews. I also kind of vlogged during the event while I was rounding up my last newsletter issue, too! I slept very little and said so many words. It was fun to see my team, cool to share the stage with awesome folks around the company, and rewarding to see developers happy.

0 views
Cassidy Williams 1 months ago

A simple clustering algorithm for lists

I’ve been experimenting with a human-friendly way to cluster list values using reversals of sub-lists. Or, in normal human words: I was playing with my toddler’s Magna-Tiles and got into a pattern with how I was sorting and grouping them, and turned it into a little… algorithm? Heuristic? Anyway, look! Here’s a video I made for reference: But if you prefer words over video: Let’s say you have a list where node values can be , , , or . Initial state: What you do is you take the value that’s at the end (in this case ), and you find the next value closest to the end with that same value, and you reverse the sub-list between them. So, the next iteration would be: We reversed everything to the right of the second from the right. And then, you do the same thing, now that group is at the end, you reverse the sub-list to the next : And at this point, because the s are done, you’d go to the next group that is incomplete from the right, and reverse: Then continue normally: It’s not the most efficient, but it’s very interesting. It’s “greedy” because it focuses on just the current optimizations at each step. I tried looking up similar ideas and I think it is closest to pancake sort (which is more around sorting, not grouping, and focused on a stack rather than a list, but otherwise has a lot of other similar concepts). I wrote an actual function for this without AI as a fun little brain exercise and it was exhausting, I admit (I haven’t written any sort of sorting algorithm from scratch in a minute ). It took me some trial and error to clean up. It’s got time complexity (because I used nested while loops). I tried it with recursion at first (because it felt like it could be similar to merge sort when I was first noodling on it), and found that this way worked better. Here’s what I ended up with, with some of comments for clarity: I think this is a really interesting problem in that… it’s way easier to solve this as a physical human being with objects in front of you than it is for a computer to solve it. Computers don’t easily understand how to grab a group and flip them as we do. Our eyeballs have the “ read” of the state in front of us, and we can just flip the pieces in one “move”. Anyway, I’m certain that someone out there will tell me that this is inefficient and pointless, because it kind of is… but I had a great time messing with this while playing with my kiddos. Go math!

0 views
Cassidy Williams 1 months ago

La Pedra Go Club in Barcelona

When I was off on vacation in Spain a few weeks ago (I’m still in denial that I’m back), I went to La Pedra (“The Stone” in Catalan), which is the oldest Go club in Barcelona! La Pedra started way back in 1979, and the club has been active ever since, and they meet weekly. I love playing Go. I normally play online , and have played here in Chicago in the past, but this was my first time playing outside of the… place where I live, ha. Whenever I travel, I do look up if there’s a go club or presence anywhere, but almost always it’s hard for me to get to, or the timing doesn’t work out. On this trip though, the apartment where I was staying was a short walk away from the club, which was perfect! I was so excited to play. When I got there, I was immediately intimidated and had to flex every Spanish-speaking muscle I had. The people there are experienced players. The two folks that I played with have been playing go longer than I’ve been alive. …As you can imagine, they destroyed me, even though I had a nice handicap to start with. They were really kind to me and explained which moves I made that were good, which were bad, and which things I needed to focus on to improve. It was a humbling, enjoyable time!

0 views
Cassidy Williams 3 months ago

Deep Dish Swift 2026 recap

I gave the opening keynote at Deep Dish Swift 2026 today! It was so fun. The event is very iOS-oriented and nearly 300 people in the Chicago area, and it was cool meeting so many folks who I hadn’t met in person before. Before the event, I actually spoke on the podcast for the event, called Slices ! I love all of the pizza puns this event has so much. The vibe throughout the podcast and the conference was fun, indie, and just cool. My talk, speaking of pizza puns… started with a pizza pun, where I led with, “I thought this conference was about eating deep dish swiftly…” and my slides were literally just about pizza. The talk itself was actually about AI, the state of the industry, and how we need to share our knowledge and support others… but again the visuals were all pizza. This was honestly one of the hardest-to-write talks I’ve ever done. Doing the technical AI part of the talk while making my slides plausibly like a real talk about pizza was far more challenging than I expected it to be. But, I’m happy with the outcome! I’ve never actually had so many people approach me just to ask me about my talk-writing process before, with one attendee saying, “I’ve never seen a metaphor so gracefully navigated,” which is the most flattering thing I’ve ever heard someone say to me while I’m wearing a shirt covered in pepperoni.

0 views
Cassidy Williams 3 months ago

My rainbow sweater

My sister got me a rainbow cardigan sweater a couple years ago for Christmas that is very fluffy and floppy. It doesn’t have pockets, it doesn’t have buttons, it just kind of drapes on me and is like a small blanket with arms. It’s not a practical sweater, but it’s cozy. Because it’s not practical, I always have to remember to, for example, wear only pants that have pockets with it, so that I can put my stuff (phone, lip balm, etc) somewhere. I always have to wear certain shirts that don’t bunch up in a certain way when the sweater is feeling extra floppy. It’s just… not the most convenient sweater. But hoo boy, my babies love my rainbow sweater. My oldest loves to sit on my lap and have me envelop her in it in a hug. My youngest loves to bury his face in it when he’s sleepy. Both of them love to pet it because it’s so soft. They admire the colors. They tangle their fingers in it and hold on tight to the loops. They flop with the sweater, and with me, and it’s the coziest thing in the world. I love, love, love putting on this sweater. I get a little giddy thinking about how the babies will gravitate towards it as soon as they see the thick loops plopped across my shoulders. It’s impractical, and it’s weird, but it brings me the best warm cuddles ever.

0 views
Cassidy Williams 3 months ago

A history of styling choices leading to native CSS

I recently updated my app todometer to be styled with pure, native CSS! Changing the CSS libraries in todometer has been a real reflection of CSS styling history. When I first built it more than 9 years ago now , that first initial commit had React, Electron, and Less for CSS. Less at the time was great for what I wanted (Node-based styling with nesting). It let me use variables ( like this ) and nesting ( like this ), and got the job done with some global styles. Eventually in 2020, I wanted more encapsulated styles, thus I wanted to use CSS Modules. Also at the time, wanting to keep my variables and nesting where I could (but also modernize), I switched to . When you look at the commits here and here , you can see the variables switching from starting with to , and how I moved everything everything to their respective component (ultimately only keeping variables at the global level). The behaviors all stayed the same, just was more modern under the hood! Yet another big refactor was due in 2023, when I got rid of all Sass and used plain ol’ CSS files, and for transformations. had been deprecated, which really led me to reevaluating the styling stack, and CSS variables existed natively, so that was one less thing needed! That led me to where we were until earlier today, . These libraries sound almost exactly the same, but act different, and Chris Coyier talks about it a bit here . To save you a click, has syntax like Sass, and has syntax like the CSS spec! Given the history above, it makes sense how the transition happened here. Moving from Less to Sass to a more vanilla CSS approach, all while keeping the core of variables + nesting, is all I really wanted. The library back in 2023 let me keep styling almost exactly the same when I transitioned away from Sass, with the exception of variables ( see the commit ). I switched in this commit today to mostly to make sure that everything transitioned smoothly. It involved a laughably small change list, to just add nesting selectors across some files. The transition to fully native CSS for the entire app is possible now because CSS nesting is natively available ! I probably didn’t actually need to do the “switch to ” step, but it felt like a good iterative one. And since I did that iterative step, the only changes I did for a “fully pure” CSS solution was to simply delete the files! Look at that diff. So much red!! So nice!! It’s really amazing to see how far we’ve come in browsers to be able to do these things without any libraries at all. Yes, I don’t have the most complex styles in the world, and yes, I’m really “only” using variables and nesting, but it’s cool that a “quality of life, nice to have” thing that I enjoyed nearly a decade ago is now a standard. Look at us go! Anyway, you can check out the repo for todometer here , with a new version being properly cut soon!

0 views
Cassidy Williams 5 months ago

Improving my newsletter's open rate the hard(er) way

When it comes to certain projects, I like “doing things that don’t scale.” , particularly with my newsletter . I noticed that my newsletter open rate was down over the past few months to about 40-45%. Not bad, but not as good as it once was. A friend of mine suggested I ask people to respond to the email on occasion to help improve its reputation with Gmail/spam filters. When I did that this past month, my inbox was flooded with responses. I lost count of them if I’m being honest, but there were hundreds of them (possibly over a thousand)! I was very touched to see the responses. Some people just said hi, and some people wrote in detail their thoughts around the issue, some people shared jokes, and some folks were just really nice and complimentary. It really melted my heart to see so many. I responded to a grand majority of them (by hand! No automations here!) and my poor inbox is a disaster. But… it worked! My open rate is now back in the mid-50s! I’m happy with this (probably temporary?) outcome, and will continue to beat the drum that doing this kind of “manual” work is worth it.

0 views
Cassidy Williams 5 months ago

Making interesting borders with CSS corner-shape

I stumbled upon the CSS property recently and it’s pretty cool. It allows you to specify the shape of an element’s corners and works with . I threw together this demo to show it in action: See the Pen corner-shape beveled and rounded navbar by Cassidy ( @cassidoo ) on CodePen . I remember in the olden days (as in like… 10 years ago, as evidenced by this old Pen of mine ), making beveled corners involved a bunch of pseudo-elements and triangles to fake a bevel. It’s so so cool that you can “just” do this now with a couple lines of CSS! In addition to beveled corners, it also lets you do scoops, notches, and even squircles: See the Pen Rounded corners vs. Squircle by Cassidy ( @cassidoo ) on CodePen . There’s also a function, which defines any of the values you can pass to numerically, which could make for some interesting animations and transitions. Definitely play with it if you get a chance! I think there’s some cool CSS “drawing” things you can do as you dabble with the different shapes. does have fairly limited availability currently (Safari and Firefox don’t support it yet at the time of writing), but hopefully that’ll change soon!

0 views
Cassidy Williams 6 months ago

Appreciating Mary Cassatt now that I am a mom

My mom taught art appreciation when I was growing up, and I love looking at different artists’ works over time and remembering what I was taught as a kid, and seeing things through a different lens as an adult. My latest rabbit hole has been re-looking through the art of Mary Cassatt ! I’ve always loved her painting “The Child’s Bath” (which I think is really the first piece people think of when they see her name, if they know her work). Something that’s hitting differently now though for me is her other works showing the silly derpiness of kids and babies. Cassatt captures kids so well. In “Little Girl in a Blue Armchair” it’s such a funny thing to me how the baby is slumped on a chair, skirt bent out of shape, clearly not being the little lady she might have been expected to be. That little girl reminds me so much of my own toddler. In “The Boating Party” I see my youngest baby so clearly in that painting, just looking around, being floppy, not caring that their mom is trying to have a nice day out. And finally just… the baby butts. You really don’t realize until you’re a parent how often you’ll be seeing little baby butts. In “Gathering Fruit” and “Maternal Caress” you see these cuddly little babies… and their funny baby butts. Anyway. Clearly I’m not a professional art critic by any means. But I do appreciate the relatable, real looks at these kids from a couple centuries ago.

7 views
Cassidy Williams 6 months ago

Making the "End of Year Developer" nature documentary

It’s Blogvent, day 23, where I blog daily in December! This month I went to the GitHub office in San Francisco and met up with some coworkers and put together some videos for work. While working on other content, we got a lot of b-roll of me around the office just like… walking, typing, and being dumb. So, when I got home and saw said b-roll without audio, and realized… this could be a meme. Because the videos were mostly me looking like I was “working” (in addition to a bunch of clips of me just checking out office props), the theme popped into my head pretty quickly: for this time of year, a whole lot of people are not actually working, but rather looking busy and just trying to get to their vacations. I wrote up a script and had my coworker Martin read it, plopped a bunch of clips together, and blammo, we had a joking nature documentary in less than an hour. Check it out, and enjoy!

1 views
Cassidy Williams 7 months ago

My inbox is so full

It’s Blogvent, day 18, where I blog daily in December! This week was so busy that my brain has just slowed to a halt. Tons of work, babies not cooperating, travel, pre-holiday jitters, family moving… it’s been a lot. When I’m particularly stressed and feeling overwhelmed, I just want to clean. I want to organize things to have some semblance of control in my environment. What’s been hard lately though is that between all the cleaning in real life and dealing with fires at work… my inbox is truly just a black hole where emails go to die. I haven’t hit inbox zero in over a year (I know because I track it, doesn’t everyone???). It feels like this gigantic mountain that I have to climb and my eye twitches just thinking about it. I’m sure there’s some newfangled AI tool or something that could help me get through it, but… I just don’t trust those kinds of tools yet. Maybe I should. So, in writing this, I’m saying: If you’re waiting on an email from me, I’m sorry Is this what assistants are for? We don’t need to be in control of everything! I say this but need to believe it! Future Cassidy, if you read this, stop procrastinating and go clear your inbox I should probably stop procrastinating with writing this blog and go clear my inbox

0 views
Cassidy Williams 7 months ago

Pausing a CSS animation with getAnimations()

It’s Blogvent, day 9, where I blog daily in December! CSS animations are cool, but sometimes you want them to just cool it . You can pause them by using the method ! When you call on an element, you get an array of all of the objects on said element, which includes CSS animations. There’s various things you can do with the returned object, like getting the of the animation’s timeline, or the playback state of the animation ( ), or in our case, actually pausing the animation with . We could loop through every Animation object in that array and pause it, like so: Or, if you just want one animation to pause, you can filter from the returned results. Here’s a real demo where there’s only one animation happening, so we pause it based on the current . See the Pen getAnimations() demo by Cassidy ( @cassidoo ) on CodePen . Hope this was helpful!

0 views
Cassidy Williams 7 months ago

The what, how, and why of CSS clamp()

It’s Blogvent, day 4, where I blog daily in December! CSS is cool and you should use it. In a sentence, lets you assign a value to a CSS property between a minimum and a maximum range, and uses a preferred value in that range. It’s really helpful for responsive layouts and typography! has three parameters, in order: You can assign it to a property, like so: The column width here is always between 200px and 400px wide, and defaults to 40% of its container width. If that 40% is less than 200px, the width will be 200px. Similarly, if that 40% is more than 400px, the width will be 400px. Or, another example: The font size here is always between 16px and 24px, and defaults to 4% of the screen’s width. If a screen is 1000px wide, that means the font size would be 40px if it were that exact 4%, but with this function, it is capped at 24px. It’s shorter! Honestly that’s why. You can accomplish a lot with a single line of (that is arguably easier to maintain) than a set of media queries. It reduces reliance on multiple rules and functions. A typical media query approach for a column width might be: But with , you could do: This is way shorter, and I would argue, easier to read and maintain! CSS is widely supported , so you can safely use it across your apps and websites. If you’d like to learn more, here’s some handy links for ya: Until next time! A minimum value A preferred value A maximum value Clamp Calculator CSS documentation CSS Tricks Almanac:

0 views
Cassidy Williams 8 months ago

I am back at work and it feels weird!

My maternity leave is officially over! It’s… strange. Like not strange in a bad way necessarily, but I’m definitely still processing that I’ll have to sit at my desk regularly again and ship code and content, and manage a team, and go to meetings, and not be with my babies all day every day. It’s a good break for my brain I think. If you can call work a break? Parenting is HARD. Any parent you talk to would agree. You don’t vacation from it, really. But I’m also just replacing one kind of work with another. I think parenting has definitely given me a good perspective though on what matters, especially at work. My organization had a bit of a shift internally literally the day I got back (so cryptic, I know), and I think pre-babies, I’d very much stew around “ what does this MEAN ” and now I’m like, “eh, okay, I can roll with this as long as I’m still getting paid and nobody’s getting laid off,” as I get my work done and close my laptop afterwards to be with my kiddos. Anyway. I feel bittersweet about coming back. I’m really happy to be with my team again, I missed talking to them, and I do genuinely love working with developers. But I also want to squish my little babies all the time and have had to step out for a hug a few times (I love working from home). But I’m also tired? I contain multitudes!

0 views
Cassidy Williams 9 months ago

A moose playing Go in a park while drinking boba

I tried playing with the new Sora 2 model this week. I am not a huge fan of AI-generated art and videos (side note, see my blog’s AI manifesto ), but I like to be aware of their capabilities. My main “test” I try out with pretty much all AI image and video creating tools is to prompt them to render “a moose playing Go in a park while drinking boba.” Kind of like my own version of pelicans on a bicycle . It… never works. It’ll get close, kind of, and I will say, Sora 2 was better than previous attempts with video. But, I will not show you the video results, because the results genuinely just kind of made me uncomfortable. I will show you images, but first, let me explain. I think this prompt specifically has some challenges that AI has yet to overcome: In every single attempt I’ve tried (I have tried this with pretty much every video and image generation tool you can think of), it has at least one of these problems, if not most of them: I do massage the prompt, like sometimes I’ll give it some more details or iterate on it, but alas, these problems are still pretty consistent. Which I’m okay with! It’s a good test! Here’s some examples of outputs I’ve gotten (first one being a snapshot of a Sora 2 video that almost looked good, until the moose turned into a nightmare creature, the straw floated around the go board, and the pieces moved themselves into a corner): Before you say, “Now, Cassidy, you’re being a bit strict with these AI tools, these are pretty dang close. One might say, even, that they are okay .” Sure, sure. But, I counter: no human artist would ever make these mistakes. If I asked an artist to draw/paint/create a moose playing go in the park while drinking boba, the straw would be in the cup. The go board would be valid. A man would not be drinking the boba. The moose would be a moose. Moose are kind of weird animals . The grid on a go board is 19x19 and counting is very hard for AI tools. Go pieces look an awful lot like tapioca balls in a boba cup. A small problem I can forgive, but a very real problem, is that a natural game of go has the same number of pieces on the board in each color, and some arrangements of pieces just don’t exist in a real game. The moose isn’t a moose, or doesn’t stay a moose (Sora 2 transformed the moose into… some kind of scary hairy blob on several occasions) The moose ears and antlers aren’t in the right spot (did you know that antlers are like giant “hearing aids” for moose ? They’re like giant parabolic dishes for sound. So cool.) The moose is just nearby while a random man plays go instead The boba straw is jank in some way (Sora 2 had the straw shrink as the moose drank from it at least 3 different times) The go pieces are not the same sizes on the board (in most video generations, the pieces pulse in size? Which is weirdly unsettling.) The actual gameplay is super wrong on the go board (incorrect number of pieces, non-sensical placements, pieces just “on the board” instead of in proper positions on the lines of the grid) The go board is a weird shape (in videos, it’s often concave like a bowl, and the grid shifts around) There’s no bowls of go stones on the side of the board (or anywhere) The moose has sunglasses on (?) and the reflection in the sunglasses doesn’t match the board There are go pieces in the cup of boba, or the boba ends up being the go stones The game isn’t actually go

0 views
Cassidy Williams 9 months ago

Using Notebook Navigator and Cupertino in Obsidian

I’ve written before that I use Obsidian as my “second brain” tool, but lately I’ve been experimenting with my setup to make it better, particularly on mobile. I’ve written before about how I publish to my blog from Obsidian , and I want to make that smoother in general, too. And y’all… the Notebook Navigator plugin + Cupertino theme combination is the best I’ve tried in a while. I’m currently typing this on my iPad, and I also regularly write notes on my phone. Before it was… just okay? It felt like a very obvious non-native app experience. Which is, again, okay. But anyway, this combination feels very native on mobile, which is a game-changer (I know it shouldn’t be, but I’ve accepted that aesthetics matter for my own motivation)! Notebook Navigator specifically changes how you… navigate your notes. Aptly named. I particularly like that you can see what tags a note has without having to open it, and there’s ways to enable when you last opened/edited a note, an easy way to see your tags, and some icon options as well. I have my own theme I’ve made, Cardstock , and I’m going to be borrowing some ideas for that from Cupertino to improve it. There’s still some small spacing things on iPad that aren’t perfect in Cupertino, but this is the smoothest my mobile typing experience has been in a while. I still like Cardstock for a computer, and I’ll be updating it!

0 views
Cassidy Williams 9 months ago

2000 Poops

Flash back to Spring 2020, when we were all confused and uncertain about what the world was going to look like, and unsure of how we would stay connected to each other. One of my cousins texted our cousin group chat mentioning the app Poop Map as a cheeky (heh) way of keeping up with the fam. We started a family league, and it was honestly pretty great. We’d congratulate each other on our 5-star poops, and mourn the 1-stars. Over time I made other leagues with friends online and offline, and it was really fun. I even talked about it on Scott Hanselman’s podcast when he asked about how to maintain social connections online (if you wanna hear about it, listen at the 11 minute mark in the episode). Eventually, people started to drop off the app, because… it’s dumb? Which is fair. It’s pretty dumb. But alas, I pride myself in being consistent, so I kept at it. For years. The last person I know on the app is my sister-in-law’s high school friend, also known by her very apt username, . She and I have pretty much no other contact except for this app, and yet we’ve bonded. 2000 poops feels like a good place to stop. With 12 countries covered around the world and 45 achievements in the app (including “Are you OK?” courtesy of norovirus, and “Punctuate Pooper” for going on the same day for 12 months in a row), I feel good about saying goodbye. My mom is also really happy I’m stopping. Wonder why? Anyway, goodbye, Poop Map, and goodbye to the fun usernames for the friends along the way: (that’s me), , , , , , , , , , , , , , , , , and of course, . Also, before you go, here’s a fun data visualization I made of all my entries ! Smell ya later!

0 views
Cassidy Williams 10 months ago

Questions to ask when you think need to finish something

I’ve written before about how I am sometimes haunted by my own side projects that I should finish, but I also want to pursue a shiny new thing instead. After shipping some projects (like PocketCal and Ductts , among others), I think I’ve refined my list of questions that I ask myself when I want to avoid working on an existing project and pursue something else instead. And now… I give them to you. Anyway, doing a little “mental audit” around projects have helped me ship better when I realize some projects I pursue aren’t actually worth it to me. And sometimes, the answers to these questions help me actually finish a project, because my answer reminds me of why I started it in the first place! I hope this helps you!

0 views